已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Ofbiz minilang 总结1 验证1.1 Login-required: 这是一个simple-method的属性,对是否需要登陆进行设置,默认值为true ,即默认需要先登陆。(加上service 定义中的auth 定义,如果你不希望一个simple service 必须登陆才能调用的话,那么首先得将service 定义中的auth设为false ,再将此处的login-required 设为false)。1.2 use-transaction: 设置此simple method 是否使用事务。根据业务需求来判断具体设置。1.3 check-permission: 使用check-permission前提条件是当前service 环境中必须存在用户的登陆信息,即能获取到userLogin。service 的调用场景有很多,controller.xml中,screen中,simple method 中,bsh文件中,ftl 文件中,java 文件中,groovy文件中等,其中前三项系统会自动将userLogin,locale 等信息自动封装到service context 中去,所以不需要我们手段传值,所以我们在其他环境中调用service的时候就需要对需要的隐性参数进行传值,比如fail-property中会用到locale, check-permission会用到userLogin 等。其中check-permission判断是否具有”$permission的值_ADMIN” 权限,如果action的值不为null,则会首先判断当前用户是否具有”$permission的值_ADMIN”权限,如果有则权限判定符合要求,否则判断是否具有”$permission的值_$action的值”,如果check-permission判断权限要求都不满足的话,会进行alt-permission 权限判断,判断规则和check-permission一样, check-permission 和 alt-permission 两者的关系是or的关系,即只要两者有一个满足权限要求即可。如果两者条件都不满足的话那么将会把fail-property 写进错误信息中,fail-property错误信息来源于”$ resource的值.xml”中key值为”$property的值”所对应的value 值。系统会自动根据客户端浏览器的locale从文件中获取对象的提示信息。翻译成java service 应该是这样的.Security security = dctx.getSecurity();if (!(security.hasPermission (person_ADMIN, userLogin)| security.hasPermission (person_update, userLogin)| security.hasPermission (party_ADMIN, userLogin)| security.hasPermission (party_view , userLogin) Return ServiceUtil.returnError(UtilProperties.getMessage(WebtoolsUiLabels,doNotHavePermission,locale);1.4 if-has-permission:翻译一下前边的if-has-permission的例子.首先判断当前用户是否具有person_view的权限,如果有这个权限那么执行:创建Boolean 变量 hasPermission 值为true将hasPermission这个变量赋值到result结果集中输出info级别日志,” you have ACCTG_FX_ENTRY!”.判断权限如果没有这个权限则执行:创建Boolean 变量 hasPermission 值为false从CommonUiLabels.xml文件中获取key为CommonGenericPermissionError的国际化内容并赋值到变量failMessage中将hasPermission这个变量赋值到result结果集中将failMessage这个变量赋值到result结果集中if-has-permission判断权限的规则和check-permission的规则是一样的。不重复了,if-has-permission和check-permission最大的不同在于if-has-permission可以进行if-else 的逻辑判断.当然如果不需要else判断的话可以把else节点整个去掉。1.5 if-compare: if-compare,把某一参数的值与一特定的值进行比较。比较的逻辑类型通过operator进行设置,种类主要有less,greater,less-equals,greater-equals,equals,not-equals,contains等,不挨个解释了无非是大于,等于,大(小)于等于,包含等。if-compare中另外还有两个参数format、type . type指比较参数双方的数据类型,比较之前系统会将比较双方的参数转化成你指定的type类型。format指比较参数双方的格式,一般用在日期格式中,和日期有关的type类型主要有Time,Date,Timestamp三种,针对这三种子日期类型format类型有三个默认值分别是HH:mm:ss,yyyy-MM-dd,yyyy-MM-dd HH:mm:ss.SSS 。使用时间进行比较的时候参数的格式最好和默认的format相同,否则容易出现不可预料的问题。与if-has-permission类似,当满足if条件的情况下执行if-compare 与 中间的内容,否则则执行与中间的内容,当然和if-has-permission一样,也可以不使用1.6 if-compare-field:if-compare-field与if-compare用法规则相同,唯一的不同在于if-compare是一个参数与固定值之间的比较,而if-compare-field是两个参数之间的比较。1.7 if-empty: 判断一个参数是否为null,如上判断参数param5是否为null.1.8 if-not-empty: 顾名思义这个是和if-empty反着用的。1.9 if-instance-of: OR if-instance-of判断某一参数是否属于指定的参数类型。类似于java 中的instanceof 。1.10 if-regexp:使用正则表达式对参数进行验证。1.11 if-validate-method:使用验证方法对参数进行验证,if-validate-method有个class属性,其默认值为org.ofbiz.base.util.UtilValidate,使用$class类中的$method方法对参数param5进行验证。1.12 if: If 一般情况下配合condition 使用,进行多条件的组合判断,使用 或者组织多个条件的逻辑关系,如果condition 条件满足,那么执行then ,否则执行 else-if 或者 else . 此用法是minilang 中唯一可以使用else if 逻辑判断的地方。1.13 check-id:对参数进行特殊字符验证,判断orderId 中是否含有空格、“、&、?、/等。针对每种不同的特殊字符,check-id 提供了一种默认错误提示信息与之对应,所以错误信息可以不用设置,当然也可以使用fail-message 和 fail-property提供错误信息(用法同check-permission一样),将错误信息放到$error-list-name中,供check-errors使用。1.14 add-error: OR 向一个错误结果list中添加错误信息,错误结果list的name 可以指定,错误信息的来源可以来自来源于国家化xml文件.也可以是直接写死的message。一般用在之前介绍的那么多if-XXXX判断中,如果条件不满足(中间)那么将错误信息写入错误信息结果list中,再通过check-errors 将错误信息返回。1.15 check-errors: 前边已经讲到很多,是将错误信息进行返回,如果错误信息结果$error-list-name中存在错误那么将返回错误信息并终止当前simple method 的运行。error-list-name指定要返回的错误信息结果list名称,MethodContext中可能会包含多个错误结果信息list,根据业务需要而定, error-code 返回错误状态码,一般用在controller.xml 中, 系统会根据其返回的code 而指向不同的request 或者 view 。1.16 assert Assert:断言带确定1.17 calculate Calculate:待确定2.数据操作2.1 clone-value:clone-value克隆参数。以$value-field参数对象为模板,创建一个新的参数对象。value-field的值必须是一个GenericValue对象或者是能够转化成GenericValue的对象。2.2 clear-field: 运行结果CommonServices.xml#TestServiceOnSimple line 85 the value of param6 is not emptyCommonServices.xml#TestServiceOnSimple line 89 the value of param6 is emptyclear-field 将参数$field从simple method 运行环境中methodContext清除掉。2.3 create-object:2.4 clear-cache-line:2.5 clear-entity-caches:2.6 entity-one:entity-one根据给定主键对某一特定实体进行主键查询。如上例:根据实体UserLogin 主键userLoginId的值进行主键查询,并将查询结果定义为adminUserLogin。由于entity-one 的属性auto-field-map的值设置为true,所以系统会从simple method 的运行环境MethodContext中自动寻找实体的主键。use-cache 是关于是否首 先从缓存中获取数据的设置。如果auto-field-map的值设置为false,那么系统将不会自动从封装实体中寻找主键,那么需要我们手动给参,如下: 即为给主键传参。参数可以为固定的value 值,也可为已经存在与运行环境中的参数值。如下: select-field为非主键选择性输出,即将实体字段中用到的字段写入查询结果adminUserLogin中,用不到的则不写入。select-field 不得设置主键,且使用select-field时不能与use-cache=true 同时使用。2.7 entity-and: entity-and 非主键多条件查询。use-cache 是关于是否首先从缓存中获取数据的设置。不能和select-field共同使用。为了容易查看效果这里使用select-field(用法同entity-one 中select-field)限制查询字段只显示输出了workEffortId字段。输出结果如下:GenericEntity:WorkEffortPartyAssignmentworkEffortId,9000(java.lang.String),GenericEntity:WorkEffortPartyAssignmentworkEffortId,9002(java.lang.String),GenericEntity:WorkEffortPartyAssignmentworkEffortId,9100(java.lang.String),GenericEntity:WorkEffortPartyAssignmentworkEffortId,CALENDAR_PUB_DEMO(java.lang.String),GenericEntity:WorkEffortPartyAssignmentworkEffortId,OneOffMeeting(java.lang.String),GenericEntity:WorkEffortPartyAssignmentworkEffortId,STAFF_MTG(java.lang.String)entity-and 中属性 limit-range 效果展示 : 输出结果:GenericEntity:WorkEffortPartyAssignmentworkEffortId,9002(java.lang.String),GenericEntity:WorkEffortPartyAssignmentworkEffortId,9100(java.lang.String),GenericEntity:WorkEffortPartyAssignmentworkEffortId,CALENDAR_PUB_DEMO(java.lang.String)可以发现limit-range的功能为截取查询结果,从第$start(包括此条)数据起,截取$size条数据做为最终结果。entity-and 中属性 limit-view 效果展示 : 输出结果:GenericEntity:WorkEffortPartyAssignmentworkEffortId,9100(java.lang.String),GenericEntity:WorkEffortPartyAssignmentworkEffortId,CALENDAR_PUB_DEMO(java.lang.String)可以发现limit-view 类似于分页,将查询结果划分为每页$view-size条数据,取第$view-index页数据,如果用limit-view 来实现相同功能的话,需要设置start=3,size=2entity-and 中属性 use-iterator 效果展示 : 设置时输出结果为:the wepaList is a Iterator不设置时输出结果为:the wepaList is a List object可见设置使输出参数结果的格式发生了变化。如果设置了use-iterator ,却不使用EntityListIterator结果对象的话,会报错(待查验)总结:use-iterator、limit-view、limit-range 三者不能两两共存,且此三者所处位置必须在其他同级节点的后面。2.8 entity-condition: entity-condition 对实体$entity-name进行多条件组合逻辑查询。ofbiz 很多实体在创建的时候都会有两个字段,分别为fromDate 和 thruDate.这两个字段一般被用来代表当前数据的有效期间,既当前数据的有效期为大于等于fromDate 且 小于 thruDate 。 当fromDate 为null 时 则表示前端无限制, thruDate表示后端无限制。属性distinct很好理解,剔除重复数据。需要注意的是如果配合select-field 共同使用的时候,判断重复的条件是判断select-field 需要显示字段是否重复,而不是判断当前实体所有的字段,即SQL 执行顺序是 先select-field 再distinct。属性filter-by-date即为对记录表数据时间有效性的过滤,使用前提是当前实体必须有fromDate 和 thruDate这两个字段,且不能使用缓存进行查询 ,即use-cache=false,转化成sql 表示为(thruDate IS NULL OR thruDate 当前时间) AND (fromDate IS NULL OR fromDate = 当前时间)condition-expr为单个条件的逻辑判断,逻辑判断类型通过operator 进行设置,用法和if-compare类似。ignore-if-empty=true,当前字段为“”时是否忽略,意思是如果当前进行判断的字段为”则忽略此判断。同理ignore-if-null=true意思是如果当前进行判断的字段为null则忽略此判断.condition-list为多个条件的逻辑组合,通过combine对condition-list节点中的多个condition-expr 进行逻辑组合,逻辑关系主要有 “and” 和 “or” 两种。condition-object为使用当前simple 运行环境中已经存在的org.ofbiz.entity.condition.EntityCondition 类型的对象进行逻辑判断。having-condition-list一般用于带有group-by 查询的视图实体查询,首先对根据condition-list查询条件进行查询,然后再根据having-condition-list查询条件进行限制查询。 比如: 此视图实体全部使用WorkEffortPartyAssignment的参数,根据partyId进行分组,然后获取每组的数量。查询使用:首先根据三个partyId条件进行逻辑或进行分组查询,然后再对查询结果进行having-condition-list筛选。Sql 解析结果为:SELECT wepa.PARTY_ID, COUNT(wepa.PARTY_ID) FROM OFBIZ.WORK_EFFORT_PARTY_ASSIGNMENT wepa WHERE (wepa.PARTY_ID = admin OR wepa.PARTY_ID = DemoEmployee3 OR wepa.PARTY_ID = DemoEmployee2) GROUP BY wepa.PARTY_ID HAVING (COUNT(wepa.PARTY_ID) = 3)having-condition-list 用法同condition-list。总结:entity-condition当使用缓存进行查询时,不能使用distinct、having-condition-list、select-field。entity-condition查询限制条件最外层必须为condition-list、condition-expr、condition-object中的一个,三者不能两两并存。entity-condition的几个子节点配置先后顺序分别为:condition-list、condition-expr、condition-object三者中的一个、having-condition-list、select-field,order-by、use-iterator、limit-view、limit-range三者中的一个。2.9 entity-count:entity-count 查询$entity-name中符合条件的数据条数并赋值到 $count-field参数。条件配置与 entity-condition 一样。2.10 entity-data:2.11 find-by-primary-key:find-by-primary-key功能与entity-one 相同,不同的是find-by-primary-key需要将主键字段封装到一个map中,然后使用,显示字段slelect-field 也是需要先将需要显示的字段封装到一个list 中。: entity-name:查询实体名称。:value-field:查询结果得到的实体对象名称。:map: 一个map ,其中包含了主键字段。作为主要查询的依据。如果主键由多个字段组合而成,那么此map中需要包含所有的主键的字段信息。:fields-to-select-list: 一个list,配置查询结果中所包含的非主键字段,主键字段就不要再这里设置了。:use-cache:与entit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年河北省示范高中联盟高三10月月考语文试题
- 2025-2026年健身教练运动营养学测试卷
- 2025-2026年气候变化对生态系统服务影响评估模拟试题
- 2026年福建省部编版四年级数学第12课分数的混合运算知识点梳理课件
- 合同承诺书格式范文
- 2026年中医院医疗质量持续改进实施方案(2篇)
- 全国经济普查安徽投入产出调查研究课题申请书
- Unit 8 Let's Communicate Project 同步练习人教版英语八年级上册
- 外来施工单位安全培训教育试题及答案
- 危险化学品安全知识考核试题及答案
- 高校心理健康教育岗位笔试试题及答案2026年
- 2026年安全生产法知识竞赛试题库及答案
- 新版小学道德与法治新部编版六年级上册全册教案(2026秋版)合集
- 湖南文艺出版社四年级上音乐全册教案
- 2026秋新版苏教版小学科学四年级上册教学设计(附目录)适用于新课标
- 工程设计项目拟投入设计人员及设备
- 颅面部的生长发育课件
- (45)-7.5 大球盖菇高效栽培技术
- 实验室安全考试试题及答案
- 司法部定式公证书格式2023版
- GB/T 4909.1-2009裸电线试验方法第1部分:总则
评论
0/150
提交评论