一种通过创建SQL视图实现WebAPI接口查询库存可用量的方案

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

一种通过创建SQL视图实现WebAPI接口查询库存可用量的方案

       当前云星空系统提供的标准即时库存WebAPI接口不能直接查询可用量、库存单位数量、启用了批号附属信息的生产日期、有效期至等数据,即便有的能通过换算可以取到,但用起来也不太方便,这里通过SQL视图方式重新封装下数据源,在视图中计算好可用量、各单位数量以及生产日期、有效期至等数据,然后以二开单据绑定视图方式提供新的WebAPI接口,此方式优点主要有:

       1)可用量、库存单位数量等数据直接可用,不用自己在换算;

       2)不用写插件,简单配置即可,容易上手;

       3)没有是否是多租户的限制,通用性较强;

       4)较强可扩展性,可以根据需要在BOS中给二开单据添加基础资料属性字段;


二开实现步骤

1、创建SQL视图(这里以SQL SERVER为例)

CREATE VIEW V_STK_INVENTORY_CUS
AS
SELECT  a.FID ,
           a.FSTOCKORGID ,
           a.FKEEPERTYPEID ,
           a.FKEEPERID ,
           a.FOWNERTYPEID ,
           a.FOWNERID ,
           a.FSTOCKID ,
           a.FSTOCKLOCID ,
           a.FAUXPROPID ,
           a.FSTOCKSTATUSID ,
           a.FLOT ,
           a.FBOMID ,
           a.FMTONO ,
           a.FPROJECTNO ,
           (CASE WHEN d.FISEXPPARTOFLOT='1' THEN e.FPRODUCEDATE ELSE a.FPRODUCEDATE END) FPRODUCEDATE ,
           (CASE WHEN d.FISEXPPARTOFLOT='1' THEN e.FEXPIRYDATE ELSE a.FEXPIRYDATE END) FEXPIRYDATE ,
           a.FBASEUNITID ,
           a.FBASEQTY ,
           a.FSECQTY ,
           a.FSTOCKUNITID ,
           a.FMATERIALID ,
           (CASE WHEN d.FSTOREURNUM=0 THEN a.FBASEQTY ELSE a.FBASEQTY*d.FSTOREURNOM/d.FSTOREURNUM END) FQTY ,
           (CASE WHEN d.FSTOREURNUM=0 THEN ISNULL(b.FBASELOCKQTY, 0) ELSE ISNULL(b.FBASELOCKQTY, 0)*d.FSTOREURNOM/d.FSTOREURNUM END) FLOCKQTY ,
           a.FSECUNITID ,
           'STK_INVENTORYCUS' AS FOBJECTTYPEID ,
           (CASE WHEN d.FSTOREURNUM=0 THEN (a.FBASEQTY - ISNULL(b.FBASELOCKQTY, 0)) ELSE (a.FBASEQTY - ISNULL(b.FBASELOCKQTY, 0))*d.FSTOREURNOM/d.FSTOREURNUM END) FAVBQTY ,
           a.FUPDATETIME ,
           a.FISEFFECTIVED,
        ISNULL(b.FBASELOCKQTY, 0) FBASELOCKQTY ,
        ISNULL(b.FSECLOCKQTY, 0) FSECLOCKQTY ,
        ( a.FBASEQTY - ISNULL(b.FBASELOCKQTY, 0) ) FBASEAVBQTY ,
        ( a.FSECQTY - ISNULL(b.FSECLOCKQTY, 0) ) FSECAVBQTY
FROM    T_STK_INVENTORY a
        INNER JOIN T_BD_MATERIAL c ON c.FMASTERID=a.FMATERIALID and c.FUSEORGID=a.FSTOCKORGID
		INNER JOIN T_BD_MATERIALSTOCK d ON d.FMATERIALID=c.FMATERIALID
		LEFT JOIN T_BD_LOTMASTER e on e.FLOTID=a.FLOT
        LEFT JOIN ( SELECT  TKE.FSUPPLYINTERID ,
                            SUM(ISNULL(TKE.FBASEQTY, 0)) AS FBASELOCKQTY ,
                            SUM(ISNULL(TKE.FSECQTY, 0)) AS FSECLOCKQTY
                    FROM    T_PLN_RESERVELINKENTRY TKE
                    WHERE   TKE.FSUPPLYFORMID = 'STK_Inventory'
                            AND TKE.FBASEQTY > 0
                            AND ((
                            TKE.FLINKTYPE = '4' AND 1= (
                            SELECT COUNT(1) FROM T_BAS_SYSPARAMETER WHERE fparameterobjid='MFG_PLNParam' AND fparameters.exist('/BillHead[IsEnableReserve="True"]')=0)
                            ) OR (1=1 AND 0=(SELECT COUNT(1) FROM T_BAS_SYSPARAMETER WHERE fparameterobjid='MFG_PLNParam' AND fparameters.exist('/BillHead[IsEnableReserve="True"]')=0))
                            )
                    GROUP BY TKE.FSUPPLYINTERID
                  ) b ON b.FSUPPLYINTERID = a.FID;


2、新建二开即时库存单据

     新增的二开单据字段与【即时库存】保持一致,所以可以直接用复制方式新增,这里需要注意单据编号的问题,需要与视图中的FOBJECTTYPEID一致,如下图所示:

复制即时库存单据.webp


3、绑定视图

修改绑定数据源.webp


4、发布到主控台

发布到主控台.webp


5、测试效果

     查询时可直接使用 FQTY、FAVBQTY等字段作为最终查询结果使用。

即时库存WebAPI效果.webp


       *注:由于这种方式是基于视图的查询,性能方面与基于表的查询是存在区别的,如出现二开接口查询性能与标准接口查询性能差别较大情况,可尝试创建索引视图(SQL SERVER)\物化视图(Oracle)


太牛了


话说,我会自定义接口封装,我把SQL视图封装成自定义接口也可以吧。


这个通过物料获取物料的属性等,比如FMATERIALID.FMNEMONICCODE助记码,取到的是创建组织的,找了一下原因,是即时库存T_STK_INVENTORY表里存的FMATERIALID的值是创建组织的即它的FMASTERID,这个如何解决啊?



ORACLE数据库关于是否启用预留的SQL写法:

SELECT CASE WHEN extractvalue(fparameters,'/BillHead/IsEnableReserve/text()')='True' THEN 0 ELSE 1 END EnableReserve FROM T_BAS_SYSPARAMETER WHERE fparameterobjid='MFG_PLNParam',替换SQL SERVER 示例SELECT COUNT(1) FROM T_BAS_SYSPARAMETER WHERE fparameterobjid='MFG_PLNParam' AND fparameters.exist('/BillHead[IsEnableReserve="True"]')=0部分


谢谢大佬,刚好需要这个,您给我降下了及时雨。

一种通过创建SQL视图实现WebAPI接口查询库存可用量的方案

当前云星空系统提供的标准即时库存WebAPI接口不能直接查询可用量、库存单位数量、启用了批号附属信息的生产日期、有效期至等数据...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息