1.1.1 动态表单视图 - 界面元素访问
金蝶云社区-云小爱
云小爱
2人赞赏了该文章 3,194次浏览 未经作者许可,禁止转载编辑于2014年04月02日 17:20:20
界面元素访问

访问菜单
在BOS平台中,表单可以由一个表头和多个表体组成。因此菜单也分表头菜单和表体菜单,表头菜单又叫主菜单,一个表单只能有一个,表体菜单可以有多个,但每个表体也只能有一个菜单。在插件中可以通过IDynamicFromView的GetBarItem方法获取主菜单、分录菜单。语法:
[tr][td]C#[td]
[tr][td=2,1]BarItemControl GetBarItem( System.string [i]parentKey[/i], System.string [i][u]barItemName[/u][/i])
[table]
[tr][td=161]参数/返回值[td=400]说明
[tr][td=161][i]parentKey[/i][td=400]工具栏、按钮、分录表格控件标识
[tr][td=161][i]barItemName[/i][td=400]菜单项标识
读取主菜单和表体菜单方法如下
[tr][td]C#[td]
[tr][td=2,1]// 解锁表头新增菜单(主菜单)。对动态表单来说,主菜单只有一个,不需指定Keythis.View.GetMainBarItem(EquivalvoefficientConst.KEY_tbSNew).Enabled = true;// 解锁表体新增菜单,表体有多个,因此需指定表体Key,定义为常量this.View.GetBarItem(EquivalvoefficientConst.ENTITY_FEntity, EquivalvoefficientConst.KEY_tbNewEntry).Enabled = true;
EquivalvoefficientConst是常量类,定义了表单上的元素的Key,这些Key是IDE中设置元素的标识,在当前表单中是唯一的。ENTITY_FEntity对应IDE设置如下: (图 10 – 6 IDE单据体标识设置) 访问主菜单也可以通过GetBarItem访问,例如,在IDE中设置了表头标识为“Head_Entity”,访问主菜单也可以用如下方法:this.View.GetBarItem("Head_Entity", EquivalvoefficientConst.KEY_ tbSNew).Enabled = true;

访问表单控件
经常有这样需求,我想在单据上只显示供应商字段,客户字段设置不可见。IDynamicFromView提供有获取控件和字段的方法,可以方便的取到当前表单的控件。 语法:
[tr][td=67%]C#[td=32%]
[tr][td=2,1]Control GetControl( System.string [i]key[/i])
[table]
[tr][td=161]参数/返回值[td=400]说明
[tr][td=161][i]key[/i][td=400]控件标识
[tr][td=161][i]返回值[/i][td=400]控件对象
设置控件可见性方法如下
[tr][td]C#[td]
[tr][td=2,1]// 设置客户供应商的可见性this.View.GetControl(ISOConst.ENTITY_FCUSTID).Visible = false;this.View.GetControl(ISOConst.ENTITY_FSUPPLYID).Visible = true;
IDynamicFromView提供了另外一种获取方法:// 设置客户供应商的可见性this.View.GetFieldEditor(CostConst.ENTITY_FCUSTID, -1).MustInput = true;this.View.GetFieldEditor(CostConst.ENTITY_FSUPPLYID, -1). Visible = true; GetFieldEditor继承自Control,因此,GetFieldEditor 可实现GetControl的所有功能。但GetFieldEditor可以访问表格,并对表格字段进行设置。

取动态表单视图
GetView获取指定动态表单标识的视图接口,常用于嵌入的动态表单或多个动态表单之间数据交换。
[tr][td]C#[td]
[tr][td=2,1]// 系统参数界面切换时获取当前Page视图判断是否保存数据this.view = (ISystemParameterView)this.View.GetView(_viewPageId);if (this.view == null || this.view.Model.DataChanged == false){ this.ShowForm(e); return;}this.View.ShowMessage("数据已经修改,是否保存?", MessageBoxOptions.YesNoCancel, new Action((result) => { ... }
LockField锁定字段。通常字段的锁定性在IDE设置,有时需要根据数据动态设置锁定。例如:锁定界面上的组织字段
[tr][td]C#[td]
[tr][td=2,1]// 锁定组织字段this.View.LockField("FOrgID", false);
锁定字段的另一种写法,可以指定policyKey,主要用于特殊场景下设置可见性。this.View.LockField写法等同于:this.View.StyleManager.SetEnabled("FOrgID", null, false);但我们建议在插件中使用this.View.LockField; SetFormTitle设置界面标题 Syntax
[tr][td]Visual Basic (Declaration)[td]
[tr][td=2,1]Sub SetFormTitle( _ ByVal [i]titleValue[/i] As LocaleValue _)
[tr][td]Visual Basic (Usage)[td]Copy Code
[tr][td=2,1]Dim instance As IDynamicFormViewDim titleValue As LocaleValue instance.SetFormTitle(titleValue)

[tr][td]C#[td]
[tr][td=2,1]void SetFormTitle( LocaleValue [i]titleValue[/i])
[tr][td]C++/CLI[td]
[tr][td=2,1]void SetFormTitle( LocaleValue^ [i]titleValue[/i])
[i] [/i][i]titleValue [/i]标题,为本地化值对象由于客户端多语言不会重新取数据,所以需要一次性将多语言版本数据传递过去。 例如,在报表插件中设置报表标题。
[tr][td]C#[td]
[tr][td=2,1]public class ViewBillSerialRpt : AbstractSysReportPlugIn{ public override void OnInitialize(InitializeEventArgs e) { base.OnInitialize(e); object objValue = this.View.OpenParameter.GetCustomParameter("BillFormId", false); LocaleValue title = null; if(objValue != null && !string.IsNullOrWhiteSpace(objValue.ToString()) &&objValue.ToString().EqualsIgnoreCase(STK_Inventory)) { title = new LocaleValue(Kingdee.BOS.Resource.ResManager.LoadKDString("即时库存序列号查询", "004024030005512", Kingdee.BOS.Resource.SubSystemType.SCM), this.Context.UserLocale.LCID); } else { title = new LocaleValue(Kingdee.BOS.Resource.ResManager.LoadKDString("单据序列号查询", "004024030005515", Kingdee.BOS.Resource.SubSystemType.SCM), this.Context.UserLocale.LCID); } this.SysReportView.SetFormTitle(title); }}