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
访问器。