2015-03-06 3 views
0

У меня есть вопрос, я надеюсь, что смогу четко рассказать о своей проблеме.Salesforce Parent ID Trigger

Что касается parentfunction на счете, я добавил два поля на счет ParentId (15) и ParentIDLong (18). Поле ParentID представляет собой формулу с кодом ниже.

IF(LEN(Parent.Id) < 1, Id, 
IF(LEN(Parent.Parent.Id) < 1, (Parent.Id), 
IF(LEN(Parent.Parent.Parent.Id) < 1, (Parent.Parent.Id), 
IF(LEN(Parent.Parent.Parent.Parent.Id) < 1, (Parent.Parent.Parent.Id), 
IF(LEN(Parent.Parent.Parent.Parent.Parent.Id) < 1, (Parent.Parent.Parent.Parent.Id), 
IF(LEN(Parent.Parent.Parent.Parent.Parent.Parent.Id) < 1, (Parent.Parent.Parent.Parent.Parent.Id), 
IF(LEN(Parent.Parent.Parent.Parent.Parent.Parent.Parent.Id) < 1, (Parent.Parent.Parent.Parent.Parent.Parent.Id), 
IF(LEN(Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Id) < 1,(Parent.Parent.Parent.Parent.Parent.Parent.Parent.Id),">7")))))))) 

Теперь мне нужно ParentLongID, к сожалению, его невозможно изменить формулу, потому что я получаю сообщение об ошибке, которое «формула слишком велика».

Я написал триггер, который отправил длинный идентификатор в поле ParentLongID (код ниже).

Trigger SetParentIDLong on Account (before update) { 

FOR (Account Acc : Trigger.new) { 

    Account oldAcc = Trigger.oldMap.get(Acc.Id); 

String idStr = Acc.ParentID__c; 
Id idVal = idStr; 
idStr = idVal; 

If (oldAcc.ParentId__c != Acc.ParentID__c) { 
    Acc.ParentIdLong__c = idStr; 
} 

Пока все хорошо, оно работает, если я создаю иерархию сверху вниз.

Пример:

MotherCompany ParentIDLong: пусто

Daughter1 ParentIDLong: 001b000000XUTQAAA5

Daughter2 ParnetIDLong: 001b000000XUTQAAA5

Но если добавить MotherMotherCompany

Пример:

MotherMotherCompany ParentIDLong: пусто

MotherCompany ParentIDLong: 001m000000Ft35yAAB

Daughter1 ParentIDLong: 001b000000XUTQAAA5

Daughter2 ParnetIDLong: 001b000000XUTQAAA5

Триггер не работает, потому что триггер изменил только ParentIDLong в Mothercompany.

Его можно изменить с помощью спускового механизма всех других компаний?

Спасибо, Sascha

+0

Im open для любых других идей, пожалуйста, помогите мне. – peXeq

ответ

0

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

так:

Trigger SetParentIDLong on Account (before update) { 

FOR (Account Acc : Trigger.new) { 
Account oldAcc = Trigger.oldMap.get(Acc.Id); 

String idStr = Acc.ParentID__c; 
Id idVal = idStr; 
idStr = idVal; 

If (oldAcc.ParentId__c != Acc.ParentID__c) { 
    Acc.ParentIdLong__c = idStr; 
    update Acc; //this line would call again your trigger 
       //recursively until the last Account 
} 

попробовать и дайте нам знать, как это пошло

+0

К сожалению, у меня есть ошибка - Ошибка: триггер Apex SetKonzernIDLong вызвал непредвиденное исключение, обратитесь к администратору: SetKonzernIDLong: выполнение BeforeUpdate вызвано: System.SObjectException: статус DML не может работать на trigger.new или trigger.old: Trigger.SetKonzernIDLong – peXeq

+0

Тогда позвольте мне поработать над другим подходом к этому, я также попробую, чтобы мы могли убедиться, что это работает. Я отправлю вам еще раз, чтобы показать вам новое решение. – Levementum

+0

Хорошо, спасибо за вашу поддержку. – peXeq

0

OK Давайте попробуем это:

Trigger SetParentIDLong on Account (before update) { 
    List<Id> accids = new List<Id>(); 

    for(Account a : Trigger.New){ 
     accids.add(a.Id); 
    } 

    List<Account> accounts = [SELECT Id,ParentId__c FROM Account WHERE Id IN :accids]; 

    for(Account child : accounts){ 
     Account oldAcc = Trigger.oldMap.get(child.Id); 

     String idStr = child.ParentID__c; 
     Id idVal = idStr; 
     idStr = idVal; 

     if(oldAcc.ParentId__c != child.ParentID__c) { 
     child.ParentIdLong__c = idStr; 
     update child; //this line would call again your trigger 
        //recursively until the last Account 
     } 

    } 
} 

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

Посмотрим, работает ли это.

Держите меня в курсе

+0

Спасибо за ваш код, но теперь ничего не происходит, ParentIdLong__c остается пустым во всех учетных записях. – peXeq

+0

У вас есть идеи? – peXeq

+0

Привет, Левенментум, знаете ли вы еще несколько идей? Я не знаю, как я могу исправить эту проблему. Благодарю. – peXeq

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