MAP平台--如何去掉单据序时簿,并且打开时自动为新增?

项目中有这样一需求:

隐藏序时簿,并且双击菜单打开单据时自动为新增状态.

解决方案一:

1,系统维护--菜单管理--指标录入新增

2,去掉CommandString 后的View,改为zhibiaoluruxinz (表示点击树菜单时加载单据,而不是加载序时簿)

3,打开Config\Config_hf\Module\SCM\Bill\BillMeta.xml 文件

在  BillMetaUIOptCollection 节点下添加 如下代码:

<BillMetaUIOpt Key="New2" Caption="新增" Icon="AddNew" ShortCuts="Alt+N" ObjectCondition="TableType()=&quot;Bill&quot;" PreCondition="ReadOnly()" SubOptKeys="NewBill;ShowBill;EditBill" SubOptDataIdxes="0;0;0" />

--PreCondition="ReadOnly()"  表示非编辑状态才可见

4,修改指标录入单对应的XML文件,对最表单定义的地方加上EntryUIOptKey="New2"

<BillMetaTable Key="zhibiaoluruxinz" Caption="指标录入新增" TableType="Bill" ID="79654" Version=".519" TableCount="2" MetaSubHookKey="" m_lGridCount="1" WithoutFilter="False" bTotal="False" sUIoptKey="New;Edit;Save;|;NewPrint;NewPrintDefault;NewPrintSelect;||;|;NewPrePrint;NewPrePrintDefault;NewPrePrintSelect;||;DeleteRow;FirstBill;PreBill;NextBill;LastBill;SendLink" PrintTemplate="" EntryUIOptKey="New2">

5,关闭中间层,重新打开单据即可见到效果

解决方案二:

1, 解决方案一的第1 步

2, 解决方案一的第2 步

3, 修改指标录入单对应的XML文件,对最表单定义的地方加上EntryUIOptKey="NewViewBill"

<BillMetaTable Key="zhibiaoluru2" Caption="指标录入2" TableType="Bill" ID="79657" Version=".519" TableCount="2" MetaSubHookKey="" m_lGridCount="1" WithoutFilter="False" bTotal="False" sUIoptKey="New;Edit;Save;|;NewPrint;NewPrintDefault;NewPrintSelect;||;|;NewPrePrint;NewPrePrintDefault;NewPrePrintSelect;||;DeleteRow;FirstBill;PreBill;NextBill;LastBill;SendLink" PrintTemplate="" EntryUIOptKey="NewViewBill">

4,关闭中间层,重新打开单据即可见到效果

方案一与方案二的区别:

方案一是自定义了界面子操作,方案二是调用系统的子操作。

参考文档:

EntryUIOptKey,CloseUIOptKey属性讲解

通常我们打开某张表单是会通过点击左边菜单,然后执行某个操作完成表单打开动作的,比如报表执行ViewReport界面操作,勾稽执行ViewHook界面操作,字典执行OpenDictionary界面操作,无序事簿单据执行NewViewBill操作,其他都执行ViewBill操作。如果我们打开某个表单对象的时候有特殊的操作,需要绕开这些默认的操作,或者需要执行一些公式,那么我们就可以给表单对象定义打开入口操作,在表单对象中有两个隐藏属性EntryUIOptKey,CloseUIOptKey,一个是打开单据的入口操作,一个关闭单据的执行的操作,比如<BillMetaTable Key="CostOut" Caption="出库成本计算" TableType="MultiBill" ID="79518" Version=".519" TableCount="1" MetaSubHookKey="" m_lGridCount="1" WithoutFilter="False" MetaTableKey="" DSN="" bTotal="False" sUIoptKey="AutoFit;UIClose" PrintTemplate="" EntryUIOptKey="ViewMultiBill">,这个地方EntryUIOptKey所指向的ViewMultiBill就是一个自己定义的界面操作,在BillMeta.xml是这样定义的<BillMetaUIOpt Key="ViewMultiBill" Caption="ViewMultiBill" SubOptKeys="DoEvaluateFormula(AddVariable(…));DoEvaluateFormula(SetTableFilter(…));LoadObject;ShowBill" SubOptDataIdxes="0;0;0;0;0"/>,这个地方我定义了一个打开多样式表单的操作,在做LoadObject;ShowBill(中间层取数->显示表单数据)之前,我做了DoEvaluateFormula(AddVariable(…));DoEvaluateFormula(SetTableFilter(…))这两件事情,一件是增加一个变量,一件是做了给表单设置过滤条件SetTableFilter,这样我在显示单据之前可以做一些我们所期望的事情。大家可以通过定义自己特殊的操作放在EntryUIOptKey属性中,让表单打开时按照自己的意图去执行。CloseUIOptKey也一样,在表单关闭时执行的界面操作,用的不多。

EntryUIOptKey,CloseUIOptKey这两个属性在我们标准化产品中使用比较广泛,还有一些复杂的界面当中,因为我们在显示一张表单之前,需要做一些复杂的事情,比如在我们配置型登陆窗口中MultiBill_Login.xml文件中,入口是这么定义的<BillMetaTable Key="Login" Caption="登录" TableType="MultiBill" ID="79095" … sUIoptKey="" PrintTemplate="" EntryUIOptKey="_FormInitialize" CloseUIOptKey="_FormUnload">,这个地方的EntryUIOptKey和CloseUIOptKey属性所指向的界面操作_FormInitialize和_FormUnload,这两个界面操作在BillMeta.xml定义为

<BillMetaUIOpt Key="_FormInitialize" RunAsExp="_FormInitialize()" SubOptDataIdxes="0" NeedRowCheck="False"/>

<BillMetaUIOpt Key="_FormUnload" RunAsExp="_FormUnload()" SubOptDataIdxes="0" NeedRowCheck="False"/>,这个地方和我前面讲的又进一步了,这个地方用到了子操作的RunAsExp属性,意思就是后面不需要去定义一系列的子操作了,而是去执行_FormInitialize()宏公式,而这个公式可以写在公式宏里面,然后在宏里面定义自己需要执行的公式,这样定义的宏可以被多个地方使用,配置结构更清晰、简洁明了。我们可以在简单地去看下这部分宏定义

<BillMetaExpFormulaCollection>

<BillMetaExpFormula Key="_FormInitialize" Para="" Formula="ShowBill(true,true,false,false,true)+SetFormSizeByPixel(366,546)"/>

<BillMetaExpFormula Key="_FormUnload" Para="" Formula="AddVariable({Login},False)+UIClose()"/>

</BillMetaExpFormulaCollection>

大家有兴趣的话可以看看MultiBill_Login.xml这个文件的配置,深刻了解一下EntryUIOptKey,CloseUIOptKey这两个表单对象的属性,以及单据中的宏定义等相关内容。

你可能感兴趣的:(map)