金蝶EAS OpenAPI 开发说明文档

金蝶EAS OpenAPI 开发说明文档

目录

  • 一、通用说明
  • [二、费用报销模块 OpenAPI](#二、费用报销模块 OpenAPI)
    • [2.1 接口概述](#2.1 接口概述)
    • [2.2 单据导入接口(cpbcOpenAPI_importBill)](#2.2 单据导入接口(cpbcOpenAPI_importBill))
    • [2.3 数据类型格式说明](#2.3 数据类型格式说明)
    • [2.4 二开扩展](#2.4 二开扩展)
    • [2.5 接口调用方式](#2.5 接口调用方式)
    • [2.6 OpenAPI 常见问题](#2.6 OpenAPI 常见问题)
    • [2.7 测试接口](#2.7 测试接口)
  • [三、供应链模块 OpenAPI](#三、供应链模块 OpenAPI)
    • [3.1 接口概述](#3.1 接口概述)
    • [3.2 支持的版本](#3.2 支持的版本)
    • [3.3 接口部署](#3.3 接口部署)
    • [3.4 接口请求示例](#3.4 接口请求示例)
    • [3.5 导入动态新增的属性](#3.5 导入动态新增的属性)
    • [3.6 二次开发导入新单据](#3.6 二次开发导入新单据)
    • [3.7 数据类型格式说明](#3.7 数据类型格式说明)
    • [3.8 单据导入接口(SCMWebServiceFacade-importBill)](#3.8 单据导入接口(SCMWebServiceFacade-importBill))
    • [3.9 即时库存查询接口(InventoryListServiceFacade-getData)](#3.9 即时库存查询接口(InventoryListServiceFacade-getData))
    • [3.10 仓库导入接口(WarehouseWebServiceFacade-importData)](#3.10 仓库导入接口(WarehouseWebServiceFacade-importData))
  • [四、基础资料导入导出接口(ORMRPC WebService)](#四、基础资料导入导出接口(ORMRPC WebService))
    • [4.1 物料相关接口](#4.1 物料相关接口)
    • [4.2 客户相关接口](#4.2 客户相关接口)
    • [4.3 供应商相关接口](#4.3 供应商相关接口)
    • [4.4 国家/地区/省份接口](#4.4 国家/地区/省份接口)
    • [4.5 会计科目相关接口](#4.5 会计科目相关接口)
    • [4.6 人员与HR组织接口](#4.6 人员与HR组织接口)
    • [4.7 组织架构接口](#4.7 组织架构接口)
    • [4.8 资产类别接口](#4.8 资产类别接口)
  • [五、主数据 OpenAPI(物料、客户、供应商)](#五、主数据 OpenAPI(物料、客户、供应商))
    • [5.1 物料模块](#5.1 物料模块)
    • [5.2 客户模块](#5.2 客户模块)
    • [5.3 供应商模块](#5.3 供应商模块)
  • [六、ORMapping 概念与使用](#六、ORMapping 概念与使用)
    • [6.1 ORM 概念](#6.1 ORM 概念)
    • [6.2 为什么使用 ORM](#6.2 为什么使用 ORM)
    • [6.3 ORMapping 职责](#6.3 ORMapping 职责)
    • [6.4 ORMapping 主要接口方法](#6.4 ORMapping 主要接口方法)
    • [6.5 ORMapping 结构组成](#6.5 ORMapping 结构组成)
    • [6.6 ORMapping 与外界交互方式](#6.6 ORMapping 与外界交互方式)
    • [6.7 ORMapping 的处理策略](#6.7 ORMapping 的处理策略)
    • [6.8 典型持久过程示例](#6.8 典型持久过程示例)
  • 七、数据库操作
    • [7.1 服务端 SQL 执行](#7.1 服务端 SQL 执行)
    • [7.2 客户端 SQL 执行](#7.2 客户端 SQL 执行)
  • [八、第三方系统单点登录到 EAS](#八、第三方系统单点登录到 EAS)
    • [8.1 修改配置文件](#8.1 修改配置文件)
    • [8.2 获取 Ltpa Token](#8.2 获取 Ltpa Token)
    • [8.3 单点登录到 EAS](#8.3 单点登录到 EAS)
    • [8.4 FAQ](#8.4 FAQ)
  • 九、基类继承体系
    • [9.1 总体架构设计](#9.1 总体架构设计)
    • [9.2 业务对象层继承体系](#9.2 业务对象层继承体系)
    • [9.3 服务端对象继承体系](#9.3 服务端对象继承体系)
    • [9.4 客户端 UI 层继承体系](#9.4 客户端 UI 层继承体系)

一、通用说明

本文档汇集了金蝶 EAS 二次开发中常用的 OpenAPI 接口、基础资料导入导出、ORMapping 持久化、数据库操作、单点登录以及基类继承体系等内容,供开发人员参考。


二、费用报销模块 OpenAPI

2.1 接口概述

  • 适用版本 :EAS 8.5.0 及以上版本(需更新相应补丁)
    • 8.5 需更新补丁 PT151074
    • 8.6.1 需更新补丁 PT155366
  • 功能:支持费用报销模块的单据导入,可导入通过 DEP/BIM 工具动态新增的属性。

2.2 单据导入接口(cpbcOpenAPI_importBill)

接口描述

导入费用报销相关单据。

接口 URL
复制代码
http://ip:port/easportal/openapi/api?token=?
接口 API 名称

cpbcOpenAPI_importBill

参数说明
参数 类型 含义
bosType String 单据的 bostype,如费用报销单:4A44F49F。支持单据:费用申请单(E76173AD)、出差申请单(DE853384)、借款单(8110AAB2)、出差借款单(7AE53B38)、费用报销单(4A44F49F)、差旅报销单(C57003BC)、对公报销单(92F938DD)、物品采购报销单(30BD2798)。
data String 单据对象数组的 JSON 字符串。需传入单据唯一标识字段(如第三方系统编码),并添加数据库唯一索引防重。
params String 参数对象,必须包含属性 actionType,可选值为 submit / save
请求 body 示例
json 复制代码
{
    "api": "cpbcOpenAPI_importBill",
    "data": ["4A44F49F", [{"bosType":"4A44F49F","entries":[]}], {"actionType":"submit"}]
}
返回值示例
json 复制代码
{
    "status": 0,
    "msg": "信息",
    "billErrors": [
        {"id": "", "number": "", "errorMsgs": ["", ""]}
    ]
}
  • status:0-全部成功,1-全部失败,2-部分成功
  • billErrors:失败单据的错误信息

2.3 数据类型格式说明

数据类型 说明 格式要求
ID 最大 44 位字符串 "id":"A093893DF"
数值 小数值,金额最多 2 位小数 "amount":23.95
整数 整数值 "year":2013
日期 yyyy-mm-dd "bizDate":"2013-06-19"
时间 yyyy-mm-dd HH:MM:SS "createTime":"2013-06-19 14:58:23"
字符串 字符串 "name":"nokia 手机"
枚举 枚举项 "status":2
基础数据 EAS 基础资料,传入编码 "applier":{"number":"ellen"}
布尔型 true/false "isTax":true

注意:单据模型可通过 DEP 扩展平台或 BOS 开发工具查看。

2.4 二开扩展

  • DEP 扩展字段直接加入 data 数据模型中即可自动保存。
  • 如需自定义导入处理类,修改 com/kingdee/eas/cp/bc/app/cpbcImporterConfig.properties 文件,指定 bostype 对应的处理类(继承自 AbstractDefaultImporter 或各单据的具体导入实现类)。

2.5 接口调用方式

5.1 HTTP 调用

登录获取 token

  • 普通用户密码方式:

    复制代码
    http://127.0.0.1:6888/easportal/openapi/login?authPattern=BaseDB&dcName=EAS850BETA3&isEncodePwd=0&language=l2&password=&user=zqtest

    返回格式:

    json 复制代码
    {
        "data": "{\"token\":\"...\"}",
        "errCode": 0,
        "errMsg": "执行成功"
    }
  • LtpaToken 免密码方式(需先生成 LtpaToken):

    复制代码
    http://localhost:6888/easportal/openapi/login?user=zj001&dcName=EAS850BETA3&language=l2&password=AAECAz...&authPattern=BaseTrdLtpaToken

调用 API

复制代码
http://ip:port/easportal/openapi/api?token=xxx

请求 body 同 2.2 节示例。

5.2 Java 程序内调用
java 复制代码
String ip = "172.17.6.176";
int port = 8080;
String userName = "zj003";
String password = "";
String dcName = "EAS860NEW";
String language = "l2";
EASLoginContext loginCtx = new EASLoginContext.Builder(ip, port,
        new CommonLogin.Builder(userName, password, dcName, language)
        //.appid("test")
        .build())
        .https(false)
        .build();
OpenApiInfo info = new OpenApiInfo();
info.setApi("cpbcOpenAPI_importBill");
info.setData(data); // data 为符合格式的字符串
OpenApi openApi = OpenApiFactory.getService(loginCtx);
String result = openApi.invoke(info);

依赖包:openapi-server.jarlog4j-1.2.15.jarfastjson-1.2.58.jar

2.6 OpenAPI 常见问题

2.7 测试接口

可使用 Postman 测试:

  1. 获取 token(需加 appid 参数)。
  2. 调用 API 接口。

三、供应链模块 OpenAPI

3.1 接口概述

  • 适用于 EAS 8.5 及以上版本。
  • 支持 18 种供应链单据导入:采购申请、采购订单、销售订单、调拨订单、库存调拨单、采购入库、销售出库、其他入库、其他出库、应收单、应付单、采购收货单、生产入库单、调拨入库单、领料申请单、领料出库单、调拨出库单、发货通知单。
  • 支持 DEP/BIM 动态新增属性,支持二次开发导入新单据。

3.2 支持的版本

EAS 8.5 及以上版本。

3.3 接口部署

需在 Web 端配置 OpenApi 引入:集成管理 → 接口服务 → OpenApi 管理,确保接口引入服务已启用且配置状态为"提交"。

3.4 接口请求示例

java 复制代码
public static void invokeByHttp() throws BizException, LoginException, InvokeNetworkException {
    String ip = "127.0.0.1";
    int port = 6888;
    String userName = "zqtest";
    String password = "";
    String dcName = "EAS860SP1";
    String language = "l2";
    EASLoginContext loginCtx = new EASLoginContext.Builder(ip, port,
            new CommonLogin.Builder(userName, password, dcName, language).build())
            .https(false).build();
    OpenApiInfo info = new OpenApiInfo();
    info.setApi("SCMWebServiceFacade-importBill");
    JSONArray array = new JSONArray();
    array.add("010"); // 单据类型编码
    array.add("引入单据json"); // JSON 数组
    array.add(1); // 引入状态(审核态)
    info.setData(array.toJSONString());
    OpenApi openApi = OpenApiFactory.getService(loginCtx);
    String result = openApi.invoke(info);
    System.out.println(result);
}

3.5 导入动态新增的属性

在标准 JSON 中直接添加属性即可,例如:

json 复制代码
"totalPrice": 23.0900,
"parentMaterial": {"number": "2003099N909"}

3.6 二次开发导入新单据

  1. 在类路径 com/kingdee/eas/scm/ws 下增加 WSimportclasses_l1.properties 文件。
  2. 开发新单据导入类,实现接口 com.kingdee.eas.scm.ws.app.importbill.IBillSupport
  3. 注册格式:单据类型=Class,如 10000=com.kingdee.eas.wg.manufactureOrderSupport(单据类型从 10000 开始)。

3.7 数据类型格式说明

数据类型 说明 格式要求
ID 最大44位字符串 "id":"A093893DF"
数值 金额4位小数,数量/单价8位 "qty":23.9099
整数 "year":2013
日期 yyyy-mm-dd "bizDate":"2013-06-19"
时间 yyyy-mm-dd HH:MM:SS "createTime":"2013-06-19 14:58:23"
字符串 "name":"nokia 手机"
枚举 "status":2
基础数据 传入编码 "material":{"number":"W002893"}
布尔型 true/false "isTax":true
数组 "orgs":["a","b"]

3.8 单据导入接口(SCMWebServiceFacade-importBill)

API 配置
  • 编码:SCMWebServiceFacade-importBill
  • 方法:String importBill(String billType, String billDataJSON, int billStatus)
请求参数
  • billType:单据类型编码(详见下表)
  • billDataJSON:JSON 格式的多个单据对象,如 [ {单据1}, {单据2} ]
  • billStatus:导入状态(1-保存态,2-提交态,3-审核态)
单据类型 编码 保存态支持 提交态支持 审核态支持
采购申请单 001 EAS750+ Cloud880+ Cloud880+
采购订单 002 EAS750+ Cloud880+ Cloud880+
销售订单 003 EAS750+ Cloud880+ Cloud880+
调拨订单 004 EAS750+ Cloud880+ Cloud880+
库存调拨单 005 EAS750+ Cloud880+ Cloud880+
采购入库 006 EAS750+ Cloud880+ Cloud880+
销售出库 007 EAS750+ Cloud880+ Cloud880+
其他入库 008 EAS750+ Cloud880+ Cloud880+
其他出库 009 EAS750+ Cloud880+ Cloud880+
应收单 010 EAS750+ Cloud880+ Cloud880+
应付单 011 EAS750+ Cloud880+ Cloud880+
采购收货单 012 EAS850+ Cloud880+ Cloud880+
生产入库单 013 EAS850+ Cloud880+ Cloud880+
调拨入库单 014 EAS850+ Cloud880+ Cloud880+
领料申请单 015 EAS850+ Cloud880+ Cloud880+
领料出库单 016 EAS850+ Cloud880+ Cloud880+
调拨出库单 017 EAS850+ Cloud880+ Cloud880+
发货通知单 018 EAS850+ Cloud880+ Cloud880+
采购合同 019 EAS850+ Cloud880+ Cloud880+
要货申请单 023 Cloud880+ Cloud880+ Cloud880+
付款申请单 025 Cloud880+ X X
付款单 026 Cloud880+ X X
收款单 027 Cloud880+ X X
响应参数
json 复制代码
{
    "status": 0,
    "msg": "信息",
    "billErrors": [{"id": "", "number": "", "errorMsgs": ["", ""]}, ...]
}
单据字段说明(示例,详细字段列表见原文档)
  • 001采购申请单 :头字段包括 numberbizDatebizTypecompanyOrgUnitperson 等;分录字段包括 materialunitqtyprice 等。
  • 其他单据字段列表过于庞大,此处略,具体可参考原文档中按单据类型列出的详细表格。

3.9 即时库存查询接口(InventoryListServiceFacade-getData)

API 配置
  • 编码:InventoryListServiceFacade-getData
  • 方法:String getData(String reqJSON)
请求参数(JSON)
json 复制代码
{
    "start": 0,
    "len": 50,
    "storageOrgs": ["A", "B"],
    "warehouses": ["WH001"],
    "materialNumFrom": "001",
    "materialNumTo": "999",
    ...
}

参数说明见原文档。

响应参数
json 复制代码
{
    "list": [{}],
    "status": 0,
    "msg": null,
    "count": 1000
}

3.10 仓库导入接口(WarehouseWebServiceFacade-importData)

API 配置
  • 编码:WarehouseWebServiceFacade-importData
  • 方法:String importData(String dataJSON)
请求参数(JSON数组)
json 复制代码
[{
    "storageOrg": "001",
    "number": "WH001",
    "name": "成品仓",
    "region": "CN",
    "transState": 1,
    "hasLocation": true,
    ...
}]
响应参数(同导入接口)

四、基础资料导入导出接口(ORMRPC WebService)

本节介绍通过 ORMRPC WebService 导入导出基础资料的方法,包括物料、客户、供应商、国家、地区、会计科目等。接口 URL 一般为 http://ip:port/ormrpc/services,可在浏览器查看所有发布的服务。

4.1 物料相关接口

导入物料分类
  • 方法importMaterialGroupData(String xmlData)
  • BostypeC79FC042(物料分类)
  • XML 结构示例
xml 复制代码
<DataInfo bostype="C79FC042" op="4">
    <DataHead>
        <creator>user</creator>
        <createTime>2012-06-11 09:28:46</createTime>
        <CU>01</CU>
        <number>group01</number>
        <name>物料分类01</name>
        <description>物料分类01</description>
        <groupStandard>BaseGroupStandard</groupStandard>
        <deletedStatus>1</deletedStatus>
        <IsSynchronous>1</IsSynchronous>
    </DataHead>
</DataInfo>
  • op:0-修改,1-启用,2-停用,3-保存,4-提交
  • 返回 XML :包含 retstatuserrorMessages
导入物料
  • 方法importMaterialData(String xmlData)
  • Bostype4409E7F0
  • XML 结构
xml 复制代码
<DataInfo bostype="4409E7F0" op="4">
    <DataHead>
        <creator>user</creator>
        <createTime>2020-10-29 16:28:46</createTime>
        <CU>01</CU>
        <number>MAT001</number>
        <name>物料001</name>
        <model>M-001</model>
        <baseUnit>PCS</baseUnit>
        <status>1</status>
        <materialGroup>group01</materialGroup>
    </DataHead>
    <DataEntries>
        <entry>
            <materialGroupStandard>BaseGroupStandard</materialGroupStandard>
            <materialGroup>group01</materialGroup>
        </entry>
    </DataEntries>
</DataInfo>
分配物料
  • 方法assignMaterial(String xmlData)
xml 复制代码
<AssignData>
    <AssignHead>
        <sourceCU>01</sourceCU>
        <dataNumber>MAT001</dataNumber>
    </AssignHead>
    <AssignCUS>
        <AssignCU><cuNumber>0001</cuNumber></AssignCU>
    </AssignCUS>
</AssignData>
导出物料分类/物料
  • 方法exportMaterialGroupData(int start, int rows) / exportMaterialData(int start, int rows)
  • 返回 List 包含 XML 数据。

4.2 客户相关接口

导入客户分类
  • 方法importCustomerGroupData(String xmlData)
  • Bostype7A2569A2
  • XML 结构类似物料分类。
导入客户
  • 方法importCustomerData(String xmlData)
  • BostypeBF0C040E
  • 示例
xml 复制代码
<DataInfo bostype="BF0C040E" op="4">
    <DataHead>
        <creator>user</creator>
        <name>客户001</name>
        <number>C001</number>
        <usedStatus>0</usedStatus>
        <CU>01</CU>
        <browseGroup>group01</browseGroup>
        <isInternalCompany>0</isInternalCompany>
    </DataHead>
    <DataEntries>
        <entry>
            <customerGroupStandard>customerGroupStandard</customerGroupStandard>
            <customerGroup>group01</customerGroup>
        </entry>
    </DataEntries>
</DataInfo>
导入客户财务资料
  • 方法importCustomerCompanyData(String xmlData)
  • Bostype7751B8D7
导入客户销售资料
  • 方法importCustomerSaleData(String xmlData)
  • Bostype26C00F09
分配客户
  • 方法assignCustomer(String xmlData),格式同分配物料。
导出客户分类/客户
  • exportCustomerGroupData / exportCustomerData

4.3 供应商相关接口

导入供应商分类
  • 方法importSupplierGroupData(String xmlData)
  • Bostype7A2569A2(同客户分类?需注意实际可能不同,原文档供应商分类也为 7A2569A2,但一般供应商分类有单独 bostype,此处可能是复制粘贴错误,实际应以元数据为准,通常供应商分类 Bostype 为 ...,但原文档多处混用,请在实际开发中查阅元数据。)
导入供应商
  • 方法importSupplierData(String xmlData)
  • Bostype37C67DFC
导入供应商财务资料
  • 方法importSupplierCompanyData(String xmlData)
  • BostypeF26C0EC7
导入供应商采购资料
  • 方法importSupplierPurchaseData(String xmlData)
  • Bostype9920F4D3
分配供应商
  • 方法assignSupplier(String xmlData)
导出供应商分类/供应商
  • exportSupplierGroupData / exportSupplierData

4.4 国家/地区/省份接口

国家
  • 导入:importCountryData(String xmlData),Bostype 2665126B
  • 导出:exportCountryData(int start, int rows)
地区
  • 导入:importAreaData(String xmlData),Bostype 0C5D0DD8
  • 导出:exportAreaData(int start, int rows)
省份
  • 导入:importProvinceData(String xmlData),Bostype 818DCAFB
  • 导出:exportProvinceData(int start, int rows)

4.5 会计科目相关接口

导入会计科目
  • 方法importAccountViewData(String xmlData)
  • Bostype9DA99826
导入科目表
  • 方法importAccountTableData(String xmlData)
  • Bostype17698E6D
导出会计科目/科目表
  • exportAccountViewData / exportAccountTableData

4.6 人员与HR组织接口

导入人员
  • 方法importPersonData(String xmlData)
  • Bostype80EF7DED
导入 HR 组织
  • 方法importHrOrgData(String xmlData)
  • Bostype58B332D9
导出人员/HR组织
  • exportPersonData / exportHrOrgData

4.7 组织架构接口

  • 导入importFullOrgData(String xmlData),Bostype CCE7AED4
  • 导出exportFullOrgData(int start, int rows)

4.8 资产类别接口

  • 导入importFaCatData(String xmlData),Bostype C542D428
  • 导出exportFaCatData(int start, int rows)

五、主数据 OpenAPI(物料、客户、供应商)

本节内容与上一节有重叠,但属于单独整理的 OpenAPI 标准文档,此处按模块简要汇总,详细参数可参考原 PDF。

5.1 物料模块

  • 导入物料分类ImportMaterialGroupFacade-importMaterialGroupData(对应 ORMRPC 的 importMaterialGroupData
  • 导入物料ImportMaterialFacade-importMaterialData
  • 分配物料AssignMaterialFacade-assignMaterial

5.2 客户模块

  • 导入客户分类ImportCustomerGroupFacade-importCustomerGroupData
  • 导入客户ImportCustomerFacade-importCustomerData
  • 导入客户财务资料ImportCustomerCompanyFacade-importCustomerCompanyData
  • 导入客户销售资料ImportCustomerSaleFacade-importCustomerSaleData
  • 分配客户AssignCustomerFacade-assignCustomer

5.3 供应商模块

  • 导入供应商分类ImportSupplierGroupFacade-importSupplierGroupData
  • 导入供应商ImportSupplierFacade-importSupplierData
  • 导入供应商财务资料ImportSupplierCompanyFacade-importSupplierCompanyData
  • 导入供应商采购资料ImportSupplierPurchaseFacade-importSupplierPurchaseData
  • 分配供应商AssignSupplierFacade-assignSupplier

注意:850 版本需补丁 PT157152,861 版本需补丁 PT158529。


六、ORMapping 概念与使用

6.1 ORM 概念

ORM(Object Relational Mapping)将关系数据库中的数据映射为对象,使开发人员能以面向对象的方式操作数据库。

6.2 为什么使用 ORM

  • 提高开发效率,降低学习成本。
  • 简化代码,减少 Bug。
  • 通过缓存提高性能。
  • 隔离数据源,方便切换数据库。

6.3 ORMapping 职责

  • 持久化对象数据到数据源。
  • 从数据源获取数据组装对象。
  • 屏蔽直接数据源操作。
  • 提供校验、计算、多语言处理。

6.4 ORMapping 主要接口方法

接口类:com.kingdee.bos.dao.ormapping.IORMappingDAO

实现类:com.kingdee.bos.dao.ormapping.ORMappingDAO

主要方法:

  • getInstance:获取接口对象
  • getValue:获取单个业务对象
  • getCollection:获取业务对象集合
  • getPKList:获取主键集合
  • getCount:获取满足条件的数据条数
  • update:更新业务对象
  • updatePartial:指定字段更新
  • updateBatch:批量更新
  • delete:删除
  • addnew:新增
  • accept:验证权限
  • exists:验证数据是否存在

6.5 ORMapping 结构组成

ORMapping 通过元数据将业务层数据转换为 KSQL,再转换为 SQL 执行。主要组件:

  • Context:上下文
  • EntityObjectInfo:元信息描述
  • Connection:数据库连接
  • ObjectValue:值对象
  • EntityViewInfo:包含查询条件、排序、选择字段等

6.6 ORMapping 与外界交互方式

  • 传入 ContextEntityObjectInfoConnectionObjectValueEntityViewInfoIObjectPK
  • 输出 ObjectValueObjectValueCollection

6.7 ORMapping 的处理策略

实体关系的映射
  • 继承:支持实继承(共用表或扩展表)、虚继承(一条继承链一张表)。
  • 关联:右对象不依赖左对象存在,按需装载。
  • 组合:右对象依赖左对象,生命周期一致,同时持久化。
多语言处理

多语言信息在表的列中标记,实体属性不感知。

新增/修改/删除/查询
  • 新增:根据依赖关系顺序新增主实体和组合子实体。
  • 修改:先更新主实体,再更新组合子实体。
  • 删除:从底层组合子实体开始逐层删除。
  • 查询:按需查询,默认装载主实体自有属性和组合子对象,关联对象只装一层 ID。

6.8 典型持久过程示例

以 Order 类为例,通过 OrderFactory.getRemoteInstance().addNew(orderInfo) 新增订单。过程:

  1. 分析 Order 元数据。
  2. 构造 EntityAccess 对象,包含字段值映射。
  3. 构建 SQL 并执行。

七、数据库操作

EAS 中推荐使用 KSQL,但特殊情况下可使用方言 SQL(加 /*dialect*/ 标记)。

7.1 服务端 SQL 执行

查询
java 复制代码
// 非参数化
IRowSet rs = com.kingdee.eas.util.app.DbUtil.executeQuery(ctx, sql);
// 分页
IRowSet rs = DbUtil.executeQuery(ctx, sql, start, rows);
// 参数化
IRowSet rs = DbUtil.executeQuery(ctx, sql, params);
增删改
java 复制代码
// 非参数化
DbUtil.execute(ctx, sql);
// 参数化
DbUtil.execute(ctx, sql, params);
// 批量参数化
DbUtil.executeBatch(ctx, sql, paramsList); // paramsList: List<Object[]>
临时表
java 复制代码
TempTablePool pool = TempTablePool.getInstance(ctx);
String realTableName = pool.createTempTable(createSQL, oldTableName, oldConstraint);
// 使用 realTableName 操作临时表
pool.releaseTable(realTableName);

7.2 客户端 SQL 执行

客户端需通过 FMIsqlFacade 执行 SQL(服务端提供相应 EJB 服务)。

java 复制代码
FMIsqlFacade fmisqlFacade = FMIsqlFacadeFactory.getRemoteInstance();
// 查询
IRowSet rs = fmisqlFacade.executeQuery(sql, params);
// 增删改
fmisqlFacade.executeSql(sql, params);

八、第三方系统单点登录到 EAS

8.1 修改配置文件

  1. ssoClient.propertiessso.easIsSSOClient=true
  2. autoLoginConfig.properties
    • Datacenter:数据中心代码
    • authPattern=BaseTrdLtpaToken
    • locale:L1-英文,L2-简体,L3-繁体
    • dbType:0-MS SQL,1-DB2,2-Oracle
  3. LtpaToken.properties :设置 token.expiration(分钟)和 domino.secret(密钥,需与第三方系统一致),文件需在 EAS 和第三方系统中各保存一份。

8.2 获取 Ltpa Token

Java 系统

引入 kingdee_Ltpa.jarLtpaToken.properties,调用:

java 复制代码
String token = LtpaTokenManager.generate(username, filePath).toString();
非 Java 系统

可通过调用 Java 程序生成 token,或编写中间件。注意安全:获取用户名和生成 token 应在同一接口内完成,避免传递用户名风险。

8.3 单点登录到 EAS

URL 格式:

复制代码
http://EAS_IP:port/easportal/openapi/login?username=xxx&password=xxx&redirectTo=//
  • username:用户名
  • password:生成的 LtpaToken
  • redirectTo:登录成功后跳转地址,// 表示首页,也可以是其他编码后的 URL。

若需直接打开指定页面(80 以后版本),需在门户管理中设置菜单编码(以 C- 开头),redirectTo 设为 openpage?num=C-ABC

8.4 FAQ

  • 中文用户名:需对用户名进行 URL 编码。
  • 非 Java 系统安全性:不建议直接传递用户名到中转页面,存在安全风险。
  • 退出登录跳转
    • 登录 portal:修改 portal.war/res/js/core/jPortal.core.manager.js 中的退出地址。
    • 登录 easportal:修改 cp_web.war/logout.jsp

九、基类继承体系

9.1 总体架构设计

EAS 应用框架分为五层:

  1. 表现层(UI)
  2. ORM-RPC 协议层(远程调用)
  3. 业务逻辑层(EJB)
  4. 持久对象层(ORMapping)
  5. 数据层(数据库)

9.2 业务对象层继承体系

业务对象类体系
说明
CoreBase 所有业务对象超类,含 ID
├─ ObjectBase 普通业务对象
├─ DataBase 基础资料类
├─ TreeBase 层次数据类(自动维护 level、longNumber)
├─ CoreBillBase 单据头超类
├─ BillBase 财务类单据头
├─ CoreBillEntryBase 单据体超类
├─ BillEntryBase 财务类单据体
核心类职责
  • CoreBase:提供 ID 属性及 addNew、update、submit、save、cancel 等方法。
  • ObjectBase:增加 CU、creator、createTime、lastUpdateUser、lastUpdateTime。
  • DataBase:增加 name、number、description、simpleName,并提供名称/编码查重方法。
  • TreeBase:增加 isLeaf、level、longNumber、displayName,提供父子节点维护方法(需子类定义 parent 关联)。
  • CoreBillBase:增加 number、handleTime、handler、description、hasEffected、auditor 等,提供审核、冻结、结清、生成凭证等方法。
  • BillBase:增加 company(财务组织)。

9.3 服务端对象继承体系

值对象接口/类
  • IPropertyContainer / PropertyContainer:属性容器
  • IObjectValue / AbstractBaseObjectValue:值对象基类
  • CoreBaseInfo:带 ID 的值对象
ORM 对象接口/类
  • IORMModel / ORMObject:ORM-RPC 基类
  • IBOSObject / AbstractBOSObject:BOS 运行引擎接口
  • IBizCtrl / AbstractBizCtrl:EJB 调用接口
  • ICoreBase / CoreBase:业务 ORM 对象父类
EJB 组件对象接口/类
  • SessionBean:无状态会话 Bean
  • AbstractBizControllerBean:会话 Bean 基础实现
  • AbstractEntityControllerBean:ORMapping DAO 封装
  • CoreBaseController / AbstractCoreBaseControllerBean:具体业务 EJB 父类

9.4 客户端 UI 层继承体系

UI 类体系
说明
CoreUI UI 最高超类,继承 KDPanel
├─ ListUI 序时簿类 UI,支持通用过滤
│ ├─ CoreBillListUI 单据序时簿
│ ├─ BillListUI 财务单据序时簿
│ ├─ TreeListUI 层次数据序时簿(树+表格)
│ ├─ ComboTreeListUI 带拥有者的层次数据序时簿
│ ├─ TreeDetailListUI 带分类的层次数据序时簿
│ └─ ComboTreeDetailListUI 带拥有者和分类的层次数据序时簿
├─ EditUI 编辑类 UI
├─ BillEditUI 单据编辑类 UI
常用方法(以 ListUI 为例)
  • getEditUIName():指定关联的编辑 UI 类名。
  • getBizInterface():获取业务接口。
  • getLocateNames():返回可定位的列名。
  • prepareUIContext():向 EditUI 传递参数。
  • getEditUIModal():指定编辑 UI 打开方式(Dialog/Window)。
树形构造
  • ITreeBuilder 接口定义树的构建,LNTreeBuilder 是基于长编码的实现。
  • ILNTreeNodeCtrl 接口用于获取子节点数据,默认实现 DefaultLNTreeNodeCtrl 根据 longNumber 过滤。
编辑类 UI 方法
  • createNewData():新建业务对象并设初值。
  • getBizInterface():获取业务接口。
  • verifyInput():校验输入。
  • loadFields() / storeFields():数据绑定。
  • createNewDetailData():新建单据行(用于 BillEditUI)。
  • afterAddLine() / afterRemoveLine() / afterSelectLine():分录操作后回调。

相关推荐
空空潍1 小时前
Redis点评实战篇-关注推送
java·数据库·redis·缓存
季明洵1 小时前
Java实现循环队列、栈实现队列、队列实现栈
java·数据结构·算法··队列
一 乐2 小时前
英语学习平台系统|基于springboot + vue英语学习平台系统(源码+数据库+文档)
java·vue.js·spring boot·学习·论文·毕设·英语学习平台系统
无心水10 小时前
【任务调度:数据库锁 + 线程池实战】3、 从 SELECT 到 UPDATE:深入理解 SKIP LOCKED 的锁机制与隔离级别
java·分布式·科技·spring·架构
编程小白gogogo10 小时前
苍穹外卖图片不显示解决教程
java·spring boot
舟舟亢亢10 小时前
算法总结——二叉树【hot100】(上)
java·开发语言·算法
百锦再11 小时前
Java中的char、String、StringBuilder与StringBuffer 深度详解
java·开发语言·python·struts·kafka·tomcat·maven
努力努力再努力wz12 小时前
【Linux网络系列】:TCP 的秩序与策略:揭秘传输层如何从不可靠的网络中构建绝对可靠的通信信道
java·linux·开发语言·数据结构·c++·python·算法
yy.y--13 小时前
Java数组逆序读写文件实战
java·开发语言