二开案例.单据体显示物料上的附件原创
金蝶云社区-齐111
齐111
2人赞赏了该文章 125次浏览 未经作者许可,禁止转载编辑于2024年08月28日 11:01:55

需求:物料上添加了附件字段,用于上传图纸。希望录单时,能查看附件

二开方案:在单据明细上增加附件字段,使用二开插件,将物料的附件携带到该字段上。


1、在物料上添加“多选附件(文件服务器)”字段,ID为F_UNW_ATTACHMENTS_QTR

image.png

2、在单据体上添加“基础资料属性”字段,引用物料上的附件字段


image.png

3、在单据体上添加“基础资料属性”字段,引用物料上的附件字段。打开单据,发现系统不支持,带不出附件。


image.png

4、变通实现,在单据体上添加“多选附件(文件服务器)”字段,ID为F_UNW_Attachments_tzk。通过二开插件,将物料上的附件带到该字段上。

注意:该字段值来自物料,不需要保存到数据库。可设置成只读,“字段名”属性设置为空。

image.png


4、通过二开插件,将物料上的附件带到该字段上。

using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using System;
using System.Linq;

namespace Test202408
{
    [Kingdee.BOS.Util.HotUpdate]
    public class 单据体明细显示物料附件 : AbstractBillPlugIn
    {
        string materialFieldKey = "F_UNW_Material";     //单据体中的物料字段名
        string fromFieldKey = "F_UNW_Attachments_qtr";  //物料上的附件字段名
        string toFieldKey = "F_UNW_Attachments_tzk";    //单据体上的附件字段名


        public override void AfterBindData(EventArgs e)
        {
            var entry = this.View.BusinessInfo.GetEntity("FEntity");
            var rows = this.Model.GetEntityDataObject(entry);
            for (int i = 0; i < rows.Count; i++)
            {
                LoadMaterialAttachments(materialFieldKey, fromFieldKey, toFieldKey, i);
            }
        }

        public override void DataChanged(DataChangedEventArgs e)
        {
            if (e.Key == materialFieldKey)
            {
                LoadMaterialAttachments(materialFieldKey, fromFieldKey, toFieldKey, e.Row);
            }
        }

        void LoadMaterialAttachments(string materialFieldKey, string fromFieldKey, string toFieldKey, int rowNumber)
        {
            var materialObj = this.Model.GetValue(materialFieldKey, rowNumber) as DynamicObject;
            if (materialObj == null) return;

            IMetaDataService metaService = ServiceFactory.GetMetaDataService(this.Context);
            FormMetadata metaData = (FormMetadata)metaService.Load(this.Context, "BD_MATERIAL");

            var materialId = materialObj[0];
            OQLFilter filter = OQLFilter.CreateHeadEntityFilter(string.Format("FMaterialId={0}", "'" + materialId + "'"));
            DynamicObject dyo = BusinessDataServiceHelper.Load(this.Context, metaData.BusinessInfo, null, filter).FirstOrDefault();
            if (dyo == null) return;
            var value = dyo[fromFieldKey];
            this.Model.SetValue(toFieldKey, value, rowNumber);
        }
    }
}


5、效果


image.png




图标赞 2
2人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!