Использовать параметр для управления количеством меток malings для отчета на основе FetchXML?

Я пытаюсь создать простой отчет о почтовой метке, который во время выполнения позволяет пользователю выбирать количество меток, которые будут созданы для каждой записи.

Solutionwize Я думаю, что параметр отчета - это способ, с помощью которого пользователь может выбрать количество меток для каждой записи, которое будет сгенерировано, но после этого я как бы застрял.

Сам ярлык будет содержать только 1 столбец, идентификатор.

Поскольку это онлайн-среда Dynamics 365 CRM, мне нужно найти решение без использования SQL. Я могу использовать только FetchXML и службы отчетов (SSDT).

Любая помощь приветствуется.




Ответы (4)


Я не эксперт SSRS, поэтому я не могу сказать вам, как сделать повторяющееся значение на основе параметра в отчете (без использования кодирования в отчете, что запрещено в отчетах CRM Online), но довольно простое решение, которое я вижу, это создание в CRM специальной Entity, назовем ее Label. Он должен иметь два поля (отдельно от поля имени по умолчанию) - поле WholeNumber (назовем его Count) и поле Lookup (объекта, для которого вы печатаете эти этикетки). Теперь просто создайте плагин для Post-RetrieveMultiple этого объекта Label — в этом плагине на основе предоставленной ссылки на объект Count and Lookup вы просто создадите список объектов Label и поместите его в свой OutputParameter. Далее нужно просто создать отчет SSRS с правильным FetchXML (который будет иметь параметр, предоставленный пользователем, и просто записать идентификатор, для которого вы запускаете отчет). Ваш плагин будет возвращать столько записей, сколько вы хотите, поэтому вы просто берете их и отображаете в своем отчете в табликсе. Чтобы дать вам представление о том, о чем я говорю, вот пример кода для плагина:

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-Operation of RetrieveMultiple.

person Pawel Gradecki    schedule 27.07.2017

Я бы предложил отказаться от подхода к отчету, чтобы вместо этого создать интеллектуальный веб-ресурс, который будет принимать fetchxml для выбора записей (либо простой xml, либо ссылку на существующее представление) и параметр count.

person Jonas Rapp    schedule 02.08.2017
comment
Это не плохая идея! Это был бы гибкий способ решения проблемы, а не нарушение законов физики (crm). - person pieeetr; 03.08.2017

Это работает, если количество почтовых ярлыков на запись для создания достаточно мало. Если вам нужно создать сотни ярлыков для каждой записи, я бы сказал, что это решение слишком громоздко.

Вот как мне удалось заставить его работать:

Шаги

  1. Создайте «обычный» отчет по почтовым ярлыкам: список с количеством столбцов, соответствующим формату почтовых ярлыков, который вы хотите создать.
  2. Создайте параметр отчета с предустановленными значениями, например 1–10.
  3. В дизайнере отчетов продублируйте количество строк в вашем списке, чтобы у вас было то же количество, которое вы указали ранее в параметре, созданном на шаге 2. В моем случае у меня теперь 10 строк.
  4. Скройте строки 2–10, чтобы они не были видны, пока пользователь не выберет значение параметра, соответствующее количеству отображаемых строк. Создайте выражение для этого. Просто щелкните правой кнопкой мыши на строке, и в разделе видимости появится возможность показать/скрыть на основе выражения.

Пример выражения

   Row 2: =IIF(Parameters!Amount.Value < 2, True, False)
   Row 3: =IIF(Parameters!Amount.Value < 3, True, False)

Хотя этот подход работает и достигает моей цели, это не такое элегантное решение, на которое я надеялся. Было бы лучше сделать решение динамическим.

person pieeetr    schedule 03.08.2017

Я не смог найти простой способ сделать это. Хотя я подозреваю, что существует какое-то творческое решение, я думаю, что оно не связано с FetchXML, то есть оно будет включать в себя повторение значения SSRS на основе числа в параметре.

Я также подозреваю, что повторение вывода произвольное количество раз в одном и том же отчете может привести к проблемам с выравниванием.

Вместо того, чтобы связываться с параметром отчета и программированием SSRS, рассмотрите возможность создания простого, четко выровненного отчета, который создает одну метку. Когда пользователи отправляются на печать, они могут использовать диалоговое окно печати, чтобы указать, сколько копий они хотят.

person Aron    schedule 26.07.2017
comment
Я считаю, что вы правы, что это может быть не связано с FetchXML, но несколько примеров, которые я нашел во время поиска в Google, включают изменение SQL-запроса с помощью UNIONS и т. д. Вот почему я хотел упомянуть, что я должен использовать FetchXML. - person pieeetr; 26.07.2017
comment
Да, я тоже видел эти SQL-объединения и немного поэкспериментировал с атрибутом top в FetchXML, но безуспешно. - person Aron; 26.07.2017
comment
Что касается последнего предложения в вашем ответе: я не могу пойти по этому пути, поскольку пользователи могут захотеть распечатать, скажем, 20 копий одной этикетки. Это будет 20 страниц с 1 меткой на каждой странице, что не соответствует ожидаемому поведению отчета. - person pieeetr; 26.07.2017
comment
ХОРОШО. Какова ситуация с печатью этикеток? Используют ли они листы с несколькими этикетками, отдельные этикетки или настоящий принтер этикеток? Я предполагаю, что мой ответ предполагает один из двух последних вариантов. - person Aron; 26.07.2017
comment
Это первый из трех: листы с несколькими этикетками, поэтому мы хотим максимально использовать эти листы, чтобы не тратить листы с пустыми этикетками. - person pieeetr; 27.07.2017