设计新的 ER 解决方案打印自定义报表
以下步骤说明了具有系统管理员、电子报告开发人员或电子报告功能顾问角色的用户如何配置 ER 框架的参数,设计新 ER 解决方案所需的 ER 配置以访问特定业务域的数据,以及如何以 Microsoft Office 格式生成自定义报表。 这些步骤可以在 USMF 公司完成。
在此示例中,您将为调查表模块创建新的 ER 解决方案。 这个新的 ER 解决方案使您可以使用 Microsoft Excel 工作表作为模板来设计报表。 然后,除了生成现有的 SQL Server Reporting Services (SSRS) 报表之外,您还可以生成 Excel 或 PDF 格式的调查表报表。 您还可以稍后根据要求修改新报表。 无需进行编码。
要运行现有报表,请转到调查表>设计>调查表报表。
在调查表报表对话框中,指定选择条件。 应用筛选器,让报表仅包含 SBCCrsExam 调查表。
下图显示了 SBCCrsExam 调查表的 SSRS 报表的生成版本。
配置 ER 框架
作为电子报告开发人员角色的用户,您必须至少配置一组 ER 参数,才能开始使用 ER 框架设计新的 ER 解决方案。
配置 ER 参数
转到组织管理>工作区>电子申报。
在电子申报工作区中,选择电子申报参数链接。
在电子申报参数页上,在常规选项卡上,将启用设计模式选项设置为是。
在附件选项卡上,设置以下参数:
- 将 USMF 公司的配置字段设置为文件。
- 将作业存档、临时、基准和其他字段设置为文件。
有关 ER 参数的详细信息,请参阅配置 ER 框架。
激活 ER 配置提供程序
将把每个 ER 配置标记为由 ER 配置提供程序负责。 因此,必须先在电子报告工作区中激活 ER 配置提供程序,才能开始添加或编辑 ER 配置。
注释
只有 ER 配置的负责人才能对其进行编辑。 因此,必须先在电子申报工作区中激活相应 ER 配置提供程序,才能编辑 ER 配置。
查看 ER 配置提供程序列表
- 转到组织管理>工作区>电子申报。
- 在电子报告工作区的相关链接部分,选择配置提供程序。
- 在配置提供程序页,每条配置提供程序记录都有唯一名称和 URL。 查看此页面的内容。 如果已有 Litware, Inc. (
https://www.litware.com
) 的记录,请跳过下一过程,即添加新 ER 配置提供程序。
添加新 ER 配置提供程序
- 在配置提供程序页面上,选择新建。
- 在名称字段中,输入 Litware, Inc.
- 在 Internet 地址字段中,输入
https://www.litware.com
。 - 选择保存。
激活 ER 配置提供程序
- 转到组织管理>工作区>电子申报。
- 在电子报告工作区中,选择 Litware, Inc. 配置提供程序。
- 选择设置有效。
有关 ER 配置提供程序的详细信息,请参阅创建配置提供程序并将其标记为有效。
设计域特定数据模型
您必须为调查表业务域创建一个包含数据模型组件的新 ER 配置。 此数据模型将在以后您设计 ER 格式以生成调查表报表时用作数据源。
通过完成导入新数据模型配置一节的步骤,可以从提供的 XML 文件导入所需的数据模型。 或者,您可以完成创建新数据模型配置一节的步骤来从头开始设计此数据模型。
导入新数据模型配置
- 下载 Questionnaires model.version.1.xml 文件,并将其保存到本地计算机。
- 转到组织管理>工作区>电子申报。
- 在电子报告工作区中,选择报告配置。
- 在操作窗格上,选择交换>从 XML 文件加载。
- 选择浏览,然后找到并选择 Questionnaires model.version.1.xml 文件。
- 选择确定导入配置。
要继续,跳过下一个过程创建新的数据模型配置。
创建新的数据模型配置
- 转到组织管理>工作区>电子申报。
- 在电子报告工作区中,选择报告配置。
- 选择创建配置。
- 在下拉对话框的名称字段中,输入调查表模型。
- 选择创建配置以创建配置。
为数据模型命名
添加新数据模型字段
在数据模型设计器页上,选择新建。
在用于添加数据模型节点的下拉对话框中,按照下列步骤操作:
此根描述符将用于为调查表报表提供数据。 单个数据模型可以有多个描述符。 可以为一个 ER 格式指定每个描述符,来标识生成报表所需的数据。
再次选择新建,然后,在用于添加数据模型节点的下拉对话框中,按照下列步骤操作:
- 选择活动节点的子节点作为新节点的类型。
- 在名称字段中,输入公司名称。
- 在物料类型字段中,选择字符串。
- 选择添加添加新字段。
将当前公司的名称传递到使用此数据模型作为数据源的 ER 报表时,此字段是必需的。
再次选择新建,然后,在用于添加数据模型节点的下拉对话框中,按照下列步骤操作:
- 选择活动节点的子节点作为新节点的类型。
- 在名称字段中,输入调查表。
- 在物料类型字段中,选择记录列表。
- 选择添加添加新字段。
此字段将用于将调查表列表传递到使用此数据模型作为数据源的 ER 报表。
选择调查表节点。
继续以相同方式添加可编辑数据模型的必需字段,直到完成以下数据模型结构。
字段路径 数据类型 字段指定/返回值 根 请求调查表数据的参考点。 根\公司名称 字符串 当前公司的名称。 根\执行上下文 记录 格式执行详细信息。 根\执行上下文\格式名称 字符串 正在运行的 ER 格式的名称。 根\调查表 记录列表 调查表列表 根\调查表\活动 字符串 当前调查表的状态。 根\调查表\代码 字符串 当前调查表的代码。 根\调查表\说明 字符串 当前调查表的说明。 根\调查表\调查表类型 字符串 当前调查表的类型。 根\调查表\问题顺序 字符串 当前调查表的数字顺序。 根\调查表\结果组 记录 当前调查表的结果参数。 根\调查表\结果组\代码 字符串 当前结果组的标识代码。 根\调查表\结果组\说明 字符串 当前结果组的说明。 根\调查表\结果组\最高分数 实数 可能获得的最高分数。 根\调查表\问题 记录列表 当前调查表的问题列表。 根\调查表\问题\集合序列号 整数 当前答案集合的序列号。 根\调查表\问题\ID 字符串 当前问题的标识代码。 根\调查表\问题\必须完成 字符串 指示是否必须回答当前问题的标记。 根\调查表\问题\主要问题 字符串 指示当前问题是否是主要问题的标记。 根\调查表\问题\序列号 整数 当前问题的序列号。 根\调查表\问题\文本 字符串 当前问题的文本。 根\调查表\问题\答案 记录列表 当前问题的答案列表。 根\调查表\问题\答案\正确答案 字符串 指示当前答案是否正确的标记。 根\调查表\问题\答案\分数 实数 选择当前答案获得的分数。 根\调查表\问题\答案\序列号 整数 当前答案的序列号。 根\调查表\问题\答案\文本 字符串 当前答案的文本。 下图显示了数据模型设计器页上完成的可编辑数据模型。
保存所做的更改。
关闭数据模型设计器页。
完成数据模型的设计
- 转到组织管理>电子申报>配置。
- 在配置页上的配置树中,选择调查表模型。
- 在版本快速选项卡上,选择状态为草稿的配置版本。
- 选择更改状态>完成。
此配置的版本 1 的状态将从草稿更改为已完成。 版本 1 不能再更改。 此版本包含已配置的数据模型,可以用作其他 ER 配置的基础。 此配置的版本 2 将创建,状态为草稿。 您可以编辑此版本来调整调查表数据模型。
有关 ER 配置的版本控制的详细信息,请参阅电子报告 (ER) 概述。
注释
配置的数据模型是调查表业务域的抽象表示,不包含与 Microsoft Dynamics 365 Finance 特定的伪像的关系。
为配置的数据模型设计模型映射
作为电子报告开发人员角色的用户,您必须为调查表数据模型创建一个新的 ER 配置,其中包含模型映射组件。 由于此组件为 Finance 实现配置的数据模型,因此它是 Finance 特定组件。 您必须配置模型映射组件来指定必须用于在运行时使用应用程序数据填充配置的数据模型的应用程序对象。 要完成此任务,您必须了解 Finance 中调查表业务域的数据结构的实现详细信息。
通过完成后面的导入新模型映射配置一节的步骤,可以从提供的 XML 文件导入所需的模型映射配置。 或者,您可以完成创建新模型映射配置一节的步骤来从头开始设计此模型映射。
导入新模型映射配置
- 下载 Questionnaires mapping.version.1.1.xml 文件,并将其保存到本地计算机。
- 转到组织管理>工作区>电子申报。
- 在电子报告工作区中,选择报告配置。
- 在操作窗格上,选择交换>从 XML 文件加载。
- 选择浏览,然后找到并选择 Questionnaires mapping.version.1.1.xml 文件。
- 选择确定导入配置。
要继续,跳过下一个过程创建新模型映射配置。
创建新模型映射配置
转到组织管理>电子申报>配置。
在配置页上的配置树中,选择调查表模型。
选择创建配置。
在下拉对话框中,执行以下步骤:
- 在新建字段中,选择基于数据模型调查表的模型映射。
- 在名称字段中输入调查表映射。
- 在数据模型定义字段中,选择根定义。
- 选择创建配置以创建配置。
设计新模型映射组件
- 在配置页上的配置树中,选择调查表映射。
- 选择设计器来打开映射列表。
- 选择为根定义自动添加的调查表映射映射。
- 选择设计器开始配置选定的映射。
系统会自动为根定义添加新映射。 此映射具有到模型方向。 因此,此映射可用于使用所需数据填充数据模型。
添加数据源以访问应用程序表
您必须配置数据源以访问包含调查表详细信息的应用程序表。
在模型映射设计器页的数据源类型窗格中,选择 Dynamics 365 for Operations\表记录。
添加将用于访问 KMCollection 表的新数据源,其中每个记录代表一个调查表:
- 在数据源窗格中,选择添加根。
- 在对话框的名称字段中,输入调查表。
- 在表字段中,输入 KMCollection。
- 将要求查询选项设置为是。 然后,您可以在运行时在系统查询对话框中为此表指定筛选选项。
- 选择确定添加新数据源。
在数据源类型窗格中,选择 Dynamics 365 for Operations\表记录。
添加将用于访问 KMQuestion 表的新数据源,其中每个记录代表调查表中的一个问题:
- 在数据源窗格中,选择添加根。
- 在对话框的名称字段中,输入问题。
- 在表字段中,输入 KMQuestion。
- 选择确定添加新数据源。
在数据源类型窗格中,选择 Dynamics 365 for Operations\表记录。
添加将用于访问 KMAnswer 表的新数据源尝试,其中每个记录代表调查表中问题的一个答案:
- 在数据源窗格中,选择添加根。
- 在名称字段中,输入答案。
- 在表字段中,输入 KMAnswer。
- 选择确定添加新数据源。
在数据源类型窗格中,选择函数\计算字段。
添加将用于从父 KMCollection 表的每个记录访问 KMQuestionResultGroup 表的记录的新计算字段:
在数据源类型窗格中,选择函数\计算字段。
添加将用于从父 KMCollectionQuestion 表的每个记录访问 KMQuestion 表的问题记录的新计算字段:
- 在数据源窗格中,选择调查表。
- 展开包含 KMCollection 表的一对多关系的 <Relations 节点。
- 选择相关的 KMCollectionQuestion 表,然后选择添加。
- 在对话框的名称字段中,输入 $Question。
- 选择编辑公式。
- 在公式编辑器的公式字段中,输入 FIRSTORNULL (FILTER(Question, Question.kmQuestionId = @.kmQuestionId)) 以从 KMQuestion 表返回相应的问题记录。
- 选择保存,然后关闭公式编辑器。
- 选择确定添加新计算字段。
在数据源类型窗格中,选择函数\计算字段。
添加将用于从父 KMQuestion 表的每个记录访问 KMAnswer 表的答案记录的新计算字段:
- 在数据源窗格中,选择 Questionnaire.<Relations.KMCollectionQuestion.$Question,然后选择添加。
- 在对话框的名称字段中,输入 $Answer。
- 选择编辑公式。
- 在公式编辑器的公式字段中,输入 FILTER (Answer, Answer.kmAnswerCollectionId = @.kmAnswerCollectionId) 以从 KMAnswer 表返回相应的答案记录。
- 选择保存,然后关闭公式编辑器。
- 选择确定添加新计算字段。
在数据源类型窗格中,选择 Dynamics 365 for Operations\表。
添加将用于访问 CompanyInfo 表的方法的新数据源。 请注意,此表的 find() 方法将返回一条记录,该记录表示在其上下文中调用此映射的当前 Finance 实例的公司。
- 在数据源窗格中,选择添加根。
- 在对话框的名称字段中,输入公司信息。
- 在表字段中,输入公司信息。
- 选择确定添加新数据源。
添加数据源以访问应用程序枚举
您必须配置数据源以访问应用程序枚举,并将其值与应用程序表中枚举类型的字段的值进行比较。 您必须使用比较的结果来填充数据模型的相应字段。
在模型映射设计器页的数据源类型窗格中,选择 Dynamics 365 for Operations\枚举。
添加将用于访问 EnumAppNoYes 枚举的值的新数据源。
- 在数据源窗格中,选择添加根。
- 在对话框的名称字段中,输入 EnumAppNoYes。
- 在枚举字段中,输入 NoYes。
- 选择确定添加新数据源。
在数据源类型窗格中,选择 Dynamics 365 for Operations\枚举。
添加将用于访问 KMCollectionQuestionMode 枚举的值的新数据源。
- 在数据源窗格中,选择添加根。
- 在对话框的名称字段中,输入 EnumAppQuestionOrder。
- 在枚举字段中,输入 KMCollectionQuestionMode。
- 选择确定添加新数据源。
添加 ER 标签以指定语言生成报表
您可以添加 ER 标签来配置一些数据源以返回取决于在模型映射调用的上下文中定义的语言的值。
在模型映射设计器页的数据源窗格中,选择答案,然后选择编辑。
激活标签字段。
选择翻译。
在文本翻译对话框中,执行以下步骤:
- 在标签 ID 字段中,输入 PositiveAnswer。
- 在语言为默认语言的文本字段中,输入是。
- 选择翻译。
- 在标签 ID 字段中,输入 NegativeAnswer。
- 在语言为默认语言的文本字段中,输入否。
- 选择翻译。
关闭文本翻译对话框。
选择取消。
您仅为默认语言输入了 ER 标签。 有关如何将 ER 标签翻译为其他语言的信息,请参阅设计多语言报表。
添加数据源以将比较枚举值的结果转换为文本值
因为必须为差异源多次转换枚举值和文本值之间的比较结果,所以最好将此逻辑配置为单个数据源。 但是,要使此数据源可以重用,必须将其配置为参数化数据源。 有关详细信息,请参阅支持对计算字段类型的 ER 数据源的参数化调用。
在模型映射设计器页的数据源类型窗格中,选择常规\空容器。
添加新容器数据源:
- 在数据源窗格中,选择添加根。
- 在对话框的名称字段中,输入帮助程序。
- 选择确定添加新容器数据源。
在数据源类型窗格中,选择函数\计算字段。
添加新数据源:
在数据源窗格中,选择帮助程序。
选择添加。
在对话框的名称字段中,输入 NoYesEnumToString。
选择编辑公式。
在公式编辑器中,选择参数。
按照以下步骤为配置的表达式指定参数:
- 选择新建。
- 在对话框的名称字段中,输入参数。
- 在类型字段中,选择布尔数据类型。
- 选择确定。
在公式字段中,输入 IF (Argument = true, @"GER_LABEL:PositiveAnswer", @"GER_LABEL:NegativeAnswer"),以根据执行上下文的语言和指定参数的值返回相应的 ER 标签的文本。
选择保存,然后关闭公式编辑器。
选择确定添加新数据源。
将数据源与数据模型字段绑定
您必须将配置的数据源与数据模型的字段绑定,来指定在运行时如何使用应用程序数据填充数据模型。
在模型映射设计器页的数据模型窗格中,选择公司名称。
在数据源窗格中,展开公司信息,然后按照以下步骤操作:
- 展开代表“公司信息”表的 find() 方法的 CompanyInfo.find() 节点。
- 选择 CompanyInfo.find().Name。
- 选择绑定以在运行时的上下文中填写要调用配置的模型映射的公司的名称。
在数据模型窗格中,选择调查表。
在数据源窗格中,选择调查表,然后选择绑定填充调查表记录。
在数据模型窗格中,展开调查表,然后按照以下步骤操作:
- 在数据模型窗格中,选择活动。
- 在数据模型窗格中,选择编辑。
- 在公式字段中,输入 Helper.NoYesEnumToString (@.Active = EnumAppNoYes.Yes) 以填充枚举值之间比较的文本相关和语言相关结果。
继续以相同的方式将数据源绑定到数据模型字段,直到获得以下结果。
字段路径 数据类型 行动 绑定表达式 公司名称 字符串 绑定 CompanyInfo.'find()'.Name 调查表 记录列表 绑定 调查表 调查表\活动 字符串 编辑 Helper.NoYesEnumToString(@.active = EnumAppNoYes.Yes) 调查表\代码 字符串 绑定 @.kmCollectionId 调查表\说明 字符串 绑定 @.Description 调查表\调查表类型 字符串 绑定 @.'>Relations'.kmCollectionTypeId.Description 调查表\问题顺序 字符串 编辑 CASE (@.questionMode,
EnumAppQuestionOrder.Conditional, "Conditional",
EnumAppQuestionOrder.Random, "Random (percentage in questionnaire)",
EnumAppQuestionOrder.RandomGroup, "Random (percentage in result groups)",
EnumAppQuestionOrder.Sequence, "Sequential",
"")调查表\结果组 记录 调查表\结果组\代码 字符串 绑定 @.'$ResultGroup'.kmQuestionResultGroupId 调查表\结果组\说明 字符串 绑定 @.'$ResultGroup'.description 调查表\结果组\最高分数 实数 绑定 @.'$ResultGroup'.maxPoint 调查表\问题 记录列表 绑定 @.'<Relations'.KMCollectionQuestion 调查表\问题\集合序列号 整数 绑定 @.answerCollectionSequenceNumber 调查表\问题\ID 字符串 绑定 @.kmQuestionId 调查表\问题\必须完成 字符串 编辑 Helper.NoYesEnumToString(@.mandatory = EnumAppNoYes.Yes) 调查表\问题\主要问题 字符串 绑定 @.parentQuestionId 调查表\问题\序列号 整数 绑定 @.SequenceNumber 调查表\问题\文本 字符串 绑定 @.'$Question'.text 调查表\问题\答案 记录列表 绑定 @.'$Question'.'$Answer' 调查表\问题\答案\正确答案 字符串 编辑 Helper.NoYesEnumToString(@.correctAnswer = EnumAppNoYes.Yes) 调查表\问题\答案\分数 实数 绑定 @.point 调查表\问题\答案\序列号 整数 绑定 @.sequenceNumber 调查表\问题\答案\本文 字符串 绑定 @.text 下图显示了模型映射设计器页面上配置的模型映射的最终状态。
保存所做的更改。
关闭模型映射设计器页。
完成模型映射的设计
- 转到组织管理>电子申报>配置。
- 在配置页上的配置树中,选择调查表映射。
- 在版本快速选项卡上,选择状态为草稿的配置版本。
- 选择更改状态>完成。
此配置的版本 1.1 的状态将从草稿更改为已完成。 版本 1.1 不能再更改。 此版本包含已配置的模型映射,可以用作其他 ER 配置的基础。 此配置的版本 1.2 将创建,状态为草稿。 您可以编辑此版本来调整调查表映射配置。
注释
配置的模型映射是表示调查表业务域的抽象数据模型的 Finance 特定实现。
为自定义报表设计模板
ER 框架使用预定义的模板生成 Microsoft Office 格式(Excel 工作簿或 Word 文档)的报表。 在生成所需报表时,将根据配置的数据流使用所需数据填充模板。 因此,您必须首先为自定义报表设计模板。 此模板必须设计为 Excel 工作簿,其结构代表自定义报表的布局。 您必须为计划填充所需数据的每个 Excel 项命名。
- 下载 Questionnaires report template.xlsx 文件,并将其保存到本地计算机。
- 在 Excel 中打开文件,查看工作簿的结构。
如下图所示,下载的模板已设计为打印指定的调查表,这些调查表显示调查表的问题以及相应的答案。
Excel 名称已添加到此模板中以填充调查表详细信息。 您可以使用名称管理器来查看 Excel 名称。
报表标签已添加为英语的固定文本。 您可以使用 ER 格式标签将报表标签替换为将使用语言相关文本填充标签的新的 Excel 名称,就像在配置的模型映射中使用语言相关表达式一样。 在这种情况下,必须以可编辑的 ER 格式添加 ER 标签。
如下图所示,已指定自定义报表标题来使 Excel 能够分页。
设计格式
作为电子报告功能顾问角色的用户,您必须创建一个新的 ER 配置,其中包含格式组件。 您必须配置格式组件来指定运行时如何使用所需数据填充报表模板。
通过完成导入设计的格式配置一节的步骤,可以从提供的 XML 文件导入所需的格式。 或者,您可以完成创建新格式配置一节的步骤来从头开始设计此格式。
导入设计的格式配置
- 下载 Questionnaires format.version.1.1.xml 文件,并将其保存到本地计算机。
- 转到组织管理>工作区>电子申报。
- 在电子报告工作区中,选择报告配置。
- 在操作窗格上,选择交换>从 XML 文件加载。
- 选择浏览,然后找到并选择 Questionnaires format.version.1.1.xml 文件。
- 选择确定导入配置。
要继续,跳过下一个过程创建新格式配置。
创建新的格式配置
转到组织管理>电子申报>配置。
在配置页上的配置树中,选择调查表模型。
选择创建配置。
在下拉对话框中,执行以下步骤:
在新建字段中,选择基于数据模型调查表的格式。
在名称字段中输入调查表报表。
在数据模型版本字段中,选择 1。
注释
- 如果您选择基础数据模型的特定版本,此数据模型的相应版本的结构将以创建的格式以模型数据源的结构向您呈现。
- 您可以将此字段保留为空。 在这种情况下,数据模型草稿版本的结构将以创建的格式以模型数据源的结构向您呈现。 然后,您可以调整模型,并立即以您的格式查看这些调整。 当您同时配置数据模型、模型映射和格式时,此方法可以提高 ER 解决方案设计的效率。
- 如果选择基础数据模型的特定版本,以后在开始编辑格式时,可以切换为使用草稿版本。
在数据模型定义字段中,选择根定义。
选择创建配置以创建配置。
导入报表模板
在配置页上的配置树中,选择调查表报表。
选择设计器开始配置自定义格式。
在格式设计器页的操作窗格上,选择导入>从 Excel 导入。
在对话框中,执行以下步骤:
- 选择添加模板。
- 找到并选择本地保存的 Questionnaires report template.xslx 文件,然后选择打开。
- 选择确定导入模板。
Excel\文件格式元素将作为根元素自动添加到可编辑格式中。 此外,将为导入模板的每个确认的 Excel 名称自动添加 Excel\范围格式元素或 Excel\单元格格式元素。 具有嵌套字符串元素的 Excel\标题格式会自动添加,以反映导入模板的标题设置。
配置格式
在格式设计器页面的格式树中,选择 Excel 根元素。
在语言首选项字段中,选择用户首选项以用户的首选语言运行报表。
在区域性首选项字段中,选择用户首选项以用户的首选区域性运行报表。
有关如何为 ER 流程指定语言和区域性上下文的信息,请参阅设计多语言报表。
在格式树中,展开根节点,然后选择结果组。
在格式选项卡中,在复制方向字段中,选择不复制,因为您不希望单个调查表具有多个结果组。
选择保存。
定义报表标题的数据绑定
您必须为用于填充生成报表的标题的格式元素指定数据绑定。
在格式设计器页上右侧的映射选项卡上,选择报表\报表标题元素。
选择编辑公式。
在公式编辑器中,选择翻译。
在文本翻译对话框中,执行以下步骤:
- 在标签 ID 字段中,输入 ReportTitle。
- 在语言为默认语言的文本字段中,输入调查表报表。
- 选择翻译,然后选择保存。
- 选择翻译关闭文本翻译对话框。
关闭公式编辑器。
您可以使用此方法让当前模板的所有其他标签成为语言相关标签。 有关如何将单个 ER 配置的已添加标签翻译为所有支持语言的信息,请参阅设计多语言报表。
查看模型数据源
将格式元素与数据源字段绑定
若要指定在运行时如何填充模板,必须将与相应的 Excel 名称相关联的每个格式元素与此格式的数据源的单个字段绑定。
在格式设计器页面的格式树中,选择报表\公司名称格式元素。
在映射选项卡上,选择字符串类型的 model.CompanyName 数据源字段。
选择绑定在模板中输入公司名称。
在格式树中,选择报表\调查表元素。
在映射选项卡上,选择记录列表类型的 model.Questionnaire 数据源字段。
选择绑定。
选择显示详细资料查看格式元素的更多详细信息。
调查表范围格式元素已配置为垂直复制。 将其绑定到记录列表类型的数据源时,将对绑定数据源的每条记录重复 Excel 模板的相应的调查表范围。
由于 Excel 模板的调查表范围是在第 5 到 14 行之间定义的,因此每个报告的调查表都将重复这些行。
为其余格式元素配置类似的绑定,如下表所述。
注释
在此表中,“数据源路径”列中的信息假定相对路径 ER 功能已打开。
格式元素路径 数据源路径 Excel\报告标题 @"GER_LABEL:ReportTitle" Excel\公司名称 model.CompanyName Excel\调查表 model.Questionnaire Excel\调查表\活动 @.Active,其中 @ 是 model.Questionnaire Excel\调查表\代码 @.Code Excel\调查表\说明 @.Description Excel\调查表\调查表类型 @.QuestionnaireType Excel\调查表\问题顺序 @.QuestionOrder Excel\Questionnaire\ResultsGroup\Code_ @.ResultsGroup.Code Excel\Questionnaire\ResultsGroup\Description_ @.ResultsGroup.Description Excel\调查表\结果组\最高分数 @.ResultsGroup.MaxNumberOfPoint Excel\调查表\问题 @.Question Excel\调查表\问题\集合序列号 @.CollectionSequenceNumber,其中 @ is model.Questionnaire.Question Excel\调查表\问题\ID @.Id Excel\调查表\问题\必须完成 @.MustBeCompleted Excel\调查表\问题\主要问题 @.PrimaryQuestion Excel\调查表\问题\序列号 @.SequenceNumber Excel\调查表\问题\文本 @.Text Excel\调查表\问题\答案 @.Answer Excel\调查表\问题\答案\正确答案 @.CorrectAnswer,其中 @ 是 model.Questionnaire.Answer Excel\调查表\问题\答案\分数 @.Points Excel\调查表\问题\答案\文本 @.Text 当您完成时,选择保存。
下图显示了模式设计器页面上配置的数据绑定的最终状态。
重要
指定数据源和绑定的整个集合表示已配置格式的格式映射组件。 当您运行配置的格式以生成报表时,将调用此格式映射。
从 ER 运行设计的格式
现在,您可以从配置页面运行设计的格式来进行测试。
- 转到组织管理>电子申报>配置。
- 在配置页的配置树中,展开调查表模型,然后选择调查表报表。
- 为状态为草稿的格式版本选择设计器。
- 在格式设计器页上,选择运行。
- 在 ER 参数对话框的要包括的记录快速选项卡上,配置筛选选项,以仅包括 SBCCrsExam 调查表。
- 选择确定确认筛选选项。
- 选择确定运行报表。
- 查看生成的报表。
默认情况下,生成的报表以 Excel 文件的形式提供,您可以进行下载。 下图以 Excel 格式显示了生成报表的两个页面。
调整设计的格式
修改格式以更改生成文档的名称
默认情况下,使用当前用户的别名来命名生成的文档。 通过修改格式,您可以更改此行为,以根据您的自定义逻辑来命名生成的文档。 例如,生成文档的名称可以基于当前会话的日期和时间以及报表的标题。
- 在格式设计器页中,选择报表根项。
- 在映射选项卡上,选择编辑文件名。
- 在公式字段中,输入 CONCATENATE (@"GER_LABEL:ReportTitle", " - ", DATETIMEFORMAT(SESSIONNOW(), "yyyy-MM-dd hh-mm-ss"))。
- 选择保存,然后关闭公式编辑器。
- 选择保存。
修改格式以更改问题的顺序
问题在生成的报表中未正确排序。 您可以通过修改格式来更改顺序。
在格式设计器页中,选择报表根项。
在映射选项卡上的格式树中,展开报表\调查表\问题。
在映射选项卡上,选择 model.Questionnaire。
选择添加>函数\计算字段,然后在名称字段中输入 OrderedQuestions。
选择编辑公式。
在公式编辑器的公式字段中,输入 ORDERBY (model.Questionnaire.Question, model.Questionnaire.Question.SequenceNumber),以按序列顺序编号对当前调查表的问题列表进行排序。
选择保存,然后关闭公式编辑器。
选择确定完成新计算字段的输入。
在映射选项卡上,选择 model.Questionnaire.OrderedQuestions。
在格式树中,选择 Excel\调查表\问题。
选择绑定,然后确认在嵌套元素的所有绑定中,当前的 model.Questionnaire.Questions 路径已被新的 model.Questionnaire.OrderedQuestions 路径替换。
选择保存。
从 ER 运行修改的格式
现在,您可以从 ER 框架运行修改的格式来进行测试。
- 在格式设计器页上,选择运行。
- 在 ER 参数对话框的要包括的记录快速选项卡上,配置筛选选项,以仅包括 SBCCrsExam 调查表。
- 选择确定确认筛选选项。
- 选择确定运行报表。
- 查看生成的报表。
下图显示了 Excel 格式的生成报表,其中问题已正确排序。
完成格式设计
- 转到组织管理>电子申报>配置。
- 在配置页的配置树中,展开调查表模型,然后选择调查表报表。
- 在版本快速选项卡上,选择状态为草稿的配置版本。
- 选择更改状态>完成。
此配置的版本 1.1 的状态将从草稿更改为已完成。 版本 1.1 不能再更改。 此版本包含配置的格式,可用于打印自定义报表。 此配置的版本 1.2 将创建,状态为草稿。 您可以编辑此版本来调整调查表报表的格式。
注释
配置的格式是您的调查表报表的设计,不包含与 Finance 特定伪像的关系。
开发应用程序伪像以调用设计的报表
作为系统管理员角色的用户,您必须开发新逻辑,以可以从应用程序用户界面 (UI) 调用配置的 ER 格式来生成自定义报表。 当前,ER 不提供任何配置此类逻辑的功能。 因此,需要一些工程工作。
要开发新逻辑,必须部署支持连续生成的拓扑。 有关详细信息,请参阅部署支持连续生成和测试自动化的拓扑。 还必须可以访问此拓扑的开发环境。 有关可用 ER API 的详细信息,请参阅 ER 框架 API。
修改源代码
添加数据合同类
将新 QuestionnairesErReportContract 类添加到您的 Microsoft Visual Studio 项目中,并编写指定应用于运行配置的 ER 格式的数据合同的代码。
/// <summary>
/// This class is the data contract class for the <c>QuestionnairesErReportDP</c> class.
/// </summary>
/// <remarks>
/// This is the data contract class for the Questionnaires ER report.
/// </remarks>
[
DataContractAttribute,
SysOperationContractProcessingAttribute(classStr(QuestionnairesErReportUIBuilder))
]
public class QuestionnairesErReportContract extends ERFormatMappingRunBaseContract implements SysOperationValidatable
{
ERFormatMappingId formatMapping;
/// <summary>
/// Validates the report parameters.
/// </summary>
/// <returns>
/// true if no errors; otherwise, false.
/// </returns>
public boolean validate()
{
boolean ret = true;
if (!formatMapping)
{
ret = checkFailed(strFmt("@SYS26332", new SysDictType(extendedTypeNum(ERFormatMappingId)).label()));
}
return ret;
}
[
DataMemberAttribute('FormatMapping'),
SysOperationLabelAttribute(literalstr("@ElectronicReporting:FormatMapping")),
SysOperationHelpTextAttribute(literalstr("@ElectronicReporting:FormatMapping"))
]
public ERFormatMappingId parmFormatMapping(ERFormatMappingId _formatMapping = formatMapping)
{
formatMapping = _formatMapping;
return formatMapping;
}
}
添加 UI 构建器类
将新 QuestionnairesErReportUIBuilder 类添加到您的 Visual Studio 项目中,并编写代码以生成将用于查找必须运行的 ER 格式的格式映射 ID 的运行时对话框。 提供的代码仅查找包含引用调查表数据模型的数据模型类型的数据源的 ER 格式,查找使用根定义。
注释
或者,您可以使用 ER 集成点来筛选 ER 格式。 有关详细信息,请参阅用于显示格式映射查找的 API。
/// <summary>
/// The UIBuilder class for Questionnaires ER report
/// </summary>
class QuestionnairesErReportUIBuilder extends SysOperationAutomaticUIBuilder
{
public const str ERQuestionnairesModel = 'Questionnaires';
public const str ERQuestionnairesDataContainer = 'Root';
/// <summary>
/// Action after build of the dialog UI.
/// </summary>
public void postBuild()
{
DialogField formatMapping;
super();
formatMapping = this.bindInfo().getDialogField(this.dataContractObject(),
methodStr(QuestionnairesErReportContract, parmFormatMapping));
formatMapping.registerOverrideMethod(
methodStr(FormReferenceControl, lookupReference),
methodStr(QuestionnairesErReportUIBuilder, formatMappingLookup),
this);
}
/// <summary>
/// Performs the lookup form for format mapping.
/// </summary>
/// <param name="_referenceGroupControl">
/// The control to perform lookup form.
/// </param>
public void formatMappingLookup(FormReferenceControl _referenceGroupControl)
{
ERObjectsFactory::createFormatMappingTableLookupForControlAndModel(
_referenceGroupControl,
ERQuestionnairesModel,
ERQuestionnairesDataContainer).performFormLookup();
}
}
添加数据提供程序类
将新 QuestionnairesErReportDP 类添加到您的 Visual Studio 项目中,并编写引入应用于运行配置的 ER 格式的数据提供程序的代码。 提供的代码仅包含此数据提供程序的数据合同。
/// <summary>
/// Data provider class for Questionnaires ER report.
/// </summary>
public class QuestionnairesErReportDP
{
QuestionnairesErReportContract contract;
public static QuestionnairesErReportDP construct()
{
QuestionnairesErReportDP dataProvider;
dataProvider = new QuestionnairesErReportDP();
return dataProvider;
}
}
添加标签文件
将新的 QuestionnairesErReportLabels_en-US 标签文件添加到您的 Visual Studio 项目中,并为新的 UI 资源指定以下标签:
- 包含以下使用美国英语 (en-US) 显示的文本的新菜单项的 @QuestionnairesReport 标签:Questionnaires report (powered by ER)
- 计划将选定的 ER 格式作为批处理作业执行时批处理作业标题的 @QuestionnairesReportBatchJobDescription 标签
添加报表服务类
将新 QuestionnairesErReportService 类添加到您的 Visual Studio 项目中,并编写调用 ER 格式、使用格式映射 ID 加以标识并提供数据合同作为参数的代码。
using Microsoft.Dynamics365.LocalizationFramework;
/// <summary>
/// The electronic reporting service class for Questionnaires ER report
/// </summary>
class QuestionnairesErReportService extends SysOperationServiceBase
{
public const str ERModelDataSourceName = 'model';
public const str DefaultExportedFileName = 'Questionnaires report';
public const str ParametersDataSourceName = 'RunTimeParameters';
/// <summary>
/// Generates report by using Electronic reporting framework
/// </summary>
/// <param name = "_contract">The Questionnaires report contract</param>
public void generateReportByGER(QuestionnairesErReportContract _contract)
{
ERFormatMappingId formatMappingId;
QuestionnairesErReportDP dataProvider;
dataProvider = QuestionnairesErReportDP::construct();
formatMappingId = _contract.parmFormatMapping();
if (formatMappingId)
{
try
{
ERIModelDefinitionParamsAction parameters = new ERModelDefinitionParamsUIActionComposite()
.add(new ERModelDefinitionObjectParameterAction(ERModelDataSourceName, ParametersDataSourceName, _contract, true));
// Call ER to generate the report.
ERIFormatMappingRun formatMappingRun = ERObjectsFactory::createFormatMappingRunByFormatMappingId(formatMappingId, DefaultExportedFileName);
if (formatMappingRun.parmShowPromptDialog(true))
{
formatMappingRun.withParameter(parameters);
formatMappingRun.withFileDestination(_contract.getFileDestination());
formatMappingRun.run();
}
}
catch
{
// An error occurred while exporting data.
error("@SYP4861341");
}
}
else
{
// There is no data available.
info("@SYS300117");
}
}
}
如果必须使用运行应用程序数据的 ER 格式,则必须在格式映射中配置数据模型类型的数据源。 此数据源通过使用单个根定义来引用指定数据模型的特定部分。 运行 ER 格式时,它将调用此数据源以访问为给定模型和根定义配置的相应 ER 模型映射。
您可以使用此类型的 ER 模型映射,将您可能在源代码中准备并存储为数据合同一部分的所有信息传递到正在运行的 ER 格式。 在 ER 模型映射中,必须配置引用 QuestionnairesErReportContract 类的对象类型的数据源。 要标识模型映射,必须指定一个调用此模型映射的数据源。 在提供的代码中,此数据源由具有模型值的 ERModelDataSourceName 常量指定。 若要标识哪个数据源用于在模型映射中公开数据合同,必须指定一个数据源名称。 在提供的代码中,此名称由具有 RunTimeParameters 值的 ParametersDataSourceName 常量指定。
注释
在新环境中,您可能必须刷新 ER 元数据,以可以在 ER 模型映射设计器中使用这种类型的类。 有关详细信息,请参阅配置 ER 框架。
添加报表控制器类
将新 QuestionnairesErReportController 类添加到您的 Visual Studio 项目中,并根据您的需要,在基于提供的 QuestionnairesErReportUIBuilder 类的逻辑构建的对话框中,编写以同步模式或批处理模式运行 ER 格式的代码。
/// <summary>
/// The controller for Questionnaires ER report
/// </summary>
class QuestionnairesErReportController extends ERFormatMappingRunBaseController
{
/// <summary>
/// The main entrance of the controller
/// </summary>
/// <param name = "args">The arguments</param>
public static void main(Args args)
{
QuestionnairesErReportController operation;
operation = new QuestionnairesErReportController(
classStr(QuestionnairesErReportService),
methodStr(QuestionnairesErReportService, generateReportByGER),
SysOperationExecutionMode::Synchronous);
operation.startOperation();
}
/// <summary>
/// Gets caption of the dialog.
/// </summary>
/// <returns>Caption of the dialog</returns>
public ClassDescription defaultCaption()
{
ClassDescription batchDescription;
batchDescription = "Questionnaires report (powered by ER)";
return batchDescription;
}
}
添加菜单项
将新的 QuestionnairesErReport 菜单项添加到您的 Visual Studio 项目中。 在对象属性中,此菜单项引用 QuestionnairesErReportController 类,用于指定选择和运行 ER 格式的用户权限。 在 Label 属性中,此菜单项引用您之前创建的 @QuestionnairesReport 标签,以在应用程序 UI 中呈现正确的文本。
向菜单添加菜单项
将现有的 KM 菜单添加到您的 Visual Studio 项目中。 您必须在此菜单中添加输出类型的新 QuestionnairesErReport 项目。 此项目必须引用上一节中介绍的 QuestionnairesErReport 菜单项。
构建 Visual Studio 项目
构建项目以使新菜单项可供用户使用。
从应用程序运行格式
转到调查表>设计>调查表报表(由 ER 提供支持)。
在对话框中,在格式映射字段中,选择调查表报表。
选择确定。
在电子报表参数对话框的要包括的记录快速选项卡上,配置筛选选项,以仅包括 SBCCrsExam 调查表。
选择确定确认筛选选项。
选择确定运行报表。
查看生成的报表。
调整设计的 ER 解决方案
您可以修改配置的 ER 解决方案,让它使用您开发的数据提供程序类访问正在运行的 ER 格式的详细信息,并在生成的报表中输入此 ER 格式的名称。
修改模型映射
添加数据源以访问数据合同对象
- 转到组织管理>电子申报>配置。
- 在配置页的配置树中,展开调查表模型,然后选择调查表映射。
- 选择设计器打开模型到数据源映射页面。
- 选择设计器在模型映射设计器中打开选定的映射。
- 在模型映射设计器页的数据源类型窗格中,选择 Dynamics 365 for Operations\对象。
- 在数据源窗格中,选择添加根。
- 在对话框中,在名称字段中,输入 RunTimeParameters,如 QuestionnairesErReportService 类的源代码中所定义的。
- 在类字段中,输入 QuestionnairesErReportContract,之前已编码。
- 选择确定。
- 展开 RunTimeParameters。
添加的数据源提供有关正在运行的 ER 格式映射的记录 ID 的信息。
添加数据源以访问 ER 格式映射记录
通过添加数据源以访问 ER 格式映射记录,继续编辑所选的模型映射。
- 在模型映射设计器页的数据源类型窗格中,选择 Dynamics 365 for Operations\表记录。
- 在数据源窗格中,选择添加根。
- 在对话框的名称字段中,输入 ER1。
- 在表字段中,输入 ERFormatMappingTable。
- 选择确定。
添加数据源以访问正在运行的 ER 格式的格式映射记录
通过添加数据源以访问正在运行的 ER 格式的格式映射记录,继续编辑所选的模型映射。
- 在模型映射设计器页的数据源类型窗格中,选择函数\计算字段。
- 在数据源窗格中,选择添加根。
- 在对话框的名称字段中,输入 ER2。
- 选择编辑公式。
- 在公式编辑器中的公式字段中,输入 FIRSTORNULL (FILTER(ER1, ER1.RecId = RunTimeParameters.parmFormatMapping))。
- 选择保存,然后关闭公式编辑器。
- 选择确定。
在数据模型中输入正在运行的 ER 格式的名称
继续编辑所选的模型映射,以在数据模型中输入正在运行的 ER 格式的名称。
- 在模型映射设计器页的数据模型窗格中,展开 ExecutionContext,然后选择 ExecutionContext\FormatName。
- 在数据模型窗格中,选择编辑为所选数据模型的字段配置数据绑定。
- 在公式编辑器中的公式字段中,输入 FIRSTORNULL (ER2.'>Relations'.Format).Name。
- 选择保存,然后关闭公式编辑器。
由于您使用了 FormatName 字段,配置的模型映射现在公开在执行期间调用此模型映射的 ER 格式的名称。
完成模型映射的设计
- 在模型映射设计器页上,选择保存。
- 关闭该页面。
- 关闭模型映射页。
- 在配置页面的配置树中,确保仍选择调查表映射配置。 然后,在版本快速选项卡上,选择状态为草稿的配置版本。
- 选择更改状态>完成。
此配置的版本 1.2 的状态将从草稿更改为已完成。 版本 1.2 不能再更改。 此版本包含已配置的模型映射,可以用作其他 ER 配置的基础。 此配置的版本 1.3 将创建,状态为草稿。 您可以编辑此版本来调整调查表模型映射。
修改格式
您可以修改配置的 ER 格式,以使其名称显示在运行 ER 格式时生成的报表的页脚中。
添加新格式元素
- 转到组织管理>电子申报>配置。
- 在配置页的配置树中,展开调查表模型,然后选择调查表报表。
- 选择设计器。
- 在格式设计器页中,选择报表根项。
- 选择添加为所选的报表根项添加新的嵌套格式元素。
- 选择 Excel\页脚。
- 在名称字段中,输入页脚。
- 选择报表\页脚,然后选择添加。
- 选择文本\字符串。
绑定添加的格式元素
- 在格式设计器页面的映射选项卡上,在格式树中,为活动的页脚\字符串元素选择编辑公式。
- 在公式编辑器中的公式字段中,输入 CONCATENATE ("&C&10", FORMAT("Generated by'%1' ER solution", model.ExecutionContext.FormatName))。
- 选择保存,然后关闭公式编辑器。
- 选择保存。
配置的格式现在已经修改,以使用页脚\字符串元素将其名称输入到生成报表的页脚中。
完成格式设计
- 关闭格式设计器页。
- 在配置页面的配置树中,确保仍选择调查表报表配置。 然后,在版本快速选项卡上,选择状态为草稿的配置版本。
- 选择更改状态>完成。
此配置的版本 1.2 的状态将从草稿更改为已完成。 版本 1.2 不能再更改。 此版本包含已配置的格式,可以用作其他 ER 配置的基础。 此配置的版本 1.3 将创建,状态为草稿。 您可以编辑此版本来调整调查表报表。
从应用程序运行格式
- 转到调查表>设计>调查表报表(由 ER 提供支持)。
- 在对话框中,在格式映射字段中,选择调查表报表。
- 选择确定。
- 在 ER 参数对话框的要包括的记录快速选项卡上,配置筛选选项,以仅包括 SBCCrsExam 调查表。
- 选择确定确认筛选选项。
- 选择确定运行报表。
- 查看生成的 Excel 格式的报表。
请注意,生成的报表的页脚包含用于生成报表的 ER 格式的名称。
从 ER 运行格式
- 转到组织管理>电子申报>配置。
- 在配置页的配置树中,展开调查表模型,然后选择调查表报表。
- 在操作窗格上,选择运行。
- 在电子报表参数对话框的要包括的记录快速选项卡上,配置筛选选项,以仅包括 SBCCrsExam 调查表。
- 选择确定确认筛选选项。
- 选择确定运行报表。
- 查看生成的 Excel 格式的报表。
请注意,生成的报表的页脚不包含用于生成报表的 ER 格式的名称,因为当数据合同对象被从 ER 运行的 ER 格式调用时,它未被传递到运行的模型映射。
为屏幕预览配置格式目标
- 转到组织管理>电子申报>电子申报目标。
- 在电子报告目标页面上,为已配置的调查表报表 ER 格式添加目标记录。
- 在文件目标快速选项卡上,为已作为配置的调查表报表 ER 格式的根元素添加的报表格式组件设置屏幕目标。
- 在 PDF 转换设置快速选项卡上,配置目标以将报表转换为使用横向页面方向的 PDF 格式。
从应用程序运行格式以作为 PDF 文档预览
转到调查表>设计>调查表报表(由 ER 提供支持)。
在对话框中,在格式映射字段中,选择调查表报表。
选择确定。
在电子报表参数对话框的要包括的记录快速选项卡上,配置筛选选项,以仅包括 SBCCrsExam 调查表。
选择确定确认筛选选项。
在目标快速选项卡上,注意输出字段已设置为屏幕。 如果要更改配置的目标,选择更改。
选择确定运行报表。
查看生成的 PDF 格式的报表。