﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-spark的自留地(ofbiz/eclipse rcp/shark/opentaps)-随笔分类-opentaps</title><link>http://www.blogjava.net/hispark/category/34942.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 07 Mar 2012 03:54:07 GMT</lastBuildDate><pubDate>Wed, 07 Mar 2012 03:54:07 GMT</pubDate><ttl>60</ttl><item><title>Opentaps + Oracle 安装</title><link>http://www.blogjava.net/hispark/archive/2012/03/07/371381.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Wed, 07 Mar 2012 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2012/03/07/371381.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/371381.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2012/03/07/371381.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/371381.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/371381.html</trackback:ping><description><![CDATA[
默认Opentaps是基于derby的安装，这个在实际生产环境是不太可能会使用的。往往我们会实际需要使用Oracle作为生产数据库。很多人问我怎么去修改Opentaps与Oracle的支持。修改方法如下：<br /><br />1、编辑 framework/entity/config/entityengine.xml，修改default delegate为 localoracle<br /><br />
<div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">delegator </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="default"</span><span style="color: rgb(255, 0, 0);"> entity-model-reader</span><span style="color: rgb(0, 0, 255);">="main"</span><span style="color: rgb(255, 0, 0);"> entity-group-reader</span><span style="color: rgb(0, 0, 255);">="main"</span><span style="color: rgb(255, 0, 0);"> entity-eca-reader</span><span style="color: rgb(0, 0, 255);">="main"</span><span style="color: rgb(255, 0, 0);"> distributed-cache-clear-enabled</span><span style="color: rgb(0, 0, 255);">="false"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">group-map </span><span style="color: rgb(255, 0, 0);">group-name</span><span style="color: rgb(0, 0, 255);">="org.ofbiz"</span><span style="color: rgb(255, 0, 0);"> datasource-name</span><span style="color: rgb(0, 0, 255);">="localoracle"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">group-map </span><span style="color: rgb(255, 0, 0);">group-name</span><span style="color: rgb(0, 0, 255);">="org.ofbiz.olap"</span><span style="color: rgb(255, 0, 0);"> datasource-name</span><span style="color: rgb(0, 0, 255);">="localoracle"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">group-map </span><span style="color: rgb(255, 0, 0);">group-name</span><span style="color: rgb(0, 0, 255);">="org.ofbiz.tenant"</span><span style="color: rgb(255, 0, 0);"> datasource-name</span><span style="color: rgb(0, 0, 255);">="localoracle"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">group-map </span><span style="color: rgb(255, 0, 0);">group-name</span><span style="color: rgb(0, 0, 255);">="org.opentaps.analytics"</span><span style="color: rgb(255, 0, 0);"> datasource-name</span><span style="color: rgb(0, 0, 255);">="localoracle"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">group-map </span><span style="color: rgb(255, 0, 0);">group-name</span><span style="color: rgb(0, 0, 255);">="org.opentaps.testing"</span><span style="color: rgb(255, 0, 0);"> datasource-name</span><span style="color: rgb(0, 0, 255);">="localoracle"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">delegator</span><span style="color: rgb(0, 0, 255);">&gt;</span></div><br /><br />2、修改同个文件中的的localoracle 的datasource节点<div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">datasource&nbsp;name</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">localoracle</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">org.ofbiz.entity.datasource.GenericHelperDAO</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;schema</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">OFBIZ</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">type</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">oracle</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">on</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">start</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">true</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">missing</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">on</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">start</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">true</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alias</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">view</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">columns</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">false</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;join</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">style</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">ansi</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">read</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">data&nbsp;reader</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">seed</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">read</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">data&nbsp;reader</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">seed-initial</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">read</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">data&nbsp;reader</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">demo</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">read</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">data&nbsp;reader</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">ext</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">inline</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">jdbc<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">driver</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">oracle.jdbc.driver.OracleDriver</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">uri</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">jdbc:oracle:thin:@127.0.0.1:1521:orcl</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">username</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">ofbiz</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">password</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">ofbiz</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pool</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">minsize</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pool</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">maxsize</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">250</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">between</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">eviction</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">runs</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">millis</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">600000</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;/</span><span style="color: rgb(0, 0, 0);">datasource</span><span style="color: rgb(0, 0, 0);">&gt;</span></div><br />3、将{ORACLE_HOME}\product\10.2.0\db_1\jdbc\lib目录下的ojdbc14.jar拷贝到framework/entity/lib/jdbc目录下<br /><br />4、重新运行ant run-install生成数据库对象<br /><br />5、现在Oracle数据库已经就绪OK啦<br />
<br />
<br />
<img src ="http://www.blogjava.net/hispark/aggbug/371381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2012-03-07 10:56 <a href="http://www.blogjava.net/hispark/archive/2012/03/07/371381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>整合Magento和Opentaps提供完整的电子商务运营平台</title><link>http://www.blogjava.net/hispark/archive/2011/03/01/345394.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Tue, 01 Mar 2011 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2011/03/01/345394.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/345394.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2011/03/01/345394.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/345394.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/345394.html</trackback:ping><description><![CDATA[我一直期望可以提供一个高性能、高定制性的电子商务套件，它不应局限于传统的ERP应用或简单的线上商城应用。而是应将线上发生的产品展示、线上营销、在线客户服务与线下的仓储发货、经营分析、关键客户识别有机结合起来。<br />
<br />
开始Opentaps开发已经两年多了，对它的理解也越来越深。做为一个完整的ERP套件来说我觉得它足够应付我们的日常业务：客户、订单、仓储、采购、财务等。并且它从应用层和开发层都已经提供了足够的支持与扩展空间。<br />
<br />
我始终觉得Ofbiz提供的ecommerce模块过于简单，或者说它与我们国人想象中的电子商城有比较大的差距。如果我们在这之上来开发的话可以需要付出很多的effort才可能达到我们想要的效果。当然opentaps也提供了另一个选择gracious，但从个人角度来说我并不喜欢这个模块，它为用户提供的定制选项太少了，只能作为有经验的开发者定制自己应用的一个基础。<br />
<br />
在为Opentaps开发Magento开发Integration Feature时，我接触到了Magento这个最广泛被使用的电子商务套件。不过当时只是浅尝即止并未做太多的功能研究，最近这些日子里我在不断深入了解了这个产品后越来越叹服其功能的强大。我想我想要的所有功能应该都被包括在这个产品已完成的feature中了。但同样我更期望是一个完整的线上线下相贯通的网络商城运营方案，离这样的要求Magento在财务结算、仓储管理、采购管理这些ERP功能方面又明显的偏弱。<br />
<br />
我想Opentaps与Magento的整合可能不应仅限与原来所提供的产品、订单信息的贯通，或许我们应该尝试提供更密切的信息联系。至少第一步应该要把客户资料信息进行双向的同步，然后是库存信息。<br />
<br />
考虑更远一点的话，在Magento或Opentaps中引入在线客服与呼叫中心的Feature也是一个非常让人振奋的事情。发展到这一步，我们就可以简单的集成这两个优秀开源产品来为我们的线上线下提供全方面的服务了。<br />
<br />
在以后的文章里，我会继续在这个方面做更多的设计与实现工作。如果有童鞋对此话题感兴趣，可以把你的想法告诉我看是否可以一起来做点事。<br />
<br />
<br />
BTW: 现在opentaps已完成的magento整合内容可以在这里找到 <a href="http://www.opentaps.org/docs/index.php/Opentaps_Magento_Integration">http://www.opentaps.org/docs/index.php/Opentaps_Magento_Integration</a><br />
<img src ="http://www.blogjava.net/hispark/aggbug/345394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2011-03-01 09:42 <a href="http://www.blogjava.net/hispark/archive/2011/03/01/345394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Opentaps在Windows 64位系统下编译AOP模块出错的解决方法</title><link>http://www.blogjava.net/hispark/archive/2011/02/09/343993.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Wed, 09 Feb 2011 14:18:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2011/02/09/343993.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/343993.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2011/02/09/343993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/343993.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/343993.html</trackback:ping><description><![CDATA[在Opentaps 1.4版本我将AOP由原来的AspectJ替换为现在Aspectwerkz。结果我自己就首先在64bit的windows系统下遇到ant编译出错，现在把解决方法列在这里<br />
<br />
将opentaps/opentaps-common/build-aspects.xml中的weave任务内容替换为以下内容（其实就是把原来的ant的替换jar内容任务分成两部来执行）：<br />
<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;==================================================================&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Weave&nbsp;advice&nbsp;into&nbsp;target&nbsp;jars&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;==================================================================&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">target&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="weave"</span><span style="color: #ff0000;">&nbsp;depends</span><span style="color: #0000ff;">="detect-dependencies"</span><span style="color: #ff0000;">&nbsp;if</span><span style="color: #0000ff;">="processRequired"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">echo&nbsp;</span><span style="color: #ff0000;">message</span><span style="color: #0000ff;">="[build]&nbsp;===========&nbsp;Start&nbsp;Building&nbsp;Aspect&nbsp;(Weave)&nbsp;============="</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">java&nbsp;</span><span style="color: #ff0000;">classname</span><span style="color: #0000ff;">="org.codehaus.aspectwerkz.compiler.AspectWerkzC"</span><span style="color: #ff0000;">&nbsp;fork</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">jvmarg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="-Daspectwerkz.definition.file=${aopConfig}"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">jvmarg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="-Daspectwerkz.transform.filter=no"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&lt;jvmarg&nbsp;value="-Daspectwerkz.transform.verbose=true"/&gt;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&lt;jvmarg&nbsp;value="-Daspectwerkz.transform.details=true"/&gt;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="-verify"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">classpath&nbsp;</span><span style="color: #ff0000;">refid</span><span style="color: #0000ff;">="local.class.path"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">classpath</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">pathelement&nbsp;</span><span style="color: #ff0000;">path</span><span style="color: #0000ff;">="${build.dir}/classes/common"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">classpath</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;below&nbsp;is&nbsp;the&nbsp;jars&nbsp;to&nbsp;post-process&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="${ofbiz.dir}/framework/entity/build/lib/ofbiz-entity.jar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">java</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">java&nbsp;</span><span style="color: #ff0000;">classname</span><span style="color: #0000ff;">="org.codehaus.aspectwerkz.compiler.AspectWerkzC"</span><span style="color: #ff0000;">&nbsp;fork</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">jvmarg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="-Daspectwerkz.definition.file=${aopConfig}"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">jvmarg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="-Daspectwerkz.transform.filter=no"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&lt;jvmarg&nbsp;value="-Daspectwerkz.transform.verbose=true"/&gt;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&lt;jvmarg&nbsp;value="-Daspectwerkz.transform.details=true"/&gt;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="-verify"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">classpath&nbsp;</span><span style="color: #ff0000;">refid</span><span style="color: #0000ff;">="local.class.path"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">classpath</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">pathelement&nbsp;</span><span style="color: #ff0000;">path</span><span style="color: #0000ff;">="${build.dir}/classes/common"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">classpath</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;below&nbsp;is&nbsp;the&nbsp;jars&nbsp;to&nbsp;post-process,&nbsp;if&nbsp;these&nbsp;jar&nbsp;not&nbsp;effect&nbsp;each&nbsp;other&nbsp;you&nbsp;can&nbsp;put&nbsp;them&nbsp;in&nbsp;same&nbsp;pos,&nbsp;else&nbsp;please&nbsp;seperate&nbsp;them&nbsp;into&nbsp;another&nbsp;task&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="${ofbiz.dir}/framework/common/build/lib/ofbiz-common.jar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">java</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">java&nbsp;</span><span style="color: #ff0000;">classname</span><span style="color: #0000ff;">="org.codehaus.aspectwerkz.compiler.AspectWerkzC"</span><span style="color: #ff0000;">&nbsp;fork</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">jvmarg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="-Daspectwerkz.definition.file=${aopConfig}"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">jvmarg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="-Daspectwerkz.transform.filter=no"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&lt;jvmarg&nbsp;value="-Daspectwerkz.transform.verbose=true"/&gt;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&lt;jvmarg&nbsp;value="-Daspectwerkz.transform.details=true"/&gt;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="-verify"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">classpath&nbsp;</span><span style="color: #ff0000;">refid</span><span style="color: #0000ff;">="local.class.path"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">classpath</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">pathelement&nbsp;</span><span style="color: #ff0000;">path</span><span style="color: #0000ff;">="${build.dir}/classes/common"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">classpath</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;below&nbsp;is&nbsp;the&nbsp;jars&nbsp;to&nbsp;post-process&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="${ofbiz.dir}/applications/order/build/lib/ofbiz-order.jar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">java</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">jar&nbsp;</span><span style="color: #ff0000;">jarfile</span><span style="color: #0000ff;">="${lib.dir}/${name}.jar"</span><span style="color: #ff0000;">&nbsp;update</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;basedir</span><span style="color: #0000ff;">="${build.dir}/classes/common"</span><span style="color: #ff0000;">&nbsp;includes</span><span style="color: #0000ff;">="org/opentaps/aspect/secas/**"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;put&nbsp;aop.xml&nbsp;into&nbsp;target&nbsp;jar&nbsp;META-INF&nbsp;dir&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mkdir&nbsp;</span><span style="color: #ff0000;">dir</span><span style="color: #0000ff;">="${build.dir}/classes/META-INF"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">copy&nbsp;</span><span style="color: #ff0000;">file</span><span style="color: #0000ff;">="${aopConfig}"</span><span style="color: #ff0000;">&nbsp;tofile</span><span style="color: #0000ff;">="${build.dir}/classes/META-INF/aop.xml"</span><span style="color: #ff0000;">&nbsp;overwrite</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;create&nbsp;new&nbsp;jar&nbsp;with&nbsp;aop.xml,&nbsp;then&nbsp;copy&nbsp;it&nbsp;to&nbsp;orign&nbsp;location,&nbsp;using&nbsp;these&nbsp;for&nbsp;avoid&nbsp;unable&nbsp;rename&nbsp;error&nbsp;on&nbsp;windows&nbsp;64bit&nbsp;system</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">zip&nbsp;</span><span style="color: #ff0000;">destfile</span><span style="color: #0000ff;">="${lib.dir}/ofbiz-entity.jar"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">zipfileset&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="${ofbiz.dir}/framework/entity/build/lib/ofbiz-entity.jar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">fileset&nbsp;</span><span style="color: #ff0000;">dir</span><span style="color: #0000ff;">="${build.dir}/classes/"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">include&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="META-INF/aop.xml"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">fileset</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">zip</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">delete&nbsp;</span><span style="color: #ff0000;">file</span><span style="color: #0000ff;">="${ofbiz.dir}/framework/entity/build/lib/ofbiz-entity.jar"</span><span style="color: #ff0000;">&nbsp;failonerror</span><span style="color: #0000ff;">="false"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">move&nbsp;</span><span style="color: #ff0000;">file</span><span style="color: #0000ff;">="${lib.dir}/ofbiz-entity.jar"</span><span style="color: #ff0000;">&nbsp;tofile</span><span style="color: #0000ff;">="${ofbiz.dir}/framework/entity/build/lib/ofbiz-entity.jar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">zip&nbsp;</span><span style="color: #ff0000;">destfile</span><span style="color: #0000ff;">="${lib.dir}/ofbiz-common.jar"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">zipfileset&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="${ofbiz.dir}/framework/common/build/lib/ofbiz-common.jar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">fileset&nbsp;</span><span style="color: #ff0000;">dir</span><span style="color: #0000ff;">="${build.dir}/classes/"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">include&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="META-INF/aop.xml"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">fileset</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">zip</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">delete&nbsp;</span><span style="color: #ff0000;">file</span><span style="color: #0000ff;">="${ofbiz.dir}/framework/common/build/lib/ofbiz-common.jar"</span><span style="color: #ff0000;">&nbsp;failonerror</span><span style="color: #0000ff;">="false"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">move&nbsp;</span><span style="color: #ff0000;">file</span><span style="color: #0000ff;">="${lib.dir}/ofbiz-common.jar"</span><span style="color: #ff0000;">&nbsp;tofile</span><span style="color: #0000ff;">="${ofbiz.dir}/framework/common/build/lib/ofbiz-common.jar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">zip&nbsp;</span><span style="color: #ff0000;">destfile</span><span style="color: #0000ff;">="${lib.dir}/ofbiz-order.jar"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">zipfileset&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="${ofbiz.dir}/applications/order/build/lib/ofbiz-order.jar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">fileset&nbsp;</span><span style="color: #ff0000;">dir</span><span style="color: #0000ff;">="${build.dir}/classes/"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">include&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="META-INF/aop.xml"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">fileset</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">zip</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">delete&nbsp;</span><span style="color: #ff0000;">file</span><span style="color: #0000ff;">="${ofbiz.dir}/applications/order/build/lib/ofbiz-order.jar"</span><span style="color: #ff0000;">&nbsp;failonerror</span><span style="color: #0000ff;">="false"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">move&nbsp;</span><span style="color: #ff0000;">file</span><span style="color: #0000ff;">="${lib.dir}/ofbiz-order.jar"</span><span style="color: #ff0000;">&nbsp;tofile</span><span style="color: #0000ff;">="${ofbiz.dir}/applications/order/build/lib/ofbiz-order.jar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">echo&nbsp;</span><span style="color: #ff0000;">message</span><span style="color: #0000ff;">="[build]&nbsp;===========&nbsp;Done&nbsp;Building&nbsp;Aspect&nbsp;(Weave)&nbsp;=============="</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span></div>
<br />
<br />
以上方法已经在opentaps wiki ［<a href="http://www.opentaps.org/docs/index.php/General_Installation_of_Opentaps#Build_Aspect_class_Errors">http://www.opentaps.org/docs/index.php/General_Installation_of_Opentaps#Build_Aspect_class_Errors</a>］ 中加上过了。<br />
<img src ="http://www.blogjava.net/hispark/aggbug/343993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2011-02-09 22:18 <a href="http://www.blogjava.net/hispark/archive/2011/02/09/343993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>给OFBIZ POS模块加上查询库存特性</title><link>http://www.blogjava.net/hispark/archive/2011/02/08/343945.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Tue, 08 Feb 2011 03:29:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2011/02/08/343945.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/343945.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2011/02/08/343945.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/343945.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/343945.html</trackback:ping><description><![CDATA[OFBIZ为我们提供了POS模块，它已经可以满足我们日常收银的大部分要求了。但是美中不足的是它没有提供库存查询功能。我也没看出来OFBIZ有近期实现此功能的计划，所以打算自己做一个。<br />
<br />
首先研究一下POS模块的代码结构：<br />
<br />
1、POS模块同其它模块的实现方式有所区别，它用了XUL技术来定制展示的界面。所有屏幕文件使用XUL格式定义于screens目录之下<br />
<br />
2、按钮事件与java代码映射关系，记录在config\buttonevents.xml下<br />
<br />
3、资源文件存放在XuiLabels_[locale].properties与config\PosUiLabels.xml中<br />
<br />
了解结构后，加上库存查询功能就很简单了，我是这样做的：<br />
<br />
1、在screens/default/menu/mgrmain.xml中增加一个mgrInquiryInventory库存查询按钮，它会出现在POS的&#8220;经理&#8221;界面中的<br />
<br />
2、在buttonevents.xml中加上以下行，映射事件代码<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">event&nbsp;</span><span style="color: #ff0000;">button-name</span><span style="color: #0000ff;">="mgrInquiryInventory"</span><span style="color: #ff0000;">&nbsp;class-name</span><span style="color: #0000ff;">="org.ofbiz.pos.event.ManagerEvents"</span><span style="color: #ff0000;">&nbsp;method-name</span><span style="color: #0000ff;">="inquiryInventory"</span><span style="color: #ff0000;">&nbsp;disable-lock</span><span style="color: #0000ff;">="false"</span><span style="color: #0000ff;">/&gt;</span></div>
<br />
<br />
3、在ManagerEvents.java中加入inquiryInventory方法代码（我是使用了一个ShowInventory的XPage来展现当前选中项的库存分布）<br />
<br />
4、完工。<br />
<br />
算了算，包括阅读代码和编写这些东东总共也就花了七八个小时的effort，不知道为什么ofbiz就不肯加上这个功能呢？或者pos模块不再发展了？<br />
<br />
<br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/hispark/pos.png" width="1022" height="727" /><br />
<br />
<img src ="http://www.blogjava.net/hispark/aggbug/343945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2011-02-08 11:29 <a href="http://www.blogjava.net/hispark/archive/2011/02/08/343945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>The Data Model Resource Book - 读书笔记</title><link>http://www.blogjava.net/hispark/archive/2009/01/14/251226.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Wed, 14 Jan 2009 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2009/01/14/251226.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/251226.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2009/01/14/251226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/251226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/251226.html</trackback:ping><description><![CDATA[<p>为了进一步了解ofbiz/opentaps的ER模型，硬着头皮看了《The Data Model Resource Book》差不多两周。虽然还是有些地方有点吃不准，总体来说还是收益良多。我尝试将它的思想与我以往用过或是我了解的对业务建模的ER模型进行对比，可以在以后的开发中汲取经验：<br />
<br />
1、实体之间的关系或是本身的描述都是有生命周期的，这一点从ER Diagram中随处可见的From Date 与Thru Date可以充分体现出来。<br />
<br />
2、以第三方角度对业务建模而非&#8220;我&#8221;方角度建模，这个比较有趣，通常来说我们会把销售订单与采购订单分成两个实体，这是因为我们从使用者角度来看销售订单与采购订单是不同的业务类型，而从第三方角度来着，销售订单与采购订单都是当事人之间发生的采购/销售业务，关心的业务内容与属性完全一致，而这样建模可以带来大量的业务逻辑共用与可扩展性。<br />
</p>
3、抽象层次较高的业务实体，通过属性内容进一步细化业务对象。<br />
<br />
这是我感觉比较重点的几个点，先记下！
<img src ="http://www.blogjava.net/hispark/aggbug/251226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2009-01-14 10:57 <a href="http://www.blogjava.net/hispark/archive/2009/01/14/251226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Inventory Item序列化的含义</title><link>http://www.blogjava.net/hispark/archive/2009/01/07/250366.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Wed, 07 Jan 2009 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2009/01/07/250366.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/250366.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2009/01/07/250366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/250366.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/250366.html</trackback:ping><description><![CDATA[看opentaps关于库存管理的文档时,总是被Serialized Inventory Item与Non Serialized Inventory Item弄得一头雾水.<br />
<br />
看了一下&lt;&lt;The Data Model Resource Book&gt;&gt;的这段话才弄明白：<br />
The INVENTORY ITEM may be either a SERIALIZED INVENTORY ITEM,which means each item's serial num(ber) is tracked, or a NON-SERIALIZED<br />
INVENTORY ITEM, which means a group of items is tracked together and the quantity on hand for these is maintained by their location.<br />
<br />
即产品是按个体单独跟踪，还是按相同群体特征进行数据和存放地点跟踪管理．<br />
<br />
记下来，不要下次再忘记了！
<img src ="http://www.blogjava.net/hispark/aggbug/250366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2009-01-07 16:42 <a href="http://www.blogjava.net/hispark/archive/2009/01/07/250366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MINILANG 开发指导烹调书</title><link>http://www.blogjava.net/hispark/archive/2008/10/31/237744.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Fri, 31 Oct 2008 01:21:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/10/31/237744.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/237744.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/10/31/237744.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/237744.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/237744.html</trackback:ping><description><![CDATA[<p>* 如何在minilang中使用Java静态方法获得数据<br />
使用beanshell脚本:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">set&nbsp;</span><span style="color: #ff0000">field</span><span style="color: #0000ff">="notApplied"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="${bsh:org.ofbiz.accounting.invoice.InvoiceWorker.getInvoiceNotApplied(invoice)}"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="Double"</span><span style="color: #0000ff">/&gt;</span></div>
<p>&nbsp;</p>
<p>警告:你必须使用type=""来转换你的结果类型,否则的话,它将返回字符串类型.</p>
<p><br />
* 如何在minilang中调用Java程序<br />
你可以在minilang中插入一段beanshell代码,类似于 applications/ecommerce/script/org/ofbiz/ecommerce/customer/CustomerEvents.xml的示例:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">call-bsh</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;![CDATA[</span><span style="color: #808080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;password&nbsp;=&nbsp;(String)&nbsp;userLoginContext.get("currentPassword");<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;confirmPassword&nbsp;=&nbsp;(String)&nbsp;userLoginContext.get("currentPasswordVerify");<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;passwordHint&nbsp;=&nbsp;(String)&nbsp;userLoginContext.get("passwordHint");<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.ofbiz.securityext.login.LoginServices.checkNewPassword(newUserLogin,&nbsp;null,&nbsp;password,&nbsp;confirmPassword,&nbsp;passwordHint,&nbsp;error_list,&nbsp;true,&nbsp;locale);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">]]&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">call-bsh</span><span style="color: #0000ff">&gt;</span></div>
<p><br />
&nbsp; 在beanshell脚本中可以访问在minilang中所有的变量</p>
<p><br />
* 清除 与 刷新的比较<br />
&nbsp; &lt;clear-field field-name="foo"/&gt; 设置它为null. 这可以是一个类的属性或是集合中的一个值<br />
&nbsp; &lt;refresh-value value-name="foo"/&gt; 从数据库中重新获得foo的值. foo必须是一个GenericValue.<br />
</p>
<p><br />
* 如何设置一个布尔值<br />
&nbsp;我无法找到任何例子,但是我这样做是成功的:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">set&nbsp;</span><span style="color: #ff0000">field</span><span style="color: #0000ff">="orderAvailableCtx.countNewReturnItems"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="Boolean"</span><span style="color: #0000ff">/&gt;</span></div>
<p><br />
&nbsp;我想minilang使用type=""中的类型与value中的值的做为构造调用.猜想在某天我看到这些代码时能证明我是对的...<br />
<br />
本文档译自ofbiz 4.0 cookbooks,本人翻译,欢迎转载,请注明出处. </p>
<img src ="http://www.blogjava.net/hispark/aggbug/237744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-10-31 09:21 <a href="http://www.blogjava.net/hispark/archive/2008/10/31/237744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OFBiz实体引擎开发烹调书 (三) </title><link>http://www.blogjava.net/hispark/archive/2008/10/26/236684.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Sun, 26 Oct 2008 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/10/26/236684.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/236684.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/10/26/236684.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/236684.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/236684.html</trackback:ping><description><![CDATA[<p>* 如何为SELECT SUM(QUANTITY - CANCEL_QUANTITY) AS QUANTITY之类的语句设置别名&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">alias&nbsp;</span><span style="color: #ff0000">entity-alias</span><span style="color: #0000ff">="OI"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="quantity"</span><span style="color: #ff0000">&nbsp;function</span><span style="color: #0000ff">="sum"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">complex-alias&nbsp;</span><span style="color: #ff0000">operator</span><span style="color: #0000ff">="-"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">complex-alias-field&nbsp;</span><span style="color: #ff0000">entity-alias</span><span style="color: #0000ff">="OI"</span><span style="color: #ff0000">&nbsp;field</span><span style="color: #0000ff">="quantity"</span><span style="color: #ff0000">&nbsp;default-value</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">complex-alias-field&nbsp;</span><span style="color: #ff0000">entity-alias</span><span style="color: #0000ff">="OI"</span><span style="color: #ff0000">&nbsp;field</span><span style="color: #0000ff">="cancelQuantity"</span><span style="color: #ff0000">&nbsp;default-value</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">complex-alias</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">alias</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span></div>
<p>&nbsp;&nbsp;&nbsp;SELECT SUM(COALESCE(OI.QUANTITY,'0') - COALESCE(0I.CANCEL_QUANTITY)) AS QUANTITY在结果集包含默认值是一个好的习惯,否则如果有一项为null,那么最终相减的结果就也为null了.<br />
&nbsp; 操作符可以为任何你当前使用数据库所支持的SQL操作符,比如算术运算符+, -, * 和/&nbsp;或者字符串连接符 ||.</p>
<p>&nbsp; 你可以增加function=""标签来完成在complex-alias-field中的min, max, sum, avg, count, count-distinct, upper 及lower集合运算.&nbsp; 示例, 以上的定义可以用另一种方法表示为:</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">alias&nbsp;</span><span style="color: #ff0000">entity-alias</span><span style="color: #0000ff">="OI"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="quantity"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">complex-alias&nbsp;</span><span style="color: #ff0000">operator</span><span style="color: #0000ff">="-"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">complex-alias-field&nbsp;</span><span style="color: #ff0000">entity-alias</span><span style="color: #0000ff">="OI"</span><span style="color: #ff0000">&nbsp;field</span><span style="color: #0000ff">="quantity"</span><span style="color: #ff0000">&nbsp;default-value</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;function</span><span style="color: #0000ff">="sum"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">complex-alias-field&nbsp;</span><span style="color: #ff0000">entity-alias</span><span style="color: #0000ff">="OI"</span><span style="color: #ff0000">&nbsp;field</span><span style="color: #0000ff">="cancelQuantity"</span><span style="color: #ff0000">&nbsp;default-value</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;function</span><span style="color: #0000ff">="sum"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">complex-alias</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">alias</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;&nbsp; 即为SELECT (SUM(COALESCE(OI.QUANTITY,'0')) - SUM(COALESCE(OI.CANCEL_QUANTITY,'0'))) AS QUANTITY查询结果集<br />
</p>
<p>* 我讨厌OFBiz的实体引擎,我要自己的JDBC连接!<br />
&nbsp; 好的,以下是你获得JDBC连接的方法:&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.ofbiz.entity.jdbc.ConnectionFactory;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />String&nbsp;helperName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;delegator.getGroupHelperName(</span><span style="color: #000000">"</span><span style="color: #000000">org.ofbiz</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;gets&nbsp;the&nbsp;helper&nbsp;(localderby,&nbsp;localmysql,&nbsp;localpostgres,&nbsp;etc.)&nbsp;for&nbsp;your&nbsp;entity&nbsp;group&nbsp;org.ofbiz</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">Connection&nbsp;conn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ConnectionFactory.getConnection(helperName);&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Statement&nbsp;statement&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;conn.createStatement();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />statement.execute(</span><span style="color: #000000">"</span><span style="color: #000000">SELECT&nbsp;*&nbsp;FROM&nbsp;PARTY</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ResultSet&nbsp;results&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;statement.getResultSet();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" />&nbsp;通过普通JDBC&nbsp;的结果集来操作</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
<img style="width: 11px; height: 16px" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" width="11" align="top" />//Alternatively,&nbsp;you&nbsp;can&nbsp;use&nbsp;the&nbsp;SQLProcessor&nbsp;like&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />SQLProcessor&nbsp;sqlproc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SQLProcessor(helperName);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sqlproc.prepareStatement(</span><span style="color: #000000">"</span><span style="color: #000000">SELECT&nbsp;*&nbsp;FROM&nbsp;PARTY</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ResultSet&nbsp;rs1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sqlproc.executeQuery();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ResultSet&nbsp;rs2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sqlproc.executeQuery(</span><span style="color: #000000">"</span><span style="color: #000000">SELECT&nbsp;*&nbsp;FROM&nbsp;PRODUCT</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p>&nbsp;你可以查看framework/webtools/webapp/webtools/WEB-INF/actions/entity/EntitySQLProcessor.bsh了解它的使用</p>
<p>在以下网址你可以获得相关JavaDoc的内容:<br />
http://www.opentaps.org/javadocs/version-1.0/framework/api/org/ofbiz/entity/jdbc/SQLProcessor.html<br />
http://www.opentaps.org/javadocs/version-1.0/framework/api/org/ofbiz/entity/jdbc/ConnectionFactory.html</p>
<p>&nbsp; *** 请先考虑以下内容: 你放弃数据库的无关性意味着你在某些方法将无法与框架或其它程序集成.你确定你要这么做吗?</p>
<p>获得更好的做法,请访问&nbsp;<a href="http://www.opentaps.org/docs/index.php/Using_the_Query_Tool">http://www.opentaps.org/docs/index.php/Using_the_Query_Tool</a></p>
<p><br />
* 关于时间比较方法的一些警告</p>
<p>在你用 GREATER_THAN比较一个 Timestamp类型数据时, 你有可能获得相同的时间数据:&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">delegator.findByAnd(</span><span style="color: #000000">"</span><span style="color: #000000">XXX</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;UtilMisc.toList(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EntityExpr(</span><span style="color: #000000">"</span><span style="color: #000000">fromDate</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;EntityOperator.GREATER_THAN,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">2007-12-31&nbsp;23:59:59.998</span><span style="color: #000000">"</span><span style="color: #000000">)));</span></div>
<p>&nbsp;有可能包含fromDate=2007-12-31 23:59:59.998的数据.&nbsp; (此种情况发生于PostgreSQL 8.1并且GenericDAO 类生成的SQL代码是'FROM_DATE &gt; ' so 所以我也不明白发生这个问题的原因.)&nbsp;所以确保安全的方法是, 增加1秒到需要比较的时间中然后使用 GREATER_THAN_EQUAL_TO方法&nbsp;&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">delegator.findByAnd(</span><span style="color: #000000">"</span><span style="color: #000000">XXX</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;UtilMisc.toList(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EntityExpr(</span><span style="color: #000000">"</span><span style="color: #000000">fromDate</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;EntityOperator.GREATER_THAN_EQUAL_TO,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">2008-01-01&nbsp;00:00:00.998</span><span style="color: #000000">"</span><span style="color: #000000">)));</span></div>
<p>&nbsp;</p>
<p>* 警告: 在空集合中使用EntityOperator.IN</p>
<p>请小心如果使用EntityOperator.IN去判断一个非空集合在一个空集合中的包含项,你有可能获得一个语法错误: 在Derby或者其它一些不为人知的数据库中可能会出错.<br />
所以建议你能在使用EntityOperator.IN之间,通常执行UtilValidate.isNotEmpty方法来判断一下结果集是否为空<br />
<br />
* 警告: delegator.getNextSubSeqId 不能确保唯一性</p>
<p>很多实体有很多合成的主键.示例OrderItem's 主键是orderId + orderItemSeqId.&nbsp; InventoryItemDetail's 主键是inventoryItemId +inventoryItemSeqId.&nbsp; 通常, delegator.getNextSubSeqId 通常是获得一个序列值,但是在多线程的访问下有可能无法确保生成的值的唯一性.&nbsp; 此段内容在 <a href="http://issues.apache.org/jira/browse/OFBIZ-1636">http://issues.apache.org/jira/browse/OFBIZ-1636</a> 中有相关文档记录.</p>
<p>当前, 如果有可能多个线程尝试同时写入实体组合键时,可以使用delegator.getNextSeqId来替代getNextSubSeqId.&nbsp; (此问题不会发生于OrderItem, 因为它只使用单线程写入,&nbsp;但有可能发生于 InventoryItemDetail, 它使用多线程来创建库存记录项.)<br />
&nbsp;</p>
完&gt;&gt; <br />
<br />
本文档译自ofbiz 4.0 cookbooks,本人翻译,欢迎转载,请注明出处. 
<img src ="http://www.blogjava.net/hispark/aggbug/236684.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-10-26 11:30 <a href="http://www.blogjava.net/hispark/archive/2008/10/26/236684.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OFBiz实体引擎开发烹调书 (二) </title><link>http://www.blogjava.net/hispark/archive/2008/10/25/236524.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Sat, 25 Oct 2008 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/10/25/236524.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/236524.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/10/25/236524.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/236524.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/236524.html</trackback:ping><description><![CDATA[<p>* 我可以在entitymodel.xml文件中定义自己的view-entities吗?<br />
<br />
不能, 你可以动态定义它们.你可以查看org.ofbiz.party.party.PartyServices中的findParty方法学习它的使用</p>
<p>* 如果为有效期间创建条件?<br />
<br />
我们提供了一组非常有用的方法EntityUtil.getFilterByDateExpr ,它能返回一个EntityConditionList根据有效期间来筛选一个结果集.&nbsp; </p>
<p>* 如何在大数据结果集下工作</p>
<p>如果你检出一个大的数据结果集,你应当使用EntityListIterator通过迭代方式读取数据,而非List.<br />
示例,如果你使用:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">List&nbsp;products&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;delegator.findAll(</span><span style="color: #000000">"</span><span style="color: #000000">Product</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div>
<p><br />
你可能获得一个"java.lang.OutOfMemoryError".&nbsp; 这是由于你通过findAll, findByAnd, findByCondition等方法来获得一个大的内存数据结果集导致内存溢出.&nbsp; 在这种情况下, 应该使用EntityListIterator迭代方式来读取你的数据.&nbsp;这个示例应改写成:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">productsELI&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;delegator.findListIteratorByCondition(</span><span style="color: #000000">"</span><span style="color: #000000">Product</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EntityExpr(</span><span style="color: #000000">"</span><span style="color: #000000">productId</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;EntityOperator.NOT_EQUAL,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">),&nbsp;UtilMisc.toList(</span><span style="color: #000000">"</span><span style="color: #000000">productId</span><span style="color: #000000">"</span><span style="color: #000000">),&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);</span></div>
<p>&nbsp;</p>
<p>注意获得EntityListIterator的方法只用通过条件, 所以你需要将你的条件重写为EntityExpr (在此次情况下,productId是主键字段不可能为空的, 所以将返回所有Proudct实例,)或 EntityConditionList.<br />
<br />
此方法参数中包含检出的字段(这里为productId)以及排序字段(这里不需要,所以赋了null)</p>
<p>你可以传递一个null作为EntityCondition参数来获得所有结果.然后这不一定在所有数据库下都能正常工作!&nbsp; 在maxdb及其它不常用的数据库下时你要小心使用这些高级功能.</p>
<p>* 如何使用EntityListIterator </p>
<p>当我们通过EntityListIterator迭代访问数据时, 通常是这样:</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_51_91_Open_Image" onclick="this.style.display='none'; Codehighlighter1_51_91_Open_Text.style.display='none'; Codehighlighter1_51_91_Closed_Image.style.display='inline'; Codehighlighter1_51_91_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_51_91_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_51_91_Closed_Text.style.display='none'; Codehighlighter1_51_91_Open_Image.style.display='inline'; Codehighlighter1_51_91_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;((nextProduct&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;productsELI.next())&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_51_91_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_51_91_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><img alt="" src="http://www.blogjava.net/Images/dot.gif" />.<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;operations&nbsp;on&nbsp;nextProduct</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #000000">}</span></span></div>
<p><br />
在EntityListIterator 中使用&nbsp;.hasNext()方法是一种不经济的做法.</p>
<p>在你完成你的操作后,要记得关闭此迭代</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">productsELI.close();</span></div>
<p>&nbsp;</p>
<p>* 如何查询无重结果集</p>
<p>当前只能通过list iterator方法并指定EntityFindOptions参数,示例如下:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;listIt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;delegator.findListIteratorByCondition(entityName,&nbsp;findConditions,&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;EntityConditions参数</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldsToSelectList,&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldsToOrderByList,&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">关键部分.&nbsp;&nbsp;第一个true表示"specifyTypeAndConcur"<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;第二个true指完是一个滤重查询.&nbsp;&nbsp;显然在实体引擎中只能通过这个方法来进行滤重查询</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EntityFindOptions(</span><span style="color: #0000ff">true</span><span style="color: #000000">,&nbsp;EntityFindOptions.TYPE_SCROLL_INSENSITIVE,&nbsp;EntityFindOptions.CONCUR_READ_ONLY,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">));</span></div>
<p>&nbsp;</p>
在minilang, 它会更简单:<br />
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">entity-condition&nbsp;</span><span style="color: #ff0000">entity-name</span><span style="color: #0000ff">="${entityName}"</span><span style="color: #ff0000">&nbsp;list-name</span><span style="color: #0000ff">="${resultList}"</span><span style="color: #ff0000">&nbsp;distinct</span><span style="color: #0000ff">="true"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">select&nbsp;</span><span style="color: #ff0000">field</span><span style="color: #0000ff">="${fieldName}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" />.</span></div>
<p><br />
* 如何进行一个大小写不敏感的查询(即不分大小写)<br />
<br />
你需要查询条件表达式两边均转为大写,示例:</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">andExprs.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EntityExpr(</span><span style="color: #000000">"</span><span style="color: #000000">lastName</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">,&nbsp;EntityOperator.LIKE,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">%</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">lastName</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">%</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">));<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(来源org.ofbiz.party.party.PartyServices)<br />
</p>
<p><br />
* 如何将EntityListIterator转换成List</p>
<p>&nbsp; 使用EntityListIterator.getCompleteList() 及getPartialList 方法<br />
</p>
<p><br />
* 如何自动获得下一个ID值</p>
<p>&nbsp;&nbsp;在minilang&nbsp;中使用 &lt;sequence-id-to-env ...&gt; 或在Java中通过delegator.getNextSeqId(...)&nbsp;获得 .&nbsp; id序列存放于SequenceValueItem中.<br />
</p>
<p><br />
* 关于ID值的一些警告</p>
<p>&nbsp; 不要在种子/演示数据中使用10000做为数据的ID,当系统尝试自动创建数据时,它们都将尝试10000,这将导致一个键值冲突错误.<br />
<br />
* 如何从一个明细项中获得序列ID<br />
&nbsp;&nbsp;<br />
&nbsp; 有些实体,比如拥有itemSeqId 的InvoiceItem(发票明细项) and OrderItem(订单明细项).此项通常在你处一次为item生成GenericValue&nbsp;时自动生成ID,之后向delegator要求生成项目的seq Id:</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;GenericValue&nbsp;orderItem&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;delegator.makeValue(</span><span style="color: #000000">"</span><span style="color: #000000">OrderItem</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;orderItemValues);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;delegator.setNextSubSeqId(orderItem,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">orderItemSeqId</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;ORDER_ITEM_PADDING,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
未完待续&gt;&gt;<br />
<br />
本文档译自ofbiz 4.0 cookbooks,本人翻译,欢迎转载,请注明出处. 
<img src ="http://www.blogjava.net/hispark/aggbug/236524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-10-25 11:42 <a href="http://www.blogjava.net/hispark/archive/2008/10/25/236524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OFBiz实体引擎开发烹调书 (一)</title><link>http://www.blogjava.net/hispark/archive/2008/10/24/236404.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Fri, 24 Oct 2008 08:26:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/10/24/236404.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/236404.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/10/24/236404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/236404.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/236404.html</trackback:ping><description><![CDATA[* 保持实体名称少于25个字符<br />
这个限制主要是为了Oracle只支持30字符以内的数据库对象名称,再加上OFBiz会自动在单词之间加上"_",所以就得出了这么个限制.<br />
<br />
* 关联的工作方式<br />
它们定义于entitymodel.xml文件中的&lt;entity&gt;段，示例如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">relation&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="one"</span><span style="color: #ff0000">&nbsp;fk-name</span><span style="color: #0000ff">="PROD_CTGRY_PARENT"</span><span style="color: #ff0000">&nbsp;title</span><span style="color: #0000ff">="PrimaryParent"</span><span style="color: #ff0000">&nbsp;rel-entity-name</span><span style="color: #0000ff">="ProductCategory"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">key-map&nbsp;</span><span style="color: #ff0000">field-name</span><span style="color: #0000ff">="primaryParentCategoryId"</span><span style="color: #ff0000">&nbsp;rel-field-name</span><span style="color: #0000ff">="productCategoryId"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">relation</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">relation&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="many"</span><span style="color: #ff0000">&nbsp;title</span><span style="color: #0000ff">="PrimaryChild"</span><span style="color: #ff0000">&nbsp;rel-entity-name</span><span style="color: #0000ff">="ProductCategory"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">key-map&nbsp;</span><span style="color: #ff0000">field-name</span><span style="color: #0000ff">="productCategoryId"</span><span style="color: #ff0000">&nbsp;rel-field-name</span><span style="color: #0000ff">="primaryParentCategoryId"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">relation</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
&nbsp;&nbsp;&nbsp;&nbsp;type这个属性标签定义关联类型: "one"表示一对一,"many"表示从此实体引出的一对多关系<br />
&nbsp;&nbsp;&nbsp;&nbsp;fk-name的属性值是数据库外键名.为自己的外键命名是一个好的习惯,虽然如果你不设置此属性,OFiz也会自己建外建.<br />
&nbsp;&nbsp;&nbsp;&nbsp;rel-entity-name的属性值指向关联的实体名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;title用来区分两个实体之间的多重关系<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;key-map&gt;节点定义关联中使用到的字段.field-name指向本实体内的引用字段,rel-field-name定义关联的实体字段,你可以通过多个字段组合关联<br />
&nbsp;&nbsp;&nbsp;&nbsp;当你访问一个关联,你可以使用title+entityName作为参数调用.getRelated("")或.getRelatedOne("")方法.在关联为"many"时使用.getRelated("")是恰当的,因为它返回一个List,同样在关联为"one"时通过.getRelatedOne("")方法获得一个值.<br />
<br />
* view-entities相关内容<br />
view-entities的功能非常强大,它允许你可以创建一个join-like查询,即使你的数据库不支持join.<br />
关于你数据库的join语法存放在entityengine.xml的datasource节点下的join-style属性中.<br />
当你通过&lt;view-link...&gt;节点将两上实体连接起来时,记住:<br />
1. 实体名称顺序是重要的<br />
2. 默认的连接方式是inner join(即同样的值存在于两个实体类中),外连接需要使用rel-optional="true"<br />
如果多个实体中拥有相同的字段名称,比如statusId,结果集中的statusId使用第一个实体中的该列,其它实体中的同名列将被丢弃.如果你想要同时获得这些列,你需要通过在其之前加入&lt;alias-all&gt;节点,一个方式是使用&lt;alias ..&gt;节点来为不同实体的同名字段起别名,示例:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">alias&nbsp;</span><span style="color: #ff0000">entity</span><span style="color: #0000ff">="EntityOne"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="entityOneStatusId"</span><span style="color: #ff0000">&nbsp;field</span><span style="color: #0000ff">="statusId"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">alias&nbsp;</span><span style="color: #ff0000">entity</span><span style="color: #0000ff">="EntityTwo"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="entityTwoStatusId"</span><span style="color: #ff0000">&nbsp;field</span><span style="color: #0000ff">="statusId"</span><span style="color: #0000ff">/&gt;</span></div>
另一种方法是在&lt;alias-all&gt;节点中使用&lt;exclude field=""&gt;,如下:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">alias-all&nbsp;</span><span style="color: #ff0000">entity-alias</span><span style="color: #0000ff">="EN"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">exclude&nbsp;</span><span style="color: #ff0000">field</span><span style="color: #0000ff">="fieldNameToExclude1"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">exclude&nbsp;</span><span style="color: #ff0000">field</span><span style="color: #0000ff">="fieldNameToExclude2"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">alias-all</span><span style="color: #0000ff">&gt;</span></div>
<br />
这样也可以排除掉很多不打算使用到的信息,特别是在一个非常大的表中查询时.<br />
如果你打算执行类似于以下的查询语句时:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">count</span><span style="color: #000000">(visitId)&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;</span><span style="color: #0000ff">GROUP</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">BY</span><span style="color: #000000">&nbsp;trackingCodeId&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;fromDate&nbsp;</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2005-01-01</span><span style="color: #ff0000">'</span></div>
需要包含字段visitId以及function="count" 标签,trackingCodeId需加上group-by="true"标签,fromDate需要加上group-by="false"标签<br />
<br />
在你进行查询时,有一件非常重要的事情需要注意,比如说delegator.findByCondition方法,你必须指定检出的字段列表,并且你不能指定fromDate字段,否则你将得到一个错误.这就是为webtools不能够使用view-entities来查看的原因.<br />
<br />
你可以查看applications/marketing/entitydef/entitymodel.xml的底部内容学习,及通过applications/marketing/webapp/marketing/WEB-INF/actions/reports学习beanshell脚本的调用.<br />
<br />
未完待续&gt;&gt;<br />
<br />
本文档译自ofbiz 4.0 cookbooks,本人翻译,欢迎转载,请注明出处. <br />
 <img src ="http://www.blogjava.net/hispark/aggbug/236404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-10-24 16:26 <a href="http://www.blogjava.net/hispark/archive/2008/10/24/236404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>贴点opencrx的资料</title><link>http://www.blogjava.net/hispark/archive/2008/10/21/235740.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Tue, 21 Oct 2008 10:04:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/10/21/235740.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/235740.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/10/21/235740.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/235740.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/235740.html</trackback:ping><description><![CDATA[<p>真是浪费，原以为是很简单的事情，没想到看这个项目看了两三周都没研究明白它。文档太少，逻辑结构也太复杂（OFBiz虽然也复杂，但好歹文档比较多）。算了，我还是专注搞好OFBiz好啦。把手头上找到的可怜的几个文档贴上来吧，谁要有好书也麻烦推荐来看下！</p>
<p>&nbsp;</p>
<a title="20080630-openMDX2-Features.pdf" href="/Files/hispark/20080630-openMDX2-Features.pdf">20080630-openMDX2-Features.pdf</a><br />
<a title="openCRX_ActivityManagementCN2.pdf" href="/Files/hispark/openCRX_ActivityManagementCN2.pdf">openCRX_ActivityManagementCN2.pdf</a><br />
<a title="openCRX_JBoss4_1.10.pdf" href="/Files/hispark/openCRX_JBoss4_1.10.pdf">openCRX_JBoss4_1.10.pdf</a><br />
<a title="openCRX_Oracle_9_1.10.pdf" href="/Files/hispark/openCRX_Oracle_9_1.10.pdf">openCRX_Oracle_9_1.10.pdf</a><br />
<a title="openCRX_Quick_Start1.10.pdf" href="/Files/hispark/openCRX_Quick_Start1.10.pdf">openCRX_Quick_Start1.10.pdf</a><br />
<a title="openMDX_Flyer.pdf" href="/Files/hispark/openMDX_Flyer.pdf">openMDX_Flyer.pdf</a> <br />
<br />
总结一点，你能不靠外力短时间能掌握openCRX，绝对不是一般的智力哇！ 
<img src ="http://www.blogjava.net/hispark/aggbug/235740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-10-21 18:04 <a href="http://www.blogjava.net/hispark/archive/2008/10/21/235740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OFBiz控制器与WEB应用指引</title><link>http://www.blogjava.net/hispark/archive/2008/10/11/233795.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Sat, 11 Oct 2008 14:04:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/10/11/233795.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/233795.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/10/11/233795.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/233795.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/233795.html</trackback:ping><description><![CDATA[<strong>o 使用安全连接<br />
</strong>在你的&lt;request-map ..&gt;编辑中使用&lt;security &gt; 标签，其中https="true"将使页面使用https协议，auth="true|false"决定用户是否必须先登入系统，direct-request="false"将不允许用户直接通过浏览器输入地址方式访问（即只能通过request-chain请求链方式访问）<br />
<br />
<strong>o 异步方式运行服务<br />
</strong>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">event&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="sevice"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="async"</span><span style="color: #ff0000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #0000ff">&gt;</span></div>
<br />
<strong>o 确认用户不会多次提交表单<br />
</strong>使用
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">response&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="request-redirect"</span><span style="color: #ff0000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #0000ff">&gt;</span></div>
替代type="view"，在使用request-redirect做为回应方式时，将会将参数作为URL一部分，所以在有特殊字符时有可能导致错误。所以不要这样使用：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">response&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="viewContact"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="request-redirect"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="viewContact"</span><span style="color: #0000ff">/&gt;</span></div>
可以使用以下方式来替代：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">response&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="viewContact"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="viewContact"</span><span style="color: #0000ff">/&gt;</span></div>
<br />
<strong>o 错误信息的获得<br />
</strong>错误与事件信息被设置于请求属性中的 _ERROR_MESSAGE_(String)，_EVENT_MESSAGE_(String)。它们可以request.setAttribute()方式设置及通过request.getAttribute()方式读取。<br />
参考 framework/common/webcommon/includes/messages.ftl<br />
<br />
<strong>o 在请求后进行重定向<br />
</strong>使用"/control/req1/req2"方式则控制器将在执行请求"req1"后进行"req2"<br />
<br />
<strong>o 如何在查询按钮中加入预填参数<br />
</strong>查询按钮可以通过Javascript方式创建查询操作，你可以使于预填字段方式在尾部增加参数，示例：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">"</span><span style="color: #000000">javascript:call_fieldlookup2(document.addProductStoreRole.partyId,'LookupPartyName?productStoreId=${productStoreId}');</span><span style="color: #000000">"</span></div>
<br />
<strong>o&nbsp;关于XSL:FO的提示<br />
</strong>在描述或文本后追加?xml或使用&lt;#escape x as x?xml&gt;，以避免收到错误提示。<br />
<br />
<strong>o&nbsp;在应用间切换时保持用户登入状态<br />
</strong>在一个应用跳转至另一个应用时在URL中放入externalLoginKey参数，这样系统就不会再次要求你进行登入操作：<br />
&amp;externalLoginKey=${externalLoginKey} <br />
<br />
本文档译自ofbiz 4.0 cookbooks,本人翻译,欢迎转载,请注明出处.
<img src ="http://www.blogjava.net/hispark/aggbug/233795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-10-11 22:04 <a href="http://www.blogjava.net/hispark/archive/2008/10/11/233795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OFBiz 菜单组件(menu-widget)指引</title><link>http://www.blogjava.net/hispark/archive/2008/10/09/233306.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Thu, 09 Oct 2008 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/10/09/233306.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/233306.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/10/09/233306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/233306.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/233306.html</trackback:ping><description><![CDATA[<p>菜单组件通常用于生成屏幕主菜单栏，类似于Main | Data Source | Campaign | Tracking | Segment | Contact List |&nbsp;&nbsp; Reports | Logout</p>
<p><strong>o 定义菜单<br />
</strong></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">menu-item&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="DataSource"</span><span style="color: #ff0000">&nbsp;title</span><span style="color: #0000ff">="${uiLabelMap.DataSource}"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">link&nbsp;</span><span style="color: #ff0000">target</span><span style="color: #0000ff">="FindDataSource"</span><span style="color: #0000ff">/&gt;&lt;/</span><span style="color: #800000">menu-item</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;name属性用于标识菜单项。<br />
&nbsp;title属性用于菜单显示名称，也可是uiLabelMap<br />
&nbsp;link指定菜单项的跳转URI</p>
<p><strong>o 使得指定的菜单高亮<br />
</strong>&nbsp;在屏幕组件的&lt;screen&gt;-&lt;actions&gt;段中加入</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">set&nbsp;</span><span style="color: #ff0000">field</span><span style="color: #0000ff">="headerItem"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="reports"</span><span style="color: #0000ff">/&gt;</span></div>
<p>&nbsp;value值为已定义过的要加亮的菜单项<br />
&nbsp;<br />
<strong>o 根据条件选择是否显示菜单项</strong><br />
&nbsp; 在&lt;menu-item&gt;节点中使用 &lt;condition&gt;项:</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">condition</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">not</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">if-empty&nbsp;</span><span style="color: #ff0000">field-name</span><span style="color: #0000ff">="userLogin"</span><span style="color: #0000ff">/&gt;&lt;/</span><span style="color: #800000">not</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">condition</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">condition</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">if-empty&nbsp;</span><span style="color: #ff0000">field-name</span><span style="color: #0000ff">="userLogin"</span><span style="color: #0000ff">/&gt;&lt;/</span><span style="color: #800000">condition</span><span style="color: #0000ff">&gt;</span></div>
<p><br />
<strong>o 使用CSS样式表</strong><br />
&nbsp; 在&lt;menu-item&gt;节点中使用以下属性<br />
&nbsp;&nbsp;&nbsp; align-style="" 定义对齐方式<br />
&nbsp;&nbsp;&nbsp; widget-style="" 定义菜单项在未选中时的样式<br />
&nbsp;&nbsp;&nbsp; selected-style="" 定义菜单项在选中时的样式</p>
<p><strong>o 右对齐菜单项</strong><br />
&nbsp; 使用align-style="col-right" 来启用 "col-right" CSS样式 <br />
&nbsp; 注意这个样式将把第一个菜单项放到最右边，第二个放在第一个的左边，依次类推<br />
<br />
本文档译自ofbiz 4.0 cookbooks,本人翻译,欢迎转载,请注明出处. </p>
<img src ="http://www.blogjava.net/hispark/aggbug/233306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-10-09 11:16 <a href="http://www.blogjava.net/hispark/archive/2008/10/09/233306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OFBiz调试技巧禅与道</title><link>http://www.blogjava.net/hispark/archive/2008/10/08/233239.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Wed, 08 Oct 2008 14:44:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/10/08/233239.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/233239.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/10/08/233239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/233239.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/233239.html</trackback:ping><description><![CDATA[<p><strong>1、如何调试OFBiz</strong><br />
首先你需要学习和熟悉OFBiz的教程与工具指导文档。指导文档特别重要，因为很多子主题内容不是排列最前的内容却可能导致问题的发生。你应该熟悉类似于Freemaker，beanshell,XML这些技术。你也应该有过处理那些与OFBiz无关问题的经验，比如处理数据库或服务器引起的问题。<br />
现在，你应该仔细查看日志文件了解你错误发生的原因。OFBiz在日志文件中提供大量的信息，这些信息将有助于你了解你遇到的问题。它比处理的艺术更重要。哪些东西看上去工作有些特别，比如比如有些关联程序将导致或影响到的结果，你都可以在日志文件中找到。如果你确实无法在日志文件中发现任何有用的东西，这时增加你自己的日志信息直到你有足够的信息来发现实际的问题所在。<br />
本指引将向你介绍OFBiz的日志文件工作情况，如何增加你自己的日志记录，以及一些常见信息的含义。这些知识的理解建立在你理解JAVA及其它相关的技术基础上，所有问题的焦点只在于OFBiz的概念与信息内容中。</p>
<p><strong>2. OFBiz日志文件</strong><br />
OFBiz创建较多日志文件并将它们存储于logs/目录（在opentaps-0.9或更早版本中）或framework/logs/（在opentaps-0.9之后版本），文件有：<br />
&nbsp;- ofbiz.log.? - 记录所有OFBiz生成日志信息。此文件将在满时自动循环创建新文件，即ofbiz.log是当前日志文件，ofbiz.log.1是较早些时间的日志文件，ofbiz.log.2是比ofbiz.log.1更早时间的日志文件，以此类推。<br />
&nbsp;- console.log - 记录所有OFBiz在控制台界面运行显示的内容。也有可能无效。<br />
&nbsp;- access_log.? - 类似于Apache httpd日志格式记录所有服务请求。很漂亮但对调试没有什么用处。</p>
<p>大多数据时间，你可以通过ofbiz.log或console.log来查询调试信息。因为它们有很多内容，所以你最好使用一个可以翻页与进行查找的编辑器来打开这些日志文件。</p>
<p><br />
<strong>3、查找日志信息<br />
</strong>Java日志信息最容易查找。它们的日志信息中通常有类名与行号生成：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">111770[PaymentGatewayServices.java:776:INFO&nbsp;]&nbsp;(Capture)&nbsp;Invoice&nbsp;[#10110]&nbsp;total:&nbsp;38.54</span></div>
<p>Minilang方法日志中的类名均为Log.java，如：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">112499[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.java:103:INFO&nbsp;]&nbsp;Finished&nbsp;quickShipEntireOrder:\nshipmentShipGroupFacilityList=[[shipmentId=10120,&nbsp;facilityId=WebStoreWarehouse,&nbsp;shipGroupSeqId=00001]]\nsuccessMessageList=[Created&nbsp;shipment&nbsp;with&nbsp;ID&nbsp;[10120]&nbsp;for&nbsp;ship&nbsp;group&nbsp;ID&nbsp;[00001]&nbsp;for&nbsp;facility&nbsp;ID&nbsp;[WebStoreWarehouse]]</span></div>
<p>如果你在beanshell中直接使用输出，你输出的内容将显著的显示于日志文件中：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">2006-07-19&nbsp;13:46:26,373&nbsp;[&nbsp;&nbsp;ServiceDispatcher.java:450:DEBUG]&nbsp;[[Sync&nbsp;service&nbsp;finished-&nbsp;total:0.027,since&nbsp;last(Begin):0.027]]&nbsp;-&nbsp;'ecommerce&nbsp;/&nbsp;getProductCategoryAndLimitedMembers'<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />parentCategory&nbsp;=&nbsp;TABLE-LINENS-SOLIDS&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />2006-07-19&nbsp;13:46:26,874&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PriceServices.java:802:INFO&nbsp;]&nbsp;PromoPrice&nbsp;and&nbsp;ProductPriceAction&nbsp;had&nbsp;null&nbsp;amount&nbsp;and&nbsp;no&nbsp;default&nbsp;price&nbsp;was&nbsp;available,&nbsp;using&nbsp;list&nbsp;price:&nbsp;2.0&nbsp;for&nbsp;product&nbsp;with&nbsp;id&nbsp;15899</span></div>
<p>如果你在beanshell中使用调试方法，你将在日志中得到如下信息：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">2006-07-19&nbsp;13:46:26,373&nbsp;[&nbsp;&nbsp;?:?]&nbsp;parentCategory&nbsp;=&nbsp;TABLE-LINENS-SOLIDS</span></div>
<p>你可以为那些无法发现日志信息的minilang或beanshell代码中加入自己的信息输出。</p>
<p>所有freemarker，screen-widget或form widget输出的信息将直接显示在你的浏览器屏幕上。除非这些控件崩溃否则不会显示任何日志信息。</p>
<p><strong>4. 增加你自己的日志信息</strong><br />
在Java中增加你自己的日志信息，请使用OFBiz Debug类(org.ofbiz.base.util.Debug)中的调试方法，如logInfo，logWarning, logError...<br />
&nbsp;示例：&nbsp;&nbsp; Debug.logInfo("Now processing invoice " + invoiceId, module);</p>
<p>在beanshell中增加日志信息，同样使用Debug方法，但在内容中忽略如""这样内容。</p>
<p>在freemarker中增加日志信息，只需要显示你打算跟踪的变量，如：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;${invoice}&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">#--&nbsp;</span><span style="color: #ff0000">将显示&nbsp;invoice&nbsp;的一般属性值--</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;${invoice.invoiceId}&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">#--&nbsp;</span><span style="color: #ff0000">将显示invoice.invoiceId属性值&nbsp;--</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;</p>
<p>在minilang中增加日志信息，使用&lt;log &gt;指令并输入你的值，比如在freemarker中：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;${invoice}&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">#--&nbsp;</span><span style="color: #ff0000">will&nbsp;display&nbsp;the&nbsp;entire&nbsp;GenericValue&nbsp;invoice&nbsp;--</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;${invoice.invoiceId}&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">#--&nbsp;</span><span style="color: #ff0000">will&nbsp;display&nbsp;the&nbsp;invoiceId&nbsp;field&nbsp;of&nbsp;invoice&nbsp;--</span><span style="color: #0000ff">&gt;</span></div>
<p><br />
通常level节点属性用于设置日志级别，如："info", "warning", "error"，对应于Debug中的同名方法。</p>
<p><br />
<strong>5. 何时需要重启OFBiz</strong></p>
<p>你在做如下更改时需要重新启动OFBiz服务器：<br />
- Java文件（记得要重新编译）<br />
- 配置/.properties文件<br />
- entitymodel或entitygroup XML定义文件<br />
- 服务或secas XML文件<br />
- JPublish XML文件</p>
<p>你在进行以下修改时无需重新启动OFBiz服务器：<br />
- freemarker FTL模版<br />
- beanshell BSH模版<br />
- Screens XML文件<br />
- Forms XML文件<br />
- 控制器XML文件（注意：在opentaps-0.8和OFBiz 3.x及更早版本中，你在更改控制器时需要重启）<br />
但有可能你需要在浏览器中清除缓存。<br />
&nbsp;</p>
<p><strong>6. 常见错误及其含义：<br />
</strong></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Cannot&nbsp;locate&nbsp;service&nbsp;by&nbsp;name&nbsp;(captureBillingAccountPayment)</span></div>
<p>&nbsp;&nbsp; * 此服务 (captureBillingAccountPayment) 在所有 services.xml 定义中都找不到.<br />
Cannot find service location (org.ofbiz.order.order.OrderServices)<br />
&nbsp;&nbsp; * 说明在services XML定义点上指向的资源不存在.&nbsp; 如果这是一个minilang或beanshell服务，即服务引擎无法找到此文件。如果这是一个Java服务，则说明在classpath中无法查找到这个类。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Service&nbsp;method&nbsp;does&nbsp;not&nbsp;exist&nbsp;(com.opensourcestrategies.financials.invoice.InvoiceServices.setInvoiceDueDate(org.ofbiz.service.DispatchContext,&nbsp;java.util.Map))</span></div>
<p>&nbsp;&nbsp; * 含义是在某个services.xml指定的这个服务不存在对应的Java方法。通常发生于你在修改了Java文件后忘记再次编译它来使新增的方法生效。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">java.lang.IllegalArgumentException:&nbsp;Could&nbsp;not&nbsp;get&nbsp;next&nbsp;sequenced&nbsp;ID&nbsp;for&nbsp;sequence&nbsp;name:&nbsp;Party&nbsp;(Could&nbsp;not&nbsp;get&nbsp;next&nbsp;sequenced&nbsp;ID&nbsp;for&nbsp;sequence&nbsp;name:&nbsp;Party).&nbsp;&nbsp;&nbsp;</span></div>
<p>&nbsp;&nbsp; * 系统无法取得实体的下一个自动ID，通常发生于数据库断开情况。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">ERROR:&nbsp;insert&nbsp;or&nbsp;update&nbsp;on&nbsp;table&nbsp;"inventory_item"&nbsp;violates&nbsp;foreign&nbsp;key&nbsp;constraint&nbsp;"inv_item_facility"</span></div>
<p><br />
&nbsp;&nbsp; * 在"inventory_item"表的插入/修改操作时违犯"inv_item_facility"外键约束。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Error&nbsp;calling&nbsp;event:&nbsp;org.ofbiz.webapp.event.EventHandlerException:&nbsp;Service&nbsp;invocation&nbsp;error&nbsp;(Commit&nbsp;transaction&nbsp;failed)</span></div>
<p>&nbsp;&nbsp; * 这是一个非常令人讨厌的错误信息。通常它意味着你访问的服务所触发的ECA链服务中有一个服务失败，于是导致全部的操作失败。服务引擎无法为你进一步跟踪，所以你需要进入log文件中进一步查找错误原因。访问你的logs/ofbiz.log 或logs/console.log文件去了解触发错误的根本原因。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Unable&nbsp;to&nbsp;bind&nbsp;UserTransaction/TransactionManager&nbsp;to&nbsp;JNDI</span></div>
<p>&nbsp;&nbsp; * 这是在opentaps 0.8/0.9及OFBiz的pre-Geronimo版本在Linux系统下可能会发生的一个问题.&nbsp; 解决方法可以在以下网址中找到:&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://lists.ofbiz.org/pipermail/users/2004-June/004094.html">http://lists.ofbiz.org/pipermail/users/2004-June/004094.html</a></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Message:&nbsp;The&nbsp;entity&nbsp;name&nbsp;must&nbsp;immediately&nbsp;follow&nbsp;the&nbsp;'&amp;'&nbsp;in&nbsp;the&nbsp;entity&nbsp;reference.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />org.xml.sax.SAXParseException:&nbsp;The&nbsp;entity&nbsp;name&nbsp;must&nbsp;immediately&nbsp;follow&nbsp;the&nbsp;'&amp;'&nbsp;in&nbsp;the&nbsp;entity&nbsp;reference.<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>&nbsp;&nbsp; * 这是一个 XSL:FO 错误并意味着你在文本中使了字符'&amp;'，比如说你在描述或地址中使了这个字符。 XSL:FO 使用xml属性格式，所以你需要确认你在文本字段后放置?xml。<br />
</p>
本文档译自ofbiz 4.0 cookbooks,本人翻译,欢迎转载,请注明出处. 
<img src ="http://www.blogjava.net/hispark/aggbug/233239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-10-08 22:44 <a href="http://www.blogjava.net/hispark/archive/2008/10/08/233239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装OFBiz 4.0开发环境</title><link>http://www.blogjava.net/hispark/archive/2008/10/07/232894.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Tue, 07 Oct 2008 04:55:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/10/07/232894.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/232894.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/10/07/232894.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/232894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/232894.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体"><strong>准备工作：</strong></span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">1、&nbsp;<span style="font-family: 宋体">安装</span>JDK 1.5<span style="font-family: 宋体">或以上版本，设置好</span>JAVA_HOME</p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">2、&nbsp;<span style="font-family: 宋体">安装</span>MySQL 5.0<span style="font-family: 宋体">或以上版本</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">3、&nbsp;<span style="font-family: 宋体">在</span><a href="http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a><span style="font-family: 宋体">下载最新</span>Eclipse<span style="font-family: 宋体">版本，我下的是</span>3.4.1<span style="font-family: 宋体">版的</span>Eclipse IDE for Java EE Developers<span style="font-family: 宋体">，并解压至工作目录（我解压至"</span>C:\\"<span style="font-family: 宋体">，即工作目录为"</span>C:\\eclipse"<span style="font-family: 宋体">）</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">4、&nbsp;<span style="font-family: 宋体">启动</span>Eclipse<span style="font-family: 宋体">，通过点击</span>Help<span style="font-family: 宋体">菜单中的</span>Software Updates...<span style="font-family: 宋体">启动</span>Software Updates<span style="font-family: 宋体">向导界面，新建</span>subclipse<span style="font-family: 宋体">远程站点，远程下载地址为</span>http://subclipse.tigris.org/update_1.0.x<span style="font-family: 宋体">，勾选下载安装</span>Subclipse Plugin<span style="font-family: 宋体">后点击</span>Intasll<span style="font-family: 宋体">按钮安装<br />
</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;<img style="width: 526px; height: 296px" height="296" alt="Subclipse Plugin安装" src="http://www.blogjava.net/images/blogjava_net/hispark/ofbiz1.JPG" width="526" border="0" /><br />
<br />
<strong>检出代码：</strong></span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">1、&nbsp;<span style="font-family: 宋体">在新建</span>&#8230;<span style="font-family: 宋体">向导对话框中选择从</span>SVN<span style="font-family: 宋体">中检出项目<br />
<img height="499" alt="SVN检出项目" src="http://www.blogjava.net/images/blogjava_net/hispark/ofbiz2.JPG" width="522" border="0" /><br />
<br />
</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">2、&nbsp;<span style="font-family: 宋体">在</span>SVN<span style="font-family: 宋体">检出位置</span>URL<span style="font-family: 宋体">框中输入：</span><a href="http://svn.apache.org/repos/asf/ofbiz后点击下一步">http://svn.apache.org/repos/asf/ofbiz</a><span style="font-family: 宋体">后点击</span>Next<span style="font-family: 宋体">。<br />
<img height="502" alt="检查ofbiz代码" src="http://www.blogjava.net/images/blogjava_net/hispark/ofbiz3.JPG" width="527" border="0" /><br />
</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">3、&nbsp;<span style="font-family: 宋体">选择文件夹</span>"branches"release4.0<span style="font-family: 宋体">后点击</span>Finish<span style="font-family: 宋体">。<br />
</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;<img height="500" alt="选择SVN检出文件夹" src="http://www.blogjava.net/images/blogjava_net/hispark/ofbiz4.JPG" width="526" border="0" /><br />
</span></p>
<p><span style="font-family: 宋体"><br />
<strong>数据库配置 </strong>[可以参考我写的</span><a title="opentaps 1.0.2安装(mysql)" href="http://www.blogjava.net/hispark/archive/2008/10/02/232097.html" target="_blank">opentaps 1.0.2<span style="font-family: 宋体">安装</span>(mysql)</a><span style="font-family: 宋体">一文]：</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">1、&nbsp;<span style="font-family: 宋体">通过</span>mysql<span style="font-family: 宋体">命令行来创建</span>obfiz<span style="font-family: 宋体">运行所需数据库，为了方便识别，我们这里就用</span>ofbiz<span style="font-family: 宋体">来做数据库吧。</span></p>
<p style="text-indent: 21pt">mysql&gt; create database ofbiz;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mysql&gt; exit</p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">2、&nbsp;<span style="font-family: 宋体">编辑</span>ofbiz<span style="font-family: 宋体">目录中的</span>framework/entity/config/entityengine.xml<span style="font-family: 宋体">文件，使其能正确连接到你的</span>mysql<span style="font-family: 宋体">数据库中（注意其中的</span>ofbiz-user<span style="font-family: 宋体">与</span>ofbiz-password<span style="font-family: 宋体">，把它们改成你实际的数据库连接用户名与密码）。</span></p>
<p><span style="font-family: 宋体">将其中的</span>&lt;delegator name="default"...&gt; <span style="font-family: 宋体">段中的</span>"datasource-name"<span style="font-family: 宋体">从原来的</span>"local" <span style="font-family: 宋体">改为</span> "localmysql"</p>
<p><span style="font-family: 宋体">编辑</span>&lt;datasource name="localmysql"...&gt; <span style="font-family: 宋体">段内容，修改</span>"jdbc-uri"<span style="font-family: 宋体">为</span>"jdbc:mysql://127.0.0.1/ofbiz?autoReconnect=true"<span style="font-family: 宋体">；修改</span>"jdbc-username"/ "jdbc-password"<span style="font-family: 宋体">为你的</span>mysql<span style="font-family: 宋体">连接用户名</span>/<span style="font-family: 宋体">密码，修改</span>character-set="gbk"<span style="font-family: 宋体">，</span>collate="gbk_bin",<span style="font-family: 宋体">示例如下</span>:<br />
</p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delegator&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="default"</span><span style="color: #ff0000">&nbsp;entity-model-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-group-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-eca-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;distributed-cache-clear-enabled</span><span style="color: #0000ff">="false"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">group-map&nbsp;</span><span style="color: #ff0000">group-name</span><span style="color: #0000ff">="org.ofbiz"</span><span style="color: #ff0000">&nbsp;datasource-name</span><span style="color: #0000ff">="localmysql"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">delegator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delegator&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="default-no-eca"</span><span style="color: #ff0000">&nbsp;entity-model-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-group-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-eca-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-eca-enabled</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;distributed-cache-clear-enabled</span><span style="color: #0000ff">="false"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">group-map&nbsp;</span><span style="color: #ff0000">group-name</span><span style="color: #0000ff">="org.ofbiz"</span><span style="color: #ff0000">&nbsp;datasource-name</span><span style="color: #0000ff">="localmysql"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">delegator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delegator&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="test"</span><span style="color: #ff0000">&nbsp;entity-model-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-group-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-eca-reader</span><span style="color: #0000ff">="main"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">group-map&nbsp;</span><span style="color: #ff0000">group-name</span><span style="color: #0000ff">="org.ofbiz"</span><span style="color: #ff0000">&nbsp;datasource-name</span><span style="color: #0000ff">="localmysql"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">delegator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delegator&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="other"</span><span style="color: #ff0000">&nbsp;entity-model-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-group-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-eca-reader</span><span style="color: #0000ff">="main"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">group-map&nbsp;</span><span style="color: #ff0000">group-name</span><span style="color: #0000ff">="org.ofbiz"</span><span style="color: #ff0000">&nbsp;datasource-name</span><span style="color: #0000ff">="localmysql"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">delegator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&#8230;<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p><br />
&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">datasource&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="localmysql"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper-class</span><span style="color: #0000ff">="org.ofbiz.entity.datasource.GenericHelperDAO"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field-type-name</span><span style="color: #0000ff">="mysql"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-on-start</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add-missing-on-start</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">10</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">11</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-pks-on-start</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">12</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">13</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use-foreign-keys</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">14</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">15</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;join-style</span><span style="color: #0000ff">="ansi-no-parenthesis"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">16</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">17</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alias-view-columns</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">18</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">19</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drop-fk-use-foreign-key-keyword</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">20</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">21</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table-type</span><span style="color: #0000ff">="InnoDB"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">22</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">23</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character-set</span><span style="color: #0000ff">="gbk"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">24</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">25</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collate</span><span style="color: #0000ff">="gbk_bin"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">read-data&nbsp;</span><span style="color: #ff0000">reader-name</span><span style="color: #0000ff">="seed"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">read-data&nbsp;</span><span style="color: #ff0000">reader-name</span><span style="color: #0000ff">="demo"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">read-data&nbsp;</span><span style="color: #ff0000">reader-name</span><span style="color: #0000ff">="ext"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">inline-jdbc<br />
</span><span style="color: #008080">34</span><span style="color: #800000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">35</span><span style="color: #800000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">jdbc-driver</span><span style="color: #0000ff">="com.mysql.jdbc.Driver"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">36</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">37</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc-uri</span><span style="color: #0000ff">="jdbc:mysql://127.0.0.1/ofbiz?autoReconnect=true"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">38</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">39</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc-username</span><span style="color: #0000ff">="ofbiz-user"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">40</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">41</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc-password</span><span style="color: #0000ff">="ofbiz-password"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">42</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">43</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isolation-level</span><span style="color: #0000ff">="ReadCommitted"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">44</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">45</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pool-minsize</span><span style="color: #0000ff">="2"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">46</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">47</span><span style="color: #ff0000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pool-maxsize</span><span style="color: #0000ff">="20"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">49</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p><br />
<br />
&nbsp;&nbsp;&nbsp;3、&nbsp;<span style="font-family: 宋体">系统初始化</span></p>
<p style="margin-left: 42pt"><span style="font-family: 宋体">在命令行窗口下，进入</span>ofbiz<span style="font-family: 宋体">根目录后运行</span></p>
<p style="margin-left: 42pt">ant run-install</p>
<p style="margin-left: 42pt"><span style="font-family: 宋体">系统开始安装，等大约</span>15-30<span style="font-family: 宋体">分钟后，系统提示安装完成。<br />
</span></p>
<p><span style="font-family: 宋体"><br />
<strong>启动</strong></span><strong>ofbiz：</strong></p>
<p><span style="font-family: 宋体">有两种方式可以启动</span>ofbiz<span style="font-family: 宋体">：</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">1、&nbsp;<span style="font-family: 宋体">双击根目录下的</span>startofbiz.bat<span style="font-family: 宋体">启动</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">2、&nbsp;<span style="font-family: 宋体">在</span>eclipse<span style="font-family: 宋体">中用鼠标右键点击</span>build.xml<span style="font-family: 宋体">，在右键菜单中选择</span>Run As-&gt;Ant Build&#8230;<span style="font-family: 宋体">在弹出的构建对话框中</span>targets<span style="font-family: 宋体">选项卡中勾选</span>run<span style="font-family: 宋体">后点击</span>run<br />
</p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;<img style="width: 629px; height: 504px" height="504" alt="OFBiz ANT运行配置界面" src="http://www.blogjava.net/images/blogjava_net/hispark/ofbiz5.JPG" width="629" border="0" /><br />
<br />
<strong>访问</strong></span><strong>ofbiz：</strong><br />
</p>
<p>打开浏览器访问：<a href="https://localhost:8443/webtools/control/main">https://localhost:8443/webtools/control/main</a>点击屏幕右方的Login链接后进行登录，登录后就可以访问你希望的功能特性，系统默认帐号为admin/ofbiz，拥有所有权限。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="404" alt="OFBiz主界面" src="http://www.blogjava.net/images/blogjava_net/hispark/ofbiz-mai.JPG" width="639" border="0" /></p>
<p>本人原创文章，欢迎转载，转载请注明出处！</p>
<img src ="http://www.blogjava.net/hispark/aggbug/232894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-10-07 12:55 <a href="http://www.blogjava.net/hispark/archive/2008/10/07/232894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opentaps 1.0.2的partice(练习)例子</title><link>http://www.blogjava.net/hispark/archive/2008/10/03/232180.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Fri, 03 Oct 2008 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/10/03/232180.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/232180.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/10/03/232180.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/232180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/232180.html</trackback:ping><description><![CDATA[其实也就是OFBiz 4.0的练习例子，我是照着OFBiz的文章做了N次尝试，一是OFBiz的版本变动太频繁、二是文章中省略了大量的内容（均假设你明白，我倒，我要明白我做这个例子干么？）、三有的地方确实就是错的（常见于路径问题）<br />
<br />
自己吃的苦就不希望后来者再尝一遍喽，整理下放在这里，待有缘人来取，哈...<br />
<br />
本人制作，欢迎转载，转载请注明出处！<br />
<br />
<a href="http://www.blogjava.net/Files/hispark/practice.rar">下载地址</a>
<img src ="http://www.blogjava.net/hispark/aggbug/232180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-10-03 12:00 <a href="http://www.blogjava.net/hispark/archive/2008/10/03/232180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opentaps 1.0.2安装(mysql)</title><link>http://www.blogjava.net/hispark/archive/2008/10/02/232097.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Thu, 02 Oct 2008 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/10/02/232097.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/232097.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/10/02/232097.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/232097.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/232097.html</trackback:ping><description><![CDATA[<p>opentaps是一个基于ofbiz基础开发的完全开源的企业级应用系统。它包括了完整的ERP和CRM解决方案和内建的企业智能工具。</p>
<p>opentaps现在在国内应用面不象sugarcrm/vtigercrm这些企业应用那样普遍，我想很大程度是由于JavaEE应用的逻辑结构严谨与复杂度决定其不象PHP应用那样容易拆分按需阅读切入。了解一个JavaEE的应用需要先了解其构造的框图、分层结构、每层实现的技术方式以及采用的技术。对于OFBiz这样一个野心极大要囊括几乎所有企业应用层面的项目，想要掌握它就更难上加难了，也许我们可以选择简单开始，先从文档的中文化与由简入繁的练习中开始了解这个庞大的开源项目。</p>
<p><br />
闲话少说，我们先从opentaps的安装开始，让我们能够在自己的机器上跑起opentaps开始，也许你一直在寻找的企业应用已经全部在此喽！</p>
<p>准备工作：<br />
1、安装JDK 1.5或以上版本，并在系统中设置好JAVA_HOME及相关PATH<br />
2、安装MYSQL 5.0或以上版本<br />
3、安装ANT1.7或以上版本，并在系统中设置好ANT_HOME及相关PATH<br />
4、从以下地址下载opentaps 1.0.2二进制版本<br />
<a href="http://nchc.dl.sourceforge.net/sourceforge/opentaps/opentaps-1.0.2-all-platforms.zip" target="_blank">http://nchc.dl.sourceforge.net/sourceforge/opentaps/opentaps-1.0.2-all-platforms.zip</a></p>
<p>开始安装：<br />
1、通过mysql命令行来创建opentaps所需数据库，为了方便识别，我们这里就用opentaps来做数据库吧。<br />
mysql&gt; create database opentaps;</p>
<p>2、将下载的opentaps-1.0.2-all-platforms.zip解压至你的工作目录。</p>
<p>3、编辑opentaps目录中的framework/entity/config/entityengine.xml文件，使其能正确连接到你的mysql数据库中。<br />
3.1 将其中的&lt;delegator name="default"...&gt; 段中的"datasource-name"从原来的"local" 改为 "localmysql"<br />
3.2 编辑&lt;datasource name="localmysql"...&gt; 段内容，修改"jdbc-uri"为"jdbc:mysql://127.0.0.1/opentaps?autoReconnect=true"；修改"jdbc-username"/ "jdbc-password"为你的mysql连接用户名/密码，修改character-<br />
set="gbk"，collate="gbk_bin",示例如下:<br />
</p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delegator&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="default"</span><span style="color: #ff0000">&nbsp;entity-model-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-group-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-eca-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;distributed-cache-clear-enabled</span><span style="color: #0000ff">="false"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">group-map&nbsp;</span><span style="color: #ff0000">group-name</span><span style="color: #0000ff">="org.ofbiz"</span><span style="color: #ff0000">&nbsp;datasource-name</span><span style="color: #0000ff">="localmysql"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">delegator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delegator&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="default-no-eca"</span><span style="color: #ff0000">&nbsp;entity-model-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-group-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-eca-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-eca-enabled</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;distributed-cache-clear-enabled</span><span style="color: #0000ff">="false"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">group-map&nbsp;</span><span style="color: #ff0000">group-name</span><span style="color: #0000ff">="org.ofbiz"</span><span style="color: #ff0000">&nbsp;datasource-name</span><span style="color: #0000ff">="localmysql"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">delegator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delegator&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="test"</span><span style="color: #ff0000">&nbsp;entity-model-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-group-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-eca-reader</span><span style="color: #0000ff">="main"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">group-map&nbsp;</span><span style="color: #ff0000">group-name</span><span style="color: #0000ff">="org.ofbiz"</span><span style="color: #ff0000">&nbsp;datasource-name</span><span style="color: #0000ff">="localmysql"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">delegator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delegator&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="other"</span><span style="color: #ff0000">&nbsp;entity-model-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-group-reader</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;entity-eca-reader</span><span style="color: #0000ff">="main"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">group-map&nbsp;</span><span style="color: #ff0000">group-name</span><span style="color: #0000ff">="org.ofbiz"</span><span style="color: #ff0000">&nbsp;datasource-name</span><span style="color: #0000ff">="localmysql"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">delegator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">datasource&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="localmysql"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper-class</span><span style="color: #0000ff">="org.ofbiz.entity.datasource.GenericHelperDAO"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field-type-name</span><span style="color: #0000ff">="mysql"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-on-start</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add-missing-on-start</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-pks-on-start</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use-foreign-keys</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;join-style</span><span style="color: #0000ff">="ansi-no-parenthesis"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alias-view-columns</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drop-fk-use-foreign-key-keyword</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table-type</span><span style="color: #0000ff">="InnoDB"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character-set</span><span style="color: #0000ff">="gbk"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collate</span><span style="color: #0000ff">="gbk_bin"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">read-data&nbsp;</span><span style="color: #ff0000">reader-name</span><span style="color: #0000ff">="seed"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">read-data&nbsp;</span><span style="color: #ff0000">reader-name</span><span style="color: #0000ff">="demo"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">read-data&nbsp;</span><span style="color: #ff0000">reader-name</span><span style="color: #0000ff">="ext"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">inline-jdbc<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">jdbc-driver</span><span style="color: #0000ff">="com.mysql.jdbc.Driver"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc-uri</span><span style="color: #0000ff">="jdbc:mysql://127.0.0.1/opentaps?autoReconnect=true"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc-username</span><span style="color: #0000ff">="opentaps"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc-password</span><span style="color: #0000ff">="opentaps-password"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isolation-level</span><span style="color: #0000ff">="ReadCommitted"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pool-minsize</span><span style="color: #0000ff">="2"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pool-maxsize</span><span style="color: #0000ff">="20"</span><span style="color: #0000ff">/&gt;</span></div>
<p><br />
<br />
4、进行系统初始化<br />
在命令行窗口下，进入opentaps根目录后运行<br />
ant run-install<br />
系统开始安装，等大约15-30分钟后，系统提示安装完成。</p>
<p><br />
启动opentaps<br />
双击运行opentaps目录下的startofbiz.bat命令即可，请注意控制台输入默认输出至log下的ofbiz.log中，所以无法从控制台中判断系统是否启动完成，一般需等待两到五分钟。也可以将输出改回至console。</p>
<p>访问opentaps<br />
打开浏览器访问：http://localhost:8080/<br />
点击你希望访问的功能特性，系统默认帐号为<br />
admin/ofbiz，拥有所有权限。</p>
<p>&nbsp;</p>
<p>&nbsp;本人原创文章，欢迎转载，转载请注明出处！ </p>
<img src ="http://www.blogjava.net/hispark/aggbug/232097.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-10-02 15:26 <a href="http://www.blogjava.net/hispark/archive/2008/10/02/232097.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opentaps CRM 部分概览(续)</title><link>http://www.blogjava.net/hispark/archive/2008/10/01/231998.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Wed, 01 Oct 2008 07:55:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/10/01/231998.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/231998.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/10/01/231998.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/231998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/231998.html</trackback:ping><description><![CDATA[<p><strong>线索、联系人和客户概览</strong></p>
<p>在CRM应用中有一个核心应用是将线索/潜在客户转化成客户。在opentaps中的CRM应用，潜在客户是在[线索]中做为线索创建的。一个线索是一个公司里的一个联络人且不能拥有更多的相关联络信息。在你进行线索筛选后，例如进行了电话跟进，你可以标记此线索有效。这时，当线索变成客户，你可以将线索转换成客户客户和一个联络人。你也可以为这个客户客户建立更多的联系人信息。</p>
<p>注意如果你有关于同一家公司客户的多个线索时，系统允许你建立它们为不同的线索，而把它们转换成一个客户客户。线索转换屏幕允许你选择一个已经存在的客户客户。</p>
<p>这里没有关于什么样的线索可以转换成一个客户客户的正式要求——你可以按照你自己的应用需求来进行调整。</p>
<p>技术性备注：做为一个客户、线索或客户，一个参与者必须拥有&#8220;Account&#8221;, &#8220;Contact&#8221;,或 &#8220;Prospect&#8221; 的PartyRole并需要与另一个参与者有一个PartyRelationship。因此，不满足此要求的OFBiz参与者是不能做为一个account, lead, 或contact的。同样，一个客户客户是一个OFBiz的PartyGroup，线索和联系人是一个OFBiz Person。</p>
<p><strong>客户</strong></p>
<p>在0.9.1版本之前，客户所有者默认是可以管理客户组，但不能为此客户创建机会。因此，在你创建一个客户后，你除了无法创建机会外可以做任何事。创建一个客户组，且你在此组上有拥有完整的用户（读/写）使用权限时，你可以创建机会。</p>
<p>在0.9.1版本之后，客户所有者可以为其创建机会。</p>
<p>每个客户可以拥有一个父级客户，父级客户可以在[创建客户]或在修改时输入。</p>
<p>客户列表根据客户名称排序。</p>
<p><strong>联系人</strong></p>
<p>在联系人创建后，联系人可以通过客户主页面上[新联系人]菜单或是联系人主页面上的[新客户]方式来加入到客户上。</p>
<p>联系人列表根据联系人的姓/名排序。</p>
<p><strong>线索</strong></p>
<p>线索是一个原始状态的联系人/客户信息。当一个线索进行转换后，将后生成一个联系人与客户。</p>
<p>线索可以拥有父级对象。此父级对象应是一个已存在的客户。</p>
<p>线索默认会被分配给线索创建者。</p>
<p>当你进行一个线索识别后，点击[线索识别]来标识它已经通过&#8220;识别&#8221;。</p>
<p>当你转换一个线索，你将被带到一个屏幕并被询问是做为一个新建客户还是一个已存在的客户的联系人。如果此线索的公司已经被建立，选择已存在的客户。否则，保持此字段为空。线索中关于联络人的信息将会被转换成一个联系人。如果选择了一个已存在的客户，线索将转换成它的联系人。如果未选择已存在的客户，将会基于线索中的公司信息创建一个新的客户，线索信息将成为此客户的一个联系人。</p>
<p>线索在转换成联系人/客户时必须拥有公司名称才会转换成功。</p>
<p><br />
注意：如果你在转换线索时选择了一个已存在的客户，这时线索中的所有公司信息将会丢失。这包括：&#8220;公司名称&#8221;、&#8220;年营业额&#8221;、&#8220;行业&#8221;&#8230;</p>
<p>在拥有关联机会的线索进行转换时，关联机会同将会自动转换成目标客户、联系人的机会信息。</p>
<p>如果你根据线索生成了一个新的客户，线索中的联系信息（地址、电话、电邮）自动转换成客户中的联系信息。如果你基于一个已存的客户进行转换线索，则线索中的联系信息不会拷贝到客户中。</p>
<p>线索在未识别或转换前可以被删除（示例：还处于&#8220;新建&#8221;或&#8220;被分配&#8221;状态）。在0.9.1版本前，你不能删除任何拥有关联活动（事件或任务，如电子邮件）的线索。</p>
<p>线索列表可以根据线索中的公司名称、姓、名的任一项排序</p>
<p><strong>合并线索/联系人/客户</strong></p>
<p>从0.9.1版本开始，你可以将重复的线索/联系人/客户进行合并。使用左边的快捷菜单中[合并___]链接并输入从-和至- 线索/联系人/客户的partyId。页面将会要求你进行确认，在你确认合并操作后，</p>
<p>合并特性中来源的线索/联系人/帐户信息可能不支持过多的数据。</p>
<p><strong>机会</strong></p>
<p>当机会刚建立时，阶段是用于表明机会成功的概率，成功概率可以在以后进行修改，但是当它更新到一个新的阶段，概率就会自动更新至新阶段的概率。估计结束日期是用于提供机会未来预期情况。</p>
<p>一个机会只能在来源于一个帐户但可以关联多个联系人。</p>
<p>在编辑/更新机会时，你必须属于其所属帐户组，在帐户上创建机会时，你一定有权限更新此帐户。更新机会要求你填写更改备注。</p>
<p>在版本0.9.1，机会可以在线索识别后创建一个机会。当线索转换后，机会将同时关联于帐户与联系人。</p>
<p>注意机会的&#8220;预测关闭日期&#8221;实际上存储做为一个日期-时间（Java中的Timestamp类型），</p>
<p>机会阶段的概率存储于SalesOpportunityStage.defaultProbability字段</p>
<p><strong>案例</strong></p>
<p>案例必须创建关联于至少一个帐户或联系人。一个案例可以有多个联系人或帐户关例，虽然现在没有与之关联的接口。</p>
<p>&#8220;我的案例&#8221;显示所有分配给你的帐户或联系人相关的案例。它默认分配给用户权限是：如果你被分配一个帐户，而它有关联的案例，那这个案例就属于你。</p>
<p>更新案例时，你需要拥有相关的帐户/联系人权限。</p>
<p>将案例关闭需要特别的权限。</p>
<p><strong>发送电子邮件</strong></p>
<p>在帐户，联系人或线索的联系人信息屏幕中，你可以点击任何的电子邮件，将弹出一个发送邮件的屏幕。你可以输入另一个电子邮件地址或查询机会/案例。当你完成时，你可以点击[发送]邮件或[保存以后发送]。[保存以后发送]将把电子邮件保存为收件人的一个待办活动。在成功发送后，电子邮件将保存为活动历史的一部分。</p>
<p>如果电子邮件地址不是收件人参与者的电子邮件地址，你将获得一个错误。</p>
<p>注意[文本]和[超文本]按钮将切换电子邮件MIME格式为文本与超文本，但当前超文本编辑器还没有整合进来。因此，如果你打算使用超文本格式邮件时，直接通过粘贴或编写html格式内容。已计划提供一个整合浏览器的超文本编辑器。</p>
<p><strong>筛选接收的电子邮件</strong></p>
<p>在opentaps0.9.1，CRM/SFA应用可以筛选你接收的电子邮件，将它们保存为系统的通讯活动，且将它们关联到你的用户、联系人、帐户或线索上。配置此功能，首先应按照&#8220;Configuration and Setup&#8221;进行邮件容器的配置。接着编辑此文件</p>
<p>hot-deploy/crmsfa/servicedef/smcas.xml</p>
<p>把用于接收邮件的主机信息改正确后，重启你的服务，系统将开始览视你的主机并且保存新的电子邮件。它将根据邮件的来源电子邮件地址尝试匹配你的帐户/线索/联系人，根据接收人/抄送电子邮件地址匹配你的CRM用户。</p>
<p>在接收到一封新的电子邮件时，它将在系统中记录为一个通讯事件（CommunicationEvent）。如果来源电子邮件地址匹配了一个参与者电子邮件地址（帐户、线索或联系人），它将被记录为来源于参与者。如果接收邮件地址匹配另一个参与者的电子邮件地址，它将被记录为发送给该参与者的电子邮件。（技术备注：CRM/SFA应用使用OFBiz storeIncomingEmail服务，当使用WorkEffort调用和关联收件人做为WorkEffort的参与者）</p>
<p>新电子邮件做为关联于参与者（帐户、线索、联系人）和接收者（用户）的一个待办活动创建。当你登录至CRM/SFA应用时，你将可以在&#8220;待办活动&#8221;列表中查看到你收到的邮件且在发件人（帐户/线索/联系人）的&#8220;待办活动&#8221;中查看到它。你可以点击这个活动查看电子邮件，这将把它标记为开始，当你完成时将把它标记为结束（技术备注：CRM/SFA应用将把电子邮件的通讯事件CommunicationEvent在你开始活动时标记为待办&#8220;Pending&#8221;，结束时标记为完成&#8220;Complete&#8221;）</p>
<p>未关联到任何参与者的电子邮件将保存在系统中。你可以使用参与者管理应用来进行手工筛选。在[Party]&gt;[Comm]查询类型为&#8220;自动电子邮件&#8221;状态为&#8220;未知参与者&#8221;的通讯事件。然后编辑它们关联至系统用户，标记它们为&#8220;完成&#8221;。</p>
<p><strong>活动</strong></p>
<p>这里有两种活动类型：任务和事件。事件用于显示在日历中的会议。任务是电话、电子邮件或不显示在日历中的普通任务。在你初次登录时可以在&#8220;我的起始页&#8221;中显示待办活动列表，它们包括事件与任务。</p>
<p>事件可以通过日程（点击时间图标）或帐户、联系人、线索、案例、机会屏幕两种方式创建。任务只能在后者或任务列表中创建，因为它们是不在日历中显示的。</p>
<p>当你创建一个活动时（任务或事件），你可以输入计划的起始日期/时间和持续的期间。如果用户在此期间将会忙于处理此事，则点击&#8220;忙&#8221;或&#8220;离开&#8221;。如果有另一个任务或事件已经在使用此时段并标记为&#8220;忙&#8221;或&#8220;离开&#8221;，将会产生一个错误信息。如果你坚持要使用此时估，点击&#8220;忽略日程冲突&#8221;。当你更新事件时，你一样需要设置&#8220;忽略日程冲突&#8221;如果它与已存在的事件时间冲突。</p>
<p>记录一件已发生过的活动时。这些活动将会创建做为完成的，用户也会要求输入实际的开始与结束时间。</p>
<p>为计划某事创建一个新的活动，事件或任务时，用户输入计划开始时间和结束日期。原状态为&#8220;计划&#8221;的事件可以为&#8220;已确认&#8221;。当确认后，你可以在事件中加入参与者并通过发送邮件邀请他们。加入一个参与者自动确认他们。邀请他们发送发送电子邮件。输入的备注将被包含在其中，而且这个电子邮件将包含两个链接：接入与拒绝。</p>
<p>如果参与者已经在相同时段置&#8220;忙&#8221;于另一个事件或任务，他们是无法加入到事件中。如果未设置状态，则此段时间被假设为可用。</p>
<p>当你拥有自己的事件时，你可以在发生期间内（开始至结束时间）内把它标记不&#8220;已完成&#8221;。</p>
<p>还有一个任务创建为&#8220;已计划&#8221;时，当用户准备开始此活动，更新任务至&#8220;已开始&#8221;且输入开始时间。如果未输入时间，系统将记录当前时间做为开始时间。类似地，当用户准备标记它完成时（&#8220;已完成&#8221;），如果未输入时间，系统将记录当前时间做为完成时间。</p>
<p>至于一封电子邮件，当你点击[发送电子邮件]系统将记录它作为开始时间。当你点击[发送]，系统记录它作为结束时间。如果你保存以后发送，此活动将不会记录它为完成直至你实际发送此邮件。</p>
<p>当查看活动时，你将在上面查看到活动的详细内容，在中间的关联的活动参与者（帐户/联系人/线索/组成员）、如果这是封电子邮件，电子邮件在下方。注意OFBiz设计为允许每个work effort中允许多个通讯事件，但我们在活动中只显示其中的一个。这个概念稍微有点落后：在OFBiz，你创建work effort作为&#8220;项目&#8221;并与很多电子邮件并进行关联。在这里，work effor用于分离的&#8220;任务&#8221;，如发送一个电子邮件。你可以创建work effort作为项目，但它可以分离成调用子任务。它在Workeffor Manager中支持，但在CRM/SFA中没有这样的用法。</p>
<p>当你记录电话或电子邮件时，&#8220;呼入/呼出&#8221;标志参与者是主动方还是被动方。</p>
<p>参与者列表显示任务或事件的参与者（帐户/联系人/线索），当前只有日程拥有者（如活动的创建人）可以更新参与者可用状态及增加/删除他们。未来版本可能会改变这点限制。</p>
<p>查询活动将显示那些已完成的活动或任务列表。</p>
<p>当事件被取消，它将不再显示于日历中。</p>
<p><strong>预测</strong></p>
<p>销售预测使用机会概率和数据来计算在未来时间段的预期销售额。预测来源于机会的计算，每个销售员预测基于自己的客户机会和线索相关联的机会计算。与其相关的任何客户和已确认的线索可以用于计算预测。因此，所有销售员销售预测合计将超过整个公司的销售预测，因为很多销售员拥有相同的客户，为了获得公司的预测，每次只一个增加销售经理而且每个客户和线索只计算一次。</p>
<p>所有销售员可以创建自己的预测和输入他的销售定额。只有销售经理可以创建组/销售区域的预测。当前每个销售员只能创建自己的预测。</p>
<p>创建你自己的预测，选择[创建预测]并选择相应的季度来创建。只有未关闭的季度，即在还未到结束日期的季度可用于创建预测。</p>
<p>你将会被要求输入此季度的按月销售定额。当你完成后，点击[创建]。你的销售定额将输入进系统且按月/季度的预测将会被创建军。每个月的销售预测计算基于：<br />
1．&nbsp;成交金额=此月状态为&#8220;已关闭&#8221;机会金额累计<br />
2．&nbsp;最好金额=预计在此月关闭的机会金额累计，不管当前的阶段<br />
3．&nbsp;预测金额=所有高于最低概率的机会金额*概率的累计金额。最低门槛定义于crmsfa.properties配置文件中.</p>
<p><br />
季度预测是基于月度预测的累计。</p>
<p>查看任何的预测需要特别的权限。否则，你只能查看你自己的预测。</p>
<p>如果你拥有查看别人预测的权限，点击[查询预测]可以查询其它人的预测。你可以根据组成员或时间段来进行查询。查询的预测是按季度的。</p>
<p>默认的，只有销售经理或管理员可以修改已存在的预测。修改一个预测，点击预测的月份，输入修改后的定额，填写更改备注，然后点击[修改]。此月和季度的预测值将会被修改。</p>
<p>每当预测被修改，旧的版本将会被保存为历史。当查看预测时，你可以查看整个的预测修改历史（包括旧版本的修改日期与定额、最好预期和预期）</p>
<p>当一个时间段正式关闭或已结束，对应的预测不允许再修改。</p>
<p>如果在一个时间段已创建一个预测，当新的机会创建或已存在的机会更新时，它将自动更新。与该机会相关的客户/线索相关的预测成员将会自动更新。如果机会预计关闭日期被移至一个新的时间段，受影响的预测将会更新。然而如果机会移动到一个未建预测的时间点时，新的预测将会自动建立。</p>
<p><br />
<strong>报价</strong></p>
<p>报价部分允许你为自己的客户查看和创建报价。关键特性包括根据报价名称、类别、状态查询报价；创建报价；根据报价创建订单。注意这些屏幕同样是&#8220;订单管理&#8221;中的报价屏幕的一部分。<br />
报价的重要功能包括：<br />
&#8226;&nbsp;[查询报价] &#8211;查询报价信息<br />
&#8226;&nbsp;[查看报价] &#8211; 查看报价的摘要信息<br />
&#8226;&nbsp;[报价] &#8211; 管理报价的表头信息，包括客户与仓库<br />
&#8226;&nbsp;[报价细项] &#8211; 增加/删除报价项和修改它们的价格<br />
&#8226;&nbsp;[创建订单] &#8211; 根据报价内容创建订单</p>
<p><br />
<strong>订单</strong></p>
<p>订单部分允许你在CRM/SFA应用中查询订单或创建新订单。</p>
<p>0.9.x版本的订单页是基于OFBiz订单管理导入的，可以在&#8220;General Overview&#8221;中查看相应的详细文档。</p>
<p>1.0.x及之后版本的订单页重写支持订单的输入和查询。你可以在此页中为客户创建和查询订单。</p>
<p>&#8220;我的订单&#8221;页用于显示当前登录用户的订单。</p>
<p>你可以客户详细信息屏幕中的订单页中使用快速创建订单，或直接使用[创建订单]链接来创建一个新的订单。</p>
<p>如果你使用快速创建订单，你必须输入客户、订单名称，和要求发货日期。你可以输入一个产品id，系统将会加入数量为1.0此产品进入你的订单。</p>
<p>注意在订单管理中&#8220;要求发货日期&#8221;与&#8220;发出日期&#8221;是相同的。它不是订单管理中的&#8220;要求发货日期&#8221;。那个字段在现阶段不支持。</p>
<p>当你输入所有的订单项目后，点击[完成订单]。你将查看到一个要求你为每个订单项选择发货目的地与方式的屏幕。在你确认后，系统将自动创建多组分离的目的地与发货方式的发货组。</p>
<p>其它的订单项屏幕与订单管理中的相同。</p>
<p>订单项产品仓库配置于config/crmsfa.properties文件中。当前CRM订单项系统支持每个订单项只来源于一个产品仓库。这次不支持产品目录。</p>
<p><strong>市场</strong></p>
<p>市场页准备用于不同的市场相关的功能。当前只有系统中的调查列表及允许你查看这些调查反馈的结果。</p>
<p><strong>服务调查</strong></p>
<p>这里有一个独立的web应用用于发送客户调查、投票。当前，这是一个非常简单的web应用可以用于显示调查，收集反馈然后向客户答谢。</p>
<p>你可以在内容管理中创建调查，然后通过以下地址访问它：<br />
http://www.mysite.com/surveys/control?surveyId=${surveyId}<br />
其中${surveyId}是你的调查在内容管理中的ID<br />
你可以通过crmsfa/webapp/surveys/子目录中的文件来定制它。</p>
<p><strong>OFBiz</strong> </p>
<p>你可以通过crmsfa.properties中的&#8220;crmsfa.tab.ofbiz.show&#8221;参数来启用/禁用显示返回至OFBiz链接，如果启用，你将在标签页中查看到OFBiz的链接。</p>
<p>如果你打算为你的用户设置访问OFBiz应用权限，请查看Security Documentation了解更详细的内容。</p>
<p>技术备注：同其它应用整合</p>
<p>报价，订单和市场页实际上是重用订单管理与内容管理（调查）中的屏幕，它们是这样做的：<br />
1.&nbsp;在CRM/SFA应用中创建装铈页面<br />
2.&nbsp;在web.xml中设置对应应用main-decorator-location 参数，这样这些屏莫在CRM/SFA应用中调用时，它们将使用CRM/SFA中的屏幕样式来替代原来的样式显示。<br />
3.&nbsp;从原来的controller.xml中复制相关的view- 和 request-maps到 CRM/SFA应用中的controller.xml<br />
4.&nbsp;在订单项中，原来订单管理中客户的链接是链接至Party Manger的，而在CRM/SFA中应将参数修改至客户页面。<br />
<br />
本文档译自opentaps v0.9 manual,本人翻译,欢迎转载,请注明出处. </p>
 <img src ="http://www.blogjava.net/hispark/aggbug/231998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-10-01 15:55 <a href="http://www.blogjava.net/hispark/archive/2008/10/01/231998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opentaps CRM 部分概览</title><link>http://www.blogjava.net/hispark/archive/2008/09/28/231718.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Sun, 28 Sep 2008 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/09/28/231718.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/231718.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/09/28/231718.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/231718.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/231718.html</trackback:ping><description><![CDATA[<p>CRM/SFA应用用途</p>
<p>CRM/SFA设计用于销售代表、销售经理、客户服务代码管理公司中销售和客户服务的应用，它的主要功能点是：<br />
&#8226;&nbsp;跟踪销售情报<br />
&#8226;&nbsp;识别销售线索并将此转换成客户<br />
&#8226;&nbsp;跟踪客户联系<br />
&#8226;&nbsp;输入和跟踪商机开始到结束的生命周期<br />
&#8226;&nbsp;管理客户销售报价<br />
&#8226;&nbsp;创建和查看客户/联系人销售订单<br />
&#8226;&nbsp;生成销售预测<br />
&#8226;&nbsp;管理客户案例子 (客服请法语)<br />
&#8226;&nbsp;发送电子邮件<br />
&#8226;&nbsp;管理活动和工作，包括会议、电话、电子邮件<br />
&#8226;&nbsp;跟踪市场活动如：客户调查</p>
<p><br />
创建新用户</p>
<p>创建新用户需要在Party Manager中操作，点击[Party] &gt; [Create]创建一个新的参与者。至少为其分配一个以下角色：&#8220;Account manager&#8221;, &#8220;Account Rep&#8221;, &#8220;CSR&#8221;。注意每个用户可以拥有其它的角色如&#8220;Employee&#8221;、但只有以上三个角色用于CRM/SFA应用，下一步创建一个用户登录并且为其分配安全组：SALES_MANAGER, SALES_REP, 或 SALES_REP_LIMITED, 或 CSR</p>
<p>注意：在party manager中的角色与CRM/SFA中的角色是不同的，在party manager，角色仅定义为一些人或组面对另一些人或组时的身份。在CRM/SFA中，角色意味在客户销售关系中的分演的角色，而且它也暗指着一组对应的权限。</p>
<p>如果用户忘记自己密码，可以通过&#8220;忘记密码&#8221;功能将新密码邮至原来预设的个人邮件地址中。</p>
<p>用户概况</p>
<p>在CRM/SFA应用界面中的顶部[概况]链接位居用户名与[登出]按钮之间。点击此链接可访问用户概况页面，你可以在此页面中修改用户名称，修改密码，增加联系方式信息（如：电邮、邮政地址、电话等）。注意你不可能在这里更改用户登录信息（这只能在Party Manager中操作）。此页还可以查看用户过往的访问历史。</p>
<p>我/我的团队 </p>
<p>从0.9.1版本开始，你可以在[我的帐号]的右边看到[我的团队帐户],如果你点击我的帐户，你的登录将被配置为只查看你的个人信息而非使用团队帐号。这个功能工作于线索、联系人、案例、机会。</p>
<p>帐号组</p>
<p>CRM/SFA应用中的帐号组是通常用于工作于同一组角色和权限组合的团队， 一个组在它建立时可以被分配一个帐号。接着，帐号组管理员或帐号所有者可以重新分配组成员或他们的责任，这样很大程度不同于&#8220;军事单位&#8221;组，通常那些组是一直拥有固定的领导、成员的。</p>
<p>为了创建一个组，你需要使用Party Manger。在[Party] &gt; [Create] &gt;&gt; [Create New Party Group]并给你的组命名。然后在[Roles]处分配一个[Account Team]角色给它。然后在[Relationships]处加上你的组成员。以下信息项必段输入：<br />
&#8226;&nbsp;组PartyId<br />
&#8226;&nbsp;组成员角色 (Account Manager, Account Rep, 或 CSR), 基于早先创建的用户所分配的角色.<br />
&#8226;&nbsp;&#8220;Is a&#8221; 字段必须设置为&#8220;Assigned To&#8221;<br />
&#8226;&nbsp;组角色应该设置为 &#8220;Account Team&#8221;<br />
&#8226;&nbsp;设置起时日期 <br />
&#8226;&nbsp;Party Relationship Security 必须是你的组安全权限.&nbsp; 在 Party Manager, 一长串安全组将会显示，选择一个与CRM/SFA 应用相关的安全组.&nbsp; (查看 &#8220;Security Documentation.&#8221;)<br />
联系信息</p>
<p>系统允许你为每个人/组建立多重的联络方式信息，你的帐号、线索、联系人都可以根据你的需求输入任意多的电话号码、地址、电子邮件地址。每个联络信息都需要标识出它的用途。</p>
<p><br />
当你使用[创建联系人]、[创建线索]、[创建帐号]，系统将基于你的表单输入创建以下联系信息：<br />
&#8226;&nbsp;地址信息将被做为&#8220;一般信函地址&#8221;与&#8220;一般收货地址&#8221;<br />
&#8226;&nbsp;电话号码将做为&#8220;主电话号码&#8221;<br />
&#8226;&nbsp;电子邮件将做为&#8220;主电子邮件地址&#8221;<br />
&#8226;&nbsp;网站地址将做为&#8220;主网站地址&#8221;</p>
<p><br />
但你在创建联系信息时，你应当创建电子邮件作为主电子邮件地址及地址做为一般收货地址。主电子邮件地址将用于发送自动通知邮件。一般收货地址用于订单发货。</p>
<p>电话号码和电子邮件在所列帐号、线索、联系人的主电子邮件和主电话号码。</p>
<p>你可以点击任何的列在联络系统中的电子邮件地址来发送电子邮件，查看下面的&#8220;发送电子邮件&#8221;</p>
<p>备注</p>
<p>在CRM/SFA应用中，很多东西可以创建和保存备注。备注菜单通常在屏幕的下方。<br />
<br />
本文档译自opentaps v0.9 manual,本人翻译,欢迎转载,请注明出处. </p>
  <img src ="http://www.blogjava.net/hispark/aggbug/231718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-09-28 17:46 <a href="http://www.blogjava.net/hispark/archive/2008/09/28/231718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opentaps CRM 开发者概览</title><link>http://www.blogjava.net/hispark/archive/2008/09/28/231692.html</link><dc:creator>shanghai_spark</dc:creator><author>shanghai_spark</author><pubDate>Sun, 28 Sep 2008 07:45:00 GMT</pubDate><guid>http://www.blogjava.net/hispark/archive/2008/09/28/231692.html</guid><wfw:comment>http://www.blogjava.net/hispark/comments/231692.html</wfw:comment><comments>http://www.blogjava.net/hispark/archive/2008/09/28/231692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hispark/comments/commentRss/231692.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hispark/services/trackbacks/231692.html</trackback:ping><description><![CDATA[<p><strong>架构</strong></p>
<p>CRM/SFA应用很大程度不同于其它的OFBizBiz应用，OFBIZ应用设计为一组可以整合在一起适合各种商业活动的进程，CRM/SFA应用设计为支持角色/活动的全部活动在CRM应用中，这样子，它将带来与其它应用的很多不同点</p>
<p>1.CRM/SFA的商业逻辑粒度小于其它OFBiz，而且通常会调用很多其它应用中的action。如当创建一个帐户时，CRM/SFA应用将调用另一个OFBiz服务创建Party、PartyGroup、PartyRole、PartyRelationship等等</p>
<p>2.在OFBiz其它应用中高度抽象的数据模型在这里表达成更传统直观的概念。示例，&#8220;Party&#8221;被表达成为account ,lead, contact, team, 或 team member,&nbsp; 它们拥有不同的用户界面和业务逻辑。</p>
<p>3.OFBiz的&#8220;WorkEffort&#8221;面向用户时表达为&#8220;Activity&#8221;,而且只是事件和业务可作为&#8220;Activity&#8221;,其它的 &#8220;WorkEffort&#8221;例如制造产品过程在CRM/SFA中不显示出来。</p>
<p>4.它拥有PartyRelationship.securityGroupId定义多个参与者之间权限的不同的安全模型（示例，组成员A是否有权访问B帐户？）它使用了不同的安全方法（查看&#8220;Security Documentation&#8221;了解详细信息）</p>
<p>&nbsp;</p>
<p><strong>用户界面原则</strong></p>
<p><br />
CRM/SFA应用有一个不同于其它OFBiz应用的界面原则。简单来说，此原则就是 建立一个容易让用户明白和使用的界面，好过让用户不停的思考如何使用。</p>
<p><br />
示例，&#8220;work effort&#8221;是一个OFBiz中的a task, a project, an event, 或a manufacturing production step,在OFBiz的WorkEffort应用中让用户自己创建它时选择对应的实例选项，而在这里，WorkEffort被分离在不同的人机界面上显示各自的特性。</p>
<p><br />
大多数使用者，不会想&#8220;我打算创建一个work effort在参与者X和Y之间&#8221;，他们通常想&#8220;我为参与者X和Y在明天上午建立一个约会&#8221;。这样CRM/SFA应用提供创建约会界面并加入参与者X和Y，在此界面启动约会及完成它。</p>
<p><br />
所以这意味着有些在OFBiz中允许的操作在CRM/SFA界面中不再被允许。示例，在OFBiz创建一个&#8220;EVENT&#8221;类型的work effor时可把它关联到货运或产品制作过程。这些信息在OFBiz的work effort中是可见字段，尽管work effort在event中并无这些关联字段。另一面，在CRM/SFA中界面看不到这些字段</p>
<p><br />
这样的功能减少带来的是操作的易于理解，且也让一些日常的操作减少不必要的步骤。</p>
<p>另一个UI原则是将很多分离的步骤合而为一个操作步骤。最好的例子是当你创建一个联系人时，你可以在一个屏幕内输入所有联系人信息，而系统会自动的根据信息创建参与者、联系信息及关联项，将很多分离在不同OFBiz中的应用合而为一。</p>
<p>&nbsp;<br />
最后，我们打算避免用户点击回退、向前去查看信息，所以太多数屏幕都把信息显示在同一个屏幕里，而不是提供很多的信息标签</p>
<p><br />
<strong>编码约定</strong></p>
<p>另外，创建CRM/SFA应用，我们还有一些与其它不同的编码约定：<br />
1.强制要求将视图与数据准备分离，我们限制视图层如freemaker页/XML只承担展现数据功能。这样意味着在form组件中不会存在&#8221;action&#8221;标签。</p>
<p>2.在屏幕组件定义中，使用beanshell脚本比&lt;entity-one&gt; XML操作更好。</p>
<p>3.Minilang脚本在一个方法中不要超过十行。使用java来编写复杂的商业逻辑。不要在minilang中使用&lt;or&gt;、&lt;and&gt;及计算。</p>
<p>4.保证代码块简捷。一般的，如果你的方法超过两百行，建议你考虑如何重构它。</p>
<p>5.为你的代码加上注释。描述你编码的目的和结果，而不仅是你做了什么。示例，如果你编写了如下代码<br />
&nbsp;invoiceId=null;<br />
不要注释写成：//设置InvoiceId为null<br />
而应该写成：//invoiceId应该为空，否则服务不会创建一个新的发票</p>
<p>6.使用较长的变量/方法名称，如：computeForecastParentPeriod，而不是一个很短无意义的名称。</p>
<p>7.使用意指你所调用的实体对象的变量名，而不仅是一个缩略的变量名。 示例，如果你获得一个orderItems集合，变量名不要仅叫做&#8221;item&#8221;——可以叫它们&#8221;orderItems&#8221;或&#8221;nextOrderItem&#8221;，诸如此类。如果你获得一个OrderPaymentPreference实体，不要命名为&#8220;payments&#8221;，因为Payment实体同你命名的这个对象不是同一个东西。</p>
<p>8.在FTL、表单组件、beanshell和Java服务中使用java来帮助将复杂的逻辑进行分离。</p>
<p>9.将代码分离在应用的不同目录中，将表单、屏幕组件XML文档放在widgets目录中，将JAVA包放在src/目录下，FTL放在webapp/crmsfa/，BSH脚本放在webapp/crmsfa/WEB-INF/actions/中&#8230;</p>
<p><br />
10.在服务XML中加了相关注释指出需注意的事项或此服务可能发生的意外<br />
<br />
本文档译自opentaps v0.9 manual,本人翻译,欢迎转载,请注明出处.</p>
   <img src ="http://www.blogjava.net/hispark/aggbug/231692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hispark/" target="_blank">shanghai_spark</a> 2008-09-28 15:45 <a href="http://www.blogjava.net/hispark/archive/2008/09/28/231692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>