获取库存服务如何自定义条件
> **问题背景**:在获取即时库存信息的服务中能否考虑数据隔离,目前已设置人员不能看见某仓库的信息,但是使用获取即时库存后依旧会获取到其他仓库的数据。
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的名称就好吗? 设置了没有效果。
需要重启服务才生效
获取库存服务如何自定义条件
> **问题背景**:在获取即时库存信息的服务中能否考虑数据隔离,目前已设置人员不能看见某仓库的信息,但是使用获取即时库存后依旧会获取...
点击下载文档
上一篇:仓库怎么取消勾选允许即时库存负库存下一篇:金蝶云星空审计导出操作步骤
本文2024-09-16 19:07:47发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-26592.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章