Apex Trigger для автоматического заполнения поля поиска для нескольких записей - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь обновить поле поиска (Benefit_ID в объекте Customer) с помощью приведенного ниже кода. Код отлично работает для одной записи, но не работает для нескольких записей:

Ошибка: "вызвано: System.DmlException: вставка не удалась. Первое исключение в строке 0; первая ошибка: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY,"

trigger updatelookupfield_Customer on Customer__c (before insert,before update) {
    Set<String> Bundle = new Set<String>();

    for (Customer__c Cust : Trigger.new) {
        Bundle.add(Cust.Bundle__c);
    }
List<Benfit__c> BenfitList = [SELECT id, Bundle__c FROM Benfit__c WHERE Bundle__c IN :Bundle];

    Map<String, Benfit__c> shippingNumToContactMap = new Map<String, Benfit__c>();

    for (Benfit__c c : BenfitList) {
        shippingNumToContactMap.put(c.Bundle__c, c);
    }

    for (Customer__c o : Trigger.new) {
              if (o.Bundle__c != null) {
            o.Benefit_ID__c = shippingNumToContactMap.get(o.Bundle__c).id;
        }
        else {
            o.Benefit_ID__c = null;
        }
    }
    }

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Мне не кажется, что вам действительно нужен Апекс.

Итак, в Customer есть текстовое поле с именем Bundle__c.

У вас также есть пользовательский объект с именем Benfit__c, который также имеет строковое поле с именем Bundle__c.

Вы используете поле Bundle__c на клиенте, чтобы определить, какой Benfit__c к ним относится.

Почему у вас не может быть прямого поиска от Клиента до Benfit__c?

0 голосов
/ 30 апреля 2018

кажется, что проблема будет на линии o.Benefit_ID__c = shippingNumToContactMap.get (o.Bundle__c) .id; Вы пытаетесь получить значение из карты с помощью ключа, но не проверяете, присутствует ли ключ на карте.

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

trigger updatelookupfield_Customer on Customer__c (before insert,before update) {
Set<String> Bundle = new Set<String>();

for (Customer__c Cust : Trigger.new) {
    Bundle.add(Cust.Bundle__c);
}
List<Benfit__c> BenfitList = [SELECT id, Bundle__c FROM Benfit__c WHERE Bundle__c IN :Bundle];

Map<String, Benfit__c> shippingNumToContactMap = new Map<String, Benfit__c>();

for (Benfit__c c : BenfitList) {
    shippingNumToContactMap.put(c.Bundle__c, c);
}

for (Customer__c o : Trigger.new) {
          if (o.Bundle__c != null && shippingNumToContactMap.containsKey(o.Bundle__c)) {
        o.Benefit_ID__c = shippingNumToContactMap.get(o.Bundle__c).id;
    }
    else {
        o.Benefit_ID__c = null;
    }
}
}

Svatá

...