用友集团TurboCRM功能内部实现详析

上传人:新** 文档编号:569730961 上传时间:2024-07-30 格式:PPT 页数:68 大小:3.39MB
返回 下载 相关 举报
用友集团TurboCRM功能内部实现详析_第1页
第1页 / 共68页
用友集团TurboCRM功能内部实现详析_第2页
第2页 / 共68页
用友集团TurboCRM功能内部实现详析_第3页
第3页 / 共68页
用友集团TurboCRM功能内部实现详析_第4页
第4页 / 共68页
用友集团TurboCRM功能内部实现详析_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《用友集团TurboCRM功能内部实现详析》由会员分享,可在线阅读,更多相关《用友集团TurboCRM功能内部实现详析(68页珍藏版)》请在金锄头文库上搜索。

1、TurboCRMTurboCRM功能内部实现详析功能内部实现详析用友集团用友集团 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)/管

3、理员return true;$userProfile = TUserProfile:getInstance();return $userProfile-GetUserMenuPrivilege($privilegeID);/lib/tmenucache.lib:TMenuCache- CheckPrivilegeID数据权限检查数据权限检查tc_user_scopeTUserProfile -loadFromDBTUserProfile -loadFromDBTScopeCheck -checkScopeTScopeCheck -checkScopeTUserCache:getInstance

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

5、N_POS_ACCESS,0);define (OPERATION_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 $dat

7、aObject) echo $dataObject-Name;AccountModel父类:父类:TModeldefineModel ():定义对象及对象关系定义对象及对象关系定义模型关系定义模型关系.$relObj = new TModelRelation(.)添加关联关系添加关联关系$relObj-addJoinItem(.)加入直接关联关系加入直接关联关系$this-addRelation($relObj)加入反向关联关系加入反向关联关系$this-addReverseRelation($relObj)Tmodel-getDataListTSQLStmt样例:样例:$stmt = new

8、 TSQLStmt(TSQL_SELECT);$stmt-Table(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

9、= new AccountModel();$layout = new 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数据对象(一

10、个或一组)布局类布局封装布局封装UML图图TLayoutTLayout:布局基类布局基类TObjectLayout:标准对象布局基类标准对象布局基类TConfigLayout:非对象的布局基类非对象的布局基类TWizardLayout:向导页面布局基类向导页面布局基类TLayout:布局基类布局基类布局所需要的元素及其相关方法布局所需要的元素及其相关方法子类需要实现其子类需要实现其layout()方法完成布局方法完成布局可以重写本类方法修改元素显示可以重写本类方法修改元素显示TObjectLayout:标准对象布局基类标准对象布局基类LIST、EDIT、VIEW布局布局子类包括:子类包括:TL

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

12、法(如按扭、标题如按扭、标题、翻页、翻页等等)TObjectLayout标准对象布局标准对象布局TListLayout: 数据依赖于对象的数据依赖于对象的$model的的listAttr和和getDatalist()方法。方法。TEditLayout: 数据依赖于对象的数据依赖于对象的”系统配置系统配置-编辑编辑页面布局页面布局”和和$model的的getDataObject ()方法。方法。TViewLayout:数据依赖于对象的数据依赖于对象的”系统配置系统配置-查看查看页面布局页面布局”和和$model的的getDataObject ()方法。方法。页面数据的显示分别在页面数据的显示分别

13、在tlist.js、tedit.js、tview.js进行了定义进行了定义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-setCu

14、stomTitle($layout-dd-getStringRes(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_inc

15、lude(www/lib/tuilayout.lib);crm_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

16、-save(AccountSaver,account/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 AccountMode

17、l();$layout = new TEditLayout($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();其它布局方式其它布局方式BaseListLayou

18、tBaseSelectListLayoutBaseColumnTreeLayoutBaseTabColumnTreeLayoutBaseTabListLayoutBaseEditLayout基本操作基本操作对象的列表查询对象的列表查询对象的编辑对象的编辑对象的删除对象的删除对象的编辑对象的编辑获取对象信息获取对象信息 生成编辑页面生成编辑页面显示显示保存保存流程控制类流程控制类TControlXML结点调用结点调用生成编辑页面生成编辑页面$model = new AccountModel();$layout = new TEditLayout($model,$ID);TEditLayout$t

19、his-InitDataObject();$this-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:layou

20、t();大家辛苦了!休息一下大家辛苦了!休息一下保存对象信息保存对象信息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);结点

21、的关系图结点的关系图基类节点基类节点TNodeTNode需要子类实现需要子类实现execute方法方法在调用在调用execute方法前,必须调用节点方法前,必须调用节点setControl方方法法有不可忽略的错误,有不可忽略的错误, 必须抛必须抛TException异常异常原子操作节点原子操作节点TPimitiveTPrimitive的子类实现了业务的最小粒度的操作的子类实现了业务的最小粒度的操作系统已经提供事基于系统已经提供事基于SQL事务的三个事务的三个TPrimitive子子类对象:类对象:TBeginTransactionTcommitTRollback该三类类型可直接使用,不需要子类

22、实现。该三类类型可直接使用,不需要子类实现。Tpimitive示例示例class AccountCheck extends TPrimitivepublic function execute()global $gblDB;$do = $this-getTarget();/查找上级ID是否循环引用$pid = $do-ParentAccountID;if(isRecycleParent()throw new TException($errmsg);顺序执行节点顺序执行节点TSequenceSequence是一个最顺序执行的节点的集合对象是一个最顺序执行的节点的集合对象TSequence节点必须包

23、含子节点节点必须包含子节点TSequence对象的子节点可以是:对象的子节点可以是: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 exten

25、ds TBranchpublic function getBranchName()$newRepeatInfo = $this-control-getData(newrepeatinfo);if ($newRepeatInfo)return InsertRepeatInfo;elsereturn UpdateRepeatInfo;循环节点循环节点TIteratorTIterator节点实现了业务逻辑的循环操作节点实现了业务逻辑的循环操作必须使用必须使用setBody方法设置一个子结点方法设置一个子结点子类需要实现子类需要实现isFinished()方法方法该子节点会重复执行只到条件满足退出该子

26、节点会重复执行只到条件满足退出execute方法实现为:方法实现为: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-

27、getData(datalist);if (!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转换为以对象描述的流程时,不存在转换为以对象描述的流程时,不存

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

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

30、rg_id:使用单位:使用单位idrelation_id:关系:关系idmain_entity:主实体:主实体sub_entity:次实体:次实体ref_table:中间关联表:中间关联表op_result:操作结果,取值为:操作结果,取值为:0:禁止删除;:禁止删除;1:连带删除;:连带删除;4:解除关系:解除关系cond_relation:关联关系,如:关联关系,如(1 or 2)sys_flag:系统标志:系统标志实体关联属性表实体关联属性表表名:表名:tc_entity_relation_attr用于保存各对象间的关联关系,属性如下:用于保存各对象间的关联关系,属性如下:org_id:

31、使用单位:使用单位idrelation_attr_id:关联属性:关联属性idrelation_id:关系:关系idrelation_order:关联次序:关联次序main_relation_attr:主关联属性:主关联属性sub_relation_attr:次关联属性:次关联属性ref_table_attr:关联表属性:关联表属性cond_const:条件常量:条件常量relation_type:关联类型,:关联类型,=、addObject(OBJ_ACCOUNT,Account,/account/accountlist.php,/account/accountview.php,/accou

32、nt/accountedit.php,/img/account-l.gif,/img/account.gif,/img/accountnew.gif,STR_NEW_ACCOUNT,AccountModel,account/model/taccount.lib,AccountSaver,account/control/accountsaver.lib,AccountDeleter,account/control/accountdeleter.lib,AccountRecover,account/control/accountrecover.lib);$deleter = $objInfo-GetDeleterName();$deleterfn = $objInfo-GetDeleterFile();tobjectinfo.libTObjectInfo-loadFromDB谢谢大家!谢谢大家!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号