# O2OA前台API {@o2version} ## 简介 * O2OA 是一个高度可定制化的企业级办公平台,您可以通过脚本语言扩展平台功能。 * O2OA 前端脚本基于您使用的浏览器的Javascript引擎,使用Javascript语法。 * 本API是O2OA前台脚本的编写说明,您可以通过脚本访问和操作平台内的各种对象。 ## API总览 ### Modules * 为脚本封装的对象、方法和类
业务数据 - data 流程实例 - workContext 内容管理实例 - documentContext
组织查询 - org 流程及内容管理表单 - form 门户页面 - page
视图 - queryView 视图执行 - view 数据字典 - Dict
查询视图 - queryStatement 查询视图执行 - statement 服务调用 - Actions
脚本引用 - include 方法定义 - define 当前用户 - session
平台移动APP API - o2m 表单等待 - wait
### FormComponent * FormComponent为表单组件,可以通过`this.form.get("fieldId")`获取。 #### Process 流程表单组件
表单 - Form 文本 - Label 文本字段 - Textfield
数字字段 - Number 人员组织 - Org 日期选择 - Calendar
多行文本 - Textarea 下拉框 - Select 单选框 - Radio
多选框 - Checkbox 组合框 - Combox 意见框 - Opinion
按钮 - Button 地址 - Address 操作条 - Actionbar
侧边操作条 - Sidebar 图片 - Image 图片编辑 - ImageClipper
附件 - Attachment 容器 - Div 表格 - Table
单元格 - Table$Td 数据网格PC端 - DatagridPC 数据网格移动端 - DatagridMobile
子表单 - Subform 选择视图 - ViewSelector 嵌入视图 - View
嵌入统计 - Stat 通用元素 - Common 分页 - Tab
树 - Tree 流程记录 - Log 流程监控 - Monitor
Iframe - Iframe 公文编辑器 - Documenteditor HTML编辑器 - Htmleditor
Office控件 - Office 选择查询视图 - StatementSelector 嵌入查询视图 - Statement
#### CMS 内容管理表单组件
内容管理表单 - CMSForm 文本 - Label 文本字段 - Textfield
数字字段 - Number 人员组织 - Org 读者 - Reader
作者 - Author 日期选择 - Calendar 多行文本 - Textarea
下拉框 - Select 单选框 - Radio 多选框 - Checkbox
组合框 - Combox 按钮 - Button 地址 - Address
操作条 - Actionbar 图片 - Image 图片编辑 - ImageClipper
附件 - Attachment 容器 - Div 表格 - Table
单元格 - Table$Td 数据网格PC端 - DatagridPC 数据网格移动端 - DatagridMobile
子表单 - Subform 选择视图 - ViewSelector 嵌入视图 - View
嵌入统计 - Stat 通用元素 - Common 分页 - Tab
树 - Tree Iframe - Iframe HTML编辑器 - Htmleditor
阅读记录 - CMSLog Office控件 - Office 评论 - Comment
选择查询视图 - StatementSelector 嵌入查询视图 - Statement
#### Portal 门户页面组件
页面 - PortalPage 容器 - Div 文本 - Label
数据源 - Source 子数据源 - SubSource 数据文本 - SourceText
表格 - Table 单元格 - Table$Td 分页 - Tab
图片 - Image 按钮 - Button Iframe - Iframe
通用元素 - Common 树 - Tree 嵌入视图 - View
嵌入统计 - Stat 文本字段 - Textfield 人员组织 - Org
日期选择 - Calendar 多行文本 - Textarea 下拉框 - Select
单选框 - Radio 多选框 - Checkbox 部件 - Widget
嵌入查询视图 - Statement
### 服务 * 服务是O2OA后台提供的一系列restful服务。
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 考勤模块相关服务
## 使用范围 O2OA 可在多个位置嵌入脚本代码,用于扩展平台和实现自定义功能。嵌入脚本代码分为前端执行代码和服务端执行代码,两者语法一致,本文档指前台脚本。 ### 脚本: 流程平台、门户平台和内容管理平台中,都有脚本设计元素,可以在此创建自己的脚本库。如下图: ![脚本](img/home/script.png)

### 表单、页面、视图、查询视图及其组件事件: 流程平台和内容平台的表单、门户平台的页面、数据平台的视图和查询视图中,每个设计组件包含多种事件,包括DOM对象原生事件和O2平台扩展事件。如下图: ![事件中的脚本](img/home/script_event.png)

### 表单、页面可编辑组件默认值: 流程平台和内容平台的表单和门户平台的页面中,可编辑组件或文本组件的默认值可以通过脚本指定。如下图: ![事件中的脚本](img/home/script_defaultvalue.png)

### 表单、页面、视图、查询视图的部分属性: 流程平台和内容平台的表单、门户平台的页面、数据平台的视图和查询视图中,有许多组件的相关属性可以通过脚本来定义。
如:下拉框、单选多选按钮的可选值、人员字段的选择范围、区段依据等。如下图:
![属性中的脚本](img/home/script_attribute.png)

### 表单及可编辑组件校验: 流程平台和内容管理的表单中,可编辑的字段可以通过脚本进行有效性校验,校验通过返回true,不通过返回提示信息。如下图: ![脚本](img/home/script_validation.png)

### 流程路由属性的扩展附签和选择附签下的脚本: ![扩展附签脚本](img/home/script_route_extend.png) ![选择附签脚本](img/home/script_route_select.png)

## 样例 * 这是一个简单的样例,用于展现脚本如何编写和运行。 * 本例中我们要实现一个表单中,两个下拉框从配置数据中获取可选数据,以及实现联动。 * 我们需要创建一个流程应用,一个表单以及一个数据字典。在表单中创建两个下拉列表框。 1. 先在表单中创建两个下拉框
![下拉框](img/home/example_1_1.png)

2. 在category1和category2两个下拉框的属性中,选择通过“脚本”编辑可选值。
category1脚本:
![下拉框](img/home/example_1_2_1.png)

category2脚本:
![下拉框](img/home/example_1_2_2.png)

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

category1的可选值脚本: ``` var dict = new this.Dict("category"); //获取名为category的数据字典 var categoryList = dict.get(); //获取数据字典 var options = Object.keys(categoryList); //获取大类,赋值给options变量 options.unshift("(请选择大类)|"); //在options数组首位插入提示选项,并将“”作为value,“(请选择大类)”作为text return options; //返回列表,作为列表框的可选值 ``` category2的可选值脚本: ``` var dict = new this.Dict("category"); //获取名为category的数据字典 var categoryList = dict.get(this.data.category1); //获取数据字典,以下拉框category1的值为关键字的数据值(数组) return categoryList; //返回列表,作为列表框的可选值 ``` 4. 在category1的change事件中添加如下代码: ``` //获category2下拉框,并刷新可选项 this.form.get("category2").resetOption(); ``` 5. 设计数据字典如下图,并命名为:"分类配置",别名为:“category”。 ![下拉框](img/home/example_1_5.png) 6. 预览表单,即可看到大类下拉框中选项为数据字典中的第一层数据,选择不同的大类可与小类下拉框实现联动。