MENU

[泛微EC9] 之ecodeSDK API文档

• 2023 年 07 月 25 日 • 阅读: 3236 • 泛微OA

写在前面

主要内容

本文档主要对泛微 ecodeSDK 的 API 列表和详细信息进行展示,以帮助开发人员更好地了解和使用该 SDK 的功能。由于未能找到完整的 SDK API 列表文档,因此制作此文档以记录供大家及自己使用。

本文档包括以下内容:

  1. API 列表:提供 SDK 中可用的所有 API 的名称和功能简介。
  2. API 详细:提供每个 API 的详细信息,包括参数、返回值、使用示例等。
  3. 使用示例:提供一些使用示例,以便开发人员更好地理解如何使用 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)

参数说明

参数参数类型必须说明
arritem 结构体数组需要排序的数组

样例

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)

参数说明

参数参数类型必须说明
nameString组件库 ecCom、antd 组件名称
optionObject复写配置
option.fnFunction复写钩子函数 (newProps)=>{}
option.orderInteger复写排序
option.descString复写说明

样例

ecodeSDK.overwritePropsFnQueueMapSet('WeaTop',{ //组件名
fn:(newProps)=>{ //newProps 代表组件参数
//建议添加进行位置判断操作
console.log('WeaTop:',newProps); //在这里输出日志,如果成功输出代表组件成功定位
},
order:1, //排序字段,如果存在同一个页面复写了同一个组件,控制顺序时使用
desc:'在这里写此复写的作用,在调试的时候方便查找'
});

3. PC 端组件重写

对 EC 全系统 PC 端组件参数进行重写,重新定义的组件只要遵循原组件的交互要求,即可进行自由定义

ecodeSDK.overwriteClassFnQueueMapSet(name,option)

参数说明

参数参数类型必须说明
nameString组件库 ecComantd 组件名称
optionObject重写配置
option.fnFunction重写钩子函数 (Com,newProps)=>{}
option.orderInteger重写排序
option.descString重写说明

样例

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)

参数说明

参数参数类型必须说明
nameString组件库 WeaverMobileWeaMobilePage 组件名称
optionObject复写配置
option.fnFunction复写钩子函数 (newProps)=>{}
option.orderInteger复写排序
option.descString复写说明

样例

ecodeSDK.overwriteMobilePropsFnQueueMapSet('TabPage',{ //组件名
    fn:(newProps)=>{ //newProps代表组件参数
        //建议添加进行位置判断操作
        console.log('TabPage:',newProps); //在这里输出日志,如果成功输出代表组件成功定位
    },
    order:1, //排序字段,如果存在同一个页面复写了同一个组件,控制顺序时使用
    desc:'在这里写此复写的作用,在调试的时候方便查找'
});

5. MOBILE 端组件重写

对 EC 全系统 Mobile 端组件参数进行重写,重新定义的组件只要遵循原组件的交互要求,即可进行自由定义

ecodeSDK.overwriteMobileClassFnQueueMapSet(name,option)

参数说明

参数参数类型必须说明
nameString组件库 WeaverMobileWeaMobilePage 组件名称
optionObject重写配置
option.fnFunction重写钩子函数 (Com,newProps)=>{}
option.orderInteger重写排序
option.descString重写说明

样例

ecodeSDK.overwriteMobileClassFnQueueMapSet('WeaBrowser',{
    fn:(Com,newProps)=>{
    //Com是当前复写的原组件
    //newProps是当前复写的原组件参数
    return {
          com:Com,
          props:newProps
        };
    }
},
    order:1,
    desc:'浏览按钮复写'
})

6. 检查 url 是否匹配

用于检查当前页面的 URL 是否与给定的 URL 匹配

ecodeSDK.checkLPath(url)

参数说明

参数参数类型必须说明
urlString需要检查的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)

参数说明

参数参数类型必须说明
propsObject要查找的属性对象
keyString要查找的键

样例

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)

参数说明

参数参数类型必须说明
fnFunction用于修改 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)

参数说明

参数参数类型必须说明
fnFunction用于修改 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)

参数说明

参数参数类型必须说明
fnFunction用于修改 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)

参数说明

参数参数类型必须说明
keyString要获取的本地存储数据的键名

样例

// 存储在本地的数据
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)

参数说明

参数参数类型必须说明
keysArray由字符串组成的数组,表示逐级获取本地存储数据中的属性路径。

样例

// 存储在本地的数据
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.readyt.donet.resett.isDefined,用于处理资源的加载完成状态、重置状态和检查资源是否已定义等;loadjs 加载第三方资源,注意加载次数,避免多次请求重复资源

ecodeSDK.loadjs(resourceUrl, { callbacks, options })

参数说明

参数参数类型必须说明
resourceUrlString要加载的资源的 URL,可以是 JavaScript 或 CSS 文件的 URL。
callbacksObject包含回调函数的对象,用于在资源加载成功或失败后执行相应的操作。可以包含 successerror 回调函数。
callbacks.successFunction资源加载成功后调用的回调函数。
callbacks.errorFunction资源加载失败后调用的回调函数。
optionsObject包含加载资源的选项的对象。可以指定以下选项:asyncnumRetriesbeforereturnPromise
options.asyncBoolean表示是否异步加载资源,默认为 true
options.numRetriesNumber表示加载重试次数,默认为 0
options.beforeFunction在加载资源之前执行的回调函数,默认为空函数。
options.returnPromiseBoolean如果为 true,则返回一个 Promise 对象,否则返回 undefined
retryCountNumber内部使用的加载重试计数,默认为 0
successCbFunction资源加载成功后调用的回调函数。
errorCbFunction资源加载失败后调用的回调函数。

样例

//异步加载 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)

参数说明

参数参数类型必须说明
optionsObject包含调用 API 的选项的对象,可以指定以下参数。
options.urlString要调用的 API 的 URL。
options.methodString请求方法,默认为 'GET'。
options.paramsObject请求参数,作为 GET 或 POST 请求的参数。
options.typeString指定返回数据的类型,默认为 'json'。
options.deepBoolean是否深度请求,针对复杂请求类型。
options.checkCodeBoolean是否检查响应状态码,如果为 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)

参数说明

参数参数类型必须说明
contentString弹窗的提示信息内容。

样例

// 显示弹窗提示
var content = "这是一个提示信息。";
window.weaJs.alert(content);

4. 显示对话框或浮层

用于显示对话框或浮层。根据页面运行环境,在 PC 端将创建对话框并显示指定 URL 的页面,而在移动端(0601 之后的版本)将创建一个浮层显示指定 URL 的页面。请注意,对话框和浮层的显示效果可能因具体页面环境和样式设置而有所不同。在移动端,创建的浮层可以通过 frameView.destory() 方法来关闭。

window.weaJs.showDialog(url, params)

参数说明

参数参数类型必须说明
urlString要显示的页面的 URL。
paramsObject作为 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 库创建自定义组件。

最后编辑于: 2024 年 07 月 02 日
返回文章列表 打赏
本页链接的二维码
打赏二维码
添加新评论

已有 19 条评论
  1. 待补充:ecodeSDK.rewriteMobileRouteQueue

  2. 待补充:ecodeSDK.checkMobilePath

  3. 待补充:ecodeSDK.getAsyncCom

  4. 待补充:ecodeSDK.setCom

  5. [...]A.引言还记得去年某天我在讨论群里问清空字段映射的操作,今晚实现啦因为那天,我还正面对着屏幕上的几百个字段映射在发愁。做这个功能主要是为了练手,好久没写ecode了;如果你正巧需要,这能减轻你的运维工作量,那便更有意义了!如果你还在学习路上,配合泛微 EC9 之 ecodeSDK API 文档食用更佳~B.功能演示 Your browser does not support the vide[...]

  6. 11 11

    ecodeSDK.exp ecodeSDK.imp ecodeSDK.getCom

  7. xiaowu xiaowu

    上传附件“/api/doc/upload/uploadFile2Doc” 好像不支持接口拦截,rewriteApiDataQueueSet

    1. @xiaowu确实如此,因为他没有走可复写的标准的api路径,不支持拦截与

    2. 小武 小武

      @丸子感谢,正在考虑从onchange事件入手处理

  8. 伟哥 伟哥

    up你好,rewriteApiParamsQueueSet()有使用过吗?
    我在params加了参数id=23, 但是发现网络请求没有任何变化.
    const target = "23"
    ecodeSDK.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 } }

    })

    1. @伟哥看起来,没什么问题,

      1.可以观察下 console.log("params: ", params)打印是否正常,
      2.直接删掉return试一下
      3.可能要远程看下

    2. 伟哥 伟哥

      @丸子console.log ("params:", params)试过能看出来有变化的, return也试过去掉, 还是不行,
      up可以在你的环境帮手测试一下吗?

    3. 崔

      @伟哥遇到相同的问题,想问你解决了吗

  9. wintsa wintsa

    创建组件的这两个接口,不知道如何使用state管理状态

    1. @wintsa比如: "WeaIntro 页面引导"这个组件

      export default class Deom extends React.Component {
      constructor(props) {

      super(props); this.state = { value: "" };

      }
      render() {

      const { value } = this.state; return (

      ......

      <Step id="sa"> <WeaTextarea onChange={v => this.setState({ value: v })} /> </Step>

      ......

    2. wintsa wintsa

      @丸子你说的貌似是 ecode里面创建class组件吧,new window.weaJs.Con()和new window.weaJs.Custom()好像都不能创建state的状态。

    3. wintsa wintsa

      @丸子对了,我有个想法,能不能ecode里面创建的自定义的组件,然后前端想直接插入的时候,用imp导入,直接ReactDOM.render(, document.getElementById('root'));插入某个dom呢

    4. @wintsa这个想法似乎是可行的,但是我现在不太清楚如何做,我学习的还不够深度

  10. 真好呢