Openbiz 2.2 概要
Openbiz 2.2 安装
Openbiz 2.2 新特点
- 建造在Zend 框架上
- 用APC 提高性能
- Openbiz 对象的改进
- BizDataObj 改进
- BizForm 改进
- BizView 改进
- 与BIRT 报表集成
- 支持tabs and sub tabs
- 新的界面
- 树状结构的解决方案 - BizFormTree
附录- metadata DTD 文件
这个文件介绍Openbiz 2.2 在版本2.1之上的新改进的特点 。Openbiz 2.1 指南仍然可在版本2.2使用 。
Openbiz 2.2安装
下载和安装Openbiz 2.2
NOTE: 从Openbiz 2.2.1.1, 强力推荐使用Web Installer. 将Openbiz 下载后解压缩到某一个目录. 在浏览其中键入 http://localhost/openbiz_install_dir/demoapp/index.php. 然后沿着提示走下去.
Openbiz 2.2.1.1之前的版本用下面的步骤.
1. 下载 Openbiz 2.2 source, 下载 Zend Framework source。为得到更高的性能, 推荐使用APC extension。 A topic on apachelounge介绍了在windows安装APC 。
2. 在openbiz_home/bin/sysheader.inc 配置Zend framework 路径。例如, 如果Zend framework library 是在/htdocs/zf015/, 需在sysheader.inc 增加以下的定义。
// defined Zend framework library home as ZEND_FRWK_HOME
define('ZEND_FRWK_HOME',$_SERVER['DOCUMENT_ROOT']."/zf015/library");
// add zend framework to include path
set_include_path(get_include_path() . PATH_SEPARATOR . ZEND_FRWK_HOME); |
Openbiz 2.2 演示应用
1. 改变Config.xml Database Driver属性。 http://us2.php.net/manual/en/ref.pdo.php#pdo.drivers 给除了支持的PDO Driver名单。
2. 启动Openbiz dempapp, 在浏览器中键入 http://localhost/ob22/demoapp/demo.html。演示中事件管理应用的home 被改变到 http://localhost/ob22/demoapp/bin/home.php, 而不是在2.1 版本的 http://localhost/ob22/demoapp/pages/EventMgr.htm
Openbiz 2.2 新特点
建造在Zend 框架之上
- 用Zend_Db (基于PDO) 替换ADODB 数据库抽象库 。好处包括更高的性能和更低的 memory footprint。
- Zend 框架提供许多有用的功能
- Zend 框架是正式官方的php 框架, 但这是仍然一个底层的工具库。Openbiz 应用框架着重于应用层。
用APC 提高性能
- Openbiz 对象的metadata 数据贮藏在APC 记忆, 这样节省了从文件系统装入时间。
- PHP 对象可被贮藏在APC 引擎里。这提高了面向对象的PHP 代码的表现。
- APC 是由PHP的开发人员开发的 , 它将在PHP6里 。
BizDataObj 改进
- 查询通常由RunSearch() 和FetchRecords() 返回 records array 。这简化数据查询接口。
- 开发商可能由Query()得到PDO statement. 这对询问结果有更多控制。
- 询问结果数据不被贮藏在session 中(不同与2.1) 。这省了大量时间装载session 数据。
- 唯一激活纪录贮藏在session中(纪录被保存在cache/session 数据) 。
- 增加Stateless (Y/N) 属性表明openbiz 是否将在session保留对象的状态数据 。在Openbiz, 对象保留一些数据在session, 为了在下个http 请求恢复它。我们称它横跨session的stateful 对象。这是Openbiz 对象缺省行为。如果Stateless 被设置对' Y ', 这意味着对象状态不会被保留在session。如果您不需要它的数据横跨session, 装载Stateless 对象比stateful 对象更快。
BizForm 改进
- 在table form支持更多的页浏览。用户能做PrevPage 、NextPage 、GotoPage 和跃迁在任一页。
- 增加Stateless (Y/N) 属性表明是否openbiz 将保留对象的状态数据横跨session。
- 在bizctrl元素增加DefaultValue (缺省值)属性。语言表达可用于DefaultValue。
- 在bizctrl元素增加pickermap属性. pickermap是用来映射弹出窗口中的选择记录到父纪录. 如果pickermap未定义, openbiz根 据定义在bizdataobjs 的 joined 关系来进行映射. 如果pickermap有定义, openbiz根据pickermap来映射
语法是pickermap pickermap = " thisform_control_1 : popup_control_1 , thisform_control_2 : popup_control_2 , … … "
一个例子是<BizCtrl Name="..." ValuePicker="FormDoctor_popup" PickerMap="thisformacctountid:popupacountid, thisformdoctorlastname:popupdoctorlastname, ..."/>
BizView 改进
- View 历史包含包含页数、激活记录id, 查寻规则和排序规则的BizDataObj 书签。这保证向前赫向后页面浏览带给用户正确的内容。
- ViewSet 是一个小组View, 它们分享数据和分享同样的tab。您能在"支持 tabs and sub tabs" 的章节中找到细节和例子。
与BIRT 报表集成
产生报表是商业应用一个非常重要特点。通过利用 BIRT 报表服务器, Openbiz 应用从BizForm/BizDataObj 中产生报表。
BIRT 是一个基于Eclipse的报表系统, 它集成以您的Java/J2.EE 应用产生高质量报表。在开源之报表工具中, BIRT 是最佳的一个。它的Eclipse报表设计师让您从数据库桌和其它数据源(即xml 和csv 文件) 创造漂亮的报表。
BIRT 服务器的最简单的设施是使用BIRT 观察者。好参考可能被发现在The simplest installation of BIRT server is using BIRT viewer. A good reference can be found at Installing the BIRT Viewer in Tomcat.
Openbiz 使用它的reportService 与BIRT viewer 服务器集成。创造BIRT 报告模板和用BIRT viewer 显示报告的步骤:
- 确定Openbiz 代码可能访问BIRT viewer 服务器目录。Openbiz reportService 将生成一个BIRT 报表设计并将其复制到BIRT viewer 报表目录。
- 用Eclipse设计师创造一个BIRT 报告。使用csv 文件作为它的数据源和数据集。假设现在我们有一个BIRT 报告设计文件叫做abc.rptdesign 。
- 以smarty 模板句法转换上述rptdesign 文件成模板。例如, 替换resultset 结构用{foreach} 。abc.rptdesign 成为abc.rptdesign.tpl 。下表是转换设计成模板的例子。
| resultset in .rptdesign |
resultset in template |
<list-property name="resultSet"> <structure> <property name="position">1</property> <property name="name">AttendeeId</property> <property name="nativeName">AttendeeId</property> <property name="dataType">string</property> <property name="nativeDataType">12</property> </structure> <structure> <property name="position">2</property> <property name="name">Income</property> <property name="nativeName">Income</property> <property name="dataType">string</property> <property name="nativeDataType">12</property> </structure> </list-property> |
<list-property name="resultSet"> {foreach item=fld from=$rpt_fields}<structure> <property name="name">{$fld.name}</property> <property name="nativeName">{$fld.name}</property> <property name="dataType">{$fld.type}</property> <property name="nativeDataType">12</property> </structure> {/foreach} </list-property> |
- 复制模板文件到Openbiz 应用的template 目录之下。Openbiz demoapp 有缺省BIRT 设计模板文件"dataobj.rptdesign.tpl" 在它的模板目录之下。
- 创造reportService metadata, 它指定TargetReportPath 、ReportTemplate 和BIRTViewer url。您能在openbiz/metadata/service/reportService.xml发现reportService metadata 的例子
- 在BizForm增加一个按钮来调用reportService render 方法。Openbiz demoapp Attendee BizForm (在Attendee tab) 有一个报表按钮。相似的按钮可能被创造在任一BizForm 界面 。
- 当用户点击报表按钮, 他或她将得到显示报表的一些选择。
支持 tabs and sub tabs
Tabs 非常普遍地被使用在企业应用和消费者网站。在许多商业应用, subtabs 是常见的widgets 用来组织界面元件之间父子关系。
Openbiz 2.2 以BizView HTMLTab 类的一个新属性和ViewSet 属性的组合来支持tabs and subtabs 。
HTMLTab 类样品metadata xml 文件是在demoapp/metadata/demo/Tabs.xml 和demoapp/metadata/demo/EventTabs.xml 。
| demo/Tabs.xml |
<?xml version="1.0" standalone="no"?> <Tabs Name="Tabs" Package="demo" Class="HTMLTabs" TemplateFile="tabs.tpl"> <TabViews> <View Name="home" URL="./home.php" Caption="Home"/> <View Name="event" URL="" View="demo.EventView" ViewSet="EventSet" Caption="Events" Icon=""/> <View Name="regist" URL="" View="demo.RegistView" Caption="Registration" Icon=""/> <View Name="attendee" URL="" View="demo.AttendeeView" Caption="Attendees" Icon=""/> <View Name="reports" URL="./report.php" Caption="Reports" Icon=""/> <View Name="test" URL="" View="demo.FieldDepTestView" Caption="Test 2.1 Features" Icon=""/> </TabViews> </Tabs> |
| demo/EventTabs.xml |
<?xml version="1.0" standalone="no"?> <Tabs Name="EventTabs" Package="demo" Class="HTMLTabs" TemplateFile="subtabs.tpl"> <TabViews> <View Name="EventAttendee" URL="" View="demo.EventView" Target="" Caption="Attendees" Icon=""/> <View Name="EventRegist" URL="" View="demo.EventRegistView" Target="" Caption="Registration" Icon=""/> </TabViews> </Tabs> |
有一样的ViewSet = "EventSet " 的对应的视图(view)
| demo/EventView.xml |
demo/EventRegistView.xml |
<?xml version="1.0" standalone="no"?> <BizView Name="EventView" ViewSet="EventSet" Description="Event BizView" Package="demo" Class="BizView" Template="view.tpl"> <ControlList> <Control Name="_tabs" Form="Tabs"/> <Control Name="fm_event" Form="FMEvent" SubCtrls="FMAttendeeChild"/> <Control Name="_subtabs" Form="EventTabs"/> <Control Name="fm_attd" Form="FMAttendeeChild"/> </ControlList> </BizView> |
<?xml version="1.0" standalone="no"?> <BizView Name="EventRegistView" ViewSet="EventSet" Description="Event BizView" Package="demo" Class="BizView" Template="view.tpl"> <ControlList> <Control Name="_tabs" Form="Tabs"/> <Control Name="fm_event" Form="FMEvent" SubCtrls="FMRegistChild"/> <Control Name="_subtabs" Form="EventTabs"/> <Control Name="fm_regist" Form="FMRegistChild" /> </ControlList> </BizView> |
由于EventView 和EvenrRegistView 分享同样ViewSet, 在他们之间互换将保留对FMEvent 和它的BOEvent 同样对象的上下文。例如, 在EventView 用户在上面的form 查询"*Tennis*" , 当他点击Registration sub tab, 换到EventRegistView, 同样的查询结果被保留在新视图。


新的界面
以优秀品质设计企业网应用通常需要web 设计师。Openbiz 2.2 demoapp 带来新的界面样式:
- Tabs 和subtabs
- BizForm 标题bar
- Table column hearder 和 selected row
- 3D 样式按钮
当然开发商可以改变在demoapp/css 之下德css 文件来应用他们自己的样式。
树状结构的解决方案 - BizFormTree
Openbiz 2.2 中的一个新类是BizFormTree (Openbiz 1.1 有相似的类). 这个类是为了解决一个共同的问题, 树状结构保存在一个数据库表中. 这个表包含ID 和ParentID columns. BizFormTree 允许用户浏览树,并添加/删除/编辑树节点.
BizFormTree 是一个特殊BizForm.它利用BizForm.dtd文件作为其xml schema. BizFormTree 目的是表现在一个数据库表中的树的层次关系.
举例来说, event table schema: (every record has PARENT_ID column which builds tree hierarchy relationship between the records in the same table)
| Column |
Comments |
| SYSID |
Primary key |
| NAME |
Event name |
| PARENT_ID |
Store the SYSID of its parent event. |
BizFormTree 需要映射BizDataObj 中的两个BizFields "Id" 和 "PId". "PId" 对应于table column parent id. 这个类提供两个新的方法
- ListChildren($id) - 列出某一纪录的所有子记录
- ListSiblings($id) - 列出某一纪录的所有兄弟记录
该类将 parent object array 输出的 smarty template. 以parent array, 开发者可显示当前纪录的父结构. BizFormTree metadata 的例子是
<BizCtrlList>
<BizCtrl Name="bctrl_Id" FieldName="Id" DisplayName="Id"/>
<BizCtrl Name="bctrl_name" FieldName="Name" DisplayName="Name" Link="javascript:CallFunction('{@:Name}.ListChildren({@:Control[bctrl_Id].Value})')"/>
<BizCtrl Name="bctrl_pid" FieldName="PId" DisplayName="PId"/>
</BizCtrlList> |
The template is like
{section name=i loop=$parents}
{if $smarty.section.i.index != 0} > {/if}<a href="javascript:CallFunction('demo.FMEventTree.ListSiblings({$parents[i].Id}))')">{$parents[i].Name}</a>
{sectionelse} {/section} |
下图显示了应用BizFormTree 和 list_tree.tpl 的一个例子.

附录- metadata DTD 文件
蓝色文字表示Openbiz 2.2 中新的元素
BizDataObj metadata DTD 文件
<!--OpenBiz BizObj metadata DTD-->
<!ELEMENT BizObj (BizFieldList, TableJoins, ObjRefernces, Parameters) > <!ATTLIST BizObj Name CDATA #REQUIRED > <!ATTLIST BizObj Description CDATA #REQUIRED > <!ATTLIST BizObj Package CDATA #IMPLIED > <!ATTLIST BizObj Class CDATA #REQUIRED > <!ATTLIST BizObj InheritFrom CDATA #IMPLIED > <!ATTLIST BizObj DBName CDATA #IMPLIED > <!ATTLIST BizObj Table CDATA #REQUIRED > <!ATTLIST BizObj SearchRule CDATA #IMPLIED > <!ATTLIST BizObj SortRule CDATA #IMPLIED > <!ATTLIST BizObj OtherSQLRule CDATA #IMPLIED > <!ATTLIST BizObj AccessRule CDATA #IMPLIED > <!ATTLIST BizObj UpdateCondition CDATA #IMPLIED > <!ATTLIST BizObj DeleteCondition CDATA #IMPLIED > <!ATTLIST BizObj Stateless CDATA #IMPLIED >
<!ELEMENT BizFieldList (BizField+) > <!ELEMENT BizField EMPTY > <!ATTLIST BizField Name CDATA #REQUIRED > <!ATTLIST BizField Class CDATA #IMPLIED > <!ATTLIST BizField Join CDATA #IMPLIED >
<!ATTLIST BizField Column CDATA #REQUIRED > <!ATTLIST BizField SQLExpr CDATA #IMPLIED > <!ATTLIST BizField Type CDATA #IMPLIED > <!ATTLIST BizField Format CDATA #IMPLIED > <!ATTLIST BizField Required CDATA #IMPLIED > <!ATTLIST BizField Validator CDATA #IMPLIED > <!ATTLIST BizField DefaulValue CDATA #IMPLIED > <!ATTLIST BizField Value CDATA #IMPLIED > <!ATTLIST BizField OnAudit CDATA #IMPLIED > <!ELEMENT TableJoins (Join+) > <!ELEMENT Join EMPTY > <!ATTLIST Join Name CDATA #REQUIRED > <!ATTLIST Join Table CDATA #REQUIRED > <!ATTLIST Join Column CDATA #REQUIRED > <!ATTLIST Join JoinRef CDATA #IMPLIED > <!ATTLIST Join ColumnRef CDATA #REQUIRED > <!ATTLIST Join JoinType CDATA #REQUIRED >
<!ELEMENT ObjReferences (Object+) > <!ELEMENT Object EMPTY > <!ATTLIST Object Name CDATA #REQUIRED > <!ATTLIST Object Description CDATA #IMPLIED > <!ATTLIST Object Relationship CDATA #REQUIRED > <!ATTLIST Object Table CDATA #REQUIRED > <!ATTLIST Object Column CDATA #REQUIRED > <!ATTLIST Object FieldRef CDATA #REQUIRED > <!ATTLIST Object CascadeDelete CDATA #IMPLIED > <!ATTLIST Object XTable CDATA #IMPLIED > <!ATTLIST Object XColumn1 CDATA #IMPLIED > <!ATTLIST Object XColumn2 CDATA #IMPLIED >
<!ELEMENT Parameters (Parameter+) > <!ELEMENT Parameter EMPTY > <!ATTLIST Parameter Name CDATA #REQUIRED > <!ATTLIST Parameter Value CDATA #IMPLIED > <!ATTLIST Parameter Required CDATA #IMPLIED > <!ATTLIST Parameter InOut CDATA #IMPLIED > |
BizView metadata DTD 文件
<!--OpenBiz BizView metadata DTD--> <!ELEMENT BizView (ControlList, Parameters) > <!ATTLIST BizView Name CDATA #REQUIRED > <!ATTLIST BizView Description CDATA #REQUIRED > <!ATTLIST BizView ViewSet CDATA #IMPLIED > <!ATTLIST BizView Package CDATA #IMPLIED > <!ATTLIST BizView Class CDATA #IMPLIED > <!ATTLIST BizView Template CDATA #IMPLIED >
<!ELEMENT ControlList (Control+) > <!ELEMENT Control EMPTY > <!ATTLIST Control Name CDATA #REQUIRED > <!ATTLIST Control Form CDATA #REQUIRED > <!ATTLIST Control SubCtrls CDATA #IMPLIED >
<!ELEMENT Parameters (Parameter+) > <!ELEMENT Parameter EMPTY > <!ATTLIST Parameter Name CDATA #REQUIRED > <!ATTLIST Parameter Value CDATA #IMPLIED > <!ATTLIST Parameter Required CDATA #IMPLIED > <!ATTLIST Parameter InOut CDATA #IMPLIED > |
BizForm metadata DTD 文件
<!--OpenBiz BizForm metadata DTD-->
<!ELEMENT BizForm (BizCtrlList, DisplayModes, Toolbar, Navbar, Parameters) > <!ATTLIST BizForm Name CDATA #REQUIRED > <!ATTLIST BizForm Description CDATA #REQUIRED > <!ATTLIST BizForm Package CDATA #IMPLIED > <!ATTLIST BizForm Class CDATA #REQUIRED > <!ATTLIST BizForm InheritFrom CDATA #IMPLIED > <!ATTLIST BizForm jsClass CDATA #REQUIRED > <!ATTLIST BizForm Title CDATA #REQUIRED > <!ATTLIST BizForm BizDataObj CDATA #REQUIRED > <!ATTLIST BizForm PageSize CDATA #REQUIRED > <!ATTLIST BizForm SearchRule CDATA #IMPLIED > <!ATTLIST BizFomr Stateless CDATA #IMPLIED >
<!ELEMENT BizCtrlList (BizCtrl+) > <!ELEMENT BizCtrl (EventHandler+) > <!ATTLIST BizCtrl Name CDATA #REQUIRED > <!ATTLIST BizCtrl Class CDATA #IMPLIED > <!ATTLIST BizCtrl FieldName CDATA #IMPLIED > <!ATTLIST BizCtrl DisplayName CDATA #IMPLIED > <!ATTLIST BizCtrl Type CDATA #IMPLIED > <!ATTLIST BizCtrl Width CDATA #IMPLIED > <!ATTLIST BizCtrl Height CDATA #IMPLIED > <!ATTLIST BizCtrl HTMLAttr CDATA #IMPLIED > <!ATTLIST BizCtrl Link CDATA #IMPLIED > <!ATTLIST BizCtrl Image CDATA #IMPLIED > <!ATTLIST BizCtrl Hidden CDATA #IMPLIED > <!ATTLIST BizCtrl Enabled CDATA #IMPLIED > <!ATTLIST BizCtrl Sortable (Y|N) "" > <!ATTLIST BizCtrl Order CDATA #IMPLIED > <!ATTLIST BizCtrl Style CDATA #IMPLIED > <!ATTLIST BizCtrl ValuePicker CDATA #IMPLIED > <!ATTLIST BizCtrl PickerMap CDATA #IMPLIED > <!ATTLIST BizCtrl DefaultValue CDATA #IMPLIED > <!ATTLIST BizCtrl SelectFrom CDATA #IMPLIED > <!ATTLIST BizCtrl DrillDownLink CDATA #IMPLIED > <!ATTLIST BizCtrl DisplayMode CDATA #IMPLIED >
<!ELEMENT Toolbar (Control+) > <!ELEMENT Navbar (Control+) > <!ELEMENT Control (EventHandler+) > <!ATTLIST Control Name CDATA #REQUIRED > <!ATTLIST Control Class CDATA #IMPLIED > <!ATTLIST Control Image CDATA #IMPLIED > <!ATTLIST Control Caption CDATA #IMPLIED > <!ATTLIST Control Type CDATA #IMPLIED > <!ATTLIST Control Width CDATA #IMPLIED > <!ATTLIST Control Height CDATA #IMPLIED > <!ATTLIST Control HTMLAttr CDATA #IMPLIED > <!ATTLIST Control Style CDATA #IMPLIED > <!ATTLIST Control Hidden CDATA #IMPLIED > <!ATTLIST Control Enabled CDATA #IMPLIED > <!ATTLIST Control SelectFrom CDATA #IMPLIED > <!ATTLIST Control DisplayMode CDATA #IMPLIED >
<!ELEMENT EventHandler EMPTY > <!ATTLIST EventHandler Name CDATA #REQUIRED > <!ATTLIST EventHandler Event CDATA #REQUIRED > <!ATTLIST EventHandler Function CDATA #REQUIRED > <!ATTLIST EventHandler FunctionType CDATA #IMPLIED > <!ATTLIST EventHandler ShortcutKey CDATA #IMPLIED > <!ATTLIST EventHandler PostAction CDATA #IMPLIED > <!ELEMENT DisplayModes (Mode+) > <!ELEMENT Mode EMPTY > <!ATTLIST Mode Name CDATA #REQUIRED > <!ATTLIST Mode TemplateFile CDATA #REQUIRED > <!ATTLIST Mode DataFormat CDATA #REQUIRED > <!ATTLIST Mode FormatStyle CDATA #IMPLIED >
<!ELEMENT Parameters (Parameter+) > <!ELEMENT Parameter EMPTY > <!ATTLIST Parameter Name CDATA #REQUIRED > <!ATTLIST Parameter Value CDATA #IMPLIED > <!ATTLIST Parameter Required CDATA #IMPLIED > <!ATTLIST Parameter InOut CDATA #IMPLIED > |
Plugin service metadata DTD 文件
<!--OpenBiz Plugin service metadata DTD--> <!ELEMENT PluginService ANY > <!ATTLIST PluginService Name CDATA #REQUIRED > <!ATTLIST PluginService Description CDATA #IMPLIED > <!ATTLIST PluginService Package CDATA #REQUIRED > <!ATTLIST PluginService Class CDATA #REQUIRED > |