容器通用属性
容器通用属性
通用属性只是,在数据容器均可通用的属性,但不适用于树容器/级联容器
注意:容器必须配置其中一种数据源(dataCondition, dataFunction, dataFlow, dataSource, lookupFrom),否则不会自行加载数据。
IDataContainerBaseProps
| 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| key | boolean | 数据容器在页面内的唯一标识 | - |
| model | string | 模型Key | - |
| mute | boolean | 静音,不主动请求数据 | - |
| dataCondition | string | DataStore 数据源condition,若condition=""表示使用空条件进行查询 | - |
| dataParams | string | 给数据源 DataStore、DataFlow、DataFunction 携带参数。 [‘1’, #containerKey.data.id, @getCurrentUserId]。DataFlow、DataFunction为对象格式,例如{ a: 1 }, 查询时会合并到查询参数中 | - |
| dataFlow | string | Flow 数据源 | - |
| dataFunction | string | Function 数据源 | - |
| dataFunc | string | Function 数据源 等价于 dataFunction | - |
| dataController | string | dataController 数据源 | - |
| dataSource | ((param: any) => any) | 可以通过一个方法返回mock数据 | - |
| lookupFrom | string | 将主数据容器字段作为数据来源,在主从表单的场景中,从数据容器的数据会作为主数据容器的字段一起提交,格式: [ContainerKey].[FieldKey] ,不能与 related 同时使用 | - |
| title | string | 标题 | - |
| show | boolean | 是否显示 | - |
| extraFields | string | 容器需要获取的额外字段名称,多个字段使用英文逗号分割 | - |
| onDataLoaded | (record: any) => void | 容器在数据获取完成后的回调 | - |
| postFlow | string | ds请求返回数据的后处理flow | - |
| postFunc | string | ds请求返回数据的后处理func | - |
| searchRecord | ((serarchValue: IDictionary) => IDictionary) | 容器在search查询时可通过此字段对最后的搜索对象进行修改,需返回一个新的对象 | - |
| tips | string | 容器主标题提示语 | - |
| subTitleTips | string | 容器副标题提示语 | - |
| subTitle | string | 容器副标题 | - |
| viewResourceAuthKey | string | 页面自定义资源点 | - |
如果配置了dataCondition,dataFunction,dataFlow 作为数据源 还可以配置dataParams作为数据源入参, 数据请求的补充参数,与前面三种数据来源方式配对使用。
此参数解析有几个特殊的地方:
- 可以通过#containerKey的方式获取其他容器的数据,如果通过这种方式取值,trantor在解析时会收集容器依赖关系,安排容器加载顺序。
- #containerKey 在取值时等价于getContainerByKey(containerKey)
- 在使用dataStore的情况下,dataParams中的@xxx表达式表示使用后端上下文
- 可以通过pageContext, env等关键字取值(和表达式的作用域一致)
- 参数只会取原始的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 版本