金蝶 K3Cloud webapi 常见问题

!!!主要需要注意 serverUrl需要以/结尾!!!
需要注意引用Microsoft.Extensions.Configuration.Abstractions
1.

//serverUrl需要以“/”结尾
 K3CloudApi client = new K3CloudApi("http://xxx.xxx.xxx.xxx/k3cloud/");
var ret = client.LoginByAppSecret("xx", "xx", "xx", "xx", 2052);

K3CloudApi client = new K3CloudApi(new ThirdPassPortInfo
            {
                ApiAppId = "xxx",
                AppSec = "xxx",
                CloudDbId = "x",xx
                CloudUrl = "http://xxx.xxx.xxx.xxx/k3cloud/",
                CloudUser = "xxx",
                Language = "2052"
            }, 1000);
  1. 也可以手动调用client.LoginByAppSecret

  2. 获取元数据

//读取配置,初始化SDK
            K3CloudApi client = new K3CloudApi();
            //用于记录结果
            StringBuilder Info = new StringBuilder();
            //请求参数,要求为json字符串PRD_PPBOM
            string jsonData = "{\"FormId\":\"STK_InStock\"}";
            //调用接口
            string resultJson = client.QueryBusinessInfo(jsonData);
            //对返回结果进行解析和校验,这里使用的是JsonPatch
            JObject resultJObject = JObject.Parse(resultJson);
            JToken queryNode = resultJObject.SelectToken("$..IsSuccess");
            //判断并记录结果
            if (queryNode == null)
            {
                Info.AppendLine("返回异常");
            }
            else
            {
                bool isSuccess = queryNode.Value<bool>();
                Info.AppendLine(isSuccess ? "操作成功" : "操作失败");
                if (isSuccess)
                {
                    string originFile = "PoInBill";
                    FileInfo file = new FileInfo(@$"D:\work\code\MES1.5_API\MES.Common.DataAdapter\DataAdapter.Demo\Kingdee.CDP.WebApi.SDK.Test\元数据\{originFile}.txt");
                    File.WriteAllText(file.FullName, resultJObject.ToString());
                }
            }
  1. 子表id需要使用 Key_EntryPkFieldName 即从元数据中获取到的key和实体中主键字段名 例如: FInStockEntry_FEntryID

  2. 子表数据行号与子表id逻辑一致,使用key_SeqFieldKey拼接 即从元数据中获取到的key和实体中SeqFieldKey字段名 例如: FInStockEntry_FSEQ

  3. 扩展查询

字段只给了FMaterialID,想查询对应物料名称时可以直接查询FMaterialID.FName
  1. 仓位
    根据仓库下FFlexID到仓库值集列表【FormID为BD_FLEXVALUES】中查询FID等于仓库中FFlexID的数据

另外还可以根据仓库中是否启用仓位管理来处理其他业务。

读取仓位可以直接通过关联关系读取
如,仓位字段为FSrcStockLocId,则可以通过FSRCSTOCKLOCID.FF100004读取仓位值集id,FSRCSTOCKLOCID.FF100004.FName读取名称,FSRCSTOCKLOCID.FF100004.FNumber读取编号

  1. 仓位维度如何确定
    在保存仓位维度时仓位字段的字段名不是固定的字段,需要动态拼接,如图是一些仓位字段名

在保存的时候需要根据上面第8条中获取到的FID动态拼接,可以使用键值对来拼接,需要保证FSTOCKLOCID__FF的前缀FSTOCKLOCID和回写对应的字段名一致

var fid="";
var dic=new Dictory<string,object>();
dic.Add($"FSTOCKLOCID__FF{flexID}",new{FNumber=$"{FFlexValueNumber}"});

完整流程大致为,获取仓库信息(FormID:BD_STOCK,字段FStockId ,FNumber,FFlexId,FIsOpenLocation-是否启用仓位管理),根据仓库字段FIsOpenLocation=1 获取启用仓位管理的仓库信息,如果没启用就不需要填写仓位字段
根据获取到的FFlexId(对应仓位值集下的FID字段),获取仓库下所有的仓位值集( FormID:BD_FLEXVALUES,字段FID,FNumber,FNAME,FFlexValueNumber,FFlexValueName )
NeedUpDateFields字段同时添加对应的字段名,例:FSTOCKLOCID__FF05

  1. 单据关联
    单据细项中通过FEntity_Link 字段关联,可以参考https://vip.kingdee.com/article/171055?productLineId=1
    需要注意更新字段需要添加"FEntity_Link","FEntity_Link_FFlowLineId","FEntity_Link_FRuleId","FEntity_Link_FFlowId","FEntity_Link_FSId","FEntity_Link_FSBillId","FEntity_Link_FSTableName"

参数格式如下

//生产领料单参数如下,其他单据只需要调整对应的FEntity_Link_FRuleId、FEntity_Link_FSTableName即可,此参数可以通过查询旧的数据来获取
"FEntity_Link":[
                    {
                        "FEntity_Link_FSId":100558,  //明细id
                        "FEntity_Link_FRuleId":"PRD_IssueMtrl2PickMtrl",
                        "FEntity_Link_FSBillId":147446,   //单据id
                        "FEntity_Link_FSTableName":"T_PRD_PPBOMENTRY",
                        "FEntity_Link_FFlowId":"81119477-4778-4d0b-94b9-1c43a1c1f768",
                        "FEntity_Link_FFlowLineId":5
                    }
                ]
  1. 库存计算
//需要根据物料的单位换算分子/分母计算库存数量( FMaterialid.FSTOREURNOM,FMaterialid.FSTOREURNUM),然后再根据【库存量(基本单位)*分子/分母】
(FBASEQTY*FSTOREURNOM/FSTOREURNUM)
  1. 保存接口如果需要修改明细数据时需要注意在NeedUpDateFields中添加对应的明细字段名称
    如收料通知单更新交货数量需要设置修改字段为 "FBillType", "FDate", "FDetailEntity", "FActReceiveQty"
    主要是需要添加FDetailEntity这个字段名称。
    其他单据需要根据实际情况设置,例如有些单据为FEntity

  2. 在下游单据中查询上游单据主表、明细id
    有两种模式获取对应的上游单据id
    一种是元数据内部自带的字段,另一种需要通过关联关系获取(参考第10条单据关联中的字段Key)

//参考第10条单据关联中的字段
FieldKeys="FInStockEntry_Link_FSBillId,FInStockEntry_Link_FSId"

金蝶安装包

https://pan.yunzhijia.com/s/MTAyNDEwNCxhM2Q1#/share/0

[参考]
金蝶云php webapi,金蝶云星空(WebApi集成方式):免密码登录接口
如何使用SDK?

知识分享:如何为仓位字段随机填写值

posted @ 2022-11-18 16:56  Hey,Coder!  阅读(1064)  评论(0编辑  收藏  举报