即时库存如何通过二开方式添加新字段?
问题描述:
二开新增字段在即时库存明细、单据库存查询单据上显示物料分配组织下的物料名称。
解决方案:
这里以新增物料分配组织下对应的物料名称为例。
一、在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)单据库存查询
即时库存如何通过二开方式添加新字段?
问题描述:二开新增字段在即时库存明细、单据库存查询单据上显示物料分配组织下的物料名称。解决方案:这里以新增物料分配组织下对应的物料...
点击下载文档
本文2024-09-23 02:56:21发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-155665.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章