2013-03-29 3 views
0

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

bool? update = entity.GetAttributeValue<bool?>("new_updatecontacts"); 

bool update = entity.GetAttributeValue<bool>("new_updatecontacts"); 

if (update) 
{ 
    .................. 
} 

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

+0

Скорее всего, это значение не существует в сумме свойств объекта - вы уверены, что оно есть? – glosrob

+0

Я создал класс ранней связанной сущности, используя следующую команду: CrmSvcUtil.exe /url:https://URL/XRMServices/2011/Organization.svc/out:Xrm.cs/имя пользователя: ME/password: Пароль/пространство имен: Xrm/serviceContextName: XrmServiceContext. У этого класса был атрибут. Я имею в виду, если это способ проверить. – Jaya

+0

Вы используете это в плагине. Значение может быть не там, если вы явно не захватили его из CRM - попробуйте что-то вроде if (entity.Attributes.Contains («new_updatecontacts»)) {// что-то делать} – glosrob

ответ

2

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

Итак, если вы хотите быть уверены, что у вас есть значение, вам нужно сбежать в CRM, чтобы получить копию.

var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); 
var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
var service = serviceFactory.CreateOrganizationService(context.InitiatingUserId); 

var target = context.InputParameters["Target"] as Entity; 
if (!target.Contains("new_updatecontacts")) 
{ 
    target = service.Retrieve(target.LogicalName, target.Id, new ColumnSet(new [] { "new_updatecontacts", "other_required_fields_here" }); 
} 

//now you know it is present 

Необходимо проверить, существует ли он первым, так как он сохраняет серверный удар.

+0

Привет, Glosrob, Спасибо, что сообщила мне то же самое. Вы были правы, этот атрибут даже не был извлечен в первую очередь для его обновления. Самое забавное: ни одно из значений поля (атрибутов) не получается без кода «service.retrieve». Могу я узнать почему? Я имею в виду, есть ли проблема с организацией.svc или это может быть что-то еще? Потому что значения атрибутов извлекаются время от времени, а не иногда. – Jaya

+0

Проверьте предварительные изображения; вы можете получить все значения объекта из изображения Pre или Post. – Bvrce

+0

Нет проблем с Organization.svc, поскольку glosrob сказал, возвращаются только те измененные атрибуты. Регистрация изображений более эффективна, чем service.Retrieve (проще) – Bvrce

Смежные вопросы