Декомпозиция дат в Dynamics CRM



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



Я хотел бы добавить его, используя вычисляемые поля. Наиболее привлекательным подходом является расширение списка функций , доступных в выражениях вычисляемого поля, и предоставление функции, вызывающей DateTime.ToString или один из его друзей. Не удалось найти документацию по этой теме. Возможно ли это или поддерживается?



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





примечание: Я понимаю, что это, вероятно, плохая идея из-за культуры даты и проблем с презентацией. Но это то, чего хочет бизнес, и единственный выбор-разработать наименее худшее решение.

543   2  

2 ответов:

Вы можете посмотреть на установкуDynamics-365-Workflow-Tools .

После установки можно создать рабочий процесс для запуска при обновлении любого из заданных полей DateTime.

Рабочий процесс будет включать шаг, который использует Шаг "функции даты " из инструментов рабочего процесса. Этот шаг принимает два параметра DateTime (хотя необязательно один) и вычисляет несколько выходных значений, а именно для вашего сценарий:

  • год
  • месяц
  • день

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

Чтобы ответить на мой собственный вопрос, оказалось бы, что список функций для вычисляемых полей не может быть расширен. Выражения вычисляемых полей "компилируются" в скалярные функции, вызываемые выражением вычисляемого столбца в базовой таблице. Эти функции SQL генерируются кодом в Microsoft.Crm.CalculatedField.dll.

Не вдаваясь в слишком много деталей, список функций выражения, по-видимому, связан с перечислением Microsoft.Crm.Workflow.Activities.ExpressionOperator в Microsoft.Crm.dll. Привязка к этому перечислению указывает на список это жестко закодировано.

Для тех, кто нуждается в решении, которое не включает все дополнительные компоненты, содержащиеся в Dynamics-365-Workflow-Tools, вот один:

public class DateFormatter : CodeActivity
{
    public const string DEFAULT_LOCALE = "en-us";

    [Input("Date")]
    [RequiredArgument]
    public InArgument<DateTime> Date
    {
        get;
        set;
    }

    [Input("Locale")]
    [Default(DEFAULT_LOCALE)]
    public InArgument<string> Locale
    {
        get;
        set;
    }

    [Input("Format")]
    public InArgument<string> Format
    {
        get;
        set;
    }

    [Output("Formatted Date")]
    public OutArgument<string> DateAsString
    {
        get;
        set;
    }

    protected override void Execute(CodeActivityContext context)
    {
        DateTime? date = this.Date.Get(context);
        string locale = this.Locale.Get(context);
        string format = this.Format.Get(context);

        if (date.HasValue == false)
        {
            this.DateAsString.Set(context, null);
            return;
        }

        DateTime value = date.Value;
        CultureInfo culture = CultureInfo.GetCultureInfo(locale ?? DEFAULT_LOCALE);
        string dateAsString = (format == null) ? value.ToString(culture) : value.ToString(format, culture);
        this.DateAsString.Set(context, dateAsString);
    }
}

Comments

    Ничего не найдено.