ERP5 手冊/從表單到 API
當您檢視 ERP5 螢幕時,您看到的是一個渲染的表單(ERP5 表單,基於 Formulator 表單)。它的名稱通常位於 URL 的末尾(如 "Person_viewCareer");通常,URL 以 "/view" 結尾,這意味著您正在檢視物件的預設表單。如果您看到多個選項卡(如“檢視 / 詳細資訊 / 職業”,點選其中任何一個,您將在 URL 中看到表單名稱。如果您在一個模組中並且沒有選項卡,事情會稍微複雜一些,我們稍後會討論。
找到表單名稱後,在後面新增 "/manage_main" - 現在您進入管理螢幕,您將看到一個完整的欄位列表,這些欄位在表單中可見(可能還有一些不可見的)。
我們不會詳細討論編輯表單 - 您可以在 Formulator 文件中找到相關資訊。這裡的目的是展示欄位如何填充值以及它們如何與物件互動。
簡單欄位 - 包含字串、數字或具有布林值的複選框的欄位,透過命名約定繫結到物件屬性。當渲染一個欄位時,它會呼叫一個適當的訪問器來獲取屬性值。這就是為什麼所有控制元件都以 "my_" 開頭 - 一個欄位
my_title
呼叫一個方法
.getTitle
來獲取屬性的值
title
大多數訪問器是自動生成的(請參閱“ERP5 的魔力”瞭解更多資訊) - 如果定義了一個名為 "title" 的屬性,物件將擁有訪問器,但您在程式碼中找不到它 (!)。有時訪問器會被覆蓋 - 例如,一個 Person 物件具有不同的 .getTitle 方法。您可以在程式碼中找到這個方法。
當一個表單提交,並且您修改了 "title" 欄位的值時,表單呼叫的指令碼(通常為 "Base_edit")會呼叫一個設定器
.setTitle
它,毫不奇怪,設定了標題。將 form_name/manage_main 替換為 "/Base_viewDict" - 您將看到物件的原始資料,並且您將找到您的標題。
幾乎就這些了。有許多針對不同型別屬性的特殊欄位 - 有 StringField、TextAreaField、IntField、FloatField、DateField、EmailField。這些欄位會檢查您輸入的值是否合適。
關係欄位(更具體地說,RelationStringField)已經在 UI 部分進行了描述。基本上,它遵循與屬性欄位相同的原則。區別在於,在大多數情況下,用於關係的 RelationStringField
source
被稱為
my_source_title
所以它會呼叫訪問器
.getSourceTitle
結果是它會顯示相關物件的漂亮標題,而不是它的相對 URL(如 "/organisation_module/12")。反過來,當您填寫並提交表單時,它會使用標題來搜尋適當的物件。
您也可以應用相同的約定來使用除標題之外的其他屬性,例如,您可以建立一個欄位
my_source_relative_url
它將顯示和使用相關物件的相對 URL。
還有一個 MultiRelationStringField,用於獲取/設定與多個物件的關聯
my_destination_title_list
使用
.getDestinationTitleList
並且具有有趣的行為,將在其他地方解釋。
一些欄位允許您將物件分配到特定類別(換句話說,使用類別進行分類)。例如,您可以在產品上設定 product_line,或在人身上設定國籍。為此,使用 ListField。它遵循相同的原則
my_nationality
允許您選擇國籍,並且它將此人分配到 "nationality" 基礎類別的選定子類別中。
使用值填充此類控制元件的方法是為其提供一個包含類別標題和 URL 的元組列表,例如
'', '', ['German', 'd'], ['British', 'en']...
這可以透過類別的 API 最輕鬆地實現;最常用的方法是
.getCategoryChildLogicalPathItemList and getCategoryChildCompactLogicalPathItemList
後者與前者的不同之處在於,如果由標題組成的路徑變得太長,它會嘗試以合理的方式對其進行修剪。
MultiListField 的工作方式相同,只是它允許選擇多個類別(透過 Ctrl-單擊),並且顯然會使用
.get[category]List
訪問器。