代码拉取完成,页面将自动刷新
最近工作需要对接金蝶云,逛了一番金蝶社区一直没找到对应的java sdk,算了就自己写一个吧,也许对时间紧张难得动手的同学有所帮助,并且sdk已经内置了登录功能,只要提供相应的账号密码即可。基于金蝶云的webapi抽出了K3CloudTemplate,简化操作。但是目前主要提供了表单数据查询服务,表单保存服务,表单提交服务,有需求的同学可以fork后自己进行改造。
无特殊架构,只是一个简单的jar,但是需要基于java8+及spring环境,具体使用的框架大致如下:
框架 | 描述 |
---|---|
java | java8+ |
spring-web | 主要使用了RestTemplate进行http请求 |
lombok | 对象简化工具 |
hutool | java实用工具集 |
源码安装
git clone xxxx
jar安装
mvn clean package -Dmaven.test.skip=true
package com.link.kingdee;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.springframework.util.StringUtils;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.link.kingdee.k3cloud.K3CloudTemplate;
import com.link.kingdee.k3cloud.domain.Authentication;
import com.link.kingdee.k3cloud.domain.BillQuery;
import com.link.kingdee.k3cloud.domain.BillSave;
import com.link.kingdee.k3cloud.domain.BillSubmit;
import junit.framework.TestCase;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class AppTest extends TestCase {
private static final Authentication AUTH = new Authentication("${actId}", "${username}", "${password}");
private static final K3CloudTemplate TEMPLATE = new K3CloudTemplate("${url}", AUTH);
/**
* 单据查询
*/
@Test
public void testBillQuery() {
// 查询字段
String[] fieldKeys = {
"FBOOKID","FNumber","FName"
};
// 过滤条件, 具体格式可以参考金蝶文档, 比如:"FBOOKID=100453"
String filter = "";
BillQuery query = new BillQuery("BD_AccountBook", StringUtils.arrayToDelimitedString(fieldKeys, ","), filter);
// 允许最大查询量, 金蝶默认最大限制好像是2000, 超过这个值设置了也没用
// query.setTopRowCount(2000);
// 起始索引, 0代表第一个, 需要配合limit使用才有效果
query.setStartRow(0);
// 0代表无限制
query.setLimit(0);
List<?> dataList = TEMPLATE.executeBillQuery(query, AccountBook.class);
log.info("AccountBookList = {}", dataList);
assertNotNull(dataList);
}
/**
* 单据保存
*/
@Test
public void testBillSave() {
BillSave billSave = new BillSave("BD_MATERIAL");
Map<String, Object> model = new HashMap<>();
// 传入id就是更新
// model.put("FMATERIALID", 142631);
Map<String, Object> crtOrgMap = new HashMap<>();
crtOrgMap.put("FNumber", "102");
model.put("FCreateOrgId", crtOrgMap);
Map<String, Object> grpMap = new HashMap<>();
model.put("FName", "物料测试");
grpMap.put("FNumber", "ig001");
model.put("FMaterialGroup", grpMap);
Map<String, Object> subHeadMap = new HashMap<>();
Map<String, Object> baseUnitMap = new HashMap<>();
baseUnitMap.put("FNumber", "01");
subHeadMap.put("FBaseUnitId", baseUnitMap);
model.put("SubHeadEntity", subHeadMap);
Map<String, Object> taxRateMap = new HashMap<>();
taxRateMap.put("FNumber", "SL02_SYS");
model.put("FTaxRateId", taxRateMap);
billSave.setModel(model);
Result result = TEMPLATE.executeBillSave(billSave, Result.class);
log.info("result={}", result.get("Result"));
}
/**
* 单据提交
*/
@Test
public void testBillSubmit() {
BillSubmit<String> billSubmit = new BillSubmit<>("BD_MATERIAL");
billSubmit.setNumbers(Arrays.asList("0021"));
Result object = TEMPLATE.executeBillSubmit(billSubmit, Result.class);
log.info("result={}", object);
}
/**
* 自定义账簿类用于接收返回数据
* <p>使用jackson @JsonProperty来对应金蝶返回字段</p>
*/
@Data
public static class AccountBook {
@JsonProperty("FBOOKID")
private Integer bookId;
@JsonProperty("FNumber")
private Integer number;
@JsonProperty("FName")
private String name;
}
public static class Result extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。