二开案例.单据插件.字段解锁
【应用场景】
通过插件方式,给被禁用的字段解锁。
【案例演示】
重新审核状态的物料,通过实体服务规则将物料分组字段锁定,通过插件,解锁物料分组字段。
【实现步骤】
<1>编写单据插件,代码如下。
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【单据插件】字段解锁
/// </summary>
[Description("【单据插件】字段解锁"), HotUpdate]
public class UnLockFieldBillPlugIn : AbstractBillPlugIn
{
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
if (e.BarItemKey.Equals("tbUnLock",StringComparison.OrdinalIgnoreCase))
{
// 解锁物料分组字段
// 解锁实体服务规则产生的锁定控制
var entityServiceRuleUd = "14642d1f-46c6-4afa-aa52-f7e19a21c776";// 实体服务规则的内码要去元数据XML中获取
this.View.StyleManager.SetEnabled("FMaterialGroup", entityServiceRuleUd, true);
// 解锁单据状态产生的锁定控制
this.View.StyleManager.SetEnabled("FMaterialGroup", "BillStatusByHead", true);
// 解锁其它未知的锁定控制
this.View.StyleManager.SetEnabled("FMaterialGroup", "", true);
this.View.ShowMessage("字段已解锁!");
}
}
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展物料,菜单集合添加菜单项,单据头物料添加实体服务规则,注册表单插件,保存元数据,开发完毕。
添加实体服务规则:
获取实体服务规则内码:
Python插件注册方式如下图。
【功能验证】
<1>登录业务站点,打开物料列表,打开状态为重新审核的物料的编辑界面,此时受实体服务规则控制,物料分组字段被禁用。
点击解锁菜单后,物料分组字段解锁。
<2>打开物料列表,打开状态为已审核的物料的编辑界面,此时受状态字段的控制,物料分组字段被禁用。
---------------------------------------------------------------------------------------------------------
【参考学习】
<1>字段的锁定性采用的组合策略模式,通过表决器的方式最终决定字段的锁定性。
举例来说,可以使用N种方式去锁定一个字段,例如通过状态控制,实体服务规则控制,插件控制等,只要任意一种锁定方式生效了,该字段就是锁定状态,只有所有锁定方式都解锁了,该字段才会真的解锁。
<2>通过调试插件,逐层展开View.StyleManager,可以观察到当前字段被哪些锁定策略控制。
被实体服务规则锁定时,策略标识为实体服务规则的内码:
被单据状态锁定时,策略标识固定为BillStatusByHead:
---------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.单据插件.字段解锁
本文2024-09-23 04:19:29发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164579.html