在 BroBPM 的流程表单中,通过流程定义中的可编辑字段和只读字段配置,以及表单中的 p:field 标签,可以实现环节只允许编辑部分字段的功能。
对于非流程的表单,对应的有标签 g:formField,通过该标签和 request 属性,可以实现同样的功能。
以下面的表单域 code 为例:
<g:formField bean="${bean}" name="code">
<g:textField name="code" value="${bean.code}" />
</g:formField>
在控制器或者标签前添加下面的代码(设置不同的 request 属性),create、edit 操作时,结果如下:
- 不可编辑:
request.setAttribute( bropen.framework.Constants.REQ_FORM_RO, true ) - 不可编辑,因为未显式设置code可编辑:
request.setAttribute( Constants.REQ_FORM_FIRLDS_ED, [""] ) - 不可编辑,因为显式设置code只读:
request.setAttribute( Constants.REQ_FORM_FIRLDS_RO, ["code"] ) - 可编辑,因为显式设置code可编辑:
request.setAttribute( Constants.REQ_FORM_FIRLDS_ED, ["code"] ) - 可编辑,因为未显式设置code只读:
request.setAttribute( Constants.REQ_FORM_FIRLDS_RO, [""] ) - 不可编辑,因为显式设置code只读,且只读设置优先级高:
request.setAttribute( Constants.REQ_FORM_FIRLDS_RO, ["code"] );
request.setAttribute( Constants.REQ_FORM_FIRLDS_ED, ["code"] );
通过上面的代码可以看出:
- 通过设置 bropen.framework.Constants.REQ_FORM_RO 属性,所有表单域都不可编辑
- 通过设置 bropen.framework.Constants.REQ_FORM_FIELDS_ED 属性,来设置允许编辑的字段,默认为所有
- 通过设置 bropen.framework.Constants.REQ_FORM_FIELDS_RO 属性,来设置只读字段
再举一个例子,角色 ROLE_FOO_BAR 可以编辑字段 foo、bar:
if ( sec.role(code: "ROLE_FOO_BAR") ) {
request.setAttribute( bropen.framework.Constants.REQ_FORM_FIRLDS_ED, ["foo", "bar"] )
}
角色,角色 ROLE_FOO_BAR 可以编辑除 foo、bar 外的所有字段:
if ( sec.role(code: "ROLE_FOO_BAR") ) {
request.setAttribute( bropen.framework.Constants.REQ_FORM_FIRLDS_RO, ["foo", "bar"] )
}