unknown 5 anni fa
parent
commit
17876f8756

+ 218 - 1
o2web/source/o2_core/o2/xScript/Environment.js

@@ -1,3 +1,186 @@
+/**
+ * Work 数据结构,流程实例对象
+ * @typedef {Object} Work
+ * @example
+ * {
+    "id": "854e2c22-718e-48bb-98db-96f4b43e7ee8",   //流程实例ID
+    "splitValue": "xxxxxxxxxxxxxx", //流程拆分后的拆分依据
+    "title": "xx7月北京出差报销审批",               //流程实例名称
+    "startTime": "2018-09-07 14:03:22",             //流程启动时间
+    "startTimeMonth": "2018-09",                    //流程启动的月份
+    "creatorPerson": "xx@huqi@P",                   //流程实例创建人
+    "creatorIdentity": "xx@481c9edc-5fb5-41f1-b5c2-6ea609082cdb@I", //流程实例创建人身份
+    "creatorUnit": "xx@c448d8bb-98b8-4305-9d3f-12537723cfcc@U",     //流程实例创建人所在组织
+    "creatorUnitLevelName": "浙江兰德纵横/开发部",          //流程实例创建人所在组织层次
+    "application": "1dc23336-6be6-402b-bed6-36e707a1dd17",  //流程应用ID
+    "applicationName": "财务管理",                          //流程应用名称
+    "applicationAlias": "finance",                          //流程应用别名
+    "process": "2207db11-dddf-4ebd-864d-3819f3e173c6",      //流程ID
+    "processName": "报销审批流程",                          //流程名称
+    "processAlias": "",                                     //流程别名
+    "activity": "13d15daf-2ac5-4c1b-a669-1607a0e5ed15",     //当前活动ID
+    "activityType": "manual",                               //当前活动类型
+    "activityName": "部门领导审核",                         //当前活动名称
+    "activityAlias": "",                                    //当前活动别名
+    "activityDescription": "",                              //当前活动描述
+    "activityArrivedTime": "2018-09-27 22:49:21",           //当前活动到达时间
+    "serial": "",                                           //编号
+    "workStatus": "processing",                             //流程实例状态
+    "errorRetry": 0,                                        //流转失败重试次数
+    "splitting": false,                                     //流程是否拆分
+    "form": "db3b2766-93a1-4058-b522-0edb922bd84f",          //流程展现所使用的表单
+    "manualTaskIdentityList" : "张三@db3b2766-93a1-4058-b522-0edb922bd84f@I", //预期的处理人
+    "manualTaskIdentityText" : "张三" //当前处理人身份合并文本,用','分割,超长截断,此字段仅用于显示当前工作的处理人,不索引.
+}
+ */
+
+/**
+ * WorkCompleted 数据结构,已结束流程实例对象
+ * @typedef {Object} WorkCompleted
+ * @example
+ * {
+    "id": "be0195f1-f2e2-4eac-911c-99897a43ff8f",   //流程实例ID
+    "title": "xx7月北京出差报销审批",               //流程实例名称
+    "startTime": "2018-09-19 16:14:16",             //流程启动时间
+    "startTimeMonth": "2018-09",                    //流程启动的月份
+    "completedTime": "2018-09-19 16:15:28",         //流程完成时间
+    "completedTimeMonth": "2018-09",                //流程完成的月份
+    "creatorPerson": "xx@huqi@P",                   //流程实例创建人
+    "creatorIdentity": "xx@481c9edc-5fb5-41f1-b5c2-6ea609082cdb@I", //流程实例创建人身份
+    "creatorUnit": "xx@c448d8bb-98b8-4305-9d3f-12537723cfcc@U",     //流程实例创建人所在组织
+    "creatorUnitLevelName": "浙江兰德纵横/开发部",  //流程实例创建人所在组织层次
+    "application": "1dc23336-6be6-402b-bed6-36e707a1dd17",  //流程应用ID
+    "applicationName": "财务管理",                          //流程应用名称
+    "applicationAlias": "finance",                          //流程应用别名
+    "process": "2207db11-dddf-4ebd-864d-3819f3e173c6",      //流程ID
+    "processName": "报销审批流程",                          //流程名称
+    "processAlias": "",                                     //流程别名
+    "serial": "",                                           //编号
+    "form": "320be1ca-ee49-478f-a751-f65ab67cf818",         //流程展现所使用的表单
+}
+ */
+
+/**
+ * Task数据结构,待办任务对象
+ * @typedef {Object} Task
+ * @example
+ * {
+    "id": "dd476045-7c79-44f7-9dba-f51d322de40f",   //待办ID
+    "title": "XX7月北京出差报销审批",               //流程实例标题
+    "startTime": "2018-09-27 22:49:22",             //待办到达时间
+    "startTimeMonth": "2018-09",                    //待办到达的月份
+    "work": "854e2c22-718e-48bb-98db-96f4b43e7ee8", //流程实例ID
+    "application": "1dc23336-6be6-402b-bed6-36e707a1dd17",  //流程应用ID
+    "applicationName": "财务管理",                          //流程应用名称
+    "applicationAlias": "finance",                          //流程应用别名
+    "process": "2207db11-dddf-4ebd-864d-3819f3e173c6",      //流程ID
+    "processName": "报销审批流程",                          //流程名称
+    "processAlias": "",                                     //流程别名
+    "serial": "",                                           //流程编号
+    "person": "XXX@huqi@P",                             //待办人名称
+    "identity": "XX@481c9edc-5fb5-41f1-b5c2-6ea609082cdb@I",    //待办人身份
+    "unit": "XX@c448d8bb-98b8-4305-9d3f-12537723cfcc@U",        //待办人所在组织
+    "activity": "13d15daf-2ac5-4c1b-a669-1607a0e5ed15",         //当前活动的ID
+    "activityName": "部门领导审核",                             //当前活动的名称
+    "activityAlias": "",                                        //当前活动的别名
+    "activityDescription": "",                                  //当前活动描述
+    "activityType": "manual",                                   //当前活动类型
+    "creatorPerson": "XX@huqi@P",                               //流程实例创建人
+    "creatorIdentity": "XX@481c9edc-5fb5-41f1-b5c2-6ea609082cdb@I", //流程实例创建人的身份
+    "creatorUnit": "XX@c448d8bb-98b8-4305-9d3f-12537723cfcc@U", //流程实例创建人所在组织
+    "expired": false,                                           //是否已超时
+    "urged": false,                                             //是否进行催办
+    "routeList": [                                              //可选的路由ID
+        "89b58fe0-6dcb-4fe7-8c2e-3f77204df6d4",
+        "f3105b7a-2929-4682-aab8-15fef5ea0f23"
+    ],
+    "routeNameList": [                                          //可选的路由名称
+        "退回申请人",
+        "送财务部门复审"
+    ],
+    "routeOpinionList": [                                       //可选路由的默认意见
+        "",
+        ""
+    ],
+    "first" : true,      //是否是第一条待办.
+    "properties": { //属性对象存储字段
+          "prevTaskIdentity": "张三@903dbb04-085c-4bb1-9c24-3009bd5f7372@I", //提交的处理人
+          "prevTaskIdentityList": [  //上一步处理人
+            "张三@903dbb04-085c-4bb1-9c24-3009bd5f7372@I"
+          ],
+          "prevTaskList": [ //上一步任务信息
+            {
+              "routeName": "送办理",
+              "unit": "产品研发组@320189216@U",
+              "identity": "张三@903dbb04-085c-4bb1-9c24-3009bd5f7372@I",
+              "person": "张三@zhangsan@P",
+              "opinion": "",
+              "startTime": "2020-09-29 17:03:14",
+              "completedTime": "2020-09-29 17:04:38"
+            }
+          ],
+          "prevTask": { //提交的任务信息
+            "routeName": "送办理",
+            "unit": "产品研发组@320189216@U",
+            "identity": "张三@903dbb04-085c-4bb1-9c24-3009bd5f7372@I",
+            "person": "张三@zhangsan@P",
+            "opinion": "",
+            "startTime": "2020-09-29 17:03:14",
+            "completedTime": "2020-09-29 17:04:38"
+          }
+        }
+ * }
+ */
+
+/**
+ * Read 数据结构,待阅任务对象
+ * @typedef {Object} Read
+ * @example
+ * {
+    "id": "dd476045-7c79-44f7-9dba-f51d322de40f",   //待阅ID
+    "title": "XX7月北京出差报销审批",               //流程实例标题
+    "startTime": "2018-09-27 22:49:22",             //待阅产生时间
+    "startTimeMonth": "2018-09",                    //待阅产生的月份
+    "work": "854e2c22-718e-48bb-98db-96f4b43e7ee8", //流程实例ID
+    "application": "1dc23336-6be6-402b-bed6-36e707a1dd17",  //流程应用ID
+    "applicationName": "财务管理",                          //流程应用名称
+    "applicationAlias": "finance",                          //流程应用别名
+    "process": "2207db11-dddf-4ebd-864d-3819f3e173c6",      //流程ID
+    "processName": "报销审批流程",                          //流程名称
+    "processAlias": "",                                     //流程别名
+    "completed": false,                             //流程是否已完成
+    "serial": "",                                   //流程编号
+    "person": "XXX@huqi@P",                         //待阅人名称
+    "identity": "XX@481c9edc-5fb5-41f1-b5c2-6ea609082cdb@I",    //待阅人身份
+    "unit": "XX@c448d8bb-98b8-4305-9d3f-12537723cfcc@U",        //待阅人所在组织
+    "activity": "13d15daf-2ac5-4c1b-a669-1607a0e5ed15",         //当前活动的ID
+    "activityName": "部门领导审核",                             //当前活动的名称
+    "activityAlias": "",                                        //当前活动的别名
+    "activityDescription": "",                                  //当前活动描述
+    "activityType": "manual",                                   //当前活动类型
+    "creatorPerson": "XX@huqi@P",                               //流程实例创建人
+    "creatorIdentity": "XX@481c9edc-5fb5-41f1-b5c2-6ea609082cdb@I", //流程实例创建人的身份
+    "creatorUnit": "XX@c448d8bb-98b8-4305-9d3f-12537723cfcc@U"  //流程实例创建人所在组织
+}
+ */
+
+/**
+* Activity 数据结构,流程实例所在的活动节点对象
+ * @typedef {Object} Activity
+ * @example
+  *
+     {
+      "id": "801087c5-a4e6-4b91-bf4d-a81cdaa04471", //节点ID
+      "name": "办理",  //节点名称
+      "description": "", //节点描述
+      "alias": "",  //节点别名
+      "resetRange": "department", //重置处理人范围
+      "resetCount": 0,  //重置处理人数字
+      "allowReset": true, //是否允许重置
+      "manualMode": "single" //处理方式 单人single, 并行parallel, 串行queue, grab抢办
+    }
+ */
+
 MWF.xScript = MWF.xScript || {};
 MWF.xScript = MWF.xScript || {};
 MWF.xScript.Environment = function(ev){
 MWF.xScript.Environment = function(ev){
     var _data = ev.data;
     var _data = ev.data;
@@ -58,11 +241,37 @@ MWF.xScript.Environment = function(ev){
          * @summary 获取当前流程与当前用户相关的待办对象:task对象。
          * @summary 获取当前流程与当前用户相关的待办对象:task对象。
          * @method getTask
          * @method getTask
          * @static
          * @static
-         * @return {string} The blended color.
+         * @return {(Task|Null)} 当前用户的待办任务对象:task。当前用户没有对此流程实例的待办时,或流程实例已经流转结束,返回null.
+         * @example
+         * var task = this.workContext.getTask();
          */
          */
         "getTask": function(){return ev.task || null;},
         "getTask": function(){return ev.task || null;},
+        /**
+         * 获取当前流程实例对象:work对象或workCompleted对象。
+         * @method getWork
+         * @static
+         * @return {(Work|WorkCompleted)} 流程实例对象;如果流程已结束,返回已结束的流程实例对象.
+         * @example
+         * var work = this.workContext.getWork();
+         */
         "getWork": function(){return ev.work || ev.workCompleted;},
         "getWork": function(){return ev.work || ev.workCompleted;},
+        /**
+         * 获取当前流程实例所在的活动节点对象:activity对象。
+         * @method getActivity
+         * @static
+         * @return {(Activity|Null)} 当前流程实例所在的活动节点对象,如果当前流程实例已流转完成,则返回null.
+         * @example
+         * var activity = this.workContext.getActivity();
+         */
         "getActivity": function(){return ev.activity || null;},
         "getActivity": function(){return ev.activity || null;},
+        /**
+         * 获取当前流程实例的所有待办对象。如果流程实例已流转完成,则返回一个空数组。
+         * @method getTaskList
+         * @static
+         * @return {(Task[])} 待办任务列表.
+         * @example
+         * var taskList = this.workContext.getTaskList();
+         */
         "getTaskList": function(callback, error){
         "getTaskList": function(callback, error){
             var cb = (callback && o2.typeOf(callback)==="function") ? callback : null;
             var cb = (callback && o2.typeOf(callback)==="function") ? callback : null;
             var ecb = (error && o2.typeOf(error)==="function") ? error : null;
             var ecb = (error && o2.typeOf(error)==="function") ? error : null;
@@ -73,6 +282,14 @@ MWF.xScript.Environment = function(ev){
             }, ecb, !!cb);
             }, ecb, !!cb);
             return list;
             return list;
         },
         },
+        /**
+         * 根据当前工作的job获取当前流程实例的所有待办对象。如果流程实例已流转完成,则返回一个空数组。
+         * @method getTaskListByJob
+         * @static
+         * @return {(Task[])} 待办任务列表.
+         * @example
+         * var taskList = this.workContext.getTaskListByJob();
+         */
         "getTaskListByJob": function(callback, error){
         "getTaskListByJob": function(callback, error){
             var cb = (callback && o2.typeOf(callback)==="function") ? callback : null;
             var cb = (callback && o2.typeOf(callback)==="function") ? callback : null;
             var ecb = (error && o2.typeOf(error)==="function") ? error : null;
             var ecb = (error && o2.typeOf(error)==="function") ? error : null;

+ 18 - 22
o2web/source/x_component_process_Xform/$Module.js

@@ -8,28 +8,24 @@ MWF.xApplication.process.Xform.$Module = MWF.APP$Module =  new Class(
     {
     {
     Implements: [Events],
     Implements: [Events],
     options: {
     options: {
-        // /**
-        //  * 组件加载前事件。<br/>
-        //  * 平台执行queryLoad事件的时候,组件还没有开始加载,这个时候可以根据条件修改组件的配置信息
-        //  * @event MWF.xApplication.process.Xform.$Module#queryLoad
-        //  * @example
-        //  * var field = this.form.get("fieldName");
-        //  * field.addEvent("queryLoad", function(){
-        //  *
-        //  * };
-        //  */
-        // /**
-        //  * Event reporting that a snowball has been hurled.
-        //  *
-        //  * @event MWF.xApplication.process.Xform.$Module#load
-        //  * @property {number} velocity - The snowball's velocity, in meters per second.
-        //  */
-        // /**
-        //  * Event reporting that a snowball has been hurled.
-        //  *
-        //  * @event MWF.xApplication.process.Xform.$Module#postLoad
-        //  * @property {number} velocity - The snowball's velocity, in meters per second.
-        //  */
+        /**
+         * 组件加载前事件。<br/>
+         * 平台执行queryLoad事件的时候,组件还没有开始加载,这个时候可以根据条件修改组件的配置信息以改变加载细节。
+         * @event MWF.xApplication.process.Xform.$Module#queryLoad
+         * @example
+         * var field = this.form.get("fieldName");
+         * field.addEvent("queryLoad", function(){
+         *
+         * };
+         */
+        /**
+         * 组件加载事件.
+         * @event MWF.xApplication.process.Xform.$Module#load
+         */
+        /**
+         * 组件加载后事件.
+         * @event MWF.xApplication.process.Xform.$Module#postLoad
+         */
         "moduleEvents": ["load", "queryLoad", "postLoad"]
         "moduleEvents": ["load", "queryLoad", "postLoad"]
     },
     },
     initialize: function(node, json, form, options){
     initialize: function(node, json, form, options){

+ 13 - 1
o2web/source/x_component_process_Xform/Address.js

@@ -1,6 +1,18 @@
 //MWF.require("MWF.widget.PinYin", null, false);
 //MWF.require("MWF.widget.PinYin", null, false);
 MWF.xDesktop.requireApp("process.Xform", "Combox", null, false);
 MWF.xDesktop.requireApp("process.Xform", "Combox", null, false);
-MWF.xApplication.process.Xform.Address = MWF.APPAddress =  new Class({
+/** @class Address 地址选择组件。
+ * @example
+ * //可以在脚本中获取该组件
+ * //方法1:
+ * var address = this.form.get("name"); //获取组件
+ * //方法2
+ * var address = this.target; //组件本身的事件和脚本中获取
+ * @extends MWF.xApplication.process.Xform.Combox
+ * @hideconstructor
+ */
+MWF.xApplication.process.Xform.Address = MWF.APPAddress =  new Class(
+    /** @lends MWF.xApplication.process.Xform.Address# */
+    {
 	Implements: [Events],
 	Implements: [Events],
 	Extends: MWF.APPCombox,
 	Extends: MWF.APPCombox,
     options: {
     options: {

+ 16 - 0
o2web/source/x_component_process_Xform/Attachment.js

@@ -1051,7 +1051,23 @@ MWF.xApplication.process.Xform.AttachmentController = new Class({
  * @property {String} createTime - 创建时间.
  * @property {String} createTime - 创建时间.
  * @property {String} updateTime - 修改时间.
  * @property {String} updateTime - 修改时间.
  * @property {String} extension - 附件扩展名.
  * @property {String} extension - 附件扩展名.
+ * @example
+ * {
+    "id": "56c4e86f-a4c8-4cc2-a150-1a0d2c5febcb",   //附件ID
+    "name": "133203a2-92e6-4653-9954-161b72ddb7f9.png", //附件名称
+    "extension": "png",                             //附件扩展名
+    "length": 43864,                                //附件大小
+    "person": "xx@huqi@P",                          //附件上传人
+    "lastUpdateTime": "2018-09-27 15:50:34",        //最后的修改时间
+    "lastUpdatePerson": "xx@huqi@P",                //最后的修改人
+    "activity": "e31ad938-c495-45a6-8d77-b8a9b61a165b", //附件上传的活动ID
+    "activityName": "申请人",                           //附件上传的活动名称
+    "activityType": "manual",                           //附件上传的活动类型
+    "site": "$mediaOpinion",                        //附件存储位置(一般用于区分附件在哪个表单元素中显示)
+    "type": "image/png"                             //附件类型(contentType)
+}
  */
  */
+
 /** @class Actionbar 附件组件。
 /** @class Actionbar 附件组件。
  * @example
  * @example
  * //可以在脚本中获取该组件
  * //可以在脚本中获取该组件

+ 1 - 1
o2web/source/x_component_process_Xform/Checkbox.js

@@ -110,7 +110,7 @@ MWF.xApplication.process.Xform.Checkbox = MWF.APPCheckbox =  new Class(
      * @summary 获取选择项数组.
      * @summary 获取选择项数组.
      * @example
      * @example
      * var array = this.form.get('fieldName').getOptions();
      * var array = this.form.get('fieldName').getOptions();
-     * @return {Array} 选择项数组,如果脚本返回计算结果.
+     * @return {Array} 选择项数组,如果配置为脚本返回计算结果.
      */
      */
 	getOptions: function(){
 	getOptions: function(){
 		if (this.json.itemType == "values"){
 		if (this.json.itemType == "values"){

+ 51 - 2
o2web/source/x_component_process_Xform/Combox.js

@@ -1,5 +1,17 @@
 MWF.xDesktop.requireApp("process.Xform", "$Input", null, false);
 MWF.xDesktop.requireApp("process.Xform", "$Input", null, false);
-MWF.xApplication.process.Xform.Combox = MWF.APPCombox =  new Class({
+/** @class Combox 组合框组件。
+ * @example
+ * //可以在脚本中获取该组件
+ * //方法1:
+ * var field = this.form.get("fieldName"); //获取组件对象
+ * //方法2
+ * var field = this.target; //在组件本身的脚本中获取,比如事件脚本、默认值脚本、校验脚本等等
+ * @extends MWF.xApplication.process.Xform.$Input
+ * @hideconstructor
+ */
+MWF.xApplication.process.Xform.Combox = MWF.APPCombox =  new Class(
+    /** @lends MWF.xApplication.process.Xform.Combox# */
+{
 	Implements: [Events],
 	Implements: [Events],
 	Extends: MWF.APP$Input,
 	Extends: MWF.APP$Input,
 	iconStyle: "selectIcon",
 	iconStyle: "selectIcon",
@@ -80,6 +92,12 @@ MWF.xApplication.process.Xform.Combox = MWF.APPCombox =  new Class({
         	return null;
         	return null;
 		}
 		}
 	},
 	},
+    /**
+     * @summary 获取选择项数组.
+     * @example
+     * var array = this.form.get('fieldName').getOptions();
+     * @return {Array} 选择项数组,如果配置为脚本返回计算结果.
+     */
     getOptions: function(){
     getOptions: function(){
     	var list = [];
     	var list = [];
         if (this.json.itemType === "values"){
         if (this.json.itemType === "values"){
@@ -126,6 +144,20 @@ MWF.xApplication.process.Xform.Combox = MWF.APPCombox =  new Class({
 		}
 		}
         return [];
         return [];
     },
     },
+    /**
+     * 当表单上没有对应组件的时候,可以使用this.data[fieldName] = data赋值。
+     * @summary 为组件赋值。
+     * @param value{String} .
+     * @example
+     *  this.form.get("fieldName").setData("test"); //赋文本值
+     * @example
+     *  //如果无法确定表单上是否有组件,需要判断
+     *  if( this.form.get('fieldName') ){ //判断表单是否有无对应组件
+     *      this.form.get('fieldName').setData( data );
+     *  }else{
+     *      this.data['fieldName'] = data;
+     *  }
+     */
     setData: function(value){
     setData: function(value){
         this._setBusinessData(value);
         this._setBusinessData(value);
         this._setValue(value);
         this._setValue(value);
@@ -166,13 +198,24 @@ MWF.xApplication.process.Xform.Combox = MWF.APPCombox =  new Class({
             }.bind(this));
             }.bind(this));
 		}
 		}
     },
     },
+    /**
+     * @summary 重新计算下拉选项,该功能通常用在下拉选项为动态计算的情况.
+     * @example
+     * this.form.get('fieldName').resetOption();
+     */
     resetOption: function(){
     resetOption: function(){
         if (this.combox){
         if (this.combox){
             var list = this.getOptions();
             var list = this.getOptions();
             this.combox.setOptions({"list": list});
             this.combox.setOptions({"list": list});
         }
         }
     },
     },
-
+    /**
+     * @summary 添加下拉选项.
+     * @param text  {String} 下拉选项文本
+     * @param value {String} 下拉选项值
+     * @example
+     * this.form.get('fieldName').addOption("秘密","level1");
+     */
 	addOption: function(text, value){
 	addOption: function(text, value){
         if (this.combox){
         if (this.combox){
             var list = this.getOptions();
             var list = this.getOptions();
@@ -195,6 +238,12 @@ MWF.xApplication.process.Xform.Combox = MWF.APPCombox =  new Class({
         if (this.combox) return this.combox.getData();
         if (this.combox) return this.combox.getData();
         return this._getBusinessData();
         return this._getBusinessData();
     },
     },
+    /**
+     * @summary 获取选中的值和文本.
+     * @example
+     * var array = this.form.get('fieldName').getTextData();
+     * @return {Object} 返回选中项值和文本,格式为 { 'value' : value, 'text' : text }.
+     */
     getTextData: function(){
     getTextData: function(){
 	    var v = this.getData();
 	    var v = this.getData();
         return {"value": v, "text": v};
         return {"value": v, "text": v};

+ 57 - 1
o2web/source/x_component_process_Xform/Form.js

@@ -5,7 +5,17 @@ MWF.xApplication.process.Xform = MWF.xApplication.process.Xform || {};
 MWF.xDesktop.requireApp("process.Xform", "lp." + MWF.language, null, false);
 MWF.xDesktop.requireApp("process.Xform", "lp." + MWF.language, null, false);
 //MWF.xDesktop.requireApp("process.Xform", "Package", null, false);
 //MWF.xDesktop.requireApp("process.Xform", "Package", null, false);
 
 
-MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class({
+/** @class Form 表单。
+ * @example
+ * //可以在脚本中获取表单
+ * //方法1:
+ * var form = this.form.getApp().appForm; //获取表单
+ * //方法2
+ * var form = this.target; //在表单本身的事件脚本中获取
+ */
+MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class(
+    /** @lends MWF.xApplication.process.Xform.Form# */
+{
     Implements: [Options, Events],
     Implements: [Options, Events],
     Extends: MWF.widget.Common,
     Extends: MWF.widget.Common,
     options: {
     options: {
@@ -41,10 +51,27 @@ MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class({
     initialize: function (node, data, options) {
     initialize: function (node, data, options) {
         this.setOptions(options);
         this.setOptions(options);
 
 
+        /**
+         * @summary 表单容器
+         * @see https://mootools.net/core/docs/1.6.0/Element/Element
+         * @member {Element}
+         * @example
+         *  //可以在脚本中获取表单容器
+         * var formContainer = this.form.getApp().appForm.container;
+         */
         this.container = $(node);
         this.container = $(node);
         this.container.setStyle("-webkit-user-select", "text");
         this.container.setStyle("-webkit-user-select", "text");
         if (Browser.firefox) this.container.setStyle("opacity", 0);
         if (Browser.firefox) this.container.setStyle("opacity", 0);
         this.data = data;
         this.data = data;
+
+        /**
+         * @summary 表单的配置信息,比如表单名称,提交方式等等.
+         * @member {JsonObject}
+         * @example
+         *  //可以在脚本中获取表单配置信息
+         * var json = this.form.getApp().appForm.json; //表单配置信息
+         * var name = json.name; //表单名称
+         */
         this.json = data.json;
         this.json = data.json;
         this.html = data.html;
         this.html = data.html;
 
 
@@ -53,7 +80,36 @@ MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class({
         this._loadCss();
         this._loadCss();
 
 
         this.sectionListObj = {};
         this.sectionListObj = {};
+
+        /**
+         * @summary 表单中的所有组件数组.
+         * @member {Array}
+         * @example
+         * //下面的样例对表单组件进行循环,并且判断是输入类型的组件
+         * var modules = this.form.getApp().appForm.modules; //获取所有表单组件
+         * for( var i=0; i<modules.length; i++ ){ //循环处理组件
+         *   //获取组件的类型
+            var moduleName = module.json.moduleName;
+            if( !moduleName ){
+                moduleName = typeOf(module.json.type) === "string" ? module.json.type.toLowerCase() : "";
+            }
+            if( ["calendar","combox","number","textfield"].contains( moduleName )){ //输入类型框
+                //do something
+             }
+         * }
+         */
         this.modules = [];
         this.modules = [];
+
+        /**
+         * 该对象的key是组件标识,value是组件对象,可以使用该对象直接根据组件标识获取组件。<br/>
+         * 需要注意的是,在子表单中嵌入不绑定数据的组件(比如div,common,button等等),系统允许重名。<br/>
+         * 在打开表单的时候,系统会根据重名情况,自动在组件的标识后跟上 "_1", "_2"。
+         * @summary 表单中的所有组件对象.
+         * @member {Object}
+         * @example
+         * var moduleAll = this.form.getApp().appForm.all; //获取组件对象
+         * var subjectField = moduleAll["subject"] //获取名称为subject的组件
+         */
         this.all = {};
         this.all = {};
         this.allForName = {};
         this.allForName = {};
         this.forms = {};
         this.forms = {};