1、<condition>元素组成<section>元素的If部分。如果元素中条件的值为true, if-then-else结构的"then"部分将被执行。否则,Else部分将被执行。
2、我们能放入<condition>元素中的有12中可能的条件类型。
3、其中的四种是逻辑操作(或者合并):<and>、<xor>、<or>和<not>。
4、三个是有关权限检查的: <if-service-permission>、<if-has-permission>和<if-entity-permission>。
5、剩下的五种是各种形式的比较: <if-validate-method>、 <if-compare>、<if-compare-field>、<if-regexp>和<if-empty>。
比如:<if-empty field="fieldName">来判断一个变量是否为null或者未定义。
<if-compare-field field-name="parameters.description" operator="not-equals" to-field- name="lookedUpValue.description" type="String">
operator为操作符,分别为:less(小于)、greater(大于)、less-equals(小于等于)、greater-equals(大于等于)、equals(等于)、 not-equals(不等于)、contains(包含)
type为数据类型,分别为: String、BigDecimal、Double、Float、Long 、Integer、Date、Time、Timestamp、Boolean,Object 、PlainString(?没有听说过)
field-name和to-field-name为比较的操作数 其中field-name和operator为必填项。type默认为”String”
<if-compare field-name="parameters.invoiceTypeId" value="PURCHASE_INVOICE" operator="equals"> :if-compare和if-compare-field的属性基本类似.
1、<actions>元素包含了预处理动作,它通常(通过OFBiz MVC架构的约定)是数据操作、事务或者查询(Retrieve)(CRUD中的R);数据创建(Create)、更新(Update)和删除(Delete)(CRUD中的其他部分)应在请求映射的事件中完成,不是在视图动作中(定义在<actions>元素中的预处理)。视图层仅仅应该准备显示的数据,而非更改数据。
2、有10种可能类型的动作我们能放到<actions>元素中。其中的五个是数据查询(从数据库)动作,它把数据放入变量中,变量是可访问的并且我们可用之于screen widget容器。这五种类型是:<entity-and>、<entity-condition>、<entity-one>、<get-related-one>和<get-related>。10种可能的动作类型中的两种调用可以是复杂商务逻辑的代码。动作类型<script>调用用Groovy编写的代码。动作类型<service>调用包装在OFBiz服务的代码。十种可能动作类型的3种简单地把值赋给变量,以和数据获取动作相同的方式。活动类型 <property-map>和<property-to-field>(这两种没有用过)从一个属性或者配置文件中获取值。最简单的动作<set>,将任何我们想要的值设置给任何变量。
例如:
<set field="thisDate" from-field="nowTimestamp" value="?" global="true" type="String" from-scope="user" to-scope="user"/> 其中:field(设置的变量名称,必须项),from-field(赋值为field的值,比如 上面例子中的”nowTimestamp”),
value(要设置的值),default-value(默认值),global(是否为全局,ture or false),type(变量的类型,参见if-compare-field),
to-scope(范围,值为”screen”,”user”,”application”),from-scope(获取变量的范围,值同to-scope).
<property-map resource="CommonUiLabels" map-name="uiLabelMap" global="true"/>
其中:resourece(资源名称),map-name(放置资源的map名 称),global(是否为全局,true或false)
<property-to-field property="AccountingPaymentApplToPay" field-name="message" resource="AccountingUiLabels" /> 其中:resourece(资源名称,必须), property(资源文件中的键,必须),global(是否为全局,true或false),field-name(要设置的field的名称,必须),default(默认值,可选),no-locale(不根据地区选取资源,默认为false,可选),arg-list-name(参数列表名称)
<script location="component://oa/webapp/oa/WEB-INF/actions/workflow/FindWorkflowDefs.groovy"/>script的属性:
location 要执行的脚本的位置,必须项(Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。可以向写Java代码一样写groovy)
<service service-name="getPublicForumMessage" result-map-name="contentData">
<field-map field-name="contentId" env-name="rsp.contentId"/>
</service>其中:service-name调用服务的名称,必须项 。result-map-name 服务返回的结果名称,可选auto-field-map默认值为true,可选 。service的子元素为field-map,service可用0到任意多个field-map子元素.表示 服务的入参。field-map的属性为field-name,变量的名称,必须项,env-name,要赋值的环境中变量的名称,value,要赋值的变量名称.
<entity-one entity-name="FinAccountTypeGlAccount" value-name="finAccountTypeGlAccount" auto-field-map="false">
<field-map field-name="organizationPartyId"/>
<field-map field-name="finAccountTypeId" env-name="finAccount.finAccountTypeId"/>
<select-field field-name="finAccountTypeId" />
</entity-one>
auto-field-map默认为true, field-map为查询时要满足的键值, select-field为要选择的实体中的列.其中只entity-one的属性entity-name(要查询的实体名称)和value-name(变量的名称)为必须项.
<entity-and entity-name="UomConversionDated" list-name="uomConversions" filter-by-date="false" use-cache="false" >
<field-map env-name="parameters.uomId" field-name="uomId"/>
<field-map env-name="parameters.uomIdTo" field-name="uomIdTo"/>
<select-field field-name="uomId" />
<order-by field-name="uomId"/>
<limit-view view-size="10" view-index="1" />
</entity-and>
limit-view,limit-range和use-iterator只能选择其一
entity-condition比较灵活.如
<entity-condition entity-name="PaymentApplication">
<condition-list combine="or">
<condition-expr field-name="paymentId" env-name="paymentId"/>
<condition-expr field-name="toPaymentId" env-name="paymentId"/>
</condition-list>
<order-by field-name="invoiceId"/>
<order-by field-name="invoiceItemSeqId"/>
</entity-condition>
<entity-condition entity-name="AcctgTransEntry" list-name="acctgTransEntryList">
<condition-expr field-name="acctgTransId" env-name="parameters.acctgTransId"/>
<order-by field-name="acctgTransEntrySeqId"/>
</entity-condition>
entity-condition包括的可选属性有:use-cache(是否使用缓存),filter-by-date(是否按照日期过滤,值为true,false,by-name),
distinct(默认为false,值为true或 false),delegator-name,result-set-type(默认为scroll,值为forward和scroll) condition-expr、condition-list和condition-object只能选择其一 limit-range、limit-view、use-iterator只能选择其一
widgets标签可以嵌套的标签有:container,image,label,link,content,decorator-screen,decorator-section-include,include-form,include-menu,include-screen,include-tree,platform-specific,sub-content,section.,fail-widgets.
container元素可以包含widgets的所有子元素。属性为id和style,都为可选。
<container style="screenlet-body">
<decorator-section-include name="screenlet-body"/>
</container>
image元素表示图片,无子元素,可选属性为src、id、style、width、height、border、和url-mode(默认值为content,值为bosent,
content,raw其中的一个)例如 <image src="/images/feed-icon-14x14.png" id="feedIcon" height="12px"/>
label元素表示一段文字,可选属性为:text(要现实的文本),id(id值),style(样式) <label text="要显示内容" />
link元素表示一个链接,子元素可以包括一个image,可选属性 为:text,id,style,target,name,target-window,prefix,url-mode(默认intra-app,值为intra-app,inter-app,content,plain),full-path(默认false,值为false或true),secure(默认为false,值为true或false),encode(默认值为false,值为true或false)
简而言之,<container> 等同于XHTML元素<div>,<image>元素等同于<img>元素,<link>元素等同于<a>,<label>等同于平面文件(非标记)。