# 前端开发API说明

## 概述

* O2OA 是一个高度可定制化的企业级办公平台，您可以通过脚本语言扩展平台功能。
* O2OA 脚本基于Javascript语法，您可以通过脚本访问和操作允许的DOM对象；也可以通过平台定义的API操作业务数据、组织、视图等各种对象。脚本可以在后端（服务器端）和前端（浏览器端）执行。定义在流程中的脚本在后端执行；定义在表单等其他地方的脚本在前端执行。
* 后端脚本基于JDK8标准的Nashorn，遵循ECMAScript 5.1规范。前端脚本基于您使用的浏览器的Javascript引擎。

## API总览

| 对象          |                   |                         |
| ----------- | ----------------- | ----------------------- |
| 业务数据(data)  | 流程实例(workContext) | 内容管理实例(documentContext) |
| 组织(org)     | 流程表单(form)        | 页面(page)                |
| 视图(view)    | 数据字典(Dict)        | Action(Action)          |
| 引用(include) | 方法定义(define)      | session(session)        |

{% content-ref url="qian-duan-kai-fa-api/ye-wu-shu-ju-object-data" %}
[ye-wu-shu-ju-object-data](https://o2oa.gitbook.io/course/liu-cheng-guan-li/qian-duan-kai-fa-api/ye-wu-shu-ju-object-data)
{% endcontent-ref %}

{% content-ref url="qian-duan-kai-fa-api/liu-cheng-shi-li-object-workcontext" %}
[liu-cheng-shi-li-object-workcontext](https://o2oa.gitbook.io/course/liu-cheng-guan-li/qian-duan-kai-fa-api/liu-cheng-shi-li-object-workcontext)
{% endcontent-ref %}

{% content-ref url="qian-duan-kai-fa-api/nei-rong-guan-li-shi-li-object-documentcontext" %}
[nei-rong-guan-li-shi-li-object-documentcontext](https://o2oa.gitbook.io/course/liu-cheng-guan-li/qian-duan-kai-fa-api/nei-rong-guan-li-shi-li-object-documentcontext)
{% endcontent-ref %}

{% content-ref url="qian-duan-kai-fa-api/zu-zhi-guan-li-object-org" %}
[zu-zhi-guan-li-object-org](https://o2oa.gitbook.io/course/liu-cheng-guan-li/qian-duan-kai-fa-api/zu-zhi-guan-li-object-org)
{% endcontent-ref %}

| 服务                                    |            |
| ------------------------------------- | ---------- |
| x\_processplatform\_assemble\_surface | 流程平台相关服务   |
| x\_portal\_assemble\_surface          | 门户平台相关服务   |
| x\_cms\_assemble\_control             | 内容管理平台相关服务 |
| x\_query\_assemble\_surface           | 数据平台相关服务   |
| x\_organization\_assemble\_express    | 组织架构相关服务   |
| x\_file\_assemble\_control            | 云文件相关服务    |
| x\_meeting\_assemble\_control         | 会议管理相关服务   |
| x\_bbs\_assemble\_control             | 论坛相关服务     |
| x\_calendar\_assemble\_control        | 日程管理相关服务   |
| x\_hotpic\_assemble\_control          | 热点信息相关服务   |
| x\_mind\_assemble\_control            | 脑图模块相关服务   |
| x\_organization\_assemble\_personal   | 个人设置相关服务   |
| x\_attendance\_assemble\_control.json | 考勤模块相关服务   |

## 嵌入脚本

　　• O2OA 可在多个位置嵌入脚本代码，用于扩展平台和实现自定义功能。嵌入脚本代码分为前端执行代码和服务端执行代码，两者语法一致，在某些方法和对象的调用上略微有所区别，在后续文档中会一一说明。　　可嵌入脚本位置和说明如下表：

| **表单 页面**                                                                                                                                                    |                                                                                                                                      |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/f2b671f8-6363-4042-a6d8-083e53a514d3/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 表单和页面元素事件 </p><p>说明： 流程平台和内容平台的表单和门户平台的页面中，每个设计元素包含多种事件，包括DOM对象原生事件和O2平台扩展事件。 </p><p>执行： 前端执行，基于浏览器</p>                       |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/7cd69211-9c0a-4714-871f-054a39f454b1/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 表单和页面可编辑元素默认值 </p><p>说明： 流程平台和内容平台的表单和门户平台的页面中，可编辑元素或文本元素的默认值可以通过脚本指定。</p><p>执行： 前端执行，基于浏览器</p>                               |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/d354fd74-488a-47b7-ae80-ee3ee4edfb6b/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 表单和页面元素的部分属性 </p><p>说明： 流程平台和内容平台的表单和门户平台的页面中，有许多元素的相关属性可以通过脚本来定义。如：下拉框、单选多选按钮的可选值、人员字段的选择范围、区段依据等。 </p><p>执行： 前端执行，基于浏览器</p> |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/b5098409-32e3-45dc-a27d-a9c54863f2e6/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 表单可编辑元素校验 </p><p>说明： 流程平台的表单中，可编辑的字段可以通过脚本进行有效性校验，校验通过返回true，不通过返回提示信息。 </p><p>执行： 前端执行，基于浏览器</p>                             |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/b866b3c0-77ac-4621-b80d-16afa6f0aeff/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 表单可编辑元素区段依据 </p><p>说明： 流程平台的表单中，可编辑的字段可使用区段数据，区段数据依据可通过表单指定 </p><p>执行： 前端执行，基于浏览器</p>                                         |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/6233038b-daf1-4aba-8bc3-270a70c49a51/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 脚本 </p><p>说明： 流程平台、门户平台和内容管理平台中，都有脚本设计元素，可以在此创建自己的脚本库。 </p><p>执行： 由调用脚本位置决定运行环境</p>                                           |
| **流程**                                                                                                                                                       |                                                                                                                                      |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/c39bcaa2-ca71-496c-ad68-c49c5419bf49/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 流程活动事件 </p><p>说明： 流程平台每个活动都有相关事件可以编写脚本，如：工作到达前后、待办执行前后等。 </p><p>执行： 服务器端执行，基于ECMAScript 5.1规范</p>                             |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/01a7ef35-3591-4e62-a8a9-58ceed171590/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 流程事件 </p><p>说明： 流程平台每个流程都有四个事件可以编写脚本：流程启动前后和流程结束前后。 </p><p>执行： 服务器端执行，基于ECMAScript 5.1规范</p>                                  |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/bb4bfeef-b40e-4272-9f9e-4b71ab409ba8/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 脚本活动 </p><p>说明： 流程平台的脚本活动，用于自动执行脚本 </p><p>执行： 服务器端执行，基于ECMAScript 5.1规范</p>                                                   |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/5d640f7b-8c9f-415d-9998-248ca337b51d/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 服务调用活动 </p><p>说明： 流程平台的服务调用活动，可以配置WebService和Restful服务，可通过脚本定义参数、消息体和响应。 </p><p>执行： 服务器端执行，基于ECMAScript 5.1规范</p>             |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/5e1c2984-7889-4552-a8eb-470052a02f68/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 选择并行节点路由条件 </p><p>说明： 流程平台的选择活动和并行活动的路由可以编写一个返回true或false的脚本，来决定路由走向。 </p><p>执行： 服务器端执行，基于ECMAScript 5.1规范</p>                |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/1019822b-0354-4349-9743-8ab5ea14138b/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 流程和活动的相关人员 </p><p>说明： 流程平台中，流程和活动的相关人员可以通过脚本指定，如：处理人、阅读人、管理者等 </p><p>执行： 服务器端执行，基于ECMAScript 5.1规范</p>                        |
| **视图**                                                                                                                                                       |                                                                                                                                      |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/5950a164-c5cf-4631-8208-019ff7a42cc5/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 视图列显示 </p><p>说明： 数据平台中，视图列的显示值可通过脚本指定，仅用于前端展现，不能作用于统计。 </p><p>执行： 服务器端执行，基于ECMAScript 5.1规范</p>                               |
| **服务管理**                                                                                                                                                     |                                                                                                                                      |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/6ca08722-76e9-4196-bd50-5ab2dac7767c/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 代理配置 </p><p>说明： 服务管理中可设置定时运行任务，称之为代理。通过脚本实现功能。 </p><p>执行： 服务器端执行，基于ECMAScript 5.1规范</p>                                       |
| ![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/f4ca5b6c-a815-4dda-8990-9335da963215/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content) | <p>名称： 接口配置 </p><p>说明： 服务管理中可设置Restful的web服务，称之为接口。通过脚本实现功能。 </p><p>执行： 服务器端执行，基于ECMAScript 5.1规范</p>                                |

## 样例

* 这是一个简单的样例，用于展现脚本如何编写和运行。
* 本例中我们要实现一个表单中，两个下拉框从配置数据中获取可选数据，以及实现联动。
* 我们需要创建一个流程应用，一个表单以及一个数据字典。在表单中创建两个下拉列表框。

1、先在表单中创建两个下拉框![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/f928351f-79ff-40ca-bf70-88ce51f27219/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content)　　

2、在category1和category2两个下拉框的属性中，选择通过“脚本”编辑可选值。category1![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/7fba0676-a8f3-47f9-a0ed-d91f288fc26f/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content)category2![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/17bb5d8a-a61d-4bdb-9e17-a5e2d1b4411b/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content)　　

3、在category1和category2两个下拉框的可选值脚本如下：　　

{% code title="category1的可选值脚本" %}

```javascript
var dict = new this.Dict("category"); //获取名为category的数据字典
var categoryList = dict.get(); //获取数据字典
var options = Object.keys(categoryList); //获取大类，赋值给options变量
options.unshift("(请选择大类)|"); //在options数组首位插入提示选项，并将“”作为value，“(请选择大类)”作为text
return options; //返回列表，作为列表框的可选值　　
```

{% endcode %}

{% code title="category2的可选值脚本" %}

```javascript
var dict = new this.Dict("category"); //获取名为category的数据字典
var categoryList = dict.get(this.data.category1); //获取数据字典,以下拉框category1的值为关键字的数据值（数组）
return categoryList; //返回列表，作为列表框的可选值
```

{% endcode %}

　4、在category1的change事件中添加如下代码：

```javascript
//获category2下拉框，并刷新可选项
this.form.get("category2").resetOption();　
```

　5、设计数据字典如下图，并命名为："分类配置"，别名为：“category”。　　

![](http://www.o2oa.net:20020/x_portal_assemble_surface/jaxrs/file/dbcd7b5c-e0c4-4c2c-a055-e7374a935364/portal/dcd8e168-2da0-4496-83ee-137dc976c7f6/content)

6、预览表单，即可看到大类下拉框中选项为数据字典中的第一层数据，选择不同的大类可与小类下拉框实现联动。
