收藏 分销(赏)

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

上传人:精**** 文档编号:12697798 上传时间:2025-11-27 格式:PPT 页数:68 大小:2.68MB 下载积分:16 金币
下载 相关 举报
用友集团TurboCRM功能内部实现详析.ppt_第1页
第1页 / 共68页
用友集团TurboCRM功能内部实现详析.ppt_第2页
第2页 / 共68页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,TurboCRM,功能内部实现详析,用友集团,EBU-CRM,事业部,刘艳君,邮件:,liuyjb,2010,年,4,月,功能的内部实现,用户使用某一系统功能的完整过程,查看客户列表,按条件查询,编辑客户,按逻辑存储,用户界面,内部实现简单图示:,TLayout,DB,TModel,TControl,入口,PHP,数据,对象,对象,数据,按条件查询,按逻辑存储,基本操作,对象的列表查询,对象的编辑,对象的删除,对象的列表查询,权限检查,获取数据信息,生成列表,显示,权限检查,TUIPage:CheckPrivilege(LIST_ACCOUNT);,菜单权限检查的参数值存储在,tc_menu,中,/*,*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(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);,对象的列表查询,权限检查,获取数据信息,生成列表,显示,获取数据信息,实例化客户模型,调用,getDataList,方法获取客户数据信息,结果集中的每一个对象对应表中的一行,通过对象属性获取各数据项的值,属性名与表中字段名的对应关系由数据字典规定,$model=new AccountModel();,$dataObjects=,$model-getDataList($condObj,$listAttrs,false);,foreach($dataObjects as$dataObject),echo$dataObject-Name;,AccountModel,父类:,TModel,defineModel():,定义对象及对象关系,定义模型关系,.,$relObj=new TModelRelation(.),添加关联关系,$relObj-addJoinItem(.),加入直接关联关系,$this-addRelation($relObj),加入反向关联关系,$this-addReverseRelation($relObj),Tmodel-getDataList,TSQLStmt,样例:,$stmt=new 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=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();,客户列表,布局机制详解,线索数据,客户数据,TListLayout,TViewLayout,TEditLayout,数据对象,(一个或一组),布局类,布局封装UML图,TLayout,TLayout:,布局基类,TObjectLayout:,标准对象布局基类,TConfigLayout:,非对象的布局基类,TWizardLayout:,向导页面布局基类,TLayout:布局基类,布局所需要的元素及其相关方法,子类需要实现其layout()方法完成布局,可以重写本类方法修改元素显示,TObjectLayout:标准对象布局基类,LIST,、,EDIT,、,VIEW,布局,子类包括:,TListLayout,TViewLayout,TEditLayout,TConfigLayout:非对象的布局基类,重写了TLayout的layout()方法,子类需要实现其layoutMainInfo()方法,公共方法(如按扭、标题等),例:系统配置-其它设置-系统设置页面(wwwconfigsetting.php),TWizardLayout:向导页面布局基类,重写了TLayout的layout()方法,子类需要实现其layoutMainInfo()方法,公共方法(如按扭、标题、翻页等),TObjectLayout,标准对象布局,TListLayout:数据依赖于对象的$model的listAttr和getDatalist()方法。,TEditLayout:数据依赖于对象的”系统配置-编辑页面布局”和$model的getDataObject()方法。,TViewLayout:数据依赖于对象的”系统配置-查看页面布局”和$model的getDataObject()方法。,页面数据的显示分别在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-setCustomTitle($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_include(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-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 AccountModel();,$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();,其它布局方式,BaseListLayout,BaseSelectListLayout,BaseColumnTreeLayout,BaseTabColumnTreeLayout,BaseTabListLayout,BaseEditLayout,基本操作,对象的列表查询,对象的编辑,对象的删除,对象的编辑,获取对象信息,生成编辑页面,显示,保存,流程控制类,TControl,XML,结点调用,生成编辑页面,$model=new AccountModel();,$layout=new TEditLayout($model,$ID);,TEditLayout,$this-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:layout();,大家辛苦了!休息一下,保存对象信息,Tlayout,TControl,Node,(一种数据存储逻辑的描述语言),$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,TNode需要子类实现execute方法,在调用execute方法前,必须调用节点setControl方法,有不可忽略的错误,必须抛TException异常,原子操作节点TPimitive,TPrimitive,的子类实现了业务的最小粒度的操作,系统已经提供事基于,SQL,事务的三个,TPrimitive,子类对象:,TBeginTransaction,Tcommit,TRollback,该三类类型可直接使用,不需要子类实现。,Tpimitive示例,class AccountCheck extends TPrimitive,public function execute(),global$gblDB;,$do=$this-getTarget();,/,查找上级,ID,是否循环引用,$pid=$do-ParentAccountID;,if(isRecycleParent(),throw new TException($errmsg);,顺序执行节点TSequence,Sequence,是一个最顺序执行的节点的集合对象,TSequence,节点必须包含子节点,TSequence,对象的子节点可以是:,TPrimitive,的子类节点,TSequence,节点,TBranch,节点,TIterator,节点,使用,addStep($node),方法将节点加入到,TSequence,序列中,它的execute方法简单实现为,public function execute(),foreach($this-nodes as$k=$node),$node-setControl($this-control);,$node-execute();,分支节点TBranch,TBranch节点实现了业务逻辑中的条件分支,通过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 TBranch,public function getBranchName(),$newRepeatInfo=$this-control-getData(newrepeatinfo);,if($newRepeatInfo),return InsertRepeatInfo;,else,return UpdateRepeatInfo;,循环节点TIterator,TIterator节点实现了业务逻辑的循环操作,必须使用setBody方法设置一个子结点,子类需要实现isFinished()方法,该子节点会重复执行只到条件满足退出,execute方法实现为:,public function execute(),if(!is_object($this-body),return;,while(!$this-isFinished(),$this-body-execute();,TIterator示例,class DeleteSeries extends TIterator,protected function isFinished(),$this-control-setObjectType($this-control-getData(objtype);,$objArr=$this-control-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;,引用类型的虚节点TContainer,TContainer类型的节点为虚节点,用于XML流程配置中引用别一个XML配置文件,XML转换为以对象描述的流程时,不存在TContainer类型的节点,基本操作,对象的列表查询,对象的编辑,对象的删除,对象的删除、恢复和回收站删除,删除:根据对象定义来决定是直接删除还是进回收站,恢复:在回收站中对数据进行恢复,回收站删除:对进入回收站的数据进行彻底删除,view界面中相关对象的删除:删除逻辑要单独定义,对象的删除,找出对象的关联对象,判断关联对象的删除类型:,删除,断开关系,禁止删除,是删除则递归,直到找完或禁止删除的数据大于,50,条,view界面相关对象的删除,相关对象的删除也分为禁止删除、删除和解除关系,删除对象:根据对象本身的删除逻辑来定,解除关系:分为通过关联关系表关联和直接引用关联两种,实体删除关系表,表名:,tc_entity_relation,用于保存各对象间的删除关系,属性如下:,org_id,:使用单位,id,relation_id,:关系,id,main_entity,:主实体,sub_entity,:次实体,ref_table,:中间关联表,op_result,:操作结果,取值为:,0,:禁止删除;,1,:连带删除;,4,:解除关系,cond_relation,:关联关系,如,(1 or 2),sys_flag,:系统标志,实体关联属性表,表名:,tc_entity_relation_attr,用于保存各对象间的关联关系,属性如下:,org_id,:使用单位,id,relation_attr_id,:关联属性,id,relation_id,:关系,id,relation_order,:关联次序,main_relation_attr,:主关联属性,sub_relation_attr,:次关联属性,ref_table_attr,:关联表属性,cond_const,:条件常量,relation_type,:关联类型,,=,、,、,addObject(,OBJ_ACCOUNT,Account,/account/accountlist.php,/account/accountview.php,/account/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.lib,TObjectInfo-loadFromDB,谢谢大家!,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服