金蝶EAS_WebService总账_新接口开发指南(二):将凭证引入到EAS系统中

概述
我们的系统本身是有凭证引入接口的:直接接口WSVoucher.importVoucher和间接接口GLWebServiceFacade.importVoucher,并且被使用了很多年。但随着客户应用的不断深入,EAS总账作为核心财务系统的地位越来越高,原接口在有些场景下已无法满足需要,特列是大数据量导入时,容易发生内存溢出,甚至宕机。另外因为原接口的声明形式,无法扩展与重构,所以我们提供了一个新的接口WSVoucher.nImportVoucher以满足客户的需求。该接口单次可传的数据量是原接口的10倍以上,错误信息提示更加准确,速度更快,更加稳定,并且具有一定的扩展性。
1、到http://localhost:6888/ormrpc/services下载凭证用wsdl服务描述文件,这里要修改为你服务器的地址和端口,然后鼠标右键wsdl->链接另存为...

将文件后缀改为wsdl后保存到项目根目录,并生成客户端代码。

2、添加架包:在项目的根目录下建一个lib目录,然后将EAS服务端的server\lib\common\bos\common.jar,server\lib\patch\sp-fi_gl-server.jar和server\lib\common\trd\fastjson-xxx.jar拷贝到新建的lib下:

将架包引入到项目中:右键项目->Properties->Java Build Path->Libraries->Add JARs

注:附件中的示例工程并没有引入common.jar和sp-fi_gl-server.jar,而是将用到的类提取到了ziputils.jar中,引入的是ziputils.jar。另外对于JSON也可以使用其它库,如Gson,Jackson,Json-lib。
3、编写代码(完整代码在附件工程中的类client.VoucherImportTest),使用凭证引入新接口WSVoucher.nImportVoucher引入凭证,以下是发起调用的代码片段:

以下是凭证数据构造的代码片段:

凭证数据jsonRows是一个List<List<String>>形式的字符串,如果把它展开,形如一个excel表格:

构造数据时,对于非必录项或是无关项就填空字符串""即可,如果不填会造成错位。运行后,看到这样的信息,说明有凭证引入成功。

以下是本次引入的凭证信息,两条分录,分录1不带辅助账,分录2带两行辅助账:

以下是本次引入凭证的现金流量信息:

4、凭证引入新接口WSVoucher.nImportVoucher的第1个参数jsonRows,它是一个List<List<String>>形式的json字符串,所有明细项都要求是字符串,目前支持以下字段:
字段名 | 字段别名 | 是否必录 | 说明 | 值格式(示例) |
| companyNumber | 公司编码 | 是 | 标识字段,EAS系统中公司的编码,与voucherNumber,periodYear,periodNumber,[voucherType],[bizStatus]一起确定哪些连续行是同一个凭证的数据。 | ZZZ02-01 |
| companyName | 公司名称 | 否 | 公司名称,导入时不会对该字段进行处理。 | 公司1 |
| voucherNumber | 凭证号 | 是 | 标识字段,如果公司没有可用的编码规则且系统参数GL_031允许凭证使用手工编码时,该编码也将作为凭证的入库编码。 | v001 |
| voucherId | 凭证ID | 否 | 凭证ID,通过引出接口将会获得该值,当overwrite值为true,该值支持凭证覆盖引入。 | |
| importKey | 全局标识 | 否 | 用于外部系统在eas中标识自己。GL_016参数设置为"是",GL_016_1为"是",importKey不为空时,将使用该字段判断重复引入,两个凭证的importKey一样时,不允许重复引入,半角字符,不能超过88个。 | keyxxxxxx |
| externalId | 异构系统单据ID | 否 | 以EAS凭证做为下游单据的异构系统单据ID,比如外部的凭证ID,费用单据ID。 | 1783231139637370000 |
| periodYear | 会计期间年 | 否 | 标识字段,要与bookedDate相匹配,空字符串或期间年。 | 空或2022 |
| periodNumber | 会计期间编码 | 是 | 标识字段,要与bookedDate相匹配,当periodYear不为空时,只填月份即可,如:3,当periodYear为空时,要填完整编码,如:202203。 | 3或202203 |
| bookedDate | 记账日期 | 是 | 凭证的登账日期。 | 2022-03-31 |
| bizDate | 业务日期 | 是 | 业务的发生日期。 | 2022-03-31 |
| voucherType | 凭证类型 | 是 | 可选标识字段,凭证类型编码(或名称)。 | 记 |
| bizStatus | 凭证状态 | 否 | 可选标识字段,凭证状态的值或名称,如:0暂存;1已提交;2已作废;3已审核;5已过账,目前该字段并不作为导入凭证的状态。 | 0 |
| description | 参考信息 | 否 | GL_016参数设置为是,GL_016_1为否(或为是且importKey为空)时,将使用该字段判断重复引入,建义使用importKey方式。 | webservice test |
| voucherAbstract | 摘要 | 否 | 分录摘要,第一条分录的值同时作凭证的摘要。 | webservice test |
| attaches | 附件数量 | 否 | 附件数量。 | 0 |
| isCheck | 复核 | 否 | 是否复核。 | true或false,1或0 |
| creator | 制单人 | 是 | 制单人编码(或名称),每一行(包括现金流量行)最好都填上,会对性能有一定优化。 | lhh11 |
| auditor | 审核人 | 否 | 审核人编码(或名称),isAudit为true,要提供审核人。 | lhh11 |
| poster | 过账人 | 否 | 过账人编码(或名称),isPost为true时,要提供过账人。 | lhh11 |
| cashier | 出纳人 | 否 | 出纳人编码(或名称),审核或过账涉及复核时,要提供出纳人。 | lhh11 |
| sourceSys | 来源系统 | 否 | 来源系统,默认为11(基础系统),可填的值请参考com.kingdee.eas.framework.SystemEnum。 | 11或基础系统 |
| sourceType | 来源类型 | 否 | 来源类型,默认为4(其它系统引入),可填的值请参考com.kingdee.eas.fi.gl.SourceType。 | 4或其它系统引入 |
| sourceBillId | 来源单ID | 否 | 来源单ID,半角字符,不能超过44个 | idxxxxxx |
| 凭证分录行 | ||||
| entrySeq | 分录行号 | 是 | 当前凭证的分录唯一区别,从1开始编,连续不能有跳跃,当为现金流量行时,为本方科目分录号。 | 1 |
| profitCenterNumber | 利润中心编码 | 否 | 利润中心编码。 | pc001 |
| accountNumber | 科目编码 | 是 | 分录行科目编码。 | 1001 |
| accountName | 科目名称 | 否 | 科目名称,导入时不会对该字段进行处理。 | 科目1 |
| currencyNumber | 币种 | 是 | 分录行币别编码。 | BB01 |
| entryDC | 借贷方向 | 是 | 分录行借贷方向:1借方,0贷方。 | 1或0,借或贷 |
| measurement | 计量单位 | 否 | 计量单位编码(或名称)。 | KG或千克 |
| cussent | 核销/挂账 | 否 | 0,1,2,3,默认为0。 | 0 |
| customerNumber | 内部单位 | 否 | 客户编码。 | c001 |
| localRate | 汇率 | 否 | 本位币汇率,默认为1。 | 1.01 |
| originalAmount | 原币金额 | 是 | 分录行原币金额。 | 1 |
| debitAmount | 借方金额 | 是 | 分录行借方金额,分录方向为借方时必录。 | 1 |
| creditAmount | 贷方金额 | 是 | 分录行贷方金额,分录方向为贷方时必录。 | 1 |
| qty | 数量 | 否 | 分录行数量。 | 1 |
| price | 单价 | 否 | 分录行单价。 | 1 |
| 凭证辅助账行 | ||||
| asstSeq | 辅助账行号 | 否 | 当前凭证的当前分录的辅助账行唯一区别,从1开始编,连续不能有跳跃。 | 1 |
| assistAbstract | 辅助账摘要 | 否 | 辅助账摘要。 | 摘要 |
| assistBizDate | 业务日期 | 否 | 业务日期。 | 2022-03-31 |
| assistEndDate | 到期日 | 否 | 到期日。 | 2022-03-31 |
| cpCustomerNumber | 客户编码 | 否 | 科目自定义属性的客户编码。 | ct001 |
| cpSupplierNumber | 供应商编码 | 否 | 科目自定义属性的供应商编码。 | sp001 |
| cpOrgUnitNumber | 公司编码 | 否 | 科目自定义属性的公司编码。 | com001 |
| cpMaterialNumber | 物料编码 | 否 | 科目自定义属性的物料编码。 | mat001 |
| settlementType | 结算方式 | 否 | 科目自定义属性的结算方式编码。 | t001 |
| settlementNumber | 结算号 | 否 | 科目自定义属性的结算号。 | sn001 |
| bizNumber | 业务编号 | 否 | 科目自定义属性的业务编号。 | bn001 |
| ticketNumber | 票证号码 | 否 | 科目自定义属性的票证号码。 | tn001 |
| invoiceNumber | 发票号码 | 否 | 科目自定义属性的发票号码。 | in001 |
| asstActType1 | 核算项目类型1 | 否 | 核算项目类型的编码(或名称)。如果当前为现金流量行,则为现金流量的核算项目类型1。 | 客户 |
| asstActNumber1 | 核算项目编码1 | 否 | 核算项目的编码。如果当前为现金流量行,则为现金流量的核算项目编码1。 | c001 |
| asstActName1 | 核算项目名称1 | 否 | 核算项目的名称。如果当前为现金流量行,则为现金流量的核算项目名称1。 | 客户001 |
| asstActType2 | 核算项目类型 | 否 | 以下:取决于科目是否核算多个项目,最多8个。 | |
| asstActNumber2 | 核算项目编码 | 否 | ||
| asstActName2 | 核算项目名称 | 否 | ||
| asstActType3 | 核算项目类型 | 否 | ||
| asstActNumber3 | 核算项目编码 | 否 | ||
| asstActName3 | 核算项目名称 | 否 | ||
| asstActType4 | 核算项目类型 | 否 | ||
| asstActNumber4 | 核算项目编码 | 否 | ||
| asstActName4 | 核算项目名称 | 否 | ||
| asstActType5 | 核算项目类型 | 否 | ||
| asstActNumber5 | 核算项目编码 | 否 | ||
| asstActName5 | 核算项目名称 | 否 | ||
| asstActType6 | 核算项目类型 | 否 | ||
| asstActNumber6 | 核算项目编码 | 否 | ||
| asstActName6 | 核算项目名称 | 否 | ||
| asstActType7 | 核算项目类型 | 否 | ||
| asstActNumber7 | 核算项目编码 | 否 | ||
| asstActName7 | 核算项目名称 | 否 | ||
| asstActType8 | 核算项目类型 | 否 | ||
| asstActNumber8 | 核算项目编码 | 否 | ||
| asstActName8 | 核算项目名称 | 否 | ||
| 现金流量字段 | ||||
| itemFlag | 现金流量标记 | 是 | 指示该行是凭证数据行还是现金流量数据行,如果是凭证数据行应设置为0,如果是现金流量数据行可设置为:1包含主表项目,2包含附表项目,3包含主表与附表项目,4补充资料,5现金类冲抵,6合并后冲抵,7附表调整。 | 1 |
| oppAccountSeq | 对方科目分录号 | 是 | 对方科目分录行号,该值必须出现在凭证数据的entrySeq中。 | 2 |
| oppAsstSeq | 对方辅助账号 | 否 | 对方辅助账行号,该值必须出现在凭证数据的asstSeq中。 | 1 |
| primaryItem | 主表项目 | 否 | 现金流量项目编码,要参考凭证和itemFlag填写。 | pi001 |
| primaryCoef | 主表系数 | 否 | 本字段暂未使用,系统会自己计算。 | 1 |
| supplyItem | 附表项目 | 否 | 现金流量项目编码,要参考凭证和itemFlag填写。 | si001 |
| supplyCoef | 附表系数 | 否 | 本字段暂未使用,系统会自己计算。 | 1 |
| fullInfoItem | 补充资料 | 否 | 现金流量项目编码,要参考凭证和itemFlag填写。 | fi001 |
| type | 现金流量性质列 | 否 | 当主表项目挂辅助账时,性质应为2(外部)或3(内部),主表项目不挂辅助账,性质应为2(外部)。 | 1、2或3 |
| cashflowAmountOriginal | 现金流量原币金额 | 是 | 现金流量原币金额。 | 1 |
| cashflowAmountLocal | 现金流量本位币金额 | 是 | 现金流量本位币金额。 | 1 |
| cashflowAmountRpt | 现金流量报告币金额 | 否 | 现金流量报告币金额,本字段暂未使用,系统会根据原币金额或本位币金额算出报告币金额。 |
金蝶EAS_WebService总账_新接口开发指南(二):将凭证引入到EAS系统中
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



