SugarCRM列表的实现原理的核心是ListView类。下文将根据一个实例来解剖ListView类。
1)$ListView = new ListView();
2)$ListView->initNewXTemplate(‘modules/Documents/DocumentRevisionListView.html’,$mod_strings);
3)$ListView->setQuery(" document_id = ‘$focus->id’",""," document_revisions.date_entered desc","");
4)$ListView->setHeaderTitle($mod_strings['LBL_DOC_REV_HEADER']);
5)$ListView->processListView($revision, "main", "DOCREVISION");
以上代码是文档模块的文档列表的实现代码。
1) 是创建一个ListView实例,和Java创建实例一样;
2) 初始化模版(XTemplate);
3) 设置where条件(setQuery的第一个参数)和设置排序字段(setQuery的第三个参数);
4) 设置列表页面的标题;
5) 调用processListView方法,$revision是document模块的bean的实例,main是 DocumentRevisionListView.html中的板块名称,DOCREVISION是用来存取SESSION里有关document模块 相关的信息。
在processListView方法里,首先处理massUpdate(批量更新)的操作,然后调用processListViewTwo方法;
在processListViewTwo这个方法里,首先调用processSugarBean,返回查询得到的记录List,然后处理排序和 Orderby等问题,接着调用processListRows($list,$xTemplateSection, $html_varName)方法显示得到的记录;
在processSugarBean方法里,调用seed(模块bean的实例)的get_list方法获取list,在get_list方法里调用 seed的create_list_query(create query sql)和process_list_query;
在process_list_query方法里,根据查询语句和vardefs.php定义的field_defs从数据库取值并赋值给seed对应的变 量,然后调用seed的fill_in_additional_list_fields方法取得没有在vardefs.php定义的字段或者变量,如果需 要把这些额外的变量赋给列表上的变量(DocumentRevisionListView.html列表中定义的,但没有在vardefs.php定义的 变量),需要在get_list_view_data方法返回的数组里添加这些额外的变量以及额外变量对应的KEY,即 DocumentRevisionListView.html模版定义的变量。
在processListRows方法里,循环DataList,在循环里,调用aItem的
$aItem->check_date_relationships_load();进行日期格式处理(gmdate和date的处理)
然后调用$fields = $aItem->get_list_view_data();在get_list_view_data里,把bean的字段变为大写作为KEY,对 应值作为value,把key-value放在数组里赋给DocumentRevisionListView.html模版里的变量 DOCREVISION(模块名的大写)。
get_list_view_data是在fill_in_additional_list_fields之后被调用的,这两个函数一般都需要子类覆盖 SugarBean的这两个方法,特别是fill_in_additional_list_fields方法,SugarBean里是空的,什么操作都没 有,需要子类实现。
注意:模版文件里定义的需要显示的变量需要与数据库表的字段一样,一般在模版里是大写,modulebean定义的表结构变量是小写。
下一篇:如何添加subpanel?
转载请注明:易客CRM官方博客 » SugarCRM研究(二)