Openbiz 2.2 中文手册

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 提高性能

与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 显示报告的步骤:

  1. 确定Openbiz 代码可能访问BIRT viewer 服务器目录。Openbiz reportService 将生成一个BIRT 报表设计并将其复制到BIRT viewer 报表目录。
  2. 用Eclipse设计师创造一个BIRT 报告。使用csv 文件作为它的数据源和数据集。假设现在我们有一个BIRT 报告设计文件叫做abc.rptdesign 。
  3. 以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>
  4. 复制模板文件到Openbiz 应用的template 目录之下。Openbiz demoapp 有缺省BIRT 设计模板文件"dataobj.rptdesign.tpl" 在它的模板目录之下。
  5. 创造reportService metadata, 它指定TargetReportPath 、ReportTemplate 和BIRTViewer url。您能在openbiz/metadata/service/reportService.xml发现reportService metadata 的例子
  6. 在BizForm增加一个按钮来调用reportService render 方法。Openbiz demoapp Attendee BizForm (在Attendee tab) 有一个报表按钮。相似的按钮可能被创造在任一BizForm 界面 。
  7. 当用户点击报表按钮, 他或她将得到显示报表的一些选择。

支持 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 >