获取库存服务如何自定义条件

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

获取库存服务如何自定义条件

> **问题背景**:在获取即时库存信息的服务中能否考虑数据隔离,目前已设置人员不能看见某仓库的信息,但是使用获取即时库存后依旧会获取到其他仓库的数据。 1、获取库存服务希望可以设置不包含某一个仓库的库存,进行获取。 2、销售订单获取即时库存排除废品不核算仓和寄售仓的库存 【说明】 - 目前只能实现服务里绑定仓库字段之后,获取某一个仓库的库存;或者不绑定仓库,就获取所有仓库的库存。 - 为什么在服务里没有考虑数据隔离?导致和单据规则不一致 -> 每个维度针对不同单据都会涉及到不同的数据隔离规则,通用服务无法针对每个维度进行处理,数据规则一多,对性能也有很大影响,特殊数据的过滤可以通过二开插件去处理 【二开实现】:这里以"其他出库单"为例,说明具体的配置效果 1. 继承组件Kingdee.K3.SCM.App.Core中的抽象类AbstractGetInvStockPlugIn,重写ApplyExtFilter(IEnumerable<STK_Inventory> data, GetInvStockDetailArg item)方法,对获取到的即时库存数据做二次筛选 引用组件:Kingdee.K3.SCM.Common.BusinessEntity.dll ```Csharp using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.Permission.Objects; using Kingdee.BOS.Util; using Kingdee.K3.Core.SCM.Args; using Kingdee.K3.SCM.Common.BusinessEntity.STK; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace Demo { public class LotPickReqGetInvStock : AbstractGetInvStockPlugIn { // 基础资料数据规则,隔离 public override IEnumerable<STK_Inventory> ApplyExtFilter(IEnumerable<STK_Inventory> data, GetInvStockDetailArg item) { List<long> dataRuleStockIds = new List<long>(); List<BaseDataTempTable> lstBaseTempTable = Kingdee.BOS.ServiceHelper.PermissionServiceHelper.GetBaseDataTempTable(this.Ctx, this.BillFormId); if (lstBaseTempTable != null && lstBaseTempTable.Count > 0) { string stockDataRuleTemp = (from p in lstBaseTempTable where p.BaseDataFormId.EqualsIgnoreCase("BD_STOCK") select p.TempTable).FirstOrDefault(); if (!stockDataRuleTemp.IsNullOrEmptyOrWhiteSpace()) { // 获取需要统计库存的仓库,根据业务需求修改过滤条件 string stockSql = string.Format(@"SELECT tmp.*, ST.FNUMBER, TL.FNAME FROM {0} tmp JOIN T_BD_STOCK ST ON tmp.fstockid = ST.FSTOCKID JOIN T_BD_STOCK_L TL ON ST.FSTOCKID = TL.FSTOCKID", stockDataRuleTemp); using (IDataReader dataReader = DBUtils.ExecuteReader(this.Ctx, stockSql)) { while (dataReader.Read()) { dataRuleStockIds.Add(Convert.ToInt64(dataReader["FSTOCKID"])); } dataReader.Close(); } } } if (dataRuleStockIds.Count > 0) { data = data.Where(p => dataRuleStockIds.Contains(p.StockId)); } return data; } } } ``` 2. 组件编译,放到服务器bin目录, "获取即时库存"操作配置插件 ![获取即时库存操作配置插件.webp](/download/0100fa4ada70f5d34497adaf531f274bc564.webp) 【实现效果】 ![即时库存明细.webp](/download/0100694683adb3344140ae0568537bac196e.webp) ![单据获取即时库存.webp](/download/0100e789629472fb4a2292e51338f8989662.webp)

我使用的热发布,也是按照这样操作的,但是我没有获取到这样的效果?


怎么引用不了AbstractGetInvStockPlugIn这个类,我应该在哪个插件类型下引用



BOS上的插件不是填dll的名称就好吗? 设置了没有效果。 image.webpimage.webp


需要重启服务才生效

获取库存服务如何自定义条件

> **问题背景**:在获取即时库存信息的服务中能否考虑数据隔离,目前已设置人员不能看见某仓库的信息,但是使用获取即时库存后依旧会获取...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息