2015-03-02 105 views
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]; 
       } 
      } 
     } 
    } 
} 

但我認爲,應該有更多的東西本地人。你能給我一些建議嗎?

+0

「自定義模塊,需要獲取所有領域的細節清單「。我嚴重懷疑你的自定義模塊需要或應該獲得所有這些信息。你應該得到可見模塊列表,爲每個模塊實例化空bean,並從對象的fields屬性中獲取字段。或者不要做任何你想做的事情,因爲它可能是過度殺傷 – Anthony 2015-03-02 11:20:03

+0

你認爲'$ bean = BeanFactory :: getBean($ module); $ fields = $ bean-> field_name_map;'是最好的解決方案嗎? – Orbitum 2015-03-02 11:21:42

+0

答案稍作修改。您需要檢查moduleList中的模塊名稱是否也在beanList中。 beanList中的模塊不在moduleList中,反之亦然,所以模塊名稱必須存在於兩者中以相信它具有'getFieldDefinitions'方法。 – Anthony 2015-03-02 12:01:30

回答

8

循環通過全球$moduleList陣列來獲得所有的模塊名稱和使用BeanFactory::getBean取得用於該模塊的空對象,並使用getFieldDefinitions檢索該模組領域DEFS:

$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(); 
} 
相關問題