使用参数来控制基于 FetchXML 的报告的 malings 标签数量?
Use a parameter to control the number of malings labels for a FetchXML based report?
我正在尝试构建一个简单的邮件标签报告,在运行时让用户选择要为每条记录生成的标签数量。
Solutionwize 我认为报告参数是用户选择要生成的每条记录的标签数量的方法,但在那之后我有点卡住了。
标签本身将只包含 1 列,一个 ID。
由于是 Dynamics 365 CRM 在线环境,我必须找到不使用 SQL 的解决方案。我只能使用 FetchXML 和报告服务 (SSDT)。
感谢任何帮助。
我一直找不到一个简单的方法来做到这一点。虽然我怀疑存在一些创造性的解决方案,但我认为它与 FetchXML 无关——即它会涉及让 SSRS 根据参数中的数字重复一个值。
我还怀疑在同一份报告中重复输出任意次数可能会产生对齐挑战。
与其参与报表参数和 SSRS 编程,不如考虑制作一个简单、对齐良好的报表,生成单个标签。当用户去打印时,他们可以使用打印对话框来指定他们想要的份数。
我不是 SSRS 专家,所以我不能告诉你如何根据报告中的参数做一个重复值(不使用 CRM Online 报告中禁止的报告中的编码),但很简单的解决方案我看到的是在 CRM 中创建一个特殊的实体,我们称之为标签。它应该有两个字段(与默认名称字段不同)- WholeNumber 字段(我们称之为计数)和查找字段(您正在打印此标签的实体)。现在只需为这个标签实体的 Post-RetrieveMultiple 创建一个插件 - 在这个基于提供的计数和查找实体引用的插件中,您只需创建一个标签实体列表并将其放入您的 OutputParameter。接下来,它只是使用适当的 FetchXML 创建 SSRS 报告(它将有一个由用户提供的参数,并简单地记录您是 运行 报告的 ID)。您的插件将 return 任意多的记录,因此您只需抓取它们并在 tablix 的报告中显示。为了让您了解我在这里谈论的是插件的一些示例代码:
public void Execute(IServiceProvider serviceProvider)
{
var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
var query = (QueryExpression)context.InputParameters["Query"];
//get values from your query
int labelsToGenerate = 10;
var label = new Entity("new_label");
/////
label["new_name"] = Guid.NewGuid();
var labelCollection = new EntityCollection();
labelCollection.Entities.AddRange(Enumerable.Repeat(label, labelsToGenerate));
context.OutputParameters["EntityCollection"] = labelCollection;
}
请记住,要使它起作用,它必须在 Post-RetrieveMultiple 消息的操作上。
我建议放弃报告方法,而是创建一个智能网络资源,该资源将接受 fetchxml 以选择记录(普通 xml 或对现有视图的引用)和计数参数.
如果要创建的每条记录的邮寄标签数量较低,则此方法有效。如果您需要为每条记录创建数百个标签,我会说这个解决方案太麻烦了。
这就是我设法让它工作的方法:
步骤
- 创建 "normal" 邮寄标签报告:列数与您要创建的邮寄标签格式相匹配的列表。
- 使用预定义值创建报告参数,例如 1-10。
- 在报表设计器中,复制列表中的行数,使您的数量与之前在步骤 2 中创建的参数中指定的数量相同。在我的例子中,我现在有 10 行。
- 隐藏第 2-10 行,使它们不可见,除非用户选择与要显示的行数相对应的参数值。为此创建一个表达式。只需右键单击 rown,在可见性下,有一个基于表达式的 show/hide 选项。
表达式示例
Row 2: =IIF(Parameters!Amount.Value < 2, True, False)
Row 3: =IIF(Parameters!Amount.Value < 3, True, False)
虽然这种方法有效并实现了我的目标,但它并不像我希望的那样优雅。使解决方案动态化会更好。
我正在尝试构建一个简单的邮件标签报告,在运行时让用户选择要为每条记录生成的标签数量。
Solutionwize 我认为报告参数是用户选择要生成的每条记录的标签数量的方法,但在那之后我有点卡住了。
标签本身将只包含 1 列,一个 ID。
由于是 Dynamics 365 CRM 在线环境,我必须找到不使用 SQL 的解决方案。我只能使用 FetchXML 和报告服务 (SSDT)。
感谢任何帮助。
我一直找不到一个简单的方法来做到这一点。虽然我怀疑存在一些创造性的解决方案,但我认为它与 FetchXML 无关——即它会涉及让 SSRS 根据参数中的数字重复一个值。
我还怀疑在同一份报告中重复输出任意次数可能会产生对齐挑战。
与其参与报表参数和 SSRS 编程,不如考虑制作一个简单、对齐良好的报表,生成单个标签。当用户去打印时,他们可以使用打印对话框来指定他们想要的份数。
我不是 SSRS 专家,所以我不能告诉你如何根据报告中的参数做一个重复值(不使用 CRM Online 报告中禁止的报告中的编码),但很简单的解决方案我看到的是在 CRM 中创建一个特殊的实体,我们称之为标签。它应该有两个字段(与默认名称字段不同)- WholeNumber 字段(我们称之为计数)和查找字段(您正在打印此标签的实体)。现在只需为这个标签实体的 Post-RetrieveMultiple 创建一个插件 - 在这个基于提供的计数和查找实体引用的插件中,您只需创建一个标签实体列表并将其放入您的 OutputParameter。接下来,它只是使用适当的 FetchXML 创建 SSRS 报告(它将有一个由用户提供的参数,并简单地记录您是 运行 报告的 ID)。您的插件将 return 任意多的记录,因此您只需抓取它们并在 tablix 的报告中显示。为了让您了解我在这里谈论的是插件的一些示例代码:
public void Execute(IServiceProvider serviceProvider)
{
var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
var query = (QueryExpression)context.InputParameters["Query"];
//get values from your query
int labelsToGenerate = 10;
var label = new Entity("new_label");
/////
label["new_name"] = Guid.NewGuid();
var labelCollection = new EntityCollection();
labelCollection.Entities.AddRange(Enumerable.Repeat(label, labelsToGenerate));
context.OutputParameters["EntityCollection"] = labelCollection;
}
请记住,要使它起作用,它必须在 Post-RetrieveMultiple 消息的操作上。
我建议放弃报告方法,而是创建一个智能网络资源,该资源将接受 fetchxml 以选择记录(普通 xml 或对现有视图的引用)和计数参数.
如果要创建的每条记录的邮寄标签数量较低,则此方法有效。如果您需要为每条记录创建数百个标签,我会说这个解决方案太麻烦了。
这就是我设法让它工作的方法:
步骤
- 创建 "normal" 邮寄标签报告:列数与您要创建的邮寄标签格式相匹配的列表。
- 使用预定义值创建报告参数,例如 1-10。
- 在报表设计器中,复制列表中的行数,使您的数量与之前在步骤 2 中创建的参数中指定的数量相同。在我的例子中,我现在有 10 行。
- 隐藏第 2-10 行,使它们不可见,除非用户选择与要显示的行数相对应的参数值。为此创建一个表达式。只需右键单击 rown,在可见性下,有一个基于表达式的 show/hide 选项。
表达式示例
Row 2: =IIF(Parameters!Amount.Value < 2, True, False)
Row 3: =IIF(Parameters!Amount.Value < 3, True, False)
虽然这种方法有效并实现了我的目标,但它并不像我希望的那样优雅。使解决方案动态化会更好。