用友集团TurboCRM功能内部实现详析_第1页
用友集团TurboCRM功能内部实现详析_第2页
用友集团TurboCRM功能内部实现详析_第3页
用友集团TurboCRM功能内部实现详析_第4页
用友集团TurboCRM功能内部实现详析_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用友集团用友集团 ebu-crmebu-crm事业部事业部刘艳君刘艳君邮件:邮件:20102010年年4 4月月功能的内部实现功能的内部实现用户使用某一系统功能的完整过程用户使用某一系统功能的完整过程查看客户列表按条件查询编辑客户按逻辑存储用户界面内部实现简单图示:内部实现简单图示:tlayoutdbtmodeltcontrol入口入口php数据数据对象对象对象对象数据数据按条件查询按条件查询按逻辑存储按逻辑存储基本操作基本操作对象的列表查询对象的列表查询对象的编辑对象的编辑对象的删除对象的删除对象的列表查询对象的列表查询权限检查权限检查获取数据信息获取数据信息 生成列表生成列表显示显示权限检

2、查权限检查tuipage:checkprivilege(list_account);菜单权限检查的参数值存储在菜单权限检查的参数值存储在tc_menu中中菜单权限检查菜单权限检查tc_user_menuprivate function checkprivilegeid($privilegeid)if ($gblsystype = crm)if (!$this-_checkprivilegeid($privilegeid)/是否有当前模块的操作权限return false;if ($gblobj-getuserid() = 1)/管理员return true;$userprofile = tus

3、erprofile:getinstance();return $userprofile-getusermenuprivilege($privilegeid);/lib/tmenucache.lib:tmenucache- checkprivilegeid数据权限检查数据权限检查tc_user_scopetuserprofile -loadfromdbtuserprofile -loadfromdbtscopecheck -checkscopetscopecheck -checkscopetusercache:getinstance()tusercache:getinstance()cachec

4、ache业务结构权限、区域结构权限、访问、新增、激活、关闭、导出、打印、导入、状态升迁/* * biz_privilege、mng_privlege字段存储值的每一位含义 * 读、修改、删除 */define (operation_pos_read,0);define (operation_pos_edit,1);define (operation_pos_delete,2);/* * other_privilege字段存储值的每一位含义 * 访问、新增、激活、关闭、导出、打印、导入、状态升迁 */define (operation_pos_access,0);define (operatio

5、n_pos_add,1);define (operation_pos_activity,2);define (operation_pos_close,3);define (operation_pos_output,4);define (operation_pos_print,5);define (operation_pos_import,6);define (operation_pos_stage,7);define (operation_pos_extend,8);对象的列表查询对象的列表查询权限检查权限检查获取数据信息获取数据信息 生成列表生成列表显示显示获取数据信息获取数据信息实例化客户

6、模型实例化客户模型调用调用getdatalist方法获取客户数据信息方法获取客户数据信息结果集中的每一个对象对应表中的一行结果集中的每一个对象对应表中的一行通过对象属性获取各数据项的值通过对象属性获取各数据项的值属性名与表中字段名的对应关系由数据字典规定属性名与表中字段名的对应关系由数据字典规定$model = new accountmodel();$dataobjects = $model-getdatalist($condobj, $listattrs, false);foreach ($dataobjects as $dataobject) echo $dataobject-name;a

7、ccountmodel父类:父类:tmodeldefinemodel ():定义对象及对象关系定义对象及对象关系定义模型关系定义模型关系.$relobj = new tmodelrelation(.)添加关联关系添加关联关系$relobj-addjoinitem(.)加入直接关联关系加入直接关联关系$this-addrelation($relobj)加入反向关联关系加入反向关联关系$this-addreverserelation($relobj)tmodel-getdatalisttsqlstmt样例:样例:$stmt = new tsqlstmt(tsql_select);$stmt-tab

8、le(tc_account,a);$stmt-table(rel_account_relation,b);$stmt-join(a,account_id,b,account_id);$stmt-select(b,rel_account_id);$stmt-cond(a,account_id, $accountid);$sql = $stmt-sqlgen();$rs = $gbldb-query($sql);对象的列表查询对象的列表查询权限检查权限检查获取数据信息获取数据信息 生成列表生成列表显示显示代码示例代码示例$model = new accountmodel();$layout = n

9、ew tlistlayout($model);$page = new tuipage();echo $page-getheader(/js/tlist.js;/js/tquery.js;/js/cti.js);echo $page-getbody($layout);echo php_accountlist_js($layout, $optntytypes);echo $page-gettail();客户列表客户列表布局机制详解布局机制详解线索数据客户数据tlistlayouttviewlayoutteditlayout数据对象(一个或一组)布局类布局封装布局封装uml图图tlayouttlay

10、out:布局基类布局基类tobjectlayout:标准对象布局基类标准对象布局基类tconfiglayout:非对象的布局基类非对象的布局基类twizardlayout:向导页面布局基类向导页面布局基类tlayout:布局基类布局基类布局所需要的元素及其相关方法布局所需要的元素及其相关方法子类需要实现其子类需要实现其layout()方法完成布局方法完成布局可以重写本类方法修改元素显示可以重写本类方法修改元素显示tobjectlayout:标准对象布局基类标准对象布局基类list、edit、view布局布局子类包括:子类包括:tlistlayouttviewlayoutteditlayoutt

11、configlayout:非对象的布局基类非对象的布局基类重写了重写了tlayout的的layout()方法方法子类需要实现其子类需要实现其layoutmaininfo()方法方法公共方法公共方法(如按扭、标题等如按扭、标题等)例:系统配置例:系统配置-其它设置其它设置-系统设置页面(系统设置页面(wwwconfigsetting.php)twizardlayout:向导页面布局基类向导页面布局基类重写了重写了tlayout的的layout()方法方法子类需要实现其子类需要实现其layoutmaininfo()方法方法公共方法公共方法(如按扭、标题、翻页等如按扭、标题、翻页等)tobjectl

12、ayout标准对象布局标准对象布局tlistlayout: 数据依赖于对象的数据依赖于对象的$model的的listattr和和getdatalist()方法。方法。teditlayout: 数据依赖于对象的数据依赖于对象的”系统配置系统配置-编编辑页面布局辑页面布局”和和$model的的getdataobject ()方法。方法。tviewlayout:数据依赖于对象的数据依赖于对象的”系统配置系统配置-查查看页面布局看页面布局”和和$model的的getdataobject ()方法。方法。页面数据的显示分别在页面数据的显示分别在tlist.js、tedit.js、tview.js进行了定

13、义进行了定义tlistlayout代码示例代码示例include_once(tglobal.lib);crm_include(www/lib/tuilayout.lib);crm_include(www/lib/tlist.lib);crm_include(account/model/taccount.lib);tuipage:checkprivilege(list_account);$model = new accountmodel();$layout = new tlistlayout($model);$layout-setcustomtitle($layout-dd-getstringr

14、es(rel_account);$layout-hidetoolbar(id_tb_favorite);$layout-hidetoolbar(id_tb_update);$page = new tuipage();echo $page-getheader(/js/tlist.js;/js/tquery.js;/js/cti.js);echo $page-getbody($layout);echo $page-gettail();teditlayout代码示例代码示例include_once(tglobal.lib);crm_include(www/lib/tuilayout.lib);crm

15、_include(www/lib/tedit.lib);crm_include(account/model/taccount.lib);$model = new accountmodel();$layout = new teditlayout($model,$id);$noclonableatt = “account.creditday”;$layout-setnoclonableattrs($noclonableatt);if($issubmit & is_array($_post)echo json_encode($layout-save(accountsaver,account/

16、control/accountsaver.lib);crmstopphp();$page = new tuipage();echo $page-getheader(/js/tedit.js);echo $page-getbody($layout);echo $page-gettail();tviewlayout示例代码示例代码include_once(tpagecache.lib);$id = tgetrequest(id);$issubmit = tgetrequest(issubmit);$model = new accountmodel();$layout = new teditlayo

17、ut($model,$id);$noclonableatt = “account.expense”;$noclonableatt = account.stopflag;$layout-setnoclonableattrs($noclonableatt);if($issubmit & is_array($_post)echo json_encode($layout-save(productsaver,product/control/productsaver.lib);crmstopphp();其它布局方式其它布局方式baselistlayoutbaseselectlistlayoutba

18、secolumntreelayoutbasetabcolumntreelayoutbasetablistlayoutbaseeditlayout基本操作基本操作对象的列表查询对象的列表查询对象的编辑对象的编辑对象的删除对象的删除对象的编辑对象的编辑获取对象信息获取对象信息 生成编辑页面生成编辑页面显示显示保存保存流程控制类流程控制类tcontrolxml结点调用结点调用生成编辑页面生成编辑页面$model = new accountmodel();$layout = new teditlayout($model,$id);teditlayout$this-initdataobject();$t

19、his-adddefaulttoolbars();$this-adddefaultbuttons();initdataobject$page-getbody($layout)public function layout()$this-layoutsidebars();$this-layouttitle();if(!$this-disabletoolbar)$this-layouttoolbars();$this-layoutbuttons();$this-layoutform();$this-layoutbuttons();parent:layout();大家辛苦了!休息一下大家辛苦了!休息一

20、下保存对象信息保存对象信息tlayouttcontrolnode(一种数据存储逻辑的描述语言)(一种数据存储逻辑的描述语言)$class = $node-getproperty(class);$name = $node-getproperty(name);$target = $node-getproperty(target);$result = $node-getproperty(result);$desc = $node-getproperty(desc);$cnode = new $class($name,$target,$result);结点的关系图结点的关系图基类节点基类节点tnode

21、tnode需要子类实现需要子类实现execute方法方法在调用在调用execute方法前,必须调用节点方法前,必须调用节点setcontrol方法方法有不可忽略的错误,有不可忽略的错误, 必须抛必须抛texception异常异常原子操作节点原子操作节点tpimitivetprimitive的子类实现了业务的最小粒度的操作的子类实现了业务的最小粒度的操作系统已经提供事基于系统已经提供事基于sql事务的三个事务的三个tprimitive子类对象:子类对象:tbegintransactiontcommittrollback该三类类型可直接使用,不需要子类实现。该三类类型可直接使用,不需要子类实现。t

22、pimitive示例示例class accountcheck extends tprimitivepublic function execute()global $gbldb;$do = $this-gettarget();/查找上级id是否循环引用$pid = $do-parentaccountid;if(isrecycleparent()throw new texception($errmsg);顺序执行节点顺序执行节点tsequencesequence是一个最顺序执行的节点的集合对象是一个最顺序执行的节点的集合对象tsequence节点必须包含子节点节点必须包含子节点tsequence对

23、象的子节点可以是:对象的子节点可以是:tprimitive的子类节点的子类节点tsequence节点节点tbranch节点节点titerator节点节点使用使用addstep($node)方法将节点加入到方法将节点加入到tsequence序列中序列中它的它的execute方法简单实现为方法简单实现为public function execute()foreach($this-nodes as $k=$node)$node-setcontrol($this-control);$node-execute();分支节点分支节点tbranchtbranch节点实现了业务逻辑中的条件分支节点实现了业务逻

24、辑中的条件分支通过通过addbranch($name,$node)方法添加节点的分方法添加节点的分支支要求子类实现要求子类实现getbranchname() 方法方法public function execute()$name = $this-getbranchname();$branch = $this-branchs$name;if(is_object($branch)$branch-setcontrol($this-control);$branch-execute();tbranch示例示例class repeatinfosave extends tbranchpublic functi

25、on getbranchname()$newrepeatinfo = $this-control-getdata(newrepeatinfo);if ($newrepeatinfo)return insertrepeatinfo;elsereturn updaterepeatinfo;循环节点循环节点titeratortiterator节点实现了业务逻辑的循环操作节点实现了业务逻辑的循环操作必须使用必须使用setbody方法设置一个子结点方法设置一个子结点子类需要实现子类需要实现isfinished()方法方法该子节点会重复执行只到条件满足退出该子节点会重复执行只到条件满足退出execute方

26、法实现为:方法实现为:public function execute()if(!is_object($this-body)return;while(!$this-isfinished()$this-body-execute();titerator示例示例class deleteseries extends titeratorprotected function isfinished()$this-control-setobjecttype($this-control-getdata(objtype);$objarr = $this-control-getdata(datalist);if (!

27、is_array($objarr)return true;if ($this-cnt = count($objarr)return true;else$this-control-setdata(dataobject, $objarr$this-cnt);$this-cnt+;return false;引用类型的虚节点引用类型的虚节点tcontainertcontainer类型的节点为虚节点类型的节点为虚节点用于用于xml流程配置中引用别一个流程配置中引用别一个xml配置文件配置文件xml转换为以对象描述的流程时,不存在转换为以对象描述的流程时,不存在tcontainer类型的节点类型的节点基本

28、操作基本操作对象的列表查询对象的列表查询对象的编辑对象的编辑对象的删除对象的删除对象的删除、恢复和回收站删除对象的删除、恢复和回收站删除删除:根据对象定义来决定是直接删除还是进回删除:根据对象定义来决定是直接删除还是进回收站收站恢复:在回收站中对数据进行恢复恢复:在回收站中对数据进行恢复回收站删除:对进入回收站的数据进行彻底删除回收站删除:对进入回收站的数据进行彻底删除view界面中相关对象的删除:删除逻辑要单独定界面中相关对象的删除:删除逻辑要单独定义义对象的删除对象的删除找出对象的关联对象找出对象的关联对象判断关联对象的删除类型:判断关联对象的删除类型:删除删除断开关系断开关系禁止删除禁止

29、删除是删除则递归,直到找完或禁止删除的数据大于是删除则递归,直到找完或禁止删除的数据大于50条条view界面相关对象的删除界面相关对象的删除相关对象的删除也分为禁止删除、删除和解除关相关对象的删除也分为禁止删除、删除和解除关系系删除对象:根据对象本身的删除逻辑来定删除对象:根据对象本身的删除逻辑来定解除关系:分为通过关联关系表关联和直接引用关联两种解除关系:分为通过关联关系表关联和直接引用关联两种实体删除关系表实体删除关系表表名:表名:tc_entity_relation用于保存各对象间的删除关系,属性如下:用于保存各对象间的删除关系,属性如下:org_id:使用单位:使用单位idrelation_id:关系:关系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论