ApacheOFBiz的相关介绍以及使用总结(二)
OFBiz的实体配置
<entity-resource type="model" reader-name="main" loader="main" location="entitydef/entitymodel.xml"/>
实体定义的命名规则
%ofbiz_home%\framework\entity\fieldtype\fieldtypeXXX.xml 其中XXX为你使用的数据库名称
<entity entity-name="DsConsultant" package-name="com.xxx.crm.drivingschool">
<field name="consultantId" type="id-ne"/>
<field name="consultantName" type="name"/>
<field name="consultantCode" type="name"/>
<field name="gender" type="indicator"/>
<field name="city" type="name"/>
<field name="email" type="name"/> <prim-key field="consultantId"/>
</entity>
普通实体
<entity entity-name="TenantDataSource" package-name="org.ofbiz.entity.tenant">
<description>
There should be one record for each tenant and each group-map for the active delegator.
The jdbc fields will override the datasource -> inline-jdbc values for the per-tenant delegator.
</description>
<field name="tenantId" type="id-ne"/>
<field name="entityGroupName" type="name"/>
<field name="jdbcUri" type="long-varchar"/>
<field name="jdbcUsername" type="long-varchar"/>
<field name="jdbcPassword" type="long-varchar"></field>
<prim-key field="tenantId"/>
<prim-key field="entityGroupName"/>
<relation type="one" fk-name="TNTDTSRC_TNT" rel-entity-name="Tenant">
<key-map field-name="tenantId"/>
</relation>
</entity>
视图实体
<view-entity entity-name="WorkEffortAssocView"
package-name="org.ofbiz.workeffort.workeffort"
title="Work Effort Association Entity with Name">
<member-entity entity-alias="WA" entity-name="WorkEffortAssoc"/>
<member-entity entity-alias="WETO" entity-name="WorkEffort"/>
<alias-all entity-alias="WA"/>
<alias entity-alias="WETO" name="workEffortToName" field="workEffortName"/>
<alias entity-alias="WETO" name="workEffortToSetup" field="estimatedSetupMillis"/>
<alias entity-alias="WETO" name="workEffortToRun" field="estimatedMilliSeconds"/>
<alias entity-alias="WETO" name="workEffortToParentId" field="workEffortParentId"/>
<alias entity-alias="WETO" name="workEffortToCurrentStatusId" field="currentStatusId"/>
<alias entity-alias="WETO" name="workEffortToWorkEffortPurposeTypeId" field="workEffortPurposeTypeId"/>
<alias entity-alias="WETO" name="workEffortToEstimatedStartDate" field="estimatedStartDate"/>
<alias entity-alias="WETO" name="workEffortToEstimatedCompletionDate" field="estimatedCompletionDate"/>
<alias entity-alias="WETO" name="workEffortToActualStartDate" field="actualStartDate"/>
<alias entity-alias="WETO" name="workEffortToActualCompletionDate" field="actualCompletionDate"/>
<view-link entity-alias="WA" rel-entity-alias="WETO">
<key-map field-name="workEffortIdTo" rel-field-name="workEffortId"/>
</view-link>
<relation type="one-nofk" fk-name="WK_EFFRTASSV_FWE" title="From" rel-entity-name="WorkEffort">
<key-map field-name="workEffortIdFrom" rel-field-name="workEffortId"/>
</relation>
</view-entity>
<member-entity entity-alias="SR" entity-name="DsStudentReservation"/>
<alias name="id" entity-alias="SR" field="id"/>
<view-link entity-alias="SR" rel-entity-alias="SS">
<key-map field-name="studentId" rel-field-name="id"/>
</view-link>
<alias-all entity-alias="ODD" prefix="orderDate" group-by="true">
<exclude field="dimensionId"/>
</alias-all>
<alias entity-alias="OI" name="quantityOrdered" function="sum">
<complex-alias operator="-">
<complex-alias-field entity-alias="OI"
field="quantity"
default-value="0"/>
<complex-alias-field entity-alias="OI"
field="cancelQuantity"
default-value="0"/>
</complex-alias>
</alias>
Select SUM((COALESCE(OI.QUANTITY, 0) - COALESCE(OI.CANCEL_QUANTITY, 0)))
<alias entity-alias="OI" >
<complex-alias operator="-">
<complex-alias-field entity-alias="OI"
field="quantity"
default-value="0"
function="sum"/>
<complex-alias-field entity-alias="OI"
field="cancelQuantity"
default-value="0"
function="sum"/>
</complex-alias>
</alias>
SELECT (SUM(COALESCE(OI.QUANTITY,'0')) - SUM(COALESCE(OI.CANCEL_QUANTITY,'0')))
Delegator
Delegator delegator = ctx.getDelegator();
String id = delegator.getNextSeqId("ServiceCar");
GenericValue dsServiceCar = delegator.makeValue("ServiceCar", UtilMisc.toMap(
"id", id,
"carType", context.get("carType")
"carNumber", context.get("carNumber"),
"coachId", context.get("coachId"),
"phone", context.get("phone")
));
delegator.create(dsServiceCar);
java.lang.Exception: Failure in create operation for entity [DsSignupStudent]: org.ofbiz.entity.GenericEntityException:
Error while inserting: [GenericEntity:DsSignupStudent][carType,DRIVING_TYPE_C1(java.lang.String)][comment,null()][commissionFee,0(java.lang.Long)][consultantId,10020(java.lang.String)][course1Time,0(java.lang.Long)][course2Time,0(java.lang.Long)][course3Time,0(java.lang.Long)][createdStamp,2015-10-10 09:44:05.147(java.sql.Timestamp)][createdTxStamp,2015-10-10 09:44:05.146(java.sql.Timestamp)][drivingSchoolId,2(java.lang.String)][handleBy,null()][id,10122(java.lang.String)][idCard,2123123(java.lang.String)][infoChannel,INFO_CHANNEL_NET(java.lang.String)][isBodyCheckTable,null()][isCommissionPayed,null()][isContractTable,null()][isFinger,null()][isGivenMaterial,null()][isIdCardTable,null()][isPersonalPhoto,null()][isReceipt,null()][isSignupTable,null()][isUrgent,null()][lastUpdatedStamp,2015-10-10 09:44:05.147(java.sql.Timestamp)][lastUpdatedTxStamp,2015-10-10 09:44:05.146(java.sql.Timestamp)][localTrain,LOCAL_TRAIN_BD(java.lang.String)][name,a1(java.lang.String)][nextVisitDate,2015-10-11(java.sql.Date)][payForm,PAY_FORM_CARD(java.lang.String)][payMethod,PAY_METHOD_ALL(java.lang.String)][payedFee,111(java.lang.Long)][phone,122(java.lang.String)][referrerId,null()][serviceCityId,2(java.lang.String)][signupDate,2015-10-10(java.sql.Date)][signupFee,111(java.lang.Long)][signupStore,SIGNUP_STORE_FHD(java.lang.String)][studentStatus,STUDENT_STATUS_Y(java.lang.String)][studyProgress,STUDY_PROGRESS_LR(java.lang.String)][trainType,TRAIN_TYPE_ZX(java.lang.String)][trainingSiteId,10000(java.lang.String)] (SQL Exception while executing the following:INSERT INTO DS_SIGNUP_STUDENT (ID, SERVICE_CITY_ID, SIGNUP_STORE, NAME, ID_CARD, PHONE, CAR_TYPE, SIGNUP_FEE, PAY_METHOD, PAY_FORM, PAYED_FEE, SIGNUP_DATE, STUDY_PROGRESS, DRIVING_SCHOOL_ID, LOCAL_TRAIN, TRAIN_TYPE, INFO_CHANNEL, TRAINING_SITE_ID, CONSULTANT_ID, REFERRER_ID, NEXT_VISIT_DATE, STUDENT_STATUS, COMMENT, COURSE1_TIME, COURSE2_TIME, COURSE3_TIME, IS_ID_CARD_TABLE, IS_BODY_CHECK_TABLE, IS_SIGNUP_TABLE, IS_PERSONAL_PHOTO, IS_CONTRACT_TABLE, IS_RECEIPT, IS_FINGER, IS_GIVEN_MATERIAL, IS_URGENT, HANDLE_BY, COMMISSION_FEE, IS_COMMISSION_PAYED, IS_EXAM_FEE_PAYED, LAST_UPDATED_STAMP, LAST_UPDATED_TX_STAMP, CREATED_STAMP, CREATED_TX_STAMP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) (Duplicate entry '10122' for key 'PRIMARY')).
Rolling back transaction.
at
org.ofbiz.entity.transaction.TransactionUtil.setRollbackOnly(TransactionUtil.java:378) [ofbiz-entity-test.jar:?]
select * from sequence_value_item;

condition = EntityCondition.makeCondition(EntityJoinOperator.AND,EntityCondition.makeCondition("isConfirmed", EntityOperator.EQUALS, 'Y'),cityCondition,deleteCondition);
context.allRecords = delegator.findList("DsStudentPayRecordView", condition, null, ["-recordDate"], null, false);
在配置文件entityengine.xml中,需要使用GenericHelperDAO:
<datasource name="localmysqlolap"
helper-class="org.ofbiz.entity.datasource.GenericHelperDAO"
field-type-name="mysql"
check-on-start="true"
add-missing-on-start="true"
check-pks-on-start="false"
use-foreign-keys="true"
join-style="ansi-no-parenthesis"
alias-view-columns="false"
drop-fk-use-foreign-key-keyword="true"
table-type="InnoDB"
character-set="utf8"
collate="utf8_general_ci">
<read-data reader-name="tenant"/>
<read-data reader-name="seed"/>
<read-data reader-name="seed-initial"/>
<read-data reader-name="demo"/>
<read-data reader-name="ext"/>
<read-data reader-name="ext-test"/>
<read-data reader-name="ext-demo"/>
<inline-jdbc
jdbc-driver="com.mysql.jdbc.Driver"
jdbc-uri="jdbc:mysql://xxx.com:3306/xxx?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false"
jdbc-username="xxx"
jdbc-password="xxxx"
isolation-level="ReadCommitted"
pool-minsize="2"
pool-maxsize="250"
time-between-eviction-runs-millis="600000"/><!-- Please note that at least one person has experienced a problem with this value with MySQL
and had to set it to -1 in order to avoid this issue.
For more look at http://markmail.org/thread/5sivpykv7xkl66px and http://commons.apache.org/dbcp/configuration.html-->
<!-- <jndi-jdbc jndi-server-name="localjndi" jndi-name="java:/MySqlDataSource" isolation-level="Serializable"/> -->
</datasource>
找到其中的group-name,在本文件声明中的group-name为:
<delegator name="test" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main">
<group-map group-name="org.ofbiz" datasource-name="localmysql"/>
<group-map group-name="org.ofbiz.olap" datasource-name="localmysqlolap"/>
<group-map group-name="org.ofbiz.tenant" datasource-name="localmysqltenant"/> </delegator>
可以看出,对应的group-name为org.ofbiz.tenant,使用这个group-name来构建SQLProcessor,就可以进行数据库SQL查询。
在Groovy中的写法为:
sqlProcessor = new SQLProcessor(delegator.getGroupHelperInfo("org.ofbiz.tenant"));
result = sqlProcessor.executeQuery("select * from xxx")
while (result.next()){
println result.getString("id")
}
可以通过调用ResultSet的方式进行数据库的查询操作,此时SQL就需要为可以在数据库中直接查询的SQL了。
ApacheOFBiz的相关介绍以及使用总结(二)的更多相关文章
- ApacheOFBiz的相关介绍以及使用总结(一)
由于最近一段时间在给一个创业的公司做客户关系管理CRM系统,限于人力要求(其实是没有多少人力),只能看能否有稳定,开源的半成品进行改造,而且最好不需要前端(js)相关开发人员的支援就可以把事情做成,经 ...
- ApacheOFBiz的相关介绍以及使用总结(三)
Ofbiz中还提供了一些基础性服务,可以直接用来使用,下面就简单介绍说明一下. ofbiz邮件发送服务 ofbiz中提供发送邮件相关功能:sendMailFromScreen contex ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍
其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...
- Django day 33 vue中使用element-ui的使用,课程的相关介绍,vue绑定图片,课程列表接口,课程详情页面
一:vue中使用element-ui的使用, 二:课程的相关介绍, 三:vue绑定图片, 四:课程列表接口, 五:课程详情页面
- Vue 封装axios(四种请求)及相关介绍(十三)
Vue 封装axios(四种请求)及相关介绍 首先axios是基于promise的http库 promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的 ...
- ppDelegate的相关介绍
// AppDelegate的相关介绍// IOS笔记 //@interface AppDelegate : UIResponder <UIApplicationDelegate>// ...
- 【个人笔记】002-PHP基础-01-PHP快速入门-02-PHP语言相关介绍输
002-PHP基础-01-PHP快速入门 02-PHP语言相关介绍 1.PHP是什么 Hypertext Preprocessor超文本预处理器 是一种通用开源脚本语言 Personal Home P ...
- Android HttpClient HttpURLConnection相关介绍
Android HttpClient HttpURLConnection相关介绍 遇到一个问题 在android studio上用HttpClient编写网络访问代码的时候,发现该类无法导入并使用.. ...
- java 并发多线程 锁的分类概念介绍 多线程下篇(二)
接下来对锁的概念再次进行深入的介绍 之前反复的提到锁,通常的理解就是,锁---互斥---同步---阻塞 其实这是常用的独占锁(排它锁)的概念,也是一种简单粗暴的解决方案 抗战电影中,经常出现为了阻止日 ...
随机推荐
- 20165202 2017-2018-2《Java程序设计》课程总结
每周作业链接汇总 ++预备作业一:我期待的师生关系++ ++预备作业二:学习基础和C语言基础调查++ ++预备作业三:linux安装及学习++ ++第一周作业:初识JAVA,注册码云并配置Git++ ...
- Linux文件操作及管理
---恢复内容开始--- 一.Linux系统的结构 1.Linux是一个倒树型结构,最大的目录名称为“/”(根目录) 2.Linux系统的二级目录 /bin ##binary二进制可执行文件, ...
- CUDA Samples: Streams' usage
以下CUDA sample是分别用C++和CUDA实现的流的使用code,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第十章,各个文件内容如 ...
- iOS TUN之避免UDP包ip分片
iOS的NetworkExtension给应用暴露了一个虚拟网卡TUN设备,可以设置其MTU值.如果上层应用发送的IP包大于这个MTU就会被分片.(详见:http://blog.csdn.net/n5 ...
- node.js 之爬虫
1. cheerio 与 request request:模拟客户端行为,对页面进行请求 cheerio:对服务器端返回的页面进行解析: var cheerio = require('cheerio' ...
- System.Net.FtpClient改进
项目用到Ftp,搜了下现有的类库System.Net.FtpClient 貌似比较不错. 一开始用着还行,但是有个FtpServer下有8k多内容,列表需要很久(7.8s)才能刷新出来. 翻源码吧,有 ...
- erl_0016 《硝烟中的erlang》 读书笔记003 “error_logger 爆炸”
error_logger 爆炸 具有讽刺意味的是,负责错误日志的进程竟然是最为脆弱的之一.在Erlang的缺省安装中,error_logger39负责记录日志(写入磁盘或者发送到网络上),它的速度要比 ...
- js 字符串和数组注意点
var a="foo"; var b=[ "f","o","o"]; a[1]="o"; b[1]= ...
- Loj 2534 异或序列
Loj 2534 异或序列 考虑莫队离线处理.每加一个数,直接询问 \(a[x]\oplus k\) 的前/后缀数目即可,减同理. 利用异或的优秀性质,可以维护异或前缀和,容易做到每次 \(O(1)\ ...
- atom的设置
1.隐藏Keybinding Resolver Packages->Keybinding Resolver->Toggle.