Разработка
08
Сен
0

Задание значения поля Created On

В CRM есть некоторые поля, которые нельзя редактировать в ручную или программно. В частности к ним относятся поле Created On (Дата создания). Когда Вы создаете запись Вы не должны его заполнять – CRM заполнит их автоматически на основе текущей даты и времени.

Но очень часто, когда Вы в CRM импортируете исторические данные, для записей обычно задаются их реальные исторические значения, в том числе для поля Created On. Как уже было сказано поле Created On очень специфическое и не поддается простому редактирования. Но специально для таких случаев разработчики CRM сделали парочку воркэраундов.
Данные импортируются обычно двумя способами: стандартный импорт и создание записей через SDK. Рассмотрим, как с помощи этих двух методов переопределить значение поля Created On…

Импорт

Чтобы импортировать данные в CRM с определенным значением в поле Created on нужно в Роли безопасности пользователя, производящего импорт разрешить привилегию «Переопределение значения создания для записей во время импорта данных». Ну, и собственно произвести импорт, подставив в поле Created on нужное значение.

Примечания:

  • В поле Created On подставится то значение, которое было указано в импортированном файла. А в специальном поле «Дата создания записи» (overriddencreatedon) будет указано текущая дата и время;
  • Поле Created On нельзя обновить у существующих записей – его можно задать только при создании новых записей.



C#

Если Вы хотите задать определенное значение в поле Сreated on при создании записей через SDK, нужно воспользоваться специальным полем Дата создания записи (overriddencreatedon). Например, так:

using System;
using System.Diagnostics;
using System.Linq;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;

namespace CreatedOnTest
{
    public class CreatedOnPlugin : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            // Создаем Возможную сделку
            Entity op = new Entity("opportunity");
            op["overriddencreatedon"] = new DateTime(2012, 1, 1);
            op["name"] = "overriddencreatedon";
            // Заполняем лукап customerid
            op["customerid"] = new EntityReference("account", new Guid("20E25FE5-73E2-E111-B2D5-000C29CDB72E"));
            service.Create(op);
        }
    }
}

В результате новая запись имеет в поле Created On значение, которое было задано для поля Дата создания записи (overriddencreatedon), а в самом поле Дата создания записи (overriddencreatedon) будет задана текущая дата и время.


Комментарии (0)

*

code