跳转到内容

容器通用属性

容器通用属性

通用属性只是,在数据容器均可通用的属性,但不适用于树容器/级联容器

注意:容器必须配置其中一种数据源(dataCondition, dataFunction, dataFlow, dataSource, lookupFrom),否则不会自行加载数据。

IDataContainerBaseProps

参数类型说明默认值
keyboolean数据容器在页面内的唯一标识-
modelstring模型Key-
muteboolean静音,不主动请求数据-
dataConditionstringDataStore 数据源condition,若condition=""表示使用空条件进行查询-
dataParamsstring给数据源 DataStore、DataFlow、DataFunction 携带参数。 [‘1’, #containerKey.data.id, @getCurrentUserId]。DataFlow、DataFunction为对象格式,例如{ a: 1 }, 查询时会合并到查询参数中-
dataFlowstringFlow 数据源-
dataFunctionstringFunction 数据源-
dataFuncstringFunction 数据源 等价于 dataFunction-
dataControllerstringdataController 数据源-
dataSource((param: any) => any)可以通过一个方法返回mock数据-
lookupFromstring将主数据容器字段作为数据来源,在主从表单的场景中,从数据容器的数据会作为主数据容器的字段一起提交,格式: [ContainerKey].[FieldKey] ,不能与 related 同时使用-
titlestring标题-
showboolean是否显示-
extraFieldsstring容器需要获取的额外字段名称,多个字段使用英文逗号分割-
onDataLoaded(record: any) => void容器在数据获取完成后的回调-
postFlowstringds请求返回数据的后处理flow-
postFuncstringds请求返回数据的后处理func-
searchRecord((serarchValue: IDictionary) => IDictionary)容器在search查询时可通过此字段对最后的搜索对象进行修改,需返回一个新的对象-
tipsstring容器主标题提示语-
subTitleTipsstring容器副标题提示语-
subTitlestring容器副标题-
viewResourceAuthKeystring页面自定义资源点-

如果配置了dataCondition,dataFunction,dataFlow 作为数据源 还可以配置dataParams作为数据源入参, 数据请求的补充参数,与前面三种数据来源方式配对使用。

此参数解析有几个特殊的地方:

  1. 可以通过#containerKey的方式获取其他容器的数据,如果通过这种方式取值,trantor在解析时会收集容器依赖关系,安排容器加载顺序。
  2. #containerKey 在取值时等价于getContainerByKey(containerKey)
  3. 在使用dataStore的情况下,dataParams中的@xxx表达式表示使用后端上下文
  4. 可以通过pageContext, env等关键字取值(和表达式的作用域一致)
  5. 参数只会取原始的DSL字符串做处理,所以这里不需要加@,:前缀

在DataStore请求中,dataParam可作为dataCondition的补充参数:

dataCondition="id = ? and xid = ? and xid = ?"
dataParams="[#containerA.data.id, env.id, @getXId]"

注意如果dataCondition不需要表达式取值的话,也可以直接写条件,不需要dataParams

dataCondition="status = 'success'"

其中参数也支持使用上下文,以@开通,详见下边例子。 在Func/Flow请求中:

dataFunction="funcKey"
dataParams="{extraData: #containerA.data.name }"
(此处dataParams的内容会merge进原有的queryModel中,即Table原有的queryParams以及自身的search)

Tips: 开发环境中,交付控制台双击标题会在 调试器的 console 中打印 dsl 和 action 相关信息并复制到剪切板

从DataStore获取数据

<View title="公司详情">
<Detail key="companyContainer" model="base_Company"
dataCondition="id = ?"
dataParams="[pageContext.record.id]">
<Fields>
<Field name="name" />
<Field name="boss"/>
</Fields>
</Detail>
<Table key="staff" model="base_Staff"
dataCondition="company.id = ?"
dataParams="[#companyContainer.data.id]">
<!-- dataParams 中使用了 #容器key -->
<!-- 所以此容器会等到 companyContainer 加载完数据后再获取数据 -->
<Fields>
<Field name="code" readonly="#{true}" />
<Field name="name" />
<Field name="users"/>
</Fields>
</Table>
</View>

注意:当前例子为0.17.x 版本

从DataStore获取数据参数使用上下文

<View title="公司列表">
<Table key="company" model="base_Company"
dataCondition="createdBy.id = ? and company.id = ?"
dataParams="[@currentUserId, @context.md_OrgContext.getCompany.companyId]">
<Fields>
<Field name="code"/>
<Field name="name" />
</Fields>
</Table>
</View>

从DataStore获取数据后使用 Function/Flow 后处理数据

使用 Function 处理数据(postFunc):
注意 func 的入参需要跟使用dataCondition获取的数据结构一致,出参也需要符合数据容器要求。

<View title="公司详情">
<Detail key="companyContainer" model="base_Company"
dataCondition="id = ?"
dataParams="[pageContext.record.id]"
postFunc="base_HandleCompanyFunc">
<Fields>
<Field name="name" />
<Field name="boss"/>
</Fields>
</Detail>
<Table key="staff" model="base_Staff"
dataCondition="company.id = ?"
dataParams="[#companyContainer.data.id]">
<!-- dataParams 中使用了 #容器key -->
<!-- 所以此容器会等到 companyContainer 加载完数据后再获取数据 -->
<Fields>
<Field name="code" readonly="#{true}" />
<Field name="name" />
<Field name="users"/>
</Fields>
</Table>
</View>

使用 Flow 处理数据(postFlow):
注意 flow 的入参需要跟使用dataCondition获取的数据结构一致,出参也需要符合数据容器要求。

<View title="公司详情">
<Detail key="companyContainer" model="base_Company"
dataCondition="id = ?"
dataParams="[pageContext.record.id]"
postFlow="base_HandleCompanyFunc">
<Fields>
<Field name="name" />
<Field name="boss"/>
</Fields>
</Detail>
<Table key="staff" model="base_Staff"
dataCondition="company.id = ?"
dataParams="[#companyContainer.data.id]">
<!-- dataParams 中使用了 #容器key -->
<!-- 所以此容器会等到 companyContainer 加载完数据后再获取数据 -->
<Fields>
<Field name="code" readonly="#{true}" />
<Field name="name" />
<Field name="users"/>
</Fields>
</Table>
</View>

从LogicFunction/LogicFlow获取数据

<View title="公司详情">
<Detail key="company" model="base_Company"
dataFunction="company_list_function"
dataParams="{id: pageContext.record.id, status: env.status }">
<Fields>
<Field name="name" />
<Field name="boss"/>
</Fields>
</Detail>
</View>

从LogicController获取数据

<View title="公司详情">
<Detail key="company" model="base_Company"
dataController="{业务域}/{ControllerName}/{MethodName}"
dataParams="{id: pageContext.record.id, status: env.status }">
<Fields>
<Field name="name" />
<Field name="boss"/>
</Fields>
</Detail>
</View>

从dataSource获取数据(仅限于树形数据容器、控件)

树形容器 Tree、SyncTree、CascadeList 树形控件 CascadeModelSelect 自定义数据源方式

<View title="公司详情">
<Tree model="md_CompanyBO"
onSelect="mDEnterpriseDetail"
parentField="parentCompany"
searchable="true"
isLeafField="isLeaf"
dataSource="md_CompanyBO_CompanyTreeDataSource">
<Actions>
<Action openViewType="Dialog" label="Pull In" targetView="md_EntityBO_CompanyImport"/>
<Action type="Create" layout="Header" label="Create" targetView="md_CompanyBO_CompanyCreate"/>
</Actions>
</Tree>
</View>

lookupFrom

<View title="lookupFrom">
<Form title="部门信息" key="department" model="trantor_doc_Department">
<Fields>
<Field name="name" />
</Fields>
<Actions>
<Action type="Submit" action="user2_User_update" after="GoBack" layout="Footer"/>
</Actions>
</Form>
<!-- lookUpFrom 属性可以将某个表单的值用作另外一个表单的字段提交,在多个 Form 一起提交的场景非常有用。 -->
<TableForm title="部门人员" model="trantor_doc_Person" lookupFrom="department.staff">
<Fields>
<Field name="name" />
<Field name="age" />
</Fields>
</TableForm>
<!-- 也可做单纯的关联 -->
<Table title="部门人员" model="trantor_doc_Person" lookupFrom="department.staff">
<Fields>
<Field name="name" />
<Field name="age" />
</Fields>
</Table>
</View>

注意:当前例子为0.17.x 版本