浅谈ofbiz项目中<screen>标签


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>等同于平面文件(非标记)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值