Чистый способ выполнить операцию вставки (обновления или вставки) в Dynamics CRM 4 - PullRequest
0 голосов
/ 06 декабря 2010

В настоящее время я использую следующий код для выполнения 'upsert' в CRM

try
{
 crm.Create(c);
} 
catch (SoapException)
{
 crm.Update(c);
}

Прав ли я, полагая, что этот тип обновления сотрет всю существующую информацию с моего предприятия?И если так, как я могу получить сущность для обновления из хранилища?Мне нужно fetch, retrieve или что-то в этом роде?

Спасибо.

1 Ответ

2 голосов
/ 09 декабря 2010

Использование обработки исключений для управления потоком плохо в 99,99% случаев;в этом случае, среди прочего, потому что вы никогда не знаете, какова истинная причина вашего SoapException.

Более понятный способ - проверить, имеет ли поле идентификатора вашей записи значение;если это так, сделайте обновление, если нет, то создайте (и, возможно, добавьте полученный идентификатор к вашему объекту, если вы будете использовать его дальше).(Мы видели, как Create в записи с идентификатором действительно обновлялся несколько лет назад, но мы так и не смогли его воспроизвести.)

Кроме этого, @ckeller совершенно прав;атрибут, который является нулевым в вашем объекте (потому что он не был в ColumnSet при извлечении из базы данных или не был установлен иначе), не будет затронут в обновлении.

...