单据上如何增加类似检验单上查看技术文档的功能原创
金蝶云社区-SkyZPP
SkyZPP
3人赞赏了该文章 849次浏览 未经作者许可,禁止转载编辑于2020年12月24日 20:10:03

问题描述:单据上需要增加类似检验单表体菜单技术文档一样的功能,实现单据上选择分录行,查询物料对应的技术文档的功能。

本例以不良品处理单为例

1、扩展不良品处理单,在单据的操作列表中增加一个空操作类型的操作,修改一下操作代码(注意这里的操作代码在后续代码中会使用

11.png

2、在不良品处理单单据体菜单中增加按钮,绑定上一步新增加的空操作:

12.png

3、二开表单插件继承AbstractBillPlugIn,挂在标准产品表单插件之后:

13.png

示例代码如下:

using System.Linq;
using System.Text;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.K3.Core.MFG.EnumConst;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Permission;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.K3.Core.MFG.EntityHelper;
using Kingdee.K3.MFG.BusinessCommon;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.K3.Core.MFG.Utils;
namespace TEST.Kingdee.K3.MFG.QM.Business.PlugIn
{
    public class DefectBillEdit : AbstractBillPlugIn
    {
        public override void AfterDoOperation(AfterDoOperationEventArgs e)
        {
            base.AfterDoOperation(e);
            switch (e.Operation.Operation.ToUpperInvariant())
            {
                case "GETTECHDOC"://新增加的空操作类型操作对应的操作码大写格式(步骤1中注意部分)
                    GetTechDoc();
                    break;
            }
        }
        /// <summary>
        /// 获取表体选中行的物料ID,并打开技术文档界面
        /// </summary>
        private void GetTechDoc()
        {
            List<DynamicObject> selDatas =
                this.View.GetSelectedRowDatas(CONST_QM_DefectProcessBill.CONST_FEntity.ENTITY_FEntity).ToList();//单据体标识
            if (selDatas.IsEmpty()) return;
            long orgId
                = this.View.Model.GetValue<long>(CONST_QM_DefectProcessBill.CONST_FBillHead.KEY_FSourceOrgId);//单据上组织字段标识,即后续查看技术文档的使用组织
            List<string> numbers = new List<string>();
            List<long> materialIds = new List<long>();
            foreach (DynamicObject obj in selDatas)
            {
                DynamicObject mtrl = obj.GetDynamicValue<DynamicObject>(CONST_QM_DefectProcessBill.CONST_FEntity.ORM_MateridlId);//选中行物料的ORM标识(BOS设计器可以查看)
                if (mtrl.IsNullOrEmpty()) continue;
                numbers.Add(mtrl.GetDynamicValue<string>("Number"));
            }
            Dictionary<string, List<long>> materialInfos =
                   BusinessUtils.GetMulBaseIds(this.Context, "BD_MATERIAL", numbers, "FMATERIALID", string.Format("FUSEORGID = {0}", orgId));
            foreach (var key in materialInfos)
            {
                materialIds.AddRange(key.Value);
            }
            if (materialIds.IsEmpty()) return;
            var param = new ListSelBillShowParameter();
            param.FormId = "ENG_TechDoc";
            param.PermissionItemId = PermissionConst.View;
            param.PageId = SequentialGuid.NewGuid().ToString();
            param.OpenStyle.ShowType = ShowType.Floating;
            param.UseOrgId = this.View.Model.GetValue<long>("FSourceOrgId");
            param.IsIsolationOrg = false;
            param.CustomComplexParams.Add("MaterialId", materialIds.Distinct().ToList());
            this.View.ShowForm(param);
        }
    }
}




赞 3