Как заполнить связанное поле поиска CRM 2011

Я хочу создать плагин аудита, который при изменении сущности «контакт», создается сущность «исторический контакт», в которой были все данные старой сущности «контакт» до изменения.

Мой вопрос: если у меня есть поле поиска в разделе «контакт» для «учетных записей», как мне получить этот поиск для конкретной «учетной записи» и поместить его в поле поиска для сущности «исторический контакт»?


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

Сущность «контакт» может иметь пустое поле в поле «имя».

Сущность «исторический контакт» имеет в качестве основного поля «имя», хотя это и не является обязательным.

Если при создании объекта «исторический контакт» нет «имени», возникает ошибка. Не знаю почему.

Нужно ли мне основное поле для создания объекта, даже если для поля указано «без ограничений»?


person user2180786    schedule 16.05.2013    source источник


Ответы (2)


У вас есть два варианта:

1) создайте плагин в следующих строках:

public void Execute(IServiceProvider serviceProvider)
{
    var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    var service = ((IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory))).CreateOrganizationService(context.UserId);

    var originalContact = context.InputParameters["Target"] as Entity;
    var newContact = new Entity("new_historicalcontact");
    if (originalContact.Contains("firstname"))
    {
        newContact.Add("new_firstname", orginalContact["firstname"]);
    }
    if (originalContact.Contains("emailaddress1"))
    {
        newContact.Add("new_emailaddress1", orginalContact["emailaddress1"]);
    }
    if (originalContact.Contains("parentcustomerid"))
    {
        newContact.Add("new_parentcustomerid", orginalContact["parentcustomerid"]);
    }

    //etc etc for other properties
    service.Create(newContact);
}

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

2) использовать готовые функции аудита. Возможно, вы ищете, а может и нет, но вы можете узнать больше об этом здесь и здесь

person glosrob    schedule 16.05.2013

Я не уверен, что понимаю. Вы создаете полную копию контакта, когда что-то меняется? Сделать это довольно просто с помощью сообщения Pre Image в сообщении Post Execute of Update. Предварительное изображение - это снимок контакта до обновления.

Но почему вы не используете предоставленную функцию аудита?

person John Rogerson    schedule 16.05.2013