金蝶云星空ERP附件上传接口开发思路

article/2025/8/26 18:35:42
1️⃣

需求描述:需要通过调用金蝶API接口实现指定单据的附件上传。本文以收料通知单为例,以Java代码示例进行讲解。
tips:阅读本文开始前,希望你是一名开发者同时阅读过:
https://vip.kingdee.com/article/87232573931076096
https://vip.kingdee.com/article/183394

2️⃣

首先我们需要了解金蝶附件上传接口是哪一个,如果不清楚,我们可以通过抓包的方式进行查看,但是如果看过上面的文章,我们可以找到上传接口: 你的服务器地址/FileUpLoadServices/FileService.svc/upload2attachment/?fileName=上传文件名称&fileId=&token=登录返回的token&last=true&dbid=数据中心id
请求体具体就是字节流的方式放入请求体,不同编程语言具体写法不一致,本文以Java为例最后会附上相关代码。

3️⃣

这样我们可以通过查询

SELECT * from T_BAS_FileServerFileInfo where ffilename='你上传的文件名'

可以查看到你上传的文件(使用的是文件服务器存储到服务器地址)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
1

上传成功了,肯定有一个疑问,这仅仅上传了文件,但是并没有在具体单据显示啊,其实看了第一个tips的能发现,附件是通过T_BAS_Attachment表与实际业务关联起来的。所以下面需要通过保存api将附件信息关联起来。

4️⃣

下面就和保存一样,请求url其实就是保存的。通过分析分析官方的url我们可以得出请求json格式:

{"parameters": ["BOS_Attachmen",{"NeedReturnFields": [],"IsAutoSubmitAndAudi": "false","Creator": "","NeedUpDateFields": [],"IsVerifyBaseDataField": "false","IsEntryBatchFill": "false","NumberSearch": "true","InterationFlags": "","ValidateFlag": "true","SubSystemId": "","IsDeleteEntry": "false","Model": {"FInterID": "单据的fid","FEntryKey": " 单据体标识(如果是单据头,则传一个空格)","FEntryInterID": -1 单据体分录主键,单据头传-1,"FBillNo": "单据体编号","FBillType": "你要上传附件表单","FAttachmentName": "上传文件的名字","FAttachmentSize": "上传文件的大小","FExtName": "拓展名","FAttachmentDes": "描述","FAttachmen": "","FFILEID": "通过步骤三返回的fileid","FCREATEMEN": " { "FUSERID", 10086}","FCreateTime": "上传时间"}}]
}

然后进行保存就可以了通过查询

SELECT * from T_BAS_Attachment where fbillno in('你上传附件的单号')

在这里插入图片描述

然后通过前端附件就可以进行查看到上传的文件了
在这里插入图片描述

5️⃣

最后附上Java相关代码

public ResultVO upload(String token,String cookie, MultipartFile content, String formId,String fbillno) throws IOException {System.out.println("cookie"+cookie);ResultVO rv = new ResultVO();List<ArrayList>fidList=new ArrayList<>();String fid=null;String fileName=null;String fileId=null;fileName=content.getOriginalFilename();String jsonFormat = getExecuteBillQueryJsonFormatNew(formId,"FID", "FBillNo in('"+fbillno+"')");//json格式化JSONObject obj = JSON.parseObject(jsonFormat);rv = executeBillQuery(cookie, obj);if (rv != null) {String[] l = JSON.parseObject(rv.getData().toString(), String[].class);String[] n=JSON.parseObject(l[0], String[].class);fid=n[0];}byte[] bytes=content.getBytes();InputStream in = new ByteArrayInputStream(bytes);Date date = new Date();SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");String url= "http://你的服务器地址/k3cloud/FileUpLoadServices/FileService.svc/upload2attachment/?filename="+fileName+"&fileid=&last=true&dbid="+kdCloundConfig.getAcctID()+"&token="+token+"";Map<String, Object> paramMap = new HashMap<>();paramMap.put("data",in);String result2 = HttpRequest.post(url).form(paramMap)//表单内容.timeout(20000)//超时,毫秒.execute().body();System.out.println("result2"+result2);//  System.out.println("FileId"+ JsonPath.read(result2, "$.Upload2AttachmentResult.FileId"));fileId=JsonPath.read(result2, "$.Upload2AttachmentResult.FileId");String saveurl = kdCloundConfig.getUrl() + kdCloundConfig.getSave();//业务数据内码FInterID//-1 FEntryInterID代码单据头附件,单据体附件需指定具体业务数据单据体内码,//FBillNo 业务数据编码//PUR_ReceiveBill 附件关联的业务对象IdSystem.out.println("fid"+fid+"fbillno"+fbillno+"formId"+formId+"fileName"+fileName+content.getSize()+content.getOriginalFilename().substring(content.getOriginalFilename().lastIndexOf("."))+dateFormat.format(date));JSONObject jsonObject = new JSONObject();jsonObject.put("FUSERID",643384);String data="{\n" +"\t\"parameters\": [\n" +"\t\t\"BOS_Attachment\",\n" +"\t\t{\n" +"\t\t\t\"NeedReturnFields\": [],\n" +"\t\t\t\"IsAutoSubmitAndAudit\": \"false\",\n" +"\t\t\t\"Creator\": \"\",\n" +"\t\t\t\"NeedUpDateFields\": [],\n" +"\t\t\t\"IsVerifyBaseDataField\": \"false\",\n" +"\t\t\t\"IsEntryBatchFill\": \"false\",\n" +"\t\t\t\"NumberSearch\": \"true\",\n" +"\t\t\t\"InterationFlags\": \"\",\n" +"\t\t\t\"ValidateFlag\": \"true\",\n" +"\t\t\t\"SubSystemId\": \"\",\n" +"\t\t\t\"IsDeleteEntry\": \"false\",\n" +"\t\t\t\"Model\": {\n" +"\t\t\t\t\"FInterID\": "+fid+",\n" +"\t\t\t\t\"FEntryKey\": \" \",\n" +"\t\t\t\t\"FEntryInterID\": -1,\n" +"\t\t\t\t\"FBillNo\": \""+fbillno+"\",\n" +"\t\t\t\t\"FBillType\": \""+formId+"\",\n" +"\t\t\t\t\"FAttachmentName\": \""+fileName+"\",\n" +"\t\t\t\t\"FAttachmentSize\": "+ (double)(Math.round(content.getSize()/1024))+",\n" +"\t\t\t\t\"FExtName\": \""+content.getOriginalFilename().substring(content.getOriginalFilename().lastIndexOf("."))+"\",\n" +"\t\t\t\t\"FAttachmentDes\": \"地磅上传\",\n" +"\t\t\t\t\"FAttachment\": \"\",\n" +"\t\t\t\t\"FFILEID\": \""+fileId+"\",\n" +"\t\t\t\t\"FCREATEMEN\": "+jsonObject.toJSONString()+",\n" +"\t\t\t\t\"FCreateTime\": \""+dateFormat.format(date)+"\"\n" +"\t\t\t}\n" +"\t\t}\n" +"\t]\n" +"}";Map<String, Object> header = new HashMap<>();header.put("Cookie", cookie);String result = HttpUtil.httpPost(saveurl, header, data);rv.setCode(ResultEnumErrorCode.SUCCESS.getCode());rv.setMessage(ResultEnumErrorCode.SUCCESS.getMsg());rv.setData(result);logger.info("upload:formId:{}执行结果:{}", formId, result);if (ObjectUtil.isEmpty(rv)) {rv.setCode(ResultEnumErrorCode.SYSTEM_ERROR_B0001.getCode());rv.setMessage(ResultEnumErrorCode.SYSTEM_ERROR_B0001.getMsg());logger.error("upload:formId:{}系统执行出错!", formId);}return rv;}

最后本文提供了上传思路,实际业务还需要根据实际情况调整。


http://chatgpt.dhexx.cn/article/0fT3Nm6k.shtml

相关文章

金蝶创建webservice接口和调用

注意&#xff1a;因为文件缺失webservice这部分是以3个功能来描述的 webservice金蝶有标准接口可以在金蝶社区找到文档&#xff0c;自己写一个webservice接口需要在金蝶bos设计开发工具matedata目录下新建一个功能。 注意&#xff1a;功能命名结尾要以Facade结尾 功能建完后再…

BOS金蝶云星空开发简单账表

一.BOS创建简单账表&#xff1a; 1.左键单击左上角文件->新建。 2.选择简单账表&#xff0c;输入名称&#xff0c;编号&#xff0c;点击确定&#xff0c;创建简单账表。 3.选择过滤条件框&#xff0c;输入名称&#xff0c;编号&#xff0c;点击确定。 二.Visual Studio…

金蝶插件开发理解

&#xff08;1&#xff09;金蝶软件 金蝶是一家从事企业管理&#xff0c;从事财务&#xff0c;供应链&#xff0c;仓库等等的软件公司 金蝶的软件可以分成两部分&#xff1a; 1,BOS模块&#xff0c;配置开发模块 2&#xff0c;前端界面模块 3,后端可以通过配置和写插件的形式开…

金蝶二开感受

小白感受篇 最近换工作&#xff0c;公司使用金蝶系统来作为公司的财务中台&#xff0c;因此与金蝶云星空结缘。 说说我的感受、以及对金蝶二开的理解。后面我应该也会不定时更新我对金蝶的看法以及新的感受。 在我没有真正接触金蝶前&#xff0c;我只知道有些比较知名的软件…

金蝶EAS开发 第一弹:了解开发工具与基本使用(上)

毕业前夕,我来到了一家物流公司实习,为本公司做系统.我被分配的是用金蝶做财务系统的二次开发,没有文档的帮助真的让我头皮发麻,还好同事很热心,一直在帮助我,不然要上手这玩意还真的很有难度.入职已经两个星期了,我觉得好记性不如烂笔头,今天开始我准备尽量将学到的知识记录下…

金蝶插件开发

1、报表开发 报表开发需要表头表体两个插件&#xff0c;表头继承AbstractReportFormPlugin类&#xff0c;表体继承AbstractReportListDataPlugin类&#xff0c;其中列表的数据需要显示&#xff0c;则主要靠的是AbstractReportListDataPlugin子类实现query&#xff08;&#xf…

金蝶BOS开发入门

金蝶BOS开发入门 金蝶BOS开发工具介绍 解决方案相当于一个JAVA项目&#xff0c;而BOS开发工具是开发解决方案的技术平台。它可以新建一个解决方案&#xff0c;或者从本地或者远程导入一个已有的解决方案&#xff0c;具体操作后续会讲到。 界面介绍和简单使用 简单&#xff…

金蝶EAS开发笔记

1.界面介绍 1. 新建业务单位&#xff0c;若无需求&#xff0c;默认选用财务组织。 2. 在项目路径下的\metadata\com\kingdee\eas\custom\bill 可改单据名称。 3. 标准&#xff1a;默认先在用户自定义下面建立报表(rpt)、基础资料(basedata)和业务单据(bill)&#xff0c;即在…

测试用例设计方法——因果图法

1.因果图  1.1考虑所有输入/输出条件的相互制约关系以及组合关系  1.2考虑输入条件之间的依赖关系&#xff1b;  1.3再根据分析的关系来转化为判定表的规则 2.条件与结果之间的关系  2.1恒等  2.2非&#xff08;~&#xff09;  2.3或&#xff08;V&#xff09;  2.4与 3…

实验4、黑盒测试:因果图法及测试用例设计

实验4、黑盒测试&#xff1a;因果图法及测试用例设计 一、实验目的 1、掌握因果图的概念。 2、掌握因果图测试用例设计法。 二、实验任务 以下三个任务、至少完成一个 1、某软件规格说明书包含这样的要求&#xff1a;第一列字符必须是A或B&#xff0c;第二列字符必须是一…

【测试入门】测试用例经典设计方法 —— 因果图法

01、因果图设计测试用例的步骤 1、分析需求 阅读需求文档&#xff0c;如果User Case很复杂&#xff0c;尽量将它分解成若干个简单的部分。这样做的好处是&#xff0c;不必在一次处理过程中考虑所有的原因。没有固定的流程说明究竟分解到何种程度才算简单&#xff0c;需要测试…

【测试】根据因果图法设计饮料售卖机的测试用例

【测试】根据因果图法设计饮料售卖机的测试用例 因果法设计测试用例的步骤&#xff1a; ① 分析所有可能的输入和可能的输出 ② 找出输入与输出之间的对应关系 ③ 画出因果图 ④ 把因果图转换成判定表 ⑤ 把判定表对应到每一个测试用例 产品说明&#xff1a; 有一个处理单价为…

软件测试用例设计方法-因果图法

边界值法是等价类划分法的补充&#xff0c;所以&#xff0c;它们是一对搭档。 那么&#xff0c;判定表法有没有它的搭档呢&#xff1f; 答案是&#xff0c;有的。那就是本篇文章分享的用例设计方法—— 因果图法 。 定义 因果图法&#xff1a; 用来处理等价类划分和边界值考…

测试用例设计方法---因果图法

学习目标 掌握因果图法的核心 掌握因果图的基本符号了解因果图的画法 1、什么是因果图法 因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适用于检查程序输入条件的各种组合情况 2、因果图法的核心 因 、 果 1、所谓的原因就是输入,所谓的结果就…

因果图法设计测试用例

等价类划分法、边界值分析法及错误推断法在对输入条件的考虑中并未重视输入条件的组合。事实上&#xff0c;当输入条件存在若干种可能的组合时&#xff0c;必须对这些组合加以考虑&#xff0c;以证实测试程序在某种输入组合的情况下恩能否完成规格说明书中预先规定的功能&#…

通俗的讲,Java后端到底是干什么的?语言工程师到底是啥?你是工程师吗?

新手程序员通常会走入一个误区 就是认为学习了一门语言&#xff0c;就可以称为是某某语言工程师了。但事实上真的是这样吗&#xff1f;其实并非如此。 今天我们就来聊一聊&#xff0c;Java 开发工程师到底开发的是什么东西。准确点来说&#xff0c;Java后端到底在做什么&…

Web开发从前端、后端、编程语言、到框架的初学指南

[导读] 作为一篇Web开发初学者指南&#xff0c;本文从学习什么出发到如何专攻。从前端、后端&#xff0c;到编程语言&#xff0c;再到框架&#xff0c;或许对打算进军Web开发的您有所帮助。如果你正在阅读这篇文章&#xff0c;你可能是对Web开发有某种兴趣&#xff0c;甚至你开…

数据库与后端语言

什么是数据库 数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期储存在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 什么是后端语言 后端语言&#xff0c;在Web应用中实际上就是向前端提供需要显示网页内容的数据&#xff0c;这些数据大多…

前端和后端分别是什么?

从技术工具来看&#xff1a; 前端&#xff1a;常见的 html5、JavaScript、jQuery... 后端&#xff1a;spring、tomcet、JVM&#xff0c;MySQL... 毕竟&#xff0c;如果这个问题问一个老后端&#xff0c;他掰掰手指可以给你罗列出一堆的名词来&#xff0c;比如设计模式、数据库…

前端 语言

前端语言 名称简介用法网址CSSCSS 是一种描述 HTML 文档样式的语言。CSS 描述应该如何显示 HTML 元素https://www.w3school.com.cn/css/index.aspCSS3CSS3 是最新的 CSS 标准。操作https://www.runoob.com/css3/css3-tutorial.htmlScss/SassScss是CSS的预处理器&#xff0c;一…