Рассчитать продолжительность проекта в Dynamics CRM 365

В нашей Dynamics 365 для каждого проекта мы показываем поле даты Дата создания. Это поле по сути представляет дату создания проекта.

Дата создания

Однако мы должны показывать продолжительность Project.

Как и во многих других местах, у нас есть это в Stackoverflow:

  • Спросил n минуту назад
  • Спросил n день назад
  • Спросил n неделю назад
  • Спросил n месяц назад
  • и так далее...

Мы хотели показать:

  • Создано n минуту назад
  • Создано n день назад
  • Создано неделю назад
  • Создано месяц назад
  • и так далее...

Как рассчитать продолжительность проекта в Dynamics CRM 365?

Запуск заданий для нас не вариант


person Zameer Ansari    schedule 08.11.2016    source источник


Ответы (2)


Если вам просто нужны поля, рассчитанные для целей отображения, вы можете сделать что-то вроде этого

  1. Создайте свои новые поля
  2. Зарегистрируйте новый плагин для Post Retrieve и RetrieveMultiple объекта Project
  3. Скопируйте логику из приведенного ниже кода, поменяв местами имена сущностей / полей там, где это необходимо.

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

Единственным недостатком здесь является то, что, поскольку эти поля вычисляются непосредственно в CRM, вы не сможете писать какие-либо отчеты SSRS, поскольку данные не сохраняются в базе данных. Если вы реализуете это, а затем выполните SQL-запрос к этим полям, вы обнаружите, что все они равны нулю. Эти поля просто действуют как заполнители. (см. скриншоты)

protected void ExecutePreValidateContactRetrieve(LocalPluginContext localContext)
    {
        if (localContext == null)
        {
            throw new ArgumentNullException("localContext");
        }

        IPluginExecutionContext pluginContext = localContext.PluginExecutionContext;

        if (pluginContext.OutputParameters.Contains("BusinessEntity"))
        {
            Entity target = (Entity)pluginContext.OutputParameters["BusinessEntity"];
            PopulateKPIs(localContext.OrganizationService, target);
        }
        else if (pluginContext.OutputParameters.Contains("BusinessEntityCollection"))
        {
            EntityCollection contacts = (EntityCollection)localContext.PluginExecutionContext.OutputParameters["BusinessEntityCollection"];

            foreach (Entity c in contacts.Entities)
                PopulateKPIs(localContext.OrganizationService, c);
        }
    }

    public void PopulateKPIs(IOrganizationService orgService, Entity contact)
    {
        DateTime createdOn;

        if (!contact.Contains("createdon"))
            createdOn = orgService.Retrieve(contact.LogicalName, contact.Id, new ColumnSet("createdon")).GetAttributeValue<DateTime>("createdon");
        else
            createdOn = contact.GetAttributeValue<DateTime>("createdon");

        TimeSpan diff = DateTime.Now - createdOn;

        contact["mst_secondssincecreation"] = Math.Floor(diff.TotalSeconds).ToString();
        contact["mst_minutessincecreation"] = Math.Floor(diff.TotalMinutes).ToString();
        contact["mst_hourssincecreation"] = Math.Floor(diff.TotalHours).ToString();
    }

Свидетельство:

введите здесь описание изображения  введите описание изображения здесь

person Mark T    schedule 09.11.2016

Я предполагаю, что вам это нужно только в форме. В БД вы, очевидно, храните фактическое созданное на сегодняшний день.

То, как это обычно делается на веб-сайтах, рассчитывается в JS на основе заданной даты и времени. Использование такой библиотеки http://timeago.yarp.com/

То же самое и в CRM. * Создайте простой веб-ресурс, который берет createdon от своего родителя и отображает "timeago", используя приведенный выше скрипт. * Поместите созданное на форму (можно скрыть, не имеет значения). * Поместите веб-ресурс в форму. Добавьте метку и сделайте ее 1 строкой, если хотите, чтобы она выглядела как поле формы.

person kowgli    schedule 15.02.2017