第三方通过API对接星空系统传递凭证问题释疑(2)原创
金蝶云社区-战斗的凯文
战斗的凯文
51人赞赏了该文章 1,136次浏览 未经作者许可,禁止转载编辑于2023年04月26日 17:09:14

第三方通过API对接星空系统传递凭证问题释疑(2)


PS:更多更详细内容请参考网址:API中心 (kingdee.com)或金蝶社区搜索“凭证 API”。

相关文章:第三方通过API对接星空系统传递凭证问题释疑(1) (kingdee.com)

 

  • l  Json数据包中data对象字段解释及推荐值

     1.NeedUpDateFields:需要更新的字段,数组类型,格式:[key1,key2,...] (非必录)注(更新字段时Model数据包中必须设置内码,若更新单据体字段还需设置分录内码,如果要新增凭证,一定不要指定内码,否则会视为更新,会自动替换掉该内码对应的凭证,造成原凭证丢失)

     2.NeedReturnFields:需返回结果的字段集合,数组类型,格式:[key,entitykey.key,...](非必录) 注(返回单据体字段格式:entitykey.key,返回单据体内码:FENTITY_FENTRYID)

     3.IsDeleteEntry:是否删除已存在的分录,布尔类型,默认true(非必录)

     4.SubSystemId:表单所在的子系统内码,字符串类型(非必录),可以指定为“GL”

     5.IsVerifyBaseDataField:是否验证所有的基础资料有效性,布尔类,默认false(非必录),推荐值为true,尤其是项目开发阶段时一定要开启验证,否则可能的异常问题未暴露出来,会造成其它古怪的问题,很难排查原因。后期项目稳定了,出于性能考虑,可以设置为false。

     6.IsEntryBatchFill:是否批量填充分录,默认true(非必录)

     7.ValidateFlag:是否验证数据合法性标志,布尔类型,默认true(非必录)注(设为false时不对数据合法性进行校验),凭证保存一定不要设置为false,这样会跳过保存校验,造成数据问题。

     8.NumberSearch:是否用编码搜索基础资料,布尔类型,默认true(非必录)

     9.IsAutoAdjustField:是否自动调整JSON字段顺序,布尔类型,默认false(非必录)

     10.InterationFlags:交互标志集合,字符串类型,分号分隔,格式:"flag1;flag2;..."(非必录) 例如(允许负库存标识:STK_InvCheckResult)

     11.IgnoreInterationFlag:是否允许忽略交互,布尔类型,默认true(非必录)

     12.IsControlPrecision:是否控制精度,为true时对金额、单价和数量字段进行精度验证,默认false(非必录)

     13.ValidateRepeatJson:校验Json数据包是否重复传入,一旦重复传入,接口调用失败,默认false(非必录)

 

  • l  系统返回失败信息:汇率类型,币别等是必填项,不能为空

原因分析:明明传递了上述字段的值,却提示未录入,原因很可能是录入的值未通过系统的校验,导致并未真正赋值成功。而未通过的校验常见的有:

    1,当前API的登录用户没有相关基础资料的使用权限,可用相同用户手工录入相同内容的凭证测试是否是权限问题。

    2,相关基础资料已反审核或禁用,导致不可用,可检查相关基础资料或辅助资料是否为正常状态。

    3,科目为分配型且当前组织未分配此科目,如果科目赋值失败,将导致本行分录后面的字段全部赋值失败。如果遇到一行分录中多个基础资料均报“是必填项”时,很可能是科目未正常赋值引起。请检查科目编码是否存在,是否已分配给当前组织使用,是否是细明科目等。也可手工录入相同凭证内容来检验。

    解决办法:在json的data包中,指定IsVerifyBaseDataField为True,请系统提前检查基础资料字段的合法性,这样,系统会直接提示出具体基础资料的问题,便于排错。注意:这个检查会影响API性能。


  • l  系统返回失败信息:某个核算维度为必录维度未录入或不可用

    可能原因:

    1,科目挂了某个必录维度,但json中没有指定值;

    2,指定的维度值不可用(被禁用或反审核了,或未分配给当前组织)

    3,维度编码有误,注意前后空格或特殊字符


  • l  系统返回失败信息:借贷不平

    原因:明明传入的json借贷是平的,还提示借贷不平,原因很可能是某行分录的科目未正常赋值成功,导致整行分录数据被系统判为无效分录而自动清除,导致借贷不平。

    解决办法:找出具体行的不正确科目,具体方法为:在json的data包中,指定IsVerifyBaseDataField为True,请系统提前检查基础资料字段的合法性,这样,系统会直接提示出具体基础资料的问题。也可手工录入相同凭证,遇到录入异常的科目时,系统会有明显提示。


  • l  非共享型基础资料发生了串组织的情况,如传入的是A组织的部门,但生成的却是B组织的同编码的部门

    原因:其实是因为上面的情况未对基础资料做组织隔离引起的。面引起组织隔离失效的原因很可能是API使用了Administrator做为登录用户,由于该用户只有管理职能,没有业务能力,自然也没有指定归属组织,因此,无法对该用户判断组织属性,导致用该用户做业务时组织隔离功能失败。

    解决办法:改用有业务职能的普通用户登录API传递凭证。

    强调:一定不要用Administrator登录Web API进行业务操作,否则很可能造成数据问题。


  • l  API中核算维度标识如何获得?

   大家都知道核算维度的json格式像这样标识:

                                            "FDetailID": {
    "FDETAILID__FFLEX6": { "FNumber": "007" },
    "FDETAILID__FFLEX7": { "FNumber": "201801001" }
}

    即用“FDETAILID__”+核算维度标识的方式来表示具体的维度。但很多新开发者不知道某个核算维度的标识到底是多少。通常情况下,官方预置的核算维度标识是固定不变的,用户自定义的维度维度的标识不确定,需要查询得到。

    官方预置的核算维度及标识如下(注意:因数据存在人为改动的可能,以下仅供参考):

        供应商  BD_Supplier FFLEX4

        部门    BD_Department   FFLEX5

        客户    BD_Customer FFLEX6

        员工    BD_Empinfo  FFLEX7

        物料    BD_MATERIAL FFLEX8

        费用项目    BD_Expense  FFLEX9

        资产类别    FA_ASSETTYPE    FFLEX10

        组织机构    ORG_Organizations   FFLEX11

        物料分组    AMB_MaterialGroup   FFLEX12

        客户分组    AMB_CustomerGroup   FFLEX13

        银行    BD_BANK FFLEX14

        银行账户    CN_BANKCNT  FFLEX15

        其他往来单位    FIN_OTHERS  FFLEX16

    查询核算维度标识的方法:打开【核算维度】界面,默认不显示维度列标识,可以点【过滤】打开过滤界面的【显示隐藏列】,勾选【单据头-维度列标识】,确定。如下图所示:

image.png                                

赞 51