也許你不應該
這是違反標準的最佳實踐。一般的原因是,如果SugarCRM發佈了一個更新,該更新恰巧爲該模塊包含一個新字段,它將覆蓋您已有的內容並導致問題和/或數據丟失。這也很難說這個領域是一個自定義領域,這可能會使來自不同開發人員/團隊的未來定製變得更加困難。
但你可以
可接受的「但」在這種情況下是,你不能讓數據庫的fields_meta_data
表版本控制之下。不是用GIT,不用SVN - 你不能。因此,如果您在使用VCS進行推送的多開發人員或多系統環境中工作,那麼實際上最好手動編寫vardefs,並且可以採用相對升級安全的方式進行。操作方法如下:
將您的vardef部分添加到您的第一個vardef文件中,例如Studio不允許調整的部分。 /custom/Extension/modules/MyModule/Ext/Vardefs/myfield.php
。對於可能的每種字段/數據類型,這些vardefs是name
,vname
和type
。
<?php
$dictionary['MyModule']['fields']['myfield']['name']='myfield';
$dictionary['MyModule']['fields']['myfield']['vname']='LBL_MYFIELD';
$dictionary['MyModule']['fields']['myfield']['type']='varchar';
一旦這樣創造了你可以(像alter table mymodule add myfield varchar(255)
這也將有助於建立數據庫,東西)運行要修理和重建,然後去找到在Studio領域。根據需要調整長度或審覈值,然後重新保存該字段。 Studio將創建一個以「sugarfield_」爲前綴的新文件,例如/custom/Extension/modules/MyModule/Ext/Vardefs/sugarfield_myfield.php
這個文件的內容會有所不同數據類型由比我們的第一個文件多,但將包括類似如下:
<?php
$dictionary['MyModule']['fields']['myfield']['audited'] = false,
$dictionary['MyModule']['fields']['myfield']['massupdate'] = true,
$dictionary['MyModule']['fields']['myfield']['duplicate_merge'] = 'enabled',
$dictionary['MyModule']['fields']['myfield']['duplicate_merge_dom_value'] = '1',
$dictionary['MyModule']['fields']['myfield']['merge_filter'] = 'disabled',
$dictionary['MyModule']['fields']['myfield']['calculated'] = false,
你也應該在/custom/Extension/modules/MyModule/Ext/Language/en_us.myfield.php
創建語言文件。該語言文件的示例內容:
<?php
$mod_strings['LBL_MYFIELD'] = 'My Awesome Field';
額外的安全
所以,如果手工編寫你所有的自定義字段中的下側是,他們可以很容易地覆蓋,但更新(例如,您創建了一個字段稱爲「Marketo ID」,然後Sugar提供),我們如何降低風險?與創建自定義模塊時相同,我們可以降低風險 - 只需在系統或公司的某個標準縮寫的前面加上前綴即可。在我現在的僱主中,我們都爲Ticomix使用tcx_
。過去,我們使用psi_
進行性能分析解決方案。如果不是打電話給您的字段myfield
,您應該將其稱爲tcx_myfield
,這樣可以大大降低其他人創建同名字段的風險。這不是不可能的,但你可能很安全。
請注意,您不需要需要將此前綴添加到標籤。 LBL_TCX_MYFIELD可以直接翻譯爲「我的領域」,如果需要,您可以在未來非常輕鬆地調整標籤。
如果可能的話請提供像你說的例子,字段類型是'varchar'。非常感謝你 –
編輯使用類型varchar給出一個例子。 –
非常感謝Matthew。有效。我只想問一個問題,我在哪裏可以找到對'name','vname','type'或'len'的引用,因爲我想設置默認值。同樣在清單文件中,我可以設置標籤'array('name'=>'calldate','label'=>'Call Date',',但是,如果我['label']喜歡你的帖子,它不會必須通過en_us.myfield.php –