4
我正在開發自定義模塊,它需要獲取其他模塊的詳細信息(關係,其他屬性)的所有字段的列表。我使用其他開發人員自定義模塊時發生問題。我用SugarCRM如何獲取所有模塊字段列表的詳細信息
$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];
}
}
}
}
}
但我認爲,應該有更多的東西本地人。你能給我一些建議嗎?
「自定義模塊,需要獲取所有領域的細節清單「。我嚴重懷疑你的自定義模塊需要或應該獲得所有這些信息。你應該得到可見模塊列表,爲每個模塊實例化空bean,並從對象的fields屬性中獲取字段。或者不要做任何你想做的事情,因爲它可能是過度殺傷 – Anthony 2015-03-02 11:20:03
你認爲'$ bean = BeanFactory :: getBean($ module); $ fields = $ bean-> field_name_map;'是最好的解決方案嗎? – Orbitum 2015-03-02 11:21:42
答案稍作修改。您需要檢查moduleList中的模塊名稱是否也在beanList中。 beanList中的模塊不在moduleList中,反之亦然,所以模塊名稱必須存在於兩者中以相信它具有'getFieldDefinitions'方法。 – Anthony 2015-03-02 12:01:30