即时库存如何通过二开方式添加新字段?

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

即时库存如何通过二开方式添加新字段?

问题描述:

二开新增字段在即时库存明细、单据库存查询单据上显示物料分配组织下的物料名称。

解决方案:

这里以新增物料分配组织下对应的物料名称为例。

一、在BOS设计器中添加字段

扩展【即时库存】,添加文本类型控件,命名为【物料名称(组织)】,参考下图:


二、编写二开插件

      通过BeforeGetDataForTempTableAccess方法,对字段进行更新,然后编译插件并注册到单据上,参考代码如下:


using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Linq;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.ServiceHelper;

namespace CustomerPluginService
{
    public class InventoryListEx : AbstractListPlugIn
    {
        public override void BeforeGetDataForTempTableAccess(Kingdee.BOS.Core.List.PlugIn.Args.BeforeGetDataForTempTableAccessArgs e)
        {
            //判断表中是否含有物料、库存组织以及物料名称(组织)列
            if (ColExist(e.TableName, new List<string>() { "FSTOCKORGID_ID", "FMATERIALID_ID", "FORGMaterialName" }))
            {
                string sqlText = string.Format(@"MERGE INTO {0} a
                                                USING (SELECT m.FMATERIALID,m.FMASTERID,m.FUSEORGID,ISNULL(ml.FNAME,'') FNAME 
                                                FROM T_BD_MATERIAL m LEFT JOIN T_BD_MATERIAL_L ml ON ml.FMATERIALID=m.FMATERIALID AND ml.FLOCALEID={1}) b 
                                                ON b.FMASTERID=a.FMATERIALID_ID AND b.FUSEORGID=a.FSTOCKORGID_ID
                                                WHEN MATCHED THEN UPDATE SET a.FORGMaterialName=b.FNAME;", e.TableName, this.Context.UserLocale.LCID);
                DBServiceHelper.Execute(this.Context, sqlText);
            }
        }

        /// <summary>
        /// 判断列是否存在
        /// </summary>
        /// <param name="tablename"></param>
        /// <param name="fields"></param>
        /// <returns></returns>
        private bool ColExist(string tablename, List<string> fields)
        {
            //这里以SQL SERVER为例
            string sqlText = string.Format(@"/*dialect*/SELECT COUNT(*) countNum FROM SYSCOLUMNS WHERE id=OBJECT_ID('{0}') AND name IN('{1}')",
                tablename, string.Join("','", fields));
            int count = DBServiceHelper.ExecuteScalar<int>(this.Context, sqlText, 0);
            return count == fields.Count;
        }
    }
}

三、效果展示

1)、即时库存明细


2)单据库存查询



即时库存如何通过二开方式添加新字段?

问题描述:二开新增字段在即时库存明细、单据库存查询单据上显示物料分配组织下的物料名称。解决方案:这里以新增物料分配组织下对应的物料...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息