3.7交互的数据格式


3.7.1相关路径

1、在跳转后的jsp中获取查询动作模型

<%@ taglib uri=”/WEB-INF/tags/emap.tld” prefix=””e%>

<script type=”text/javascript”>

Var pageMeta=<e:page/>;

</script>

2、用地址获取查询动作模型

…/sys/{appName}/{modules}/{page}.do?*json=1

3、执行某个动作,并返回页面上的查询动作模型

…/sys/{appName}/{modules}/{page}.do?*json=1&*datas={action}

4、用地址获取查询动作模型,并放到js对象中

…/sys/{appName}/{modules}/{page}.do?*json=1&*var={jsobj}

5、执行某个动作

…/sys/{appName}/{modules}/{page}/{action}.do

6、获取查询动作上的高级查询模型

…/sys/{appName}/{modules}/{page}/{action}.do?*searchMeta=1

7、获取字典数据

…/code/dicId.do

字典数据地址默认是需要登录的且只能通过ajax访问,如果想不登录就使用,则先建个<页面模型>,设为无需权限,把需要的字典地址配置到<关联地址中>。

8、获取某类型(条件)的字典数据

…/code/dicId/type.do

3.7.2数据查询

…/sys/{appName}/{modules}/{page}/{action}.do

1、分页

pageSize每页多少条;

pageNumber,第几页;

totalSize总记录数

2、简单相等查询条件

{colName}={value}

3、复杂的组合查询

var queryobj = [

{name:"条件名",linkOpt:"and||or",value:"条件值",builder:"条件操作,通过操作符列表选择的值"},

...

]

AJAX提交:data{“querySetting”, JSON.stringify(queryobj)}

4、排序

*order=+name1,-name2

排序的参数名称为:“*order”,“name1”和“name2”为数据/业务模型中定义的标识名称,前面的“+”和“-”用于标识升序和降序,传参时需要注意“+”需要进行URL编码。

3.7.3返回的JSON格式

{
  code:0,  // 必定存在
  logId:"",  // code不为0时会存在
  msg:"",  // 可能不存在
  models:[  // 可能不存在, 所有的模型数据
    {
      name:"modelName1"
      url:"xxx/xxx.do", // 数据的获取地址
      controls:[  // 模型中的控件列表
        {name:"a",xtype:"text or select ...",caption:"学号",hidden:true,...},
        {name:"b",xtype:"text or select ...",caption:"姓名",readOnly:true,...},
        ...
      ]
    },
    {name:"modelName2",...}
  ],
  datas:{  // 可能不存在,获取的结果数据
    "{dataName1}":{  // 单条记录
      name:"yourName",sex:"1",sex_DISPLAY:"男",...
    },
    "{dataName2}":{  // 多条记录
      pageNum:1,pageSize:15,totalCount:100,
      rows:[
        {name:"name1",sex:"1",sex_DISPLAY:"男",...},
        {name:"name2",sex:"2",sex_DISPLAY:"女",...},
        ...
      ]
    }
  }
}

3.7.4数据提交格式

3.7.4.1简单的数据提交格式

此方式适合只更新一个表的单条记录的时候

格式为form表单的提交数据,如:

name=tom&sex=1&age=12

此种方式简称:EXF1。

1.1.4.2JSON的提交数据格式

此方式合适有多个表或多条记录需要更新的时候

json数据添加的form表单中

单条记录多个表

actionName1=urlEncode({name:"tom",sex:"1",age:12})&actionName2=urlEncode({className:"math",userName:"tom"})

多条记录

actionName1=urlEncode([{name:"tom",sex:"1",age:12},{name:"jerry",sex:"2",age:15}])

上面两个例子中,actionName1和actionName2为处理数据包的动作别名或动作流中节点的名称。

此种方式简称:EXF2。

1.1.4.3字符参数要求

由于我们使用的是http的form-urlencoded,所有的参数值必须是字符串,所以如果是一个复杂结构的数据类型,需要转换成json字符串才行。

1.1.4.4设计说明

EXF1是符合传统的form表单的提交方式,支持这种入参结构能够让传统的页面更容易接入。

EXF2是为处理复杂的入参数据而设计的,如可编辑表单的多条修改数据的提交。

1.1.4.5样例说明

动作流的样例

动作流是根据节点的别名进行传参(这里为了演示,将节点的显示名称和别名设为相同的),即一个动作流中的所有赋值节点及动作节点的别名就构成了这个动作流的入参名称集合。所有页面中调用动作流时,传参样例如下:

node0=1&node1= urlEncode({…})&node2= urlEncode([…])

node0需要一个数字,node1需要一个对象,node2需要一个数组,上面这种方式是符合EXF1的格式,如果需要使用EXF2的格式,应该是这样:

flow1=urlEncode({node0:1,node1:{…},node2:[…]})

flow1为这个动作流在epg(页面模型)中的别名。

从这两个样例中,还能看到转字符串的处理也不同,这也是符合前面提到的字符串参数要求。

webservice动作的样例

webservice动作需要的参数在其入参列表中,传递样例如下:

ws1=urlEncode({appId: "app1",roleId: "testRole" })

ws1为这个webservice动作在epg(页面模型)中的别名,这种方式是符合EXF2的格式。

3.7.5高级查询的格式

获取条件定义的格式如下:

{
  code:0,
  searchMeta:{
    name:"searchName",
    controls:[  // 定义的条件列表
      {name:"条件名",xtype:"text or select ...",caption:"学号",builderList:"操作符列表名 (bList1)",...},
      {name:"b",xtype:"text or select ...",caption:"姓名",builderList:"bList2",visible:false,...},
      ...
    ]
    builderLists:{  // 条件定义中需要使用的操作符列表
      "bList1":[{name:"操作名",caption:"标题"}, ...],
      "bList2":[{name:"操作名",caption:"标题"}, ...],
      ...
    }
  }
}

提交条件数据的格式

[

{name:"条件名",linkOpt:"条件间的连接符and or",value:"条件值",builder:"条件操作,通过操作符列表选择的值"},

...

]

条件构造的规则:

如果条件需要添加括号,将括号中的条件添加到数组中,数组中第一个条件的连接符将作为整个括号的连接符

样例1

[
  {name:"col1",value:"a",linkOpt:"and",builder:"include"},
  {name:"col2",value:"x",linkOpt:"or",builder:"equal"}
]
结果1: col1 like '%a%' or col2 = 'x'

结果1: col1 like '%a%' or col2 = 'x'

样例2

[
  {name:"col3",value:"b",linkOpt:"and",builder:"include"},
  [
    {name:"col1",value:"a",linkOpt:"and",builder:"include"},
    {name:"col2",value:"x",linkOpt:"or",builder:"equal"}
  ],
  {name:"col4",value:"c",linkOpt:"and",builder:"include"}
]

结果2: col3 like '%b%' and (col1 like '%a%' or col2 = 'x') and col4 like '%c%'

注意:子数组中的第一个linkOpt在这里需要是“and”,如果是“or”的话,组括号将以or的方式与其他条件拼接,见下面的例子

结果3:col3 like '%b%' or (col1 like '%a%' or col2 = 'x') and col4 like '%c%'

builder选项的值如下:

equal:等于

upper_equal:转大写等于

notEqual:不等于

include:包含

upper_include:转大写包含

notInclude:不包含

more:大于

less:小于

moreEqual:大于等于

lessEqual:小于等于

m_value_include:多值包含

m_value_equal:多值相等

注1:如果是多值条件,传入的值以逗号分隔

注2:使用截图

1.1.6字典的查询

查询路径:[root]/code/dicId.do

带类型的查询路径:[root]/code/dicId/type.do

字典的查询参数如下:

id,根据字典中的代码值进行全等匹配

name,根据字典中的显示值进行匹配(匹配方式见mathType)

pId,树型字典有效,对父节点代码值进行全等匹配

matchType,匹配方式

0,根据name参数对显示值进行全等匹配

1,根据name参数对显示值进行模糊匹配

2,根据name参数对代码值或显示值进行模糊匹配

searchValue,格式同高级查询的数据提交格式,用于设置字典对应的表中其它列相关的查询条件

checkParent,树型字典有效,是否需要检查每个节点的父节点是否包含在结果中,如果不包含则添加这个父节点

注:

字典默认是需要登录访问的,如果想不登录访问,需要把字典的地址配置到无需权限的页面定义中,在这个页面前台就可以不登录访问。

1.1.7其他说明

对于所有的查询,高级查询和字典的查询等,如果数据的格式有问题,如数据类型转换出错,那将会忽略这个条件。

如,传入的条件如下:

[

{name:"count",value:"a",linkOpt:"and",builder:"equal"}

]

如果字段的类型为整型,则会类型转换出错,那这个条件就会被忽略,等同未传此条件。

如果条件中的name属性值没有和模型中的标识名称匹配,那么这个条件就会被忽略,等同未传此条件。

results matching ""

    No results matching ""