Разложение дат в Dynamics CRM - PullRequest
0 голосов
/ 23 мая 2018

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

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

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


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

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Чтобы ответить на мой собственный вопрос, может показаться, что список функций для вычисляемых полей не может быть расширен.Вычисляемые выражения полей «компилируются» в скалярные функции, которые вызываются выражением вычисляемого столбца в базовой таблице.Эти функции 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);
    }
}
0 голосов
/ 24 мая 2018

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

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

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

  • Год
  • Месяц
  • День

Ваш последний шаг рабочего процесса при необходимости установит поля вашего разложенного объекта равными одному из трех выходных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...