操作插件中创建关联数据包

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

操作插件中创建关联数据包

说明

  1. 引入和批量保存接口不会走单据表单插件中的操作事件

  2. API保存也只会运行BeforeSave和AfterSave

  3. 故在操作插件中创建关联数据包可以满足各种情况下的保存处理

操作代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Transactions;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Orm.DataEntity;
namespace Kingdee.BOS.TestPlugIn.BillABillB
{
    [Kingdee.BOS.Util.HotUpdate]
    [Description("单据A操作测试插件")]
    public class BillAOperationTestPlugIn : AbstractOperationServicePlugIn
 
 public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)
        {
            if (this.FormOperation.Operation == "Save")
            {
                var linkInfo = this.BusinessInfo.GetForm().LinkSet.LinkEntitys[0]; //关联配置信息
                var linkEntity = this.BusinessInfo.GetEntity(linkInfo.Key);//关联实体
                var parentEntity = this.BusinessInfo.GetEntity(linkInfo.ParentEntityKey); //关联主实体,一般为单据体
                if (parentEntity is EntryEntity)
                {
                    foreach (var exBillData in e.SelectedRows) //单据数据包集合
                    {
                        var parentObjs = parentEntity.DynamicProperty.GetValue(exBillData.DataEntity) as DynamicObjectCollection; //关联主实体数据报
                        foreach (var entryObj in parentObjs)
                        {
                            var linkEntityObjs = entryObj[linkInfo.Key] as DynamicObjectCollection; //关联实体数据报
                            if (linkEntityObjs.Count > 0) //如果存在则一般没有必要创建
                            {
                                continue;
                            }
                            //一条下游单据由两行上游单据合并而来
                            for (int i = 0; i < 2; i++)
                            {
                                DynamicObject linkObj = new DynamicObject(linkEntity.DynamicObjectType); //创建管理实体数据包
                                linkObj["RuleId"] = 111;
                                linkObj["STableName"] = 111; //上游单据关联表名
                                linkObj["SBillId"] = 111; //上游单据内码
                                linkObj["SId"] = 111; //上游单据分录内码
                                linkObj["控制字段Key1"] = 111; //下游单据(本单)控制字段反写值
                                linkObj["控制字段Key1+Old"] = 111;//上游单据携带到下游单据控制字段值
                                linkObj["控制字段Key2"] = 111;
                                linkObj["控制字段Key3+Old"] = 111;
                                linkEntityObjs.Add(linkObj);
                               }
                                   
                           }
                   }
            }
    }
}

相关参考

1)webapi保存接口带关联数据包

操作插件中创建关联数据包

说明引入和批量保存接口不会走单据表单插件中的操作事件API保存也只会运行BeforeSave和AfterSave故在操作插件中创建关联数据包可以满足各种...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息