Получение логического имени сущности

Я использую позднюю привязку, и по мере создания учетной записи я также создаю телефонный звонок. Я также нашел очень полезный пример, делающий почти то же самое. Единственное, что меня смущает, это следующие строки:

if (context.OutputParameters.Contains("id"))
{
  Guid id = new Guid(context.OutputParameters["id"].ToString());
  String type = "account";
  followup["regardingobjectid"] = new EntityReference(type, id);
}

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

if (context.OutputParameters.Contains("id"))
{
  Guid id = new Guid(context.OutputParameters["id"].ToString());
  String type = context.OutputParameters["logicalname"] as String;
  followup["regardingobjectid"] = new EntityReference(type, id);
}

но потом я получил сообщение об ошибке, говорящее мне, что такого поля не существует. Имя поля неправильное? Или я использую неправильный подход для получения логического имени сущности (т.е. фактического имени типа сущности, будь то учетная запись, контакты или сумасшедшая задница)?

Кроме того, я не совсем уверен, что OutputParameters является подходящим местом для поиска. Предложения?


person Konrad Viltersten    schedule 14.09.2014    source источник
comment
Как этот плагин зарегистрирован? OutputParameters будет зависеть от сообщения и режима.   -  person Nicknow    schedule 15.09.2014
comment
@Nicknow Он зарегистрирован в Создать и Обновить, после события, синхронизирован. Он открыт для объяснения?   -  person Konrad Viltersten    schedule 15.09.2014


Ответы (1)


Это доступно в context.PrimaryEntityName

ИЗМЕНИТЬ

Вот фрагмент из примера, который проверяет, является ли это учетной записью

// Obtain the target entity from the input parameters.
Entity entity = (Entity)context.InputParameters["Target"];

// Verify that the target entity represents an account.
// If not, this plug-in was not registered correctly.
if (entity.LogicalName != "account")
    return; 

Я думаю, именно поэтому у них жестко закодирован аккаунт (уродливый!)

person MarioZG    schedule 14.09.2014
comment
Верно? Я тоже так думал. Но посмотрите ссылку на MS. Они явно предлагают другой подход. Я получаю информацию в основном из InputParameters, но они идут с OutputParameters. Не могу определить, это просто обман от MS или новый и лучший способ делать что-то в CRM 2013... - person Konrad Viltersten; 14.09.2014
comment
Можете ли вы вставить ссылку? - person MarioZG; 15.09.2014
comment
OutputParameters не являются новыми для 2013 года (msdn. microsoft.com/en-us/library/) — я считаю, что этот ответ правильный, если подключаемый модуль зарегистрирован в Create или Update. - person Nicknow; 15.09.2014
comment
@Nicknow О, извините за неясность. Я знал, что OutputParameters были там раньше. Мне просто никогда не приходилось ими пользоваться. Я всегда выбираю вещи в Target и InputParameters. Раз или два я просматривал различия между входами и выходами, но полученная информация (конечно, правильное определение) не сделала меня умнее. Я также ответил на ваш другой комментарий. :) - person Konrad Viltersten; 15.09.2014
comment
@MarioZG Вы имеете в виду ссылку с примером? Проверьте вопрос еще раз, вторая строка, первые два слова (полезный пример). Возможно, я должен был написать ссылку явно. Извини. - person Konrad Viltersten; 15.09.2014
comment
@KonradViltersten извините, я слепой. Я добавил несколько комментариев, чтобы ответить - person MarioZG; 15.09.2014
comment
Не парься. Мы все делаем это время от времени. В августе прошлого года я задал SQL-вопрос. Самый первый ответивший: Вы не задавали этот вопрос год назад? Вы бы поверили?! Я сделал! Ровно (на неделе) в то же время годом ранее. Понятия не имел. Не нашел в гугле. Стыдно, как бритая собака... :) - person Konrad Viltersten; 15.09.2014