积木快速开发平台

技术团队文档示例


1、元数据管理

<h2>元数据</h2> <ol> <li> <p>支持功能:</p> <ul> <li>查询</li> <li>修改:</li> <li>删除</li> <li>导入元数据 导入表/视图至本地 元数据,注意元对象编码不能重复,推荐以“O_表名”来定义,且需要有主键</li> <li>导出元数据脚本 导出数据元数据的结构脚本(元对象+字段),可以在生产等环境执行完成配置的转义,典型的用法是测试环境开发完成,导出元数据脚本至生产执行即可完成生产部署。</li> <li>覆盖同步 小心使用,会把已配置的数据恢复至初始</li> <li>增量同步 只增加缺失的字段,已经存在的不做任何处理,典型的应用场景:比如表增加了一个字段,则使用这个功能比较合适</li> <li>复制元数据 可以把元对象O_user 快速的复制到o_user2上。</li> </ul> </li> <li>字段说明</li> </ol> <table> <thead> <tr> <th>字段</th> <th>说明</th> <th>备注</th> </tr> </thead> <tbody> <tr> <td>ID</td> <td>元对象系统中编号</td> <td></td> </tr> <tr> <td>编码</td> <td>编码,需要唯一最好有意义</td> <td></td> </tr> <tr> <td>名称</td> <td>对象名称,在编辑、新增会显示 新增XX,编辑XX</td> </tr> <tr> <td>视图/数据表</td> <td>元对象要么是视图要么是数据表</td> </tr> <tr> <td>主键</td> <td>每个元对象都需要主键</td> <td>不支持联合</td> </tr> <tr> <td>数据源</td> <td>默认数据源即为我们配置的业务数据库</td> <td>系统需要2个数据库 默认为业务数据库,Eova为系统配置参数数据库</td> </tr> <tr> <td>是否单选</td> <td>数据列表视图 单选/复选数据</td> </tr> <tr> <td>显示行号</td> <td>是否显示ID</td> <td>未测试</td> </tr> <tr> <td>是否初始加载</td> <td>是否视图打开即要加载数据</td> <td>目前统一都加载,后面又需求可以自行调整</td> </tr> <tr> <td>是否安全模式</td> <td>想表达的是安全模式表后端只接受配置的字段数据,未配置的即使前端送了也不处理</td> </tr> <tr> <td>查询显示查询条件</td> <td>存在查询条件的情况是否默认显示</td> <td>不显示只是折叠了</td> </tr> <tr> <td>业务过滤</td> <td>对表数据过滤增加查询条件</td> <td>如:lv&gt;3 或者 WHERE (rid IN (SELECT id FROM bb_h.eova_role WHERE lv &gt;= ${user.role.lv}) or rids is null) and is_delete=0 支持beetl数据绑定从用户session中提取参数绑定</td> </tr> <tr> <td>默认排序</td> <td>一般情况下配置:id desc</td> <td>按id倒序,最新数据排第一页</td> </tr> <tr> <td>业务拦截器</td> <td>参考类:MetaObjectIntercept</td> <td>这个就是我们要实现的业务了,比如用户表新增,其实是有业务的比增加前做数据判断,增加后有一定业务要处理,我们可以在此实现</td> </tr> <tr> <td>依赖JS</td> <td>此js是子定义的,会在对象的界面新增、修改等界面添加到末尾可以执行用户想执行的前端业务</td> <td>举个例子:前面的初始是否加载,可以用此添加的js触发加载,或者新增界面有个自定义的需求或者校验函数</td> </tr> <tr> <td>视图SQL</td> <td>视图导入会把视图的sql自动填入</td> </tr> <tr> <td>拓展配置</td> <td>元对象额外的配置</td> <td>目前存在的属性:view(视图专用),xxForm 为表单视图定义,默认的新增视图为addForm,编辑视图为updateForm,详情视图为detailForm以及其他自定义的表单视图</td> </tr> </tbody> </table> <p>拓展配置将会在视图view使用以及表单视图,会在后续的模块具体介绍</p> <h2>字段</h2> <table> <thead> <tr> <th>字段</th> <th>说明</th> <th>备注</th> </tr> </thead> <tbody> <tr> <td>对象</td> <td>元对象</td> <td></td> </tr> <tr> <td>分组号</td> <td>暂时没意义</td> </tr> <tr> <td>字段名</td> <td>数据表中的字段</td> </tr> <tr> <td>字段表名</td> <td>字段的所属表</td> <td>如果对象是视图必填</td> </tr> <tr> <td>控件类型</td> <td>选择字段的合适的类型</td> </tr> <tr> <td>中文名</td> <td>列表、表单中的名称</td> </tr> <tr> <td>排序</td> <td>列表时候的顺序</td> </tr> <tr> <td>分组名称</td> <td>暂时无用</td> </tr> <tr> <td>宽度</td> <td>列表的宽度</td> <td>支持130即130px,同时支持百分比配置如:20%</td> </tr> <tr> <td>高度</td> <td>表单中的高度</td> <td>实际上只有富文本和编辑框才有效,单位px</td> </tr> <tr> <td>新增状态</td> <td>新增表单中的状态</td> <td>正常、禁用、只读,隐藏,表单设计器比本处优先级更高</td> </tr> <tr> <td>更新状态</td> <td>更新表单中的状态</td> <td>正常、禁用、只读,隐藏,表单设计器比本处优先级更高</td> </tr> <tr> <td>快速查询</td> <td>列表等视图中需要查询的字段</td> </tr> <tr> <td>单元格编辑</td> <td>暂时不支持</td> </tr> <tr> <td>是否必填</td> <td>将校验必填</td> </tr> <tr> <td>允许排序</td> <td>在列表中可以点击排序</td> </tr> <tr> <td>列表显示</td> <td>在列表中是否显示</td> </tr> <tr> <td>是否多值</td> <td>针对一些控件生效:复选、下拉,菜单查找框</td> </tr> <tr> <td>输入提示</td> <td>表单中字段的提示</td> </tr> <tr> <td>默认值</td> <td>如果有值则已有值,如果无则使用默认值</td> <td>支持固定值如:1,以及beetl表达式:${user.id!}</td> </tr> <tr> <td>ui校验</td> <td>配置系统支持校验表单视</td> <td>必填不要在此配置,使用前面的“是否必填”,校验使用后面单独拉出来说明</td> </tr> <tr> <td>格式化</td> <td>列表显示的时候有些数据需要特殊处理</td> <td>后文单独说明</td> </tr> <tr> <td>拓展配置</td> <td>每个控件可能会设计到单独的属性</td> <td>在控件单独说</td> </tr> </tbody> </table> <h2>格式化</h2> <p>列表中字段显示需要做相应的处理的,举几个常用例子:</p> <ul> <li> <p>字段显示为图片</p> <p>function(value, row, index, keyName) { if (value) { return '<img src="http://图片域名/图片目录/' + value + '" height=25>' } return value }</p> </li> <li> <p>格式化-红色加粗</p> <p>function(value, row, index, keyName) { if (value) { return '<b style="color: red">' + value + '</b>'; } return value; }</p> </li> <li> <p>格式化-链接</p> <p>function(value, row, index, keyName) { return '<a target="_blank" href="http://www.baidu.com" style="color:blue">' + value + '' }</p> </li> <li> <p>打开新Tab</p> <p>function(value, row, index, keyName) { var url='/single_grid/list/v_hotel_bed?template=h&amp;query_hotel<em>id='+row.id; return '<a href="javascript:$.modal.openTab(\''+row.name+'床位\',\''+url+'\');" style="color:blue">'+value+'</a>'; } 如果打开的地址有查询限制参数请以 “query</em>”开头,比如打开 hotel_id=3的床位,则为:query_hotel_id=3</p> </li> </ul> <p>函数介绍如下:</p> <blockquote> <p>1、<strong>$.modal.openTab('Tab名字','Tab地址'); </strong> 函数将帮我们打开一个新的Tab 回调函数参数如下:</p> <table> <thead> <tr> <th>字段</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>value</td> <td>本字段值</td> </tr> <tr> <td>row</td> <td>行数据</td> </tr> <tr> <td>index</td> <td>当前行序号</td> </tr> <tr> <td>keyName</td> <td>本字段key</td> </tr> </tbody> </table> <p>2、参数 template=h为指定ui模板采用bootstrap,query_hotel<em>id=row.id 为传输酒店ID 3、更多参数以 query</em>+&quot;参数名&quot;=xxx 形式传递</p> </blockquote> <h1>校验</h1> <p>以jQuery Validate验证框为基础并做了一定的调整。</p> <table> <thead> <tr> <th>序号</th> <th>规则</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>required</td> <td>必输字段 (一般不需要配置,只要选中‘是否必填’即可)</td> </tr> <tr> <td>2</td> <td>remote=&quot;remote-valid.jsp&quot;</td> <td>使用ajax方法调用remote-valid.jsp验证输入值,,额外增加功能(字段为ID):xx.jsp?a=1,fielda,fieldb,校验的时候除了会把自己上送还会把填充的字段上送</td> </tr> <tr> <td>3</td> <td>email=true</td> <td>必须输入正确格式的电子邮件</td> </tr> <tr> <td>4</td> <td>url=true</td> <td>必须输入正确格式的网址</td> </tr> <tr> <td>5</td> <td>date=true</td> <td>必须输入正确格式的日期,日期校验ie6出错,慎用</td> </tr> <tr> <td>6</td> <td>dateISO=true</td> <td>必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22 只验证格式,不验证有效性</td> </tr> <tr> <td>7</td> <td>number=true</td> <td>必须输入合法的数字(负数,小数)</td> </tr> <tr> <td>8</td> <td>digits=true</td> <td>必须输入整数</td> </tr> <tr> <td>9</td> <td>creditcard=true</td> <td>必须输入合法的信用卡号</td> </tr> <tr> <td>10</td> <td>equalTo=&quot;#password&quot;</td> <td>输入值必须和#password相同</td> </tr> <tr> <td>11</td> <td>accept=</td> <td>输入拥有合法后缀名的字符串(上传文件的后缀)</td> </tr> <tr> <td>12</td> <td>maxlength=5</td> <td>输入长度最多是5的字符串(汉字算一个字符)</td> </tr> <tr> <td>13</td> <td>minlength=10</td> <td>输入长度最小是10的字符串(汉字算一个字符)</td> </tr> <tr> <td>14</td> <td>rangelength=[5,10]</td> <td>输入长度必须介于 5 和 10 之间的字符串&quot;)(汉字算一个字符)</td> </tr> <tr> <td>15</td> <td>range=[5,10]</td> <td>输入值必须介于 5 和 10 之间</td> </tr> <tr> <td>16</td> <td>max=5</td> <td>输入值不能大于5</td> </tr> <tr> <td>17</td> <td>min=10</td> <td>输入值不能小于10</td> </tr> </tbody> </table> <p>自定义校验(<strong>/ui_h/ajax/libs/validate/jquery.validate.extend.js</strong>):</p> <table> <thead> <tr> <th>规则</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>isPhone=true</td> <td>电话号</td> </tr> <tr> <td>isName=true</td> <td>姓名校验</td> </tr> <tr> <td>isUserName=true</td> <td>用户名</td> </tr> <tr> <td>isIdentity=true</td> <td>校验身份证</td> </tr> <tr> <td>isBirth=true</td> <td>校验出生日期</td> </tr> <tr> <td>isIp=true</td> <td>校验IP地址</td> </tr> </tbody> </table> <p>自建规则也在此补充,或者在元数据中依赖js中单独添加单独使用。</p> <p>多个规则逗号分隔: <strong>如:required=true;email=true;remote=&quot;remote-valid.jsp?a=1,userId,userName&quot;</strong> 等多姿势待您解锁。</p> <h2>视图支持</h2> <p>系统支持视图,先建立一张视图(字段不能重名)然后使用&quot;导入元数据&quot;导入 关于元对象额外的配置 view 属性的定义如下(<strong>必须要配置,告知视图中表的关系</strong>):</p> <p>1、字段 中 字段表名,需要大家补充下(告知系统此字段来源哪个表),后期看下系统是否能自动读取 2、对象 中 扩展配置,增加如下json,主要是view字段:</p> <pre><code>{ "view": { "users": { --表名 "whereField": "id", --表字段ID(当前表的条件字段) "paramField": "id" --对应的视图中值字段, }, "users_exp": { --表名 "whereField": "users_id",--表字段ID(当前表的条件字段) "paramField": "id" ---对应的视图中值字段, 根据“表.user_id”=视图.id的值的数据更新表 } } }</code></pre> <p>此处的意思为:表users、表users_exp需要更新并将视图只的值对应表相应字段,即可这么理解需要更新那张表即需要配置此表的主键/外键以及对应的视图值,保存顺序依次为:users,users_exp 举个例子:</p> <table> <thead> <tr> <th>users字段</th> <th>users字段</th> <th>users_exp字段</th> </tr> </thead> <tbody> <tr> <td>id</td> <td>name</td> <td>exp</td> </tr> <tr> <td>1</td> <td>赵金</td> <td>16</td> </tr> </tbody> </table> <p>更新users:update users set name='赵金' where id=1; 更新users_exp:update users_exp set exp=16 where user_id=1 ;</p> <p>PS:目前阶段不建议生成视图字段转义(类似:select a.id as aid,b.name as bname from a left join b on a.id=b.aid),因为系统目前暂时不能识别字段对应表字段是哪个(后期我再优化下) 且视图的表不支持联合主键 注意:<strong>视图更新有先后</strong></p> <p>最后明确下几种场景: 1、a left join b 并且只有a或者只有b需要新增或者编辑 2、a left join b 且a、b都要进行操作 至于再复杂的视图大家看着办吧~_~,原则也支持大家多测试吧。</p>

页面列表

ITEM_HTML