Как обновить пользовательское свойство Dynamics CRM 4.0 в контексте IPlugin - PullRequest
1 голос
/ 12 августа 2011

Я имею дело с пользовательским (расширенным) свойством сущности по умолчанию (email) в контексте плагина, и, несмотря на то, что подход работает для создания (.Add()), он не для обновлений (и не является.Update() метод связан).Вот фактический код:

public class EmailPreCreateHandler : IPlugin
{
        DynamicEntity dynamicEntity;

        if (context.InputParameters.Properties.Contains("Target")
            && context.InputParameters.Properties["Target"] is DynamicEntity)
        {
            dynamicEntity = (DynamicEntity)context.InputParameters.Properties["Target"];

            if (dynamicEntity.Name != EntityName.email.ToString()) { return; }
        }
        else { return; }

        try
        {
            if (dynamicEntity.Properties.Contains("new_property1")
                || dynamicEntity.Properties.Contains("new_property2"))
            {
                var new_property3 = new CrmBooleanProperty("new_property3", new CrmBoolean(true));
                dynamicEntity.Properties.Add(new_property3);
            }
        }
        catch (SoapException exception)
        {
            throw new InvalidPluginExecutionException(
                "An error occurred with the plug-in.", exception);
        }
    }
}

Мне было интересно, если я должен сделать что-то подобное, чтобы заставить это работать?

dynamicEntity.Properties.Remove(new_property3);
dynamicEntity.Properties.Add(new_property3);

Детали регистрации

(Сборка)

  • Расположение: база данных

(шаг)

  • Сообщение: Создать
  • Основной объект: электронная почта
  • Вторичный объект: нет
  • Атрибуты фильтрации: Все атрибуты
  • Запуск в контексте пользователя: Вызов пользователя
  • ВыполнениеЗаказ: 1
  • Конвейер событий. Стадия исполнения: Предварительная стадия

Буду очень признателен за любые отзывы.Большое спасибо заранее,

1 Ответ

2 голосов
/ 12 августа 2011

Похоже, вы добавили бы / обновили new_property3, если присутствуют new_property1 или new_property2.

if (dynamicEntity.Properties.Contains("new_property1") || dynamicEntity.Properties.Contains("new_property2"))
{
  dynamicEntity["new_property3"] = new CrmBoolean(true);
}

Если вы открываете dynamicEntity["new_property3"] для write доступ к нему либо создаст свойство, если оно не существует, либо перезапишет существующее значение.

...