电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

单据转换.二开案例.自动下推触发表单插件

来源:金蝶云社区作者:金蝶2024-09-232

单据转换.二开案例.自动下推触发表单插件

【场景】单据转换,属于APP层服务,没有视图和模型等逻辑,不会触发下游的单据的表单插件; 因此当部分逻辑写在表单插件中时,通过自动下推、批量下推等均无法调用表单插件逻辑; 针对各单据实现表单插件和单据转换插件两套逻辑非常繁琐,想在单据转换中直接触发表单插件逻辑 【案例】采购申请单下推采购订单,触发表单插件的创建数据模型事件 <0>通过单据转换插件,创建目标单据视图,触发 ![Image_20230128202833.webp](/download/010020539748c7964e1d84f8ac68c6a77f39.webp) ```csharp using Kingdee.BOS; using Kingdee.BOS.Core; using Kingdee.BOS.Core.Bill; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using System; using System.Linq; namespace DynamicFormPlugIn.BillConvert { [Kingdee.BOS.Util.HotUpdate] [System.ComponentModel.Description("单据转换插件——触发表单插件")] public class ConvertServicePlugIn_InvokeBillPlugIn : AbstractConvertPlugIn { /* * 单据转换,属于APP层服务,没有视图和模型等逻辑,不会触发下游的单据的表单插件 * 因此当部分逻辑写在表单插件中时,通过自动下推、批量下推等均无法调用表单插件逻辑 * * 方案:自建视图,单据转换后触发指定事件 */ public override void AfterConvert(AfterConvertEventArgs e) { base.AfterConvert(e); if (e.Result == null) return; string formId = e.TargetBusinessInfo.GetForm().Id; var headEntity = e.TargetBusinessInfo.Entrys.FirstOrDefault(x => x != null && x.ElementType == 34); if (headEntity == null) return; var targetBillResults = e.Result.FindByEntityKey(headEntity.Key); for (int i = 0, sz = targetBillResults.Length; i < sz; ++i) { var tgtBillResult = targetBillResults[i]; if (tgtBillResult.DataEntity == null) { continue; } CreateBillViewModelData(this.Context, formId, tgtBillResult.DataEntity); } } #region 创建视图 /// <summary> /// 构造视图创建参数 /// </summary> /// <param name="ctx"></param> /// <param name="metadata"></param> /// <returns></returns> private static BillOpenParameter CreateOpenParameter(Context ctx, FormMetadata metadata) { var form = metadata.BusinessInfo.GetForm(); BillOpenParameter openPara = new BillOpenParameter(form.Id, metadata.GetLayoutInfo().Id); openPara.Context = ctx; openPara.PageId = Guid.NewGuid().ToString(); //openPara.Status = OperationStatus.VIEW; //openPara.CreateFrom = CreateFrom.Default; openPara.DefaultBillTypeId = string.Empty; openPara.PkValue = null; openPara.FormMetaData = metadata; openPara.SetCustomParameter(Kingdee.BOS.Core.FormConst.PlugIns, form.CreateFormPlugIns()); openPara.ServiceName = form.FormServiceName; return openPara; } /// <summary> /// 创建按照表单视图逻辑加载的数据包(触发表单层的新建模型数据相关事件) /// </summary> /// <param name="ctx"></param> /// <param name="formId"></param> /// <param name="pkValue"></param> /// <returns></returns> private static bool CreateBillViewModelData(Context ctx, string formId, DynamicObject billObj) { FormMetadata metadata = MetaDataServiceHelper.Load(ctx, formId) as FormMetadata; if (metadata == null) return false; var parentView = CreateView(ctx, metadata , null); var billView = CreateView(ctx, metadata, (openParameter) => { //下推的表单层处理逻辑 openParameter.ParentPageId = parentView.PageId; openParameter.Status = OperationStatus.ADDNEW; openParameter.CreateFrom = CreateFrom.Push; openParameter.SetCustomParameter(FormConst.ConvParamKey_OneResultSessionKey, FormConst.ConvParamKey_O

单据转换.二开案例.自动下推触发表单插件

【场景】单据转换,属于APP层服务,没有视图和模型等逻辑,不会触发下游的单据的表单插件;因此当部分逻辑写在表单插件中时,通过自动下推...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信