二开案例.业务流.实现上下游关联
**【应用场景】**
一般的业务单据指定了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无关,则无法关联。本案例则是先有下游单据,如何跟已有的上游...
点击下载文档
上一篇:单据类型可以默认为空吗下一篇:金蝶云星空V9版本第三方组件升级说明
本文2024-09-23 04:16:26发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164249.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章