二开案例.业务流.实现上下游关联

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.业务流.实现上下游关联

**【应用场景】** 一般的业务单据指定了link实体,如果下推的时候跟link无关,则无法关联。本案例则是先有下游单据,如何跟已有的上游单据进行关联。 **【案例演示】** ``` csharp <1>编写列表插件,代码如下。 using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using System; using System.ComponentModel; using System.Linq; namespace Kingdee.BOS.PlugInTest { /// <summary> /// 【服务插件】二开创建关联关系 /// </summary> [Description("【服务插件】二开创建关联关系"), HotUpdate] public class CreateLink : AbstractOperationServicePlugIn { /// <summary> /// 执行操作事务前事件(事务外) /// </summary> /// <param name="e"></param> public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) { base.BeforeExecuteOperationTransaction(e); // 没有通过校验的数据,则跳过 if (e.SelectedRows == null || e.SelectedRows.Count() == 0) return; var form = this.BusinessInfo.GetForm(); if (form == null) return; var linkSets = this.BusinessInfo.GetForm().LinkSet; if (linkSets == null || linkSets.LinkEntitys == null || linkSets.LinkEntitys.Count == 0) return; // 单据关联配置 var linkEntity = linkSets.LinkEntitys[0]; // 关联的单据体实体 var entity = this.BusinessInfo.GetEntity(linkEntity.ParentEntityKey); // 关联实体 var linkEntry = this.BusinessInfo.GetEntity(linkEntity.Key); foreach (var data in e.SelectedRows) { if (data.DataEntity.Contains(entity.EntryName)) { DynamicObjectCollection entityDatas = data.DataEntity[entity.EntryName] as DynamicObjectCollection; if (entityDatas == null || entityDatas.Count == 0) continue; foreach (var entityData in entityDatas) { if (entityData.DynamicObjectType.Properties.ContainsKey(linkEntity.Key)) { var linkObj = new DynamicObject(linkEntry.DynamicObjectType); bool createFlag = false; DynamicObjectCollection linkDatas = entityData[linkEntity.Key] as DynamicObjectCollection; if (linkDatas == null || linkDatas.Count == 0) { createFlag = true; } else { // 检查是否有对应的关联关系 var linkData = linkDatas.FirstOrDefault(x => "36afc0f8-0baf-4183-a813-0a6f9c7b52b9".EqualsIgnoreCase(x["RuleId"].ToString()) && "T_PUR_ReqEntry".EqualsIgnoreCase(x["STableName"].ToString()) && 213784 == Convert.ToInt64(x["SBillId"]) && 216478 == Convert.ToInt64(x["SId"]) ); if (linkData == null) { createFlag = true; } } // 创建Link if (createFlag) { var ids = Kingdee.BOS.ServiceHelper.DBServiceHelper.GetSequenceInt64(this.Context, linkEntry.TableName, 1); linkObj["Id"] = ids.FirstOrDefault(); // 业务流程图内码 linkObj["FlowId"] = ""; // 流程路线 linkObj["FlowLineId"] = 0; // 转换规则 linkObj["RuleId"] = "36afc0f8-0baf-4183-a813-0a6f9c7b52b9"; // 来源单据体表编码 linkObj["STableName"] = "T_PUR_ReqEntry"; // 源单单据ID linkObj["SBillId"] = 213784; // 源单单据体内码 linkObj["SId"] = 216478; // 控制字段 linkObj["BaseUnitQty"] = 10; linkObj["BaseUnitQtyOld"] = 10; linkObj["SalBaseQty"] = 10; linkObj["SalBaseQtyOld"] = 10; linkObj["StockBaseQty"] = 10; linkObj["StockBaseQtyOld"] = 10; linkDatas.Add(linkObj); } } } } } } } } ``` <2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。 <3>注册插件。 ![008_001_添加插件.webp](/download/0100a47e08605ba9446eb40c18456b7ba544.webp) <4>现在可以登业务站点,验证一下结果。 ![008_002_下游单据后补关联关系.webp](/download/01005774d250b30249c1a14737f39ef26278.webp)

二开案例.业务流.实现上下游关联

**【应用场景】** 一般的业务单据指定了link实体,如果下推的时候跟link无关,则无法关联。本案例则是先有下游单据,如何跟已有的上游...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息