二开案例.表单插件.复制单据上的基础资料的单据体数据包到子单据体

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

二开案例.表单插件.复制单据上的基础资料的单据体数据包到子单据体

【应用场景】

复制单据上的基础资料的单据体数据包到子单据体。


【案例演示】

物料有单据体,在采购订单上录入物料时,将物料的单据体数据包复制到单据的子单据体。

物料数据:

采购订单数据:



【实现步骤】

<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.ComponentModel;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
    /// <summary>
    /// 【表单插件】复制单据上的基础资料的单据体数据包到子单据体
    /// </summary>
    [Description("【表单插件】复制单据上的基础资料的单据体数据包到子单据体"), HotUpdate]
    public class CopyBaseDataFieldEntityValueToSubEntityFormPlugIn : AbstractDynamicFormPlugIn
    {
        public override void DataChanged(DataChangedEventArgs e)
        {
            base.DataChanged(e);
            if (e.Field.Key.EqualsIgnoreCase("FMaterialId"))
            {
                // 获取物料数据包
                var obj = this.Model.GetValue("FMaterialId") as DynamicObject;
                if (obj == null)
                {
                    return;
                }
                // 获取物料的单据体数据包
                var materialEntityObjs = obj["F_Jac_Entity"] as DynamicObjectCollection;
                if (materialEntityObjs == null || materialEntityObjs.Count == 0)
                {
                    return;
                }
                // TODO
                var subEntityKey = "F_Jac_SubEntity";
                // 获取子分录行数
                var rowCount = this.Model.GetEntryRowCount(subEntityKey);
                if (rowCount < materialEntityObjs.Count)
                {
                    // 子分录行数比物料的单据体行数少时,提前创建子分录行
                    this.Model.BatchCreateNewEntryRow(subEntityKey, materialEntityObjs.Count - rowCount);
                }
                #region 方式1:直接修改数据包
                //var subEntityObjs = this.Model.GetEntityDataObject(this.View.BillBusinessInfo.GetEntity(subEntityKey));
                //for (var i = 0; i < materialEntityObjs.Count; ++i)
                //{
                //    // 复制文本(通过字段的属性名取值赋值)
                //    subEntityObjs[i]["F_Jac_Text"] = materialEntityObjs[i]["F_Jac_Text"];
                //    // 复制文本1
                //    subEntityObjs[i]["F_Jac_Text1"] = materialEntityObjs[i]["F_Jac_Text1"];
                //    // 复制文本2
                //    subEntityObjs[i]["F_Jac_Text2"] = materialEntityObjs[i]["F_Jac_Text2"];
                //}
                ////this.View.UpdateView(subEntityKey);
                #endregion
                #region 方式2:Model.SetValue
                for (var i = 0; i < materialEntityObjs.Count; ++i)
                {
                    this.Model.SetValue("F_Jac_Text", materialEntityObjs[i]["F_Jac_Text"], i);
                    this.Model.SetValue("F_Jac_Text1", materialEntityObjs[i]["F_Jac_Text1"], i);
                    this.Model.SetValue("F_Jac_Text2", materialEntityObjs[i]["F_Jac_Text2"], i);
                }
                #endregion
            }
        }
    }
}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>BOSIDE扩展物料,新增页签,新页签上新增单据体,单据体上新增3个文本字段。


<4>BOSIDE扩展采购订单,新增页签,新页签上新增子单据体,绑定其父分录为明细信息单据体,物料字段添加引用属性,将物料新增的单据体字段引入进来,注册表单插件,保存元数据,开发完毕。

新增子单据体:

物料字段添加引用属性:

注册表单插件:



【功能验证】

<1>登录业务站点,打开物料列表,创建测试用的物料数据。


<2>打开采购订单新增界面,录入物料test1,此时采购订单当前分录行的子单据体上,已经完全复制了物料test1的单据体中的数据。

---------------------------------------------------------------------------------------------------------













【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

二开案例.表单插件.复制单据上的基础资料的单据体数据包到子单据体

【应用场景】复制单据上的基础资料的单据体数据包到子单据体。【案例演示】物料有单据体,在采购订单上录入物料时,将物料的单据体数据包复...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息