我正在尝试构建一个简单的邮件标签报告,该报告在运行时允许用户选择为每条记录生成的标签数量。
Solutionwize 我认为报告参数是用户选择要生成的每条记录的标签数量的方法,但在那之后我有点卡住了。
标签本身将仅包含 1 列,即一个 ID。
由于它是 Dynamics 365 CRM 在线环境,我必须在不使用 SQL 的情况下找到解决方案。我仅限于使用 FetchXML 和报告服务 (SSDT)。
任何帮助表示赞赏。
我正在尝试构建一个简单的邮件标签报告,该报告在运行时允许用户选择为每条记录生成的标签数量。
Solutionwize 我认为报告参数是用户选择要生成的每条记录的标签数量的方法,但在那之后我有点卡住了。
标签本身将仅包含 1 列,即一个 ID。
由于它是 Dynamics 365 CRM 在线环境,我必须在不使用 SQL 的情况下找到解决方案。我仅限于使用 FetchXML 和报告服务 (SSDT)。
任何帮助表示赞赏。
我不是 SSRS 专家,所以我不能告诉你如何根据报告中的参数做一个重复值(不使用 CRM Online 报告中禁止的报告中的编码),但我可以看到的非常简单的解决方案是在 CRM 中创建一个特殊的实体,我们称之为标签。它应该有两个字段(与默认名称字段不同)- WholeNumber 字段(我们称之为 Count)和 Lookup 字段(您正在打印此标签的实体)。现在只需为此 Label 实体的 Post-RetrieveMultiple 创建一个插件 - 在此插件中,基于提供的 Count 和 Lookup 实体引用,您只需创建一个 Label 实体列表并将其放入您的 OutputParameter。接下来,它只是使用适当的 FetchXML 创建 SSRS 报告(它将具有用户提供的参数,并简单地记录您正在为其运行报告的 id)。您的插件将根据需要返回尽可能多的记录,因此您只需抓住它们并在 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;
}
请记住,要使其正常工作,它必须在 RetrieveMultiple 消息的 Post-Operation 上。
我建议放弃报告方法,而是创建一个智能网络资源,该资源将接受 fetchxml 以选择记录(纯 xml 或对现有视图的引用)和计数参数。
如果要创建的每条记录的邮寄标签数量合理低,则此方法有效。如果您需要为每条记录创建数百个标签,我会说这个解决方案太麻烦了。
这就是我设法让它工作的方法:
脚步
表达式示例
Row 2: =IIF(Parameters!Amount.Value < 2, True, False)
Row 3: =IIF(Parameters!Amount.Value < 3, True, False)
虽然这种方法有效并实现了我的目标,但它并不像我希望的那样优雅。使解决方案动态化会更好。
我一直无法找到一种简单的方法来做到这一点。虽然我怀疑存在一些创造性的解决方案,但我认为它与 FetchXML 无关——即它会涉及使 SSRS 根据参数中的数字重复一个值。
我还怀疑在同一份报告中重复输出任意次数可能会产生对齐挑战。
与其参与报表参数和 SSRS 编程,不如考虑制作一个简单、对齐良好的报表,生成一个标签。当用户去打印时,他们可以使用打印对话框来指定他们想要多少份。