SugarCRM如何获取包含详细信息的所有模块字段列表
我正在开发自定义模块,该模块需要获取所有字段的列表以及其他模块的详细信息(关系、其他属性)。当我使用其他开发人员自定义模块时出现问题。我曾经SugarCRM如何获取包含详细信息的所有模块字段列表,sugarcrm,Sugarcrm,我正在开发自定义模块,该模块需要获取所有字段的列表以及其他模块的详细信息(关系、其他属性)。当我使用其他开发人员自定义模块时出现问题。我曾经 $dictionary 但并非所有模块字段都存在。然后我就开始胡闹了 require_once 'modules/ModuleBuilder/views/view.modulefields.php'; $viewmodfields = new ViewModulefields(); $objectName = BeanFactory::getObject
$dictionary
但并非所有模块字段都存在。然后我就开始胡闹了
require_once 'modules/ModuleBuilder/views/view.modulefields.php';
$viewmodfields = new ViewModulefields();
$objectName = BeanFactory::getObjectName($module);
VardefManager::loadVardef($module, $objectName, true);
global $dictionary;
$fieldsData = array();
foreach($dictionary[$objectName]['fields'] as $def) {
if ($viewmodfields->isValidStudioField($def)){
$mod_field = array();
$mod_field['name'] = $def['name'];
$mod_field['label'] = translate($def['vname'], $module);
}
}
}
还有更残酷的事情:
$fieldData = array();
$views = array(MB_EDITVIEW, MB_DETAILVIEW, MB_QUICKCREATE);
// Normlize data
foreach($views as $view) {
// Get module panels and fields by view
$parser = ParserFactory::getParser($view, $module);
$panels = $parser->_viewdefs['panels'];
$fields = $parser->_fielddefs;
foreach($panels as $panelName => $panelData) {
foreach($panelData as $panelDataItem) {
foreach($panelDataItem as $fieldName) {
// Check if block field name exists in field array
if( isset($fields[$fieldName]) ) {
// Set unique name in array (name can be in editview and detailview)
$fieldData[$fields[$fieldName]['name']] = $fields[$fieldName];
}
}
}
}
}
但我认为应该有更本土的东西。您能给我一些建议吗?通过全局
$moduleList
数组循环获取所有模块名称,并使用BeanFactory::getBean
获取该模块的空对象,并使用getFieldDefinitions
检索该模块的字段定义:
$module_list = array_intersect($GLOBALS['moduleList'],array_keys($GLOBALS['beanList']));
foreach($module_list as $module_name) {
$bean = BeanFactory::getBean($module_name);
$field_defs[$module_name] = $bean->getFieldDefinitions();
}
“一个自定义模块,需要获取包含详细信息的所有字段的列表”。我严重怀疑您的自定义模块是否需要或应该获得所有这些信息。您应该获取可见模块的列表,为每个模块实例化空bean,并从对象的fields属性中获取字段。或者不要做任何你想做的事情,因为如果你认为
$bean=BeanFactory::getBean($module)),这可能会造成过度的伤害$fields=$bean->field\u name\u map代码>是最佳解决方案吗?答案稍有修改。您需要检查moduleList中的模块名是否也在beanList中。beanList中的模块不在moduleList中,反之亦然,因此模块名称必须同时存在于两者中,以确保它将具有getFieldDefinitions
方法。