检查配置的 ER 组件以防止运行时问题
配置的每个电子申报 (ER)格式和模型映射组件都可以在设计时验证。 在此验证期间,将运行一致性检查以帮助防止可能发生的运行时问题,例如执行错误和性能降级。 对于发现的每个问题,检查都会提供问题元素的路径。 对于某些问题,可以使用自动修复。
默认情况下,在以下情况下,将自动对包含先前提到的 ER 组件的 ER 配置应用验证:
- 导入 ER 配置的一个新版本到您的 Microsoft Dynamics 365 Finance 实例中。
- 将可编辑 ER 配置的状态从草稿更改为已完成。
- 通过应用新的基础版本重定可编辑 ER 配置。
您可以显式运行此验证。 选择以下三个选项之一,然后按照提供的步骤操作:
选项 1:
- 转到组织管理 > 电子申报 > 配置。
- 在左窗格的配置树中,选择包含 ER 格式或 ER 模型映射组件的所需 ER 配置。
- 在版本快速选项卡上,选择所选 ER 配置所需的版本。
- 在操作窗格上,选择验证。
选项 2,对于 ER 格式:
- 转到组织管理 > 电子申报 > 配置。
- 在左窗格的配置树中,选择包含 ER 格式组件的所需 ER 配置。
- 在版本快速选项卡上,选择所选 ER 配置所需的版本。
- 在操作窗格上,选择设计器。
- 在格式设计器页的操作窗格上,选择验证。
选项 3,对于 ER 模型映射:
- 转到组织管理 > 电子申报 > 配置。
- 在左窗格的配置树中,选择包含 ER 模型映射组件的所需 ER 配置。
- 在版本快速选项卡上,选择所选 ER 配置所需的版本。
- 在操作窗格上,选择设计器。
- 在模型到数据源映射页面的操作窗格中,选择设计器。
- 在模型映射设计器页面的操作窗格中,选择验证。
若要在导入配置时跳过验证,请执行以下步骤。
- 转到组织管理 > 电子申报 > 配置。
- 在配置页操作窗格中配置选项卡的高级设置组中,选择用户参数。
- 将导入后验证配置选项设置为否。
要在更改或重定版本状态时跳过验证,请按照下列步骤操作。
- 转到组织管理 > 电子申报 > 配置。
- 在配置页操作窗格中配置选项卡的高级设置组中,选择用户参数。
- 将配置状态更改时跳过验证并重定基本值选项设置为是。
ER 使用以下类别为一致性检查检验分组:
- 可执行性 – 用于检测运行时可能发生的严重问题的检查。 这些问题大多数为错误级。
- 性能 – 用于检测可能导致执行配置的 ER 组件不完整的检查。 这些问题大多数为警告级。
- 数据完整性 – 用于检测可能导致数据丢失或运行时问题的问题的检查。 这些问题大多数为警告级。
检查列表
下表提供 ER 提供的检查的概览。 有关这些检查的详细信息,请使用第一列中的链接转到本文的相关章节。 这些部分介绍了 ER 提供的组件针对的组件类型,以及如何重新配置 ER 组件以帮助防止问题。
姓名 | 类别 | 等级 | 消息 |
---|---|---|---|
类型转换 | 可执行性 | 错误 |
不能将类型为 <type> 的表达式转换为类型为 <type> 的字段。 运行时错误:类型异常 |
类型兼容性 | 可执行性 | 错误 |
配置的表达式不能用作当前格式元素到数据源的绑定,因为此表达式返回的数据类型 <type> 的值超出了类型为 <type> 的当前格式元素支持的数据类型范围。 运行时错误:类型异常 |
缺少配置元素 | 可执行性 | 错误 |
未找到路径 <path>。 运行时错误:未找到配置元素 <path> |
带 FILTER 函数的表达式的可执行性 | 可执行性 | 错误 |
FILTER 函数的列表表达式无法查询。 运行时错误:不支持筛选。 验证配置以获得有关此问题的更多详细信息。 |
GROUPBY 数据源的可执行性 | 可执行性 | 错误 | 路径 <path> 不支持查询。 |
可执行性 | 错误 |
不能使用查询执行按函数分组。 运行时错误:不能使用查询执行按函数分组。 |
|
JOIN 数据源的可执行性 | 可执行性 | 错误 |
不能在查询中联接不是筛选器的列表 <path>。 运行时错误:函数联接的数据源应该是错误调用的筛选表达式计算字段。 |
FILTER 与 WHERE 函数的偏好对比 | 绩效 | 警告 | 从性能的角度来看,相比 WHERE,更倾向于对表达式使用 FILTER 函数。 选择“修复”以自动替换它。 |
ALLITEMSQUERY 相比 ALLITEMS 函数的偏好对比 | 绩效 | 警告 | 从性能的角度来看,相比 ALLITEMS,更倾向于对表达式使用 ALLITEMSQUERY 函数。 选择“修复”以自动替换它。 |
空列表用例的注意事项 | 可执行性 | 警告 |
列表 <path> 不检查空列表用例,因此会在运行时生成错误。 请为空列表用例添加检查。 运行时错误:<path> 处列表为空 潜在问题:行填充一次,而填充来源数据源中则包含多个记录 |
带 FILTER 函数的表达式的可执行性(高速缓存) | 可执行性 | 错误 |
FILTER 函数不能应用于所选类型的数据源。 仅当未高速缓存且无手动添加的嵌套数据源时,Table 记录类型的数据源才适用。 运行时错误:不支持筛选。 验证配置以获得有关此问题的更多详细信息。 |
缺少绑定 | 可执行性 | 警告 |
路径 <path>在使用模型的映射时没有到任何数据源的绑定。 运行时错误:未绑定路径 <path> |
未链接模板 | 数据完整性 | 警告 | 文件 <name> 未链接到任何文件组件,因此将在更改了配置版本状态后被移除。 |
不同步格式 | 数据完整性 | 警告 | Excel 工作表 <sheet name> 中无定义的名称 <component name> |
不同步格式 | 数据完整性 | 警告 |
Word 模板文件中不存在 <标记的 Word content 控件> 标记 运行时错误:Word 模板文件中不存在 <标记的 Word content 控件> 标记。 |
没有默认映射 | 数据完整性 | 错误 |
<逗号分隔的配置名称> 配置中的 <模型名称(根描述符)> 数据模型存在多个模型映射。 将其中一个配置设置为默认配置 运行时错误:<逗号分隔的配置名称> 配置中的 <模型名称(根描述符)> 数据模型存在多个模型映射。 将其中一个配置设置为默认配置。 |
页眉或页脚组件的设置不一致 | 数据完整性 | 错误 |
页眉/页脚(<组件类型:页眉或页脚>)不一致 运行时:如果执行了已配置的 ER 格式的草稿版本,则会在运行时使用最后配置的组件。 |
页面组件的设置不一致 | 数据完整性 | 错误 | 有两个以上没有复制的范围组件。 请删除不必要的组件。 |
带 ORDERBY 函数的表达式的可执行性 | 可执行性 | 错误 |
ORDERBY 函数的列表表达式无法查询。 运行时错误:不支持排序。 验证配置以获得有关此问题的更多详细信息。 |
过时的应用程序项目 | 数据完整性 | 警告 |
元素 <路径> 被标为过时元素。 运行时错误示例:未找到类“<path>”。 |
类型转换
ER 检查数据模型字段的数据类型是否与配置为该字段的绑定的表达式的数据类型兼容。 如果数据类型不兼容,将在 ER 模型映射设计器中会发生验证错误。 您收到的消息指出 ER 无法将 A 类型的表达式转换为 B 类型的字段。
以下步骤显示可能会如何发生此问题。
开始同时配置 ER 数据模型和 ER 模型映射组件。
在数据模型树中,添加一个名为 X 的字段,然后选择整数作为数据类型。
在模型映射设计器内的数据源窗格中,添加一个计算字段类型的数据源。
将新数据源命名为 Y,然后对其进行配置,以使其包含表达式
INTVALUE(100)
。将 X 绑定到 Y。
在数据模型设计器中,将X 字段的数据类型从整数 更改为Int64。
选择验证检查模型映射设计器页上的可编辑模型映射组件。
选择验证检查配置页上所选 ER 配置的模型映射组件。
请注意,发生了验证错误。 消息说明 Y 数据源的
INTVALUE(100)
表达式返回的整数类型的值不能存储在 Int64 类型的 X 数据模型字段中。
下图显示了如果忽略此警告并选择运行以运行配置为使用模型映射的格式,将出现的运行时错误。
自动解决
没有用于自动修复此问题的选项。
手动解决
选项 1
通过更改数据模型字段的数据类型更新数据模型结构,使其与为该字段的绑定配置的表达式的数据类型相匹配。 对于前面的示例,X 字段的数据类型必须更改回整数。
选项 2
通过更改与数据模型字段绑定的数据源的表达式更新模型映射。 对于前面的示例,Y 数据源的表达式必须更改为 INT64VALUE(100)
。
类型兼容性
ER 检查格式元素的数据类型是否与配置为该格式元素的绑定的表达式的数据类型兼容。 如果数据类型不兼容,将在 ER Operations 设计器中会发生验证错误。 收到的消息表示配置的表达式不能用作当前格式元素到数据源的绑定,因为此表达式返回的数据类型 A 的值超出了类型为 B 的当前格式元素支持的数据类型范围。
以下步骤显示可能会如何发生此问题。
开始同时配置 ER 数据模型和 ER 格式组件。
在数据模型树中,添加一个名为 X 的字段,然后选择整数作为数据类型。
在格式结构树中,添加数值类型的格式元素。
将新格式元素命名为 Y。在数值类型字段中,为数据类型选择整数。
将 X 绑定到 Y。
在格式结构树中,将 Y 格式元素的数据类型从整数更改为 Int64。
选择验证检查格式设计器页上的可编辑格式组件。
请注意,发生了验证错误。 该消息指出配置的表达式只能接受 Int64 值。 因此,不能在 Y 格式元素中输入类型为整数的 X 数据模型字段值。
自动解决
没有用于自动修复此问题的选项。
手动解决
选项 1
通过更改数值格式元素的数据类型更新数据模型结构,使其与为该元素的绑定配置的表达式的数据类型相匹配。 在前面的示例中, X 格式元素的数值类型值必须更改回整数。
选项 2
通过将表达式从 model.X
更改为 INT64VALUE(model.X)
,更新 X 格式元素的格式映射。
缺少配置元素
ER 检查绑定表达式中是否仅包含在可编辑 ER 组件中配置的数据源。 对于每个包含可编辑 ER 组件中缺少的数据源的绑定,将在 ER Operations 设计器或 ER 模型映射设计器中发生验证错误。
以下步骤显示可能会如何发生此问题。
开始同时配置 ER 数据模型和 ER 模型映射组件。
在数据模型树中,添加一个名为 X 的字段,然后选择整数作为数据类型。
在模型映射设计器内的数据源窗格中,添加一个计算字段类型的数据源。
将新数据源命名为 Y,然后对其进行配置,以使其包含表达式
INTVALUE(100)
。将 X 绑定到 Y。
在模型映射设计器的数据源窗格中,删除 Y 数据源。
选择验证检查模型映射设计器页上的可编辑模型映射组件。
请注意,发生了验证错误。 该消息指出,X 数据模型字段的绑定中包含引用 Y 数据源的路径,但找不到此数据源。
自动解决
选择取消绑定通过删除缺少的数据源绑定自动解决此问题。
手动解决
选项 1
取消绑定 X 数据模型字段以停止引用不存在的 Y 数据源。
选项 2
在模型映射设计器的数据源窗格中,再次添加 Y 数据源。
带 FILTER 函数的表达式的可执行性
内置的 FILTER ER 函数用于通过下达一个 SQL 调用以访问应用程序表、视图或数据实体来获取记录列表形式的所需数据。 记录列表类型的数据源用作此函数的参数,并指定调用的应用程序源。 ER 检查是否可以为 FILTER
函数中引用的数据源建立直接 SQL 查询。 如果无法建立直接查询,ER 模型映射设计器中会发生验证错误。 您收到的消息指出在运行时不能运行其中包含 FILTER
函数的 ER 表达式。
以下步骤显示可能会如何发生此问题。
开始配置 ER 模型映射组件。
添加一个类型为 Dynamics 365 for Operations \ 表记录的数据源。
将新数据源命名为 Vendor。 在表字段中,选择 VendTable 指定此数据源将请求 VendTable 表。
添加一个类型为计算字段的数据源。
将新数据源命名为 FilteredVendor,然后对其进行配置,以使其包含表达式
FILTER(Vendor, Vendor.AccountNum="US-101")
。选择验证检查模型映射设计器页上的可编辑模型映射组件,然后验证是否可查询 Vendor 数据源中的
FILTER(Vendor, Vendor.AccountNum="US-101")
表达式。通过向裁剪后的供应商帐号添加计算字段类型的嵌套字段,修改 Vendor 数据源。
将这个新的嵌套字段命名为 $AccNumber,然后对其进行配置,以使其包含表达式
TRIM(Vendor.AccountNum)
。选择验证检查模型映射设计器页上的可编辑模型映射组件,然后验证是否可查询 Vendor 数据源中的
FILTER(Vendor, Vendor.AccountNum="US-101")
表达式。请注意,发生了验证错误,因为 Vendor 数据源中包含一个类型为计算字段的嵌套字段,并且该嵌套字段不允许将 FilteredVendor 数据源的表达式转换为直接 SQL 语句。
下图显示了如果忽略此警告并选择运行以运行配置为使用模型映射的格式,将出现的运行时错误。
自动解决
没有用于自动修复此问题的选项。
手动解决
选项 1
不是向 Vendor 数据源添加类型为计算字段的嵌套字段,而是将 $AccNumber 嵌套字段添加到 FilteredVendor 数据源,并进行配置,以使其包含表达式 TRIM(FilteredVendor.AccountNum)
。 这样,FILTER(Vendor, Vendor.AccountNum="US-101")
表达式就可以在 SQL 级运行,之后再计算 $ AccNumber 嵌套字段。
选项 2
将 FilteredVendor 数据源的表达式从 FILTER(Vendor, Vendor.AccountNum="US-101")
更改为 WHERE(Vendor, Vendor.AccountNum="US-101")
。 建议不要更改包含大量数据的表(事务表)的表达式,因为将提取所有记录,并且将在内存中选择所需的记录。 因此,这种方法可能会导致性能低下。 有关详细信息,请参阅 WHERE ER 函数。
GROUPBY 数据源的可执行性
GROUPBY 数据源将查询结果拆分为多组记录,通常是为了对各组执行一项或多项聚合。 可以配置每个 GROUPBY 数据源,以使其在数据库级或在内存中运行。 如果配置了 GROUPBY 数据源以使其在数据库级运行,ER 将检查是否可建立对该数据源中引用的数据源的直接 SQL 查询。 如果无法建立直接查询,ER 模型映射设计器中会发生验证错误。 您收到的消息指出,运行时不能运行配置的 GROUPBY 数据源。
以下步骤显示可能会如何发生此问题。
开始配置 ER 模型映射组件。
添加一个类型为 Dynamics 365 for Operations \ 表记录的数据源。
将新数据源命名为 Trans。在表字段中,选择 VendTrans 指定该数据源将请求 VendTrans 表。
添加一个类型为分组依据的数据源。
将新数据源命名为 GroupedTrans,然后按照下面的方法配置:
- 选择 Trans 数据源作为应分组的记录的来源。
- 在执行位置字段中,选择查询以指定要在数据库级运行此数据源。
选择验证检查模型映射设计器页上的可编辑模型映射组件,然后验证是否可查询配置的 GroupedTrans 数据源。
通过向裁剪后的供应商帐号添加计算字段类型的嵌套字段,修改 Trans 数据源。
将新数据源命名为 $AccNumber,然后对其进行配置,以使其包含表达式
TRIM(Trans.AccountNum)
。选择验证检查模型映射设计器页上的可编辑模型映射组件,然后验证是否可查询配置的 GroupedTrans 数据源。
请注意,发生了验证错误,因为 Trans 数据源中包含一个类型为计算字段的嵌套字段,并且该嵌套字段不允许调用要转换为直接 SQL 语句的 GroupedTrans 数据源。
下图显示了如果忽略此警告并选择运行以运行配置为使用模型映射的格式,将出现的运行时错误。
自动解决
没有用于自动修复此问题的选项。
手动解决
选项 1
不是向 Trans 数据源添加类型为计算字段的嵌套字段,而是为 GroupedTrans 数据源的 GroupedTrans.lines 项添加 $AccNumber 嵌套字段,并进行配置,以使其包含表达式 TRIM(GroupedTrans.lines.AccountNum)
。 这样,GroupedTrans 数据源就可以在 SQL 级运行,之后再计算 $ AccNumber 嵌套字段。
选项 2
将 GroupedTrans 数据源的执行位置字段值从查询更改为在内存中。 建议不要更改包含大量数据的表(事务表)的值,因为将提取所有记录,并且将在内存中执行分组和聚合。 因此,这种方法可能会导致性能低下。
JOIN 数据源的可执行性
JOIN 数据源根据相关字段合并两个或更多数据库表中的记录。 可以配置每个 JOIN 数据源,以使其在数据库级或在内存中运行。 如果配置了 JOIN 数据源以使其在数据库级运行,ER 将检查是否可建立对该数据源中引用的数据源的直接 SQL 查询。 如果无法使用至少一个引用数据源建立直接 SQL 查询,ER 模型映射设计器中会发生验证错误。 您收到的消息指出,运行时不能运行配置的 JOIN 数据源。
以下步骤显示可能会如何发生此问题。
开始配置 ER 模型映射组件。
添加一个类型为 Dynamics 365 for Operations \ 表记录的数据源。
将新数据源命名为 Vendor。 在表字段中,选择 VendTable 指定此数据源将请求 VendTable 表。
添加一个类型为 Dynamics 365 for Operations \ 表记录的数据源。
将新数据源命名为 Trans。在表字段中,选择 VendTrans 指定该数据源将请求 VendTrans 表。
添加一个计算字段类型的数据源作为 Vendor 数据源的嵌套字段。
将新数据源命名为 FilteredTrans,然后对其进行配置,以使其包含表达式
FILTER(Trans, Trans.AccountNum=Vendor.AccountNum)
。添加一个类型为联接的数据源。
将新数据源命名为 JoinedList,然后按照下面的方法配置:
- 将 Vendor 数据源作为要联接的第一组记录添加。
- 将 Vendor.FilteredTrans 数据源作为要联接的第二组记录添加。 选择 INNER 作为类型。
- 在执行字段中,选择查询以指定要在数据库级运行此数据源。
选择验证检查模型映射设计器页上的可编辑模型映射组件,然后验证是否可查询配置的 JoinedList 数据源。
将 Vendor.FilteredTrans 数据源的表达式从
FILTER(Trans, Trans.AccountNum=Vendor.AccountNum)
更改为WHERE(Trans, Trans.AccountNum=Vendor.AccountNum)
。选择验证检查模型映射设计器页上的可编辑模型映射组件,然后验证是否可查询配置的 JoinedList 数据源。
请注意,发生了验证错误,因为 Vendor.FilteredTrans 数据源无法转换为直接 SQL 调用。 此外,直接 SQL 调用不允许调用要转换为直接 SQL 语句的 JoinedList 数据源。
下图显示了如果忽略此警告并选择运行以运行配置为使用模型映射的格式,将出现的运行时错误。
自动解决
没有用于自动修复此问题的选项。
手动解决
选项 1
按照警告的建议,将 Vendor.FilteredTrans 数据源的表达式从 WHERE(Trans, Trans.AccountNum=Vendor.AccountNum)
更改为 FILTER(Trans, Trans.AccountNum=Vendor.AccountNum)
。
选项 2
将 JoinedList 数据源的执行位置字段值从查询更改为在内存中。 建议不要更改包含大量数据的表(事务表)的值,因为将提取所有记录,并且将在内存中发生联接。 因此,这种方法可能会导致性能低下。 将显示验证警告,以便告知您此风险。
FILTER 与 WHERE 函数的偏好对比
内置的 FILTER ER 函数用于通过下达一个 SQL 调用以访问应用程序表、视图或数据实体来获取记录列表形式的所需数据。 WHERE 函数从给定源获取所有记录,然后在内存中选择记录。 记录列表类型的数据源用作这两个函数的参数,并指定源以获取记录。 ER 检查是否可以为 WHERE 函数中引用的数据源建立直接 SQL 调用。 如果无法建立直接调用,ER 模型映射设计器中会发生验证警告。 您收到的消息建议您使用 FILTER 函数而不是 WHERE 函数来帮助提高效率。
以下步骤显示可能会如何发生此问题。
开始配置 ER 模型映射组件。
添加一个类型为 Dynamics 365 for Operations \ 表记录的数据源。
将新数据源命名为 Trans。在表字段中,选择 VendTrans 指定该数据源将请求 VendTrans 表。
添加一个计算字段类型的数据源作为 Vendor 数据源的嵌套字段。
将新数据源命名为 FilteredTrans,然后对其进行配置,以使其包含表达式
WHERE(Trans, Trans.AccountNum="US-101")
。添加一个类型为 Dynamics 365 for Operations \ 表记录的数据源。
将新数据源命名为 Vendor。 在表字段中,选择 VendTable 指定此数据源将请求 VendTable 表。
添加一个类型为计算字段的数据源。
将新数据源命名为 FilteredVendor,然后对其进行配置,以使其包含表达式
WHERE(Vendor, Vendor.AccountNum="US-101")
。选择验证检查模型映射设计器页上的可编辑模型映射组件。
请注意,验证警告建议对 FilteredVendor 和 FilteredTrans 数据源使用 FILTER 函数,而不是 WHERE 函数。
自动解决
选择修复以将 WHERE 函数替换为这种检查的警告选项卡上网格中显示的所有数据源的表达式中的 FILTER 函数。
或者,您可以在网格中选择单个警告的行,然后选择修复所选。 在这种情况下,仅在所选警告中提到的数据源中自动更改表达式。
手动解决
可以通过将 WHERE 函数替换为 FILTER 函数,手动调整验证网格中所有数据源的表达式。
ALLITEMSQUERY 相比 ALLITEMS 函数的偏好对比
内置的 ALLITEMS 和 ALLITEMSQUERY ER 函数返回一个平展记录列表值,该值由表示与指定路径匹配的所有项的记录的列表构成。 ER 检查是否可以为 ALLITEMS 函数中引用的数据源建立直接 SQL 调用。 如果无法建立直接调用,ER 模型映射设计器中会发生验证警告。 您收到的消息建议您使用 ALLITEMSQUERY 函数而不是 ALLITEMS 函数来帮助提高效率。
以下步骤显示可能会如何发生此问题。
开始配置 ER 模型映射组件。
添加一个类型为 Dynamics 365 for Operations \ 表记录的数据源。
将新数据源命名为 Vendor。 在表字段中,选择 VendTable 指定此数据源将请求 VendTable 表。
添加一个类型为计算字段的数据源,以便获取多个供应商的记录。
将新数据源命名为 FilteredVendor,然后对其进行配置,以使其包含表达式
FILTER(Vendor, OR(Vendor.AccountNum="US-101",Vendor.AccountNum="US-102"))
。添加一个类型为计算字段的数据源,以便获取筛选后的所有供应商的交易。
将新数据源命名为 FilteredVendorTrans,然后对其进行配置,以使其包含表达式
ALLITEMS(FilteredVendor.'<Relations'.'VendTrans.VendTable_AccountNum')
。选择验证检查模型映射设计器页上的可编辑模型映射组件。
请注意,发生了验证警告。 此消息建议为 FilteredVendorTrans 数据源使用 ALLITEMSQUERY 函数,而不是 ALLITEMS 函数。
自动解决
选择修复以将 ALLITEMS 函数替换为这种检查的警告选项卡上网格中显示的所有数据源的表达式中的 ALLITEMSQUERY 函数。
或者,您可以在网格中选择单个警告的行,然后选择修复所选。 在这种情况下,仅在所选警告中提到的数据源中自动更改表达式。
手动解决
可以通过将 ALLITEMS 函数替换为 ALLITEMSQUERY 函数,手动调整验证网格中提及的所有数据源的表达式。
空列表用例的注意事项
可以配置 ER 格式或模型映射组件以获取类型为记录列表的数据源的字段值。 ER 将检查您的设计是否考虑以下方案:调用的数据源中不包含任何记录(即为空),以防从不存在的记录获取值时发生运行时错误。
以下步骤显示可能会如何发生此问题。
开始同时配置 ER 数据模型、ER 模型映射和 ER 格式组件。
在数据模型树中,添加一个名称为 Root3 的根项。
通过添加一个类型为记录列表的嵌套项,修改 Root3 项。
将这个新的嵌套项命名为 Vendor。
按照以下方法修改 Vendor 项:
- 添加一个类型为字符串的嵌套字段,然后将其命名为 Name。
- 添加一个类型为字符串的嵌套字段,然后将其命名为 AccountNumber。
在模型映射设计器内的数据源窗格中,添加一个 Dynamics 365 for Operations \ 表记录类型的数据源。
将新数据源命名为 Vendor。 在表字段中,选择 VendTable 指定此数据源将请求 VendTable 表。
添加一个类型为常规 \ 用户输入参数的数据源,以便在运行时对话框中搜索供应商帐户。
将新数据源命名为 RequestedAccountNum。 在标签字段中,输入供应商帐号。 在 Operations 数据类型名称字段中,保留默认值描述。
添加一个类型为计算字段的数据源,以便筛选查询的供应商。
将新数据源命名为 FilteredVendor,然后对其进行配置,以使其包含表达式
FILTER(Vendor, Vendor.AccountNum=RequestedAccountNum)
。按照以下方法将数据模型项绑定到配置的数据源:
- 将 FilteredVendor 绑定到 Vendor。
- 将 FilteredVendor.AccountNum 绑定到 Vendor.AccountNumber。
- 将 FilteredVendor.'name()' 绑定到 Vendor.Name。
在格式结构树中,添加以下项,以便生成一个 XML 格式且包含供应商详细信息的传出文档:
添加 Statement根 XML 元素。
为 Statement XML 元素添加嵌套的 Party XML 元素。
为 Party XML 元素添加以下嵌套的 XML 属性:
- 姓名
- AccountNum
按照以下方法将格式元素绑定到提供的数据源:
- 将 Statement\Party\Name 格式元素绑定到 model.Vendor.Name 数据源字段。
- 将 Statement\Party\AccountNum 格式元素绑定到 model.Vendor.AccountNumber 数据源字段。
选择验证检查格式设计器页上的可编辑格式组件。
请注意,发生了验证错误。 此消息表示,如果
model.Vendor
列表为空,在运行时可能为配置的 Statement\Party\Name 和 Statement\Party\AccountNum 格式组件引发错误。
下图显示了如果忽略此警告,选择运行以运行格式,然后选择不存在的供应商的帐号,将出现的运行时错误。 因为请求的供应商不存在,model.Vendor
列表将为空(即,其中将不包含任何记录)。
自动解决
对于警告选项卡上网格中的所选行,可以选择取消绑定。 将从格式元素中自动删除路径列中指向的绑定。
手动解决
选项 1
您可以将 Statement\Party\Name 格式元素绑定到 model.Vendor
数据源项。 在运行时,此绑定首先调用 model.Vendor
数据源。 当 model.Vendor
返回空记录列表时,将不运行嵌套的格式元素。 因此,此格式配置不发生验证警告。
选项 2
将 Statement\Party\Name 格式元素的绑定从 model.Vendor.Name
更改为 FIRSTORNULL(model.Vendor).Name
。 更新后的绑定将有条件地把类型为记录列表的 model.Vendor
数据源的第一个记录转换为类型为记录的新数据源。 这个新数据源中包含同一组字段。
- 如果
model.Vendor
数据源中至少有一个记录,则将使用model.Vendor
数据源的第一个记录的字段的值填充该记录的字段。 在这种情况下,更新后的绑定将返回供应商名称。 - 否则,将使用创建的记录的每个字段的数据类型默认值填充这些字段。 在此情况下,返回的字符串数据类型默认值为空白字符串。
因此,绑定到 FIRSTORNULL(model.Vendor).Name
表达式时,Statement\Party\Name 格式元素不会发生验证警告。
选项 3
如果要显式指定当类型为记录列表的 model.Vendor
数据源中不包含任何记录时在生成的文档中输入的数据(此示例中为文本不可用),请将 Statement\Party\Name 格式元素的绑定从 model.Vendor.Name
更改为 IF(NOT(ISEMPTY(model.Vendor)), model.Vendor.Name, "Not available")
。 也可以使用表达式 IF(COUNT(model.Vendor)=0, model.Vendor.Name, "Not available")
。
其他注意事项
此检查还会向您警示另一个潜在问题。 默认情况下,在将 Statement\Party\Name 和 Statement\Party\AccountNum 格式元素绑定到类型为记录列表的 model.Vendor
数据源的相应字段时,这些绑定将运行,并采用 model.Vendor
数据源第一个记录的相应字段(如果该列表非空)。
因为尚未将 Statement\Party 格式元素与 model.Vendor
数据源绑定,因此在格式执行期间将不针对 model.Vendor
数据源的每个记录迭代 Statement\Party 元素。 相反,如果记录列表中包含多个记录,则仅使用该列表的第一个记录中的信息填充生成的文档。 因此,如果该格式用于使用有关 model.Vendor
数据源中的所有供应商的信息填充生成的文档,可能会出错。 若要解决此问题,请将 Statement\Party 元素与 model.Vendor
数据源绑定。
带 FILTER 函数的表达式的可执行性(高速缓存)
多个内置 ER 函数(包括 FILTER 和 ALLITEMSQUERY)用于通过下达一个 SQL 调用以访问应用程序表、视图或数据实体来获取记录列表形式的所需数据。 记录列表类型的数据源用作这些函数中每一个的参数,并指定调用的应用程序源。 ER 检查是否可以为这些函数之一中引用的数据源建立直接 SQL 调用。 如果因为数据源标记成了已高速缓存导致无法建立直接调用,ER 模型映射设计器中会发生验证错误。 您收到的消息指出在运行时不能运行其中包含这些函数之一的 ER 表达式。
以下步骤显示可能会如何发生此问题。
开始配置 ER 模型映射组件。
添加一个类型为 Dynamics 365 for Operations \ 表记录的数据源。
将新数据源命名为 Vendor。 在表字段中,选择 VendTable 指定此数据源将请求 VendTable 表。
添加一个类型为常规 \ 用户输入参数的数据源,以便在运行时对话框中搜索供应商帐户。
将新数据源命名为 RequestedAccountNum。 在标签字段中,输入供应商帐号。 在 Operations 数据类型名称字段中,保留默认值描述。
添加一个类型为计算字段的数据源,以便筛选查询的供应商。
将新数据源命名为 FilteredVendor,然后对其进行配置,以使其包含表达式
FILTER(Vendor, Vendor.AccountNum=RequestedAccountNum)
。将配置的 Vendor 数据源标记为已高速缓存。
选择验证检查模型映射设计器页上的可编辑模型映射组件。
请注意,发生了验证错误。 该消息指出不能将 FILTER 函数应用于高速缓存的 Vendor 数据源。
下图显示了如果忽略此警告并选择运行以运行格式,将出现的运行时错误。
自动解决
没有用于自动修复此问题的选项。
手动解决
选项 1
删除 Vendor 数据源中的 Cache 标志。 然后,FilteredVendor 数据源将变为可执行,但是每次调用 FilteredVendor 数据源时,都将访问 VendTable 表中引用的 Vendor 数据源。
选项 2
将 FilteredVendor 数据源的表达式从 FILTER(Vendor, Vendor.AccountNum="US-101")
更改为 WHERE(Vendor, Vendor.AccountNum="US-101")
。 在此情况下,仅在首次调用 Vendor 数据源时,才能访问 VendTable 表中引用的 Vendor 数据源。 但是,将在内存中选择记录。 因此,这种方法可能会导致性能低下。
缺少绑定
当您配置 ER 格式组件时,基本 ER 数据模型将作为 ER 格式的默认数据源提供。 运行配置的 ER 格式时,将使用基本模型的默认模型映射使用应用程序数据填充数据模型。 如果您将格式元素绑定到未绑定到当前作为可编辑格式的默认模型映射选择的模型映射中的任何数据源的数据模型项,ER 格式设计器将显示警告。 运行时不能运行这种绑定,因为运行的格式不能使用应用程序数据填充绑定的元素。 因此,在运行时会发生错误。
以下步骤显示可能会如何发生此问题。
开始同时配置 ER 数据模型、ER 模型映射和 ER 格式组件。
在数据模型树中,添加一个名称为 Root3 的根项。
通过添加一个类型为记录列表的新嵌套项,修改 Root3 项。
将这个新的嵌套项命名为 Vendor。
按照以下方法修改 Vendor 项:
- 添加一个类型为字符串的嵌套字段,然后将其命名为 Name。
- 添加一个类型为字符串的嵌套字段,然后将其命名为 AccountNumber。
在模型映射设计器内的数据源窗格中,添加一个 Dynamics 365 for Operations \ 表记录类型的数据源。
将新数据源命名为 Vendor。 在表字段中,选择 VendTable 指定此数据源将请求 VendTable 表。
添加一个类型为常规 \ 用户输入参数的数据源,以便在运行时对话框中查询供应商帐户。
将新数据源命名为 RequestedAccountNum。 在标签字段中,输入供应商帐号。 在 Operations 数据类型名称字段中,保留默认值描述。
添加一个类型为计算字段的数据源,以便筛选查询的供应商。
将新数据源命名为 FilteredVendor,然后对其进行配置,以使其包含表达式
FILTER(Vendor, Vendor.AccountNum=RequestedAccountNum)
。按照以下方法将数据模型项绑定到配置的数据源:
- 将 FilteredVendor 绑定到 Vendor。
- 将 FilteredVendor.AccountNum 绑定到 Vendor.AccountNumber。
注释
Vendor.Name 数据模型字段保持未绑定。
在格式结构树中,添加以下项,以便生成一个 XML 格式且包含查询的供应商的详细信息的传出文档:
添加 Statement根 XML 元素。
为 Statement XML 元素添加嵌套的 Party XML 元素。
为 Party XML 元素添加以下嵌套的 XML 属性:
- 姓名
- AccountNum
按照以下方法将格式元素绑定到提供的数据源:
- 将 Statement\Party 格式元素绑定到
model.Vendor
数据源项。 - 将 Statement\Party\Name 格式元素绑定到 model.Vendor.Name 数据源字段。
- 将 Statement\Party\AccountNum 格式元素绑定到 model.Vendor.AccountNumber 数据源字段。
- 将 Statement\Party 格式元素绑定到
选择验证检查格式设计器页上的可编辑格式组件。
请注意,发生了验证警告。 此消息指出 model.Vendor.Name 数据源字段未绑定到模型映射中配置供格式使用的任何数据源。 因此,在运行时不能填充 Statement\Party\Name 格式,并且可能会发生运行时异常。
下图显示了如果忽略此警告并选择运行以运行格式,将出现的运行时错误。
自动解决
没有用于自动修复此问题的选项。
手动解决
选项 1
通过为 model.Vendor.Name 数据源字段添加绑定来修改配置的模型映射。
选项 2
通过删除 Statement\Party\Name 格式元素的绑定修改配置的格式。
未链接模板
在手动配置 ER 格式组件以使用模板生成传出文档时,必须手动添加 Excel\File 元素,作为可编辑组件的附件添加所需模板,并在添加的 Excel\File 元素中选择该附件。 这样,您指示添加的元素将在运行时填充所选模板。 在配置状态为草稿的格式组件版本时,可以向可编辑组件添加多个模板,然后在 Excel\文件元素中选择每个模板以运行 ER 格式。 这样,您可以看到在运行时如何填充不同的模板。 如果有模板未在任何 Excel\File 元素中选中,ER 格式设计器将警告您,当模板的状态从草稿更改为已完成时,将从可编辑 ER 格式组件版本删除这些模板。
以下步骤显示可能会如何发生此问题。
开始配置 ER 格式组件。
在格式结构树中,添加 Excel\File 元素。
为您刚才添加的 Excel\File 元素添加一个 Excel 工作簿文件 A.xlsx 作为附件。 使用 ER 参数中配置的文档类型指定 ER 格式模板的存储。
为 Excel\File 元素再添加一个 Excel 工作簿文件 B.xlsx 作为附件。 使用用于工作簿文件A 的同一种文档类型。
在 Excel\File 元素中,选择工作簿文件 A。
选择验证检查格式设计器页上的可编辑格式组件。
请注意,发生了验证警告。 该消息指出工作簿文件 B.xlsx 未链接到任何组件,并且将在更改配置版本状态后将其删除。
自动解决
没有用于自动修复此问题的选项。
手动解决
通过删除所有未链接到任何 Excel\File 元素的所有模板来修改配置的格式。
不同步格式
在配置 ER 格式组件以使用 Excel 模板生成传出文档时,可以手动添加 Excel\File 元素,作为可编辑组件的附件添加所需模板,并在添加的 Excel\File 元素中选择该附件。 这样,您指示添加的元素将在运行时填充所选模板。 由于添加的 Excel 模板是外部设计的,因此可编辑的 ER 格式中可能包含添加的模板中缺少的 Excel 名称。 ER 格式设计器会警告您有关引用添加的 Excel 模板中不包含的名称的 ER 格式元素的属性之间的任何不一致之处。
以下步骤显示可能会如何发生此问题。
开始配置 ER 格式组件。
在格式结构树中,添加 Excel\File 元素 Report。
为您刚才添加的 Excel\File 元素添加一个 Excel 工作簿文件 A.xlsx 作为附件。 使用 ER 参数中配置的文档类型指定 ER 格式模板的存储。
重要
确保添加的 Excel 工作簿中不包含名称 ReportTitle。
将 Excel\Cell 元素 Title 作为 Report 元素的嵌套元素添加。 在 Excel 范围字段中,输入 ReportTitle。
选择验证检查格式设计器页上的可编辑格式组件。
请注意,发生了验证警告。 此消息指出您正在使用的 Excel 模板的工作表 Sheet1 中无名称 ReportTitle。
自动解决
没有用于自动修复此问题的选项。
手动解决
选项 1
通过删除引用模板中缺少的 Excel 名称的所有元素来修改配置的格式。
选项 2
通过导入 Excel 模板更新可编辑 ER 格式。 将与导入的 Excel 模板的结构同步可编辑 ER 格式的结构。
其他注意事项
要了解如何在业务文档管理的模板编辑器中将格式结构与 ER 模板同步,请参阅更新业务文档模板的结构。
未与 Word 模板格式同步
在配置 ER 格式组件以使用 Word 模板生成传出文档时,可以手动添加 Excel\File 元素,作为可编辑组件的附件添加所需 Word 模板,并在添加的 Excel\File 元素中选择该附件。
注释
附加 Word 文档后,ER 格式设计器将可编辑元素显示为 Word\File。
这样,您指示添加的元素将在运行时填充所选模板。 由于添加的 Word 模板是外部设计的,因此可编辑的 ER 格式中可能包含添加的模板中缺少的 Word 内容控件引用。 ER 格式设计器会警告您有关引用添加的 Excel 模板中不包含的内容控件的 ER 格式元素的属性之间的任何不一致之处。
有关显示此问题可能如何发生的示例,请参见配置可编辑格式以禁止显示摘要部分。
自动解决
没有用于自动修复此问题的选项。
手动解决
选项 1
通过从格式元素中删除验证警告中提到的已移除公式来修改配置的格式。
选项 2
修改使用的 Word 模板,方法是向相关 Word 内容控件添加必需的标记。
没有默认映射
当缺少绑定检查完成后,将根据相关模型映射组件的绑定来评估检查的格式绑定。 因为你可以导入一些 ER 模型映射配置到您的 Finance 实例,并且每个配置可能都包含适用的模型映射组件,所以必须选择一个配置作为默认配置。 否则,当您尝试运行、编辑或验证检查的 ER 格式时,将发生异常,并且您将收到以下消息:“<configuration names separated by comma> 配置中的 <model name (root descriptor)> 数据模型存在多个模型映射。 将其中一个配置设置为默认配置。”
有关显示此问题可能如何发生以及如何解决的示例,请参见管理单个模型根的多个派生映射。
页眉或页脚组件的设置不一致
当你配置 ER 格式组件以使用 Excel 模板生成出站文档时,您可以添加 Excel\页眉组件以填充 Excel 工作簿中工作表顶部的页眉。 您也可以添加 Excel\页脚组件以填充工作表底部的页脚。 对于您添加的每个 Excel\页眉或者 Excel\页脚组件,您必须设置页眉/页脚外观属性,以指定要为其运行组件的页面。 因为你可以为单个工作表组件配置一些 Excel\页眉或 Excel\页脚组件,并且您可以为 Excel 工作表中的不同类型页面生成不同的页眉或页脚,因此必须为页眉/页脚外观属性的特定值配置单个 Excel\页眉或 Excel\页脚组件。 如果为页眉/页脚外观属性的特定值配置了多个 Excel\页眉或 Excel\页脚组件,则会发生验证错误,并且您会收到以下错误消息:“页眉/页脚(<组件类型:页眉或页脚>)不一致。”
自动解决
没有用于自动修复此问题的选项。
手动解决
选项 1
通过删除其中一个不一致的 Excel\页眉或 Excel\页脚组件来修改配置的格式。
选项 2
修改其中一个不一致的 Excel\页眉或 Excel\页脚组件的页眉/页脚外观属性值。
页面组件的设置不一致
当您配置电子报告格式组件来使用Excel 模板生成出站文档时,您可以添加 Excel\页面组件来使用电子报告公式对生成的文档进行分页。 对于您添加的每个 Excel\页面组件,您可以添加很多嵌套范围组件,并仍然保持以下结构:
- 可以配置第一个嵌套范围组件,以将复制方向属性设置为不复制。 此范围用于在生成的文档中制作页眉。
- 您可以添加很多其他嵌套范围组件,将组件的复制方向属性设置为垂直。 这些范围用于填充生成的文档。
- 可以配置最后一个嵌套范围组件,以将复制方向属性设置为不复制。 此范围用于在生成的文档中制作页脚并添加所需的分页符。
如果您在设计时没有在电子报告格式设计器中为电子报告格式采用此结构,将会发生验证错误,您会收到以下错误消息:“有两个以上没有复制的范围组件。 请删除不必要的组件。”
自动解决
没有用于自动修复此问题的选项。
手动解决
选项 1
通过更改所有不一致的 Excel\范围组件的复制方向属性来修改配置的格式。
带 ORDERBY 函数的表达式的可执行性
内置 ORDERBY ER 函数用于对指定为函数参数的记录列表类型的 ER 数据源的记录进行排序。
ORDERBY
函数的参数可以被指定通过执行单一数据库调用作为记录列表获取排序的数据,来对应用程序表、视图或数据实体的记录进行排序。 记录列表类型的数据源用作此函数的参数,并指定调用的应用程序源。
ER 检查是否可以为 ORDERBY
函数中引用的数据源建立直接数据库查询。 如果无法建立直接查询,ER 模型映射设计器中会发生验证错误。 您收到的消息指出在运行时不能运行其中包含 ORDERBY
函数的 ER 表达式。
以下步骤显示可能会如何发生此问题。
开始配置 ER 模型映射组件。
添加一个类型为 Dynamics 365 for Operations \ 表记录的数据源。
将新数据源命名为 Vendor。 在表字段中,选择 VendTable 指定此数据源将请求 VendTable 表。
添加一个类型为计算字段的数据源。
将新数据源命名为 OrderedVendors,然后对其进行配置,以使其包含表达式
ORDERBY("Query", Vendor, Vendor.AccountNum)
。选择验证检查模型映射设计器页上的可编辑模型映射组件,然后验证是否可查询 OrderedVendors 数据源中的表达式。
通过向裁剪后的供应商帐号添加计算字段类型的嵌套字段,修改 Vendor 数据源。
将这个新的嵌套字段命名为 $AccNumber,然后对其进行配置,以使其包含表达式
TRIM(Vendor.AccountNum)
。选择验证检查模型映射设计器页上的可编辑模型映射组件,然后验证是否可查询 Vendor 数据源中的表达式。
请注意,发生了验证错误,因为 Vendor 数据源中包含一个类型为计算字段的嵌套字段,并且该嵌套字段不允许将 OrderedVendors 数据源的表达式转换为直接数据库语句。 如果您忽略验证错误并选择运行运行此模型映射,则会在运行时发生同样的错误。
自动解决
没有用于自动修复此问题的选项。
手动解决
选项 1
不是向 Vendor 数据源添加类型为计算字段的嵌套字段,而是将 $AccNumber 嵌套字段添加到 FilteredVendors 数据源,并配置此字段,使其包含表达式 TRIM(FilteredVendor.AccountNum)
。 这样,ORDERBY("Query", Vendor, Vendor.AccountNum)
表达式就可以在数据库级别运行,$ AccNumber 嵌套字段可以在以后计算。
选项 2
将 FilteredVendors 数据源的表达式从 ORDERBY("Query", Vendor, Vendor.AccountNum)
更改为 ORDERBY("InMemory", Vendor, Vendor.AccountNum)
。 建议不要更改包含大量数据的表(事务表)的表达式,因为将提取所有记录,并且将在内存中排序所需的记录。 因此,这种方法可能会导致性能低下。
过时的应用程序项目
在设计 ER 模型映射组件或 ER 格式组件时,可以配置 ER 表达式来调用 ER 中的应用程序项目,如数据库表、类的方法等。在 Finance 版本 10.0.30 及更高版本中,您可以强制 ER 警告您引用的应用程序项目在源代码中被标记为已过时。 此警告可能很有用,因为通常过时的项目最终会从源代码中删除。 获知项目的状态可以在项目被从源代码中删除前防止您在可编辑 ER 组件中使用过时的项目,从而帮助防止在运行时从 ER 组件调用非现有应用程序项目时出错。
在功能管理工作区中启用验证电子报告数据源的过时元素功能,以开始在检查可编辑 ER 组件期间评估应用程序项目的过时属性。 目前针对以下类型的应用程序项目评估过时属性:
- 数据库表
- 表的字段
- 表的方法
- 应用程序类
- 类的方法
注释
仅当数据源用于此 ER 组件的至少一个绑定时,才会在检查引用过时项目的数据源的可编辑 ER 组件期间出现警告。
提示
当 SysObsoleteAttribute 类用于通知编译器发出警告消息而不是错误时,检查警告会在设计时在模型映射设计器或格式设计器页面的详细信息快速选项卡上呈现指定的源代码。
下图显示了当 CompanyInfo
应用程序表的过时 DEL_Email
字段通过使用配置的 company
数据源绑定到数据模型字段时出现的验证警告。
自动解决
没有用于自动修复此问题的选项。
手动解决
通过删除与引用过时应用程序项目的数据源的所有绑定来修改配置的模型映射或格式。