# 前端开发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、预览表单，即可看到大类下拉框中选项为数据字典中的第一层数据，选择不同的大类可与小类下拉框实现联动。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://o2oa.gitbook.io/course/liu-cheng-guan-li/qian-duan-kai-fa-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
