Обновите поле Entity в CRM, используя C# - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь обновить значение поля сущности в CRM, используя C#, но я не уверен, как мне это сделать.

Ниже приведен мой текущий код:

var helper = new CRMConnection();
var service = helper.OpenConnection();

var entiyRef = new Entity("financialaid");
string fetchXML = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
                      <entity name='financialaid'>
                        <attribute name='financialaidid' />
                        <attribute name='emailcontent' />
                      </entity>
                    </fetch>";

var retrieved = service.RetrieveMultiple(new FetchExpression(fetchXML));
if (retrieved != null && retrieved.Entities.Count > 0){
    for (var k = 0; k < retrieved .Entities.Count; i++){
        var emailContent = retrieved .Entities[i].GetAttributeValue<string>("emailcontent");
        entiyRef["emailcontent"] = "test";
        service.Update(entiyRef);
    }
}

Приведенный выше код вернул более 5000 записей, которые, как я полагаю, связаны с каждой моей записью в CRM. Но я просто пытаюсь обновить автономное поле в объекте.

После этого он обнаружил следующую ошибку и завершил работу.

Возникло исключение: 'System.ServiceModel.FaultException`1' в Microsoft.Xrm.Sdk.dll

Могу ли я узнать, как правильно обновить поле в CRM с помощью Fetch XML?

attributeId = 0AB038CE-E57E-EA11-A811-000D3AA3E77C
entityId = b6abe6f6-a876-4a80-87d6-2f1b179d437f

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Первая проблема заключается в том, что вы создаете экземпляр entityRef как new Entity("financialaid"), но никогда не назначаете свойство Id этого объекта, поэтому вызов service.Update(entityRef) попытается обновить запись объекта financialaid, который имеет financialaidid = Guid.Empty, который не должен существовать.

Циклирование результатов можно значительно упростить, используя некоторые выражения Linq или просто foreach. Цикл также не имеет смысла, так как вы обновляете одну и ту же запись каждый раз (финансовая запись с пустым идентификатором).

Если то, что вы пытаетесь выполнить, sh, это обновить каждую запись сущности financialaid и установите для атрибута emailcontent значение «test», поместите его в l oop:

var entityRef = new Entity(retrieved.Entities.LogicalName, retrieved.Entities.Id);
entityRef["emailcontent"] = "test";
service.Update(entityRef);

Обратите внимание, что Fetch XML является только языком запросов , вы не можете использовать Выбрать XML для обновления записей. Думайте об этом как о выражении select SQL.

Наконец, если вы просто хотите массово обновить все записи financialaid для установки значения поля, я бы рекомендовал использовать для этого существующий инструмент вместо записи одноразовое приложение, чтобы сделать это. В этом случае инструмент Bulk Data Updater в XrmToolBox сделает эту работу.

0 голосов
/ 15 апреля 2020

Вы создаете поле emailContent в неправильном объекте. Если у вас более 5000 записей в этой сущности, эта сущность, скорее всего, будет хранить транзакционные данные.

Я бы предложил вам использовать пользовательский объект конфигурации (если есть, создать объект конфигурации), который имеет ключевое поле и поле значения.

Присвойте ключу уникальное имя, а затем сохраните таблицу html в этом поле значения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...