写在前面
主要内容
本文档主要对泛微 ecodeSDK 的 API 列表和详细信息进行展示,以帮助开发人员更好地了解和使用该 SDK 的功能。由于未能找到完整的 SDK API 列表文档,因此制作此文档以记录供大家及自己使用。
本文档包括以下内容:
- API 列表:提供 SDK 中可用的所有 API 的名称和功能简介。
- API 详细:提供每个 API 的详细信息,包括参数、返回值、使用示例等。
- 使用示例:提供一些使用示例,以便开发人员更好地理解如何使用 SDK 中的 API。
需要注意的是,由于文档可能存在更新和变化,建议在使用前再次查阅官方文档以获取最新的 SDK API 信息。
特别注意
本文档由丸子本人收集整理制作,内容多由丸子自行分析整理,部分来源自网络,难免存在错误和不详细之处,使用时请自行甄别;欢迎评论区反馈,引用请务必注明出处!泛微 ecode 简介
ecode 是内嵌在 E-cology9 系统中,为了解决 E-cology9 所有标准界面无侵入定制和扩展二次开发的开发工具。
泛微官方 ecode 使用说明:
e-cloudstore.com
展开详情
ecode 核心是解决 EC 所有界面无侵入定制和扩展二次开发,采用动态注册,不直接修改源码的方案解决开发需求。除了新开发页面的之外,它还支持所有标准页面的修改。ecode 包含了整套前端编辑器、编译器,可以让用户无需搭建开发环境直接通过浏览器开始 single page 前端开发,同时采用 ecode 开发的内容都是插件化,支持一键共享、复用、二次封装。
ecode 中可能用到的技术栈(Technology Stack):
PC 端:js、css、es6、react16.x、react-router3、mobx
MOBILE 端:js、css、es6、react16.x、react-router4、mobx
关于如何使用 ecode
关于如何使用 ecode,官方已给出详细的使用说明,你可以直接点击上方链接或访问官方说明文档:https://e-cloudstore.com/doc.html 进行学习,丸子不在此进行过多介绍* SDK API 列表
ecodeSDK
1. 数组排序(ecode 运行顺序)
对 item 结构体数组按照 order 属性进行排序,该 API 无需使用
ecodeSDK.ecodeQueueSort(arr)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
arr | item 结构体数组 | 是 | 需要排序的数组 |
样例
let arr = [
{ order: 3, name: "C" },
{ order: 1, name: "A" },
{ order: 4, name: "D" },
{ order: 2, name: "B" }
];
ecodeSDK.ecodeQueueSort(arr);
2. PC 端组件参数复写
对 EC 全系统 PC 端组件参数进行复写,包含 组件站 PC 组件库 ecCom、antd 大部分组件 ,其中 Radio、Radio.Button、Tree.TreeNode、Menu.ItemGruop、Select.Option、Select.OptGroup、SelectNew.Option、SelectNew.OptGroup 暂不支持复写
ecodeSDK.overwritePropsFnQueueMapSet(name,option)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
name | String | 是 | 组件库 ecCom、antd 组件名称 |
option | Object | 是 | 复写配置 |
option.fn | Function | 是 | 复写钩子函数 (newProps)=>{} |
option.order | Integer | 否 | 复写排序 |
option.desc | String | 否 | 复写说明 |
样例
ecodeSDK.overwritePropsFnQueueMapSet('WeaTop',{ //组件名
fn:(newProps)=>{ //newProps 代表组件参数
//建议添加进行位置判断操作
console.log('WeaTop:',newProps); //在这里输出日志,如果成功输出代表组件成功定位
},
order:1, //排序字段,如果存在同一个页面复写了同一个组件,控制顺序时使用
desc:'在这里写此复写的作用,在调试的时候方便查找'
});
3. PC 端组件重写
对 EC 全系统 PC 端组件参数进行重写,重新定义的组件只要遵循原组件的交互要求,即可进行自由定义
ecodeSDK.overwriteClassFnQueueMapSet(name,option)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
name | String | 是 | 组件库 ecCom 、antd 组件名称 |
option | Object | 是 | 重写配置 |
option.fn | Function | 是 | 重写钩子函数 (Com,newProps)=>{} |
option.order | Integer | 否 | 重写排序 |
option.desc | String | 否 | 重写说明 |
样例
ecodeSDK.overwriteClassFnQueueMapSet('Table',{
fn:(Com,newProps)=>{
//Com是当前复写的原组件
//newProps是当前复写的原组件参数
return {
com:Com,
props:newProps
};
},
order:1,
desc:'浏览按钮复写'
});
4. MOBILE 端组件参数复写:
对 EC 全系统 Mobile 端组件参数进行复写,包含 组件站 移动组件库 WeaverMobile、WeaMobilePage 大部分组件
ecodeSDK.overwriteMobilePropsFnQueueMapSet(name,option)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
name | String | 是 | 组件库 WeaverMobile 、WeaMobilePage 组件名称 |
option | Object | 是 | 复写配置 |
option.fn | Function | 是 | 复写钩子函数 (newProps)=>{} |
option.order | Integer | 否 | 复写排序 |
option.desc | String | 否 | 复写说明 |
样例
ecodeSDK.overwriteMobilePropsFnQueueMapSet('TabPage',{ //组件名
fn:(newProps)=>{ //newProps代表组件参数
//建议添加进行位置判断操作
console.log('TabPage:',newProps); //在这里输出日志,如果成功输出代表组件成功定位
},
order:1, //排序字段,如果存在同一个页面复写了同一个组件,控制顺序时使用
desc:'在这里写此复写的作用,在调试的时候方便查找'
});
5. MOBILE 端组件重写
对 EC 全系统 Mobile 端组件参数进行重写,重新定义的组件只要遵循原组件的交互要求,即可进行自由定义
ecodeSDK.overwriteMobileClassFnQueueMapSet(name,option)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
name | String | 是 | 组件库 WeaverMobile 、WeaMobilePage 组件名称 |
option | Object | 是 | 重写配置 |
option.fn | Function | 是 | 重写钩子函数 (Com,newProps)=>{} |
option.order | Integer | 否 | 重写排序 |
option.desc | String | 否 | 重写说明 |
样例
ecodeSDK.overwriteMobileClassFnQueueMapSet('WeaBrowser',{
fn:(Com,newProps)=>{
//Com是当前复写的原组件
//newProps是当前复写的原组件参数
return {
com:Com,
props:newProps
};
}
},
order:1,
desc:'浏览按钮复写'
})
6. 检查 url 是否匹配
用于检查当前页面的 URL 是否与给定的 URL 匹配
ecodeSDK.checkLPath(url)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
url | String | 是 | 需要检查的url |
样例
function checkURL() {
var url = '/wui/index.html#/main/workflow/listDoing';
var result = ecodeSDK.checkLPath(url);
if (result) {
console.log('URL路径有效');
} else {
console.log('URL路径无效');
}
}
checkURL();
7. 在 props 对象中查找指定的键值
在复杂的属性对象中查找指定键的值。它通过递归地遍历属性对象的子对象和子数组来查找,并返回找到的第一个非空值。如果没有找到非空值,则返回空字符串。
ecodeSDK.findPropData(props, key)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
props | Object | 是 | 要查找的属性对象 |
key | String | 是 | 要查找的键 |
样例
var props = {
children: [
{
props: {
key1: 'value1',
key2: 'value2'
}
},
{
props: {
key3: 'value3',
key4: 'value4'
}
}
]
};
var key = 'key3';
var result = ecodeSDK.findPropData(props, key);
console.log(result); // 输出:value3
8. 复写 API 响应数据
用于修改 API 的响应数据。这种功能通常在开发过程中使用,允许开发人员对从 API 接收到的数据进行定制化的处理。在这个函数中,可以根据特定的条件来拦截接口响应数据,并响应修改后的数据。注意:本接口会监听PC端、手机端接口都会触发。
ecodeSDK.rewriteApiDataQueueSet(fn)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
fn | Function | 是 | 用于修改 API 响应数据的函数 (url, params, data)=>{} |
(url) | String | - | API 的 URL(接口路径) |
(params) | Object | - | API 的参数 |
(data) | Object | - | API 的响应数据 |
样例
ecodeSDK.rewriteApiDataQueueSet({
fn: function fn(url, params, data) {
// 添加判断,如果当前页面路径不是'/spa/hrm/engine.html#/hrmengine/authAdjust',则不执行复写逻辑
if (!ecodeSDK.checkLPath('/spa/hrm/engine.html#/hrmengine/authAdjust')) return;
console.log("路径识别正确!");
if (url.indexOf("/api/public/browser/condition/1") === -1) return;
console.log("API识别正确!");
console.log("url", url);
console.log("params", params);
console.log("data", data);
// 开始复写,这里是复写的内容
//return data;(丸子一般不习惯return,注释掉就好)
},
});
9. 复写 PC 端 API 请求参数
修改接口请求的参数。具体来说,这个函数会接收一个函数作为参数,这个函数会被调用来处理接口请求的参数。在这个函数中,可以根据特定的条件来修改请求参数,并返回修改后的参数。
ecodeSDK.rewriteApiParamsQueueSet(fn)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
fn | Function | 是 | 用于修改 API 请求参数的函数 (url, method, params)=>{} |
(url) | String | - | API 的 URL(接口路径) |
(method) | Object | - | API 的请求类型 |
(params) | Object | - | API 的请求参数 |
样例
ecodeSDK.rewriteApiParamsQueueSet({
fn: (url, method, params) => {
// 不是需要拦截的接口返回默认的参数
return {
url: url, // 接口路径
method: method, // 请求类型
params: params // 请求参数
}
}
});
10. 复写 MOBILE 端 API 请求参数
修改接口请求的参数。具体来说,这个函数会接收一个函数作为参数,这个函数会被调用来处理接口请求的参数。在这个函数中,可以根据特定的条件来修改请求参数,并返回修改后的参数。
ecodeSDK.rewriteMobileApiParamsQueueSet(fn)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
fn | Function | 是 | 用于修改 API 请求参数的函数 (url, method, params)=>{} |
(url) | String | - | API 的 URL(接口路径) |
(method) | Object | - | API 的请求类型 |
(params) | Object | - | API 的请求参数 |
样例
ecodeSDK.rewriteMobileApiParamsQueueSet({
fn: (url, method, params) => {
// 不是需要拦截的接口返回默认的参数
return {
url: url, // 接口路径
method: method, // 请求类型
params: params // 请求参数
}
}
});
11. 获取本地存储中的 JSON 数据
用于从window.localStorage
中获取存储的 JSON 数据并将其解析为 JavaScript 对象,函数返回获取到的属性值,如果指定的键名不存在或数据无法解析为 JSON 格式,函数会返回一个空对象{}
。
ecodeSDK.getJSONObj(key)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
key | String | 是 | 要获取的本地存储数据的键名 |
样例
// 存储在本地的数据
window.localStorage['userData'] = '{"name": "Alice", "age": 25, "email": "alice@example.com"}';
// 使用示例
var userData = ecodeSDK.getJSONObj('userData');
console.log(userData.name); // 输出:Alice
console.log(userData.age); // 输出:25
console.log(userData.email); // 输出:alice@example.com
12. 逐级获取本地存储中嵌套的 JSON 数据
用于逐级获取本地存储数据中嵌套的 JSON 对象的属性值,函数返回获取到的属性值,如果遍历过程中出现了错误(比如某个键名不存在或获取数据失败),则函数会返回空字符串 ''
。
ecodeSDK.getEcodeParams(keys)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
keys | Array | 是 | 由字符串组成的数组,表示逐级获取本地存储数据中的属性路径。 |
样例
// 存储在本地的数据
window.localStorage['userData'] = '{"name": "Alice", "age": 25, "address": {"city": "New York", "country": "USA"}}';
// 使用示例
var name = ecodeSDK.getEcodeParams(['userData', 'name']);
console.log(name); // 输出:Alice
var city = ecodeSDK.getEcodeParams(['userData', 'address', 'city']);
console.log(city); // 输出:New York
13. 动态加载资源文件
为动态加载 JavaScript 和 CSS 资源提供了方便的接口,使得页面在需要时可以按需加载所需的资源文件,该函数还提供了一些静态方法,例如t.ready
、t.done
、t.reset
和t.isDefined
,用于处理资源的加载完成状态、重置状态和检查资源是否已定义等;loadjs 加载第三方资源,注意加载次数,避免多次请求重复资源
ecodeSDK.loadjs(resourceUrl, { callbacks, options })
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
resourceUrl | String | 是 | 要加载的资源的 URL,可以是 JavaScript 或 CSS 文件的 URL。 |
callbacks | Object | 否 | 包含回调函数的对象,用于在资源加载成功或失败后执行相应的操作。可以包含 success 和 error 回调函数。 |
callbacks.success | Function | 否 | 资源加载成功后调用的回调函数。 |
callbacks.error | Function | 否 | 资源加载失败后调用的回调函数。 |
options | Object | 否 | 包含加载资源的选项的对象。可以指定以下选项:async 、numRetries 、before 和returnPromise 。 |
options.async | Boolean | 否 | 表示是否异步加载资源,默认为 true 。 |
options.numRetries | Number | 否 | 表示加载重试次数,默认为 0 。 |
options.before | Function | 否 | 在加载资源之前执行的回调函数,默认为空函数。 |
options.returnPromise | Boolean | 否 | 如果为 true ,则返回一个 Promise 对象,否则返回 undefined 。 |
retryCount | Number | 否 | 内部使用的加载重试计数,默认为 0 。 |
successCb | Function | 否 | 资源加载成功后调用的回调函数。 |
errorCb | Function | 否 | 资源加载失败后调用的回调函数。 |
样例
//异步加载 JavaScript 文件
ecodeSDK.loadjs('https://example.com/js/script.js', {
async: true,
numRetries: 2,
before: function () {
console.log('Before loading the script...');
},
success: function () {
console.log('Script loaded successfully!');
},
error: function () {
console.error('Failed to load the script!');
}
});
//同步加载 JavaScript 文件并使用 Promise
ecodeSDK.loadjs('https://example.com/js/script.js', {
async: false,
returnPromise: true
})
.then(function () {
console.log('Script loaded successfully!');
})
.catch(function () {
console.error('Failed to load the script!');
});
//加载 CSS 文件:
ecodeSDK.loadjs('https://example.com/css/styles.css', {
async: true,
numRetries: 1,
before: function () {
console.log('Before loading the CSS...');
},
success: function () {
console.log('CSS loaded successfully!');
},
error: function () {
console.error('Failed to load the CSS!');
}
});
//loadjs 加载第三方资源,注意加载次数,避免多次请求重复资源
ecodeSDK.loadjs.isDefined('name') // 判断资源是否加载到
window.weaJs
1. 提取当前窗口的 URL 中查询参数
从当前窗口的 URL 中提取查询参数,并将这些查询参数作为一个对象返回。
window.weaJs.getFrameParams()
参数说明
无
样例
// 调用 getFrameParams 方法获取当前页面的查询参数
var params = window.weaJs.getFrameParams();
// 输出获取的查询参数对象
console.log(params);
2. 构建 options 对象调用 API
用于调用 API,根据传入的选项执行相应的操作;请注意,实际使用时,您需要根据具体的 API 接口和请求方法,调整选项中的 URL、method、params 等参数,以及根据需要处理返回的 API 响应。
window.weaJs.callApi(options)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
options | Object | 是 | 包含调用 API 的选项的对象,可以指定以下参数。 |
options.url | String | 是 | 要调用的 API 的 URL。 |
options.method | String | 否 | 请求方法,默认为 'GET'。 |
options.params | Object | 否 | 请求参数,作为 GET 或 POST 请求的参数。 |
options.type | String | 否 | 指定返回数据的类型,默认为 'json'。 |
options.deep | Boolean | 否 | 是否深度请求,针对复杂请求类型。 |
options.checkCode | Boolean | 否 | 是否检查响应状态码,如果为 true,则会检查返回的状态码,否则不检查。 |
样例
var options = {
url: 'https://api.example.com/data',
method: 'POST',
params: { key: 'value' },
type: 'json',
deep: true,
checkCode: false
};
var ApiResponse = window.weaJs.callApi(options);
console.log(ApiResponse);
3. 显示弹窗提示
用于在页面上显示弹窗提示。该方法在移动端和 PC 端使用方式略有不同,会根据环境调用相应的弹窗组件或原生弹窗。
window.weaJs.alert(content)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
content | String | 是 | 弹窗的提示信息内容。 |
样例
// 显示弹窗提示
var content = "这是一个提示信息。";
window.weaJs.alert(content);
4. 显示对话框或浮层
用于显示对话框或浮层。根据页面运行环境,在 PC 端将创建对话框并显示指定 URL 的页面,而在移动端(0601 之后的版本)将创建一个浮层显示指定 URL 的页面。请注意,对话框和浮层的显示效果可能因具体页面环境和样式设置而有所不同。在移动端,创建的浮层可以通过 frameView.destory()
方法来关闭。
window.weaJs.showDialog(url, params)
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
url | String | 是 | 要显示的页面的 URL。 |
params | Object | 否 | 作为 GET 请求的参数,传递给要显示的页面。 |
- params 参数说明 (移动端默认为路由全屏,不支持设置特殊参数)
属性 | 说明 | 类型 |
---|---|---|
params.title | 标题 | String |
params.moduleName | 模块名 | String |
params.style | 弹框样式,一般用来设置宽高 | Object |
params.callback | 确认回调 | Function |
params.onCancel | 取消回调 | Function |
样例
// 在 PC 端显示对话框
var url = 'https://example.com/dialog.html';
var params ={
title: '标题',
moduleName: 'workflow',
style: { width: 800, height: 600 },
callback: function() {},
onCancel: function() {},
};
var dialog = window.weaJs.showDialog(url, params);
// PC端关闭对话框
dialog.destory();
// 移动端关闭浮层
frameView.destory();
5. 创建自定义组件-Con
是一个构造函数,用于创建自定义组件。在这个方法中,定义了一个名为WeaCon
的类(同样继承自React.Component
),用于创建自定义组件。
window.weaJs.Con()
参数说明
无
样例
// 使用 window.weaJs.Con 方法创建自定义组件
var MyCustomComponent = new window.weaJs.Con();
// 定义组件的 render 方法
MyCustomComponent.prototype.render = function() {
return (
<div>
<h1>Hello, This is another Custom Component!</h1>
<p>It can also be used to render custom content.</p>
</div>
);
};
// 渲染自定义组件
ReactDOM.render(<MyCustomComponent />, document.getElementById('root'));
提示
- 使用
window.weaJs.Con
方法创建的自定义组件是一个类,继承自React.Component
。 - 组件创建的方式更接近传统的 ES6 类的写法,通过
class
关键字和extends
关键字来定义组件。 - 适用于在 PC 端开发时,使用 React 库创建自定义组件。
6. 创建自定义组件-Custom
是一个构造函数,用于创建自定义组件。在这个方法中,定义了一个名为WeaCustom
的类(继承自React.Component
),可以通过prototype.render
方法定义组件的显示内容。
window.weaJs.Custom()
参数说明
无
样例
// 使用 window.weaJs.Custom 方法创建自定义组件
var MyCustomComponent = new window.weaJs.Custom();
// 定义组件的 render 方法
MyCustomComponent.prototype.render = function() {
return (
<div>
<h1>Hello, This is a Custom Component!</h1>
<p>It can be used to render custom content.</p>
</div>
);
};
// 渲染自定义组件
ReactDOM.render(<MyCustomComponent />, document.getElementById('root'));
提示
- 使用
window.weaJs.Custom
方法创建的自定义组件也是一个类,同样继承自React.Component
。 - 组件创建的方式更接近传统的 JavaScript 构造函数的写法,通过原型链和构造函数来定义组件。
- 适用于在移动端开发时,使用 React 库创建自定义组件。
[泛微EC9] 之ecodeSDK API文档 by https://oneszhang.com/archives/ecodeSDK.html
待补充:ecodeSDK.rewriteMobileRouteQueue
待补充:ecodeSDK.checkMobilePath
待补充:ecodeSDK.getAsyncCom
待补充:ecodeSDK.setCom
[...]A.引言还记得去年某天我在讨论群里问清空字段映射的操作,今晚实现啦因为那天,我还正面对着屏幕上的几百个字段映射在发愁。做这个功能主要是为了练手,好久没写ecode了;如果你正巧需要,这能减轻你的运维工作量,那便更有意义了!如果你还在学习路上,配合泛微 EC9 之 ecodeSDK API 文档食用更佳~B.功能演示 Your browser does not support the vide[...]
ecodeSDK.exp ecodeSDK.imp ecodeSDK.getCom
上传附件“/api/doc/upload/uploadFile2Doc” 好像不支持接口拦截,rewriteApiDataQueueSet
确实如此,因为他没有走可复写的标准的api路径,不支持拦截与
感谢,正在考虑从onchange事件入手处理
up你好,rewriteApiParamsQueueSet()有使用过吗?
fn: (url, method, params) => { if (!url.includes("/api/public/browser/data/57")) return //if (params.fieldid !== "42796") return // if (params.fieldid !== main.f_supFccId2.getInfo().fieldId) return console.log("params.id: ", params.id) if (params.id !== target) { params.id = target params.isVirtual = undefined params.level = 1 params.type = "1" delete params.current delete params.pageSize delete params.max delete params.min } console.log("params: ", params) return { url: url, method: method, params: params } }我在params加了参数id=23, 但是发现网络请求没有任何变化.
const target = "23"
ecodeSDK.rewriteApiParamsQueueSet({
})
看起来,没什么问题,
1.可以观察下 console.log("params: ", params)打印是否正常,
2.直接删掉return试一下
3.可能要远程看下
console.log ("params:", params)试过能看出来有变化的, return也试过去掉, 还是不行,up可以在你的环境帮手测试一下吗?
遇到相同的问题,想问你解决了吗
创建组件的这两个接口,不知道如何使用state管理状态
比如: "WeaIntro 页面引导"这个组件
export default class Deom extends React.Component {
super(props); this.state = { value: "" };constructor(props) {
}
const { value } = this.state; return (render() {
......
<Step id="sa"> <WeaTextarea onChange={v => this.setState({ value: v })} /> </Step>......
你说的貌似是 ecode里面创建class组件吧,new window.weaJs.Con()和new window.weaJs.Custom()好像都不能创建state的状态。
对了,我有个想法,能不能ecode里面创建的自定义的组件,然后前端想直接插入的时候,用imp导入,直接ReactDOM.render(, document.getElementById('root'));插入某个dom呢
这个想法似乎是可行的,但是我现在不太清楚如何做,我学习的还不够深度
真好呢