2016-05-05 25 views
0

So habe ich zwei benutzerdefinierte Objekte: Das Workload_Unit_Score__c Objekt ist eine Zuordnungstabelle mit einem Referenzfeld (WLU_Combination_Value__c) und einem Wert (Score__c) für jede Zeilenreferenz. Wir erhalten täglich Anfragen, um vertragliche Vereinbarungen zu bearbeiten. Ein neuer Datensatz wird für jede Anforderung im Objekt Agreement_Title__c erstellt. Jedem Datensatz wird basierend auf seinem WLU_Combination_Value__c ein Workload_Unit_Score__c zugewiesen.Apex Code zum Abrufen von Werten wie vlookup, aber in Salesforce?

ich im Grunde so etwas wie ein Excel-vlookup tun will - jedes Mal, wenn wir eine Anfrage und eine neue Agreement_Title__c Datensatz erhalten erstellt wird, möchte ich einen Trigger, um die WLU_Combination_Value__c zu nehmen, eine Score__c vom Workload_Unit_Score__c Objekt retreive und bevölkere, dass Wert im Feld Workload_Unit_Score__c. Die zwei benutzerdefinierten Objekte sind nicht verwandt. Im Folgenden finden Sie eine Zusammenfassung der Felder.

-Workload_Unit_Score__c Objekt (aussortieren wie eine "Definition" oder "reference" table)

  • Namen
  • MiscField1
  • MiscField2
  • MiscField3
  • WLU_Combination_Value__c (a Formel Feld, das verkettet MiscField1 + MiscField2 + MiscField3)
  • Score__c (eine Punktzahl des ignated für jedes eindeutigen WLU_Combination_Value__c)

-Agreement_Title__c Objekt (vertragliche Vereinbarungen)

  • Namen
  • MiscField1
  • MiscField2
  • MiscField3
  • WLU_Combination_Value__c (ein Formel-Feld, die MiscField1 verkettet + MiscField2 + MiscField3)
  • Workload_Unit_Score__c (eine Partitur zu jedem einzigartigen WLU_Combination_Value__c gegeben)

Ich habe den Code unten laufen, aber ich erhalte „Fehler Kompilieren: geschweifte Klammer erwartet,‚‘in Zeile 22 Spalte 0 gefunden“ Aber ich denke, dass es sein kann, andere Probleme mit dem Code, der nicht funktioniert.

Kann jemand helfen? Gibt es einen einfacheren Weg dies zu tun?

trigger updateWLUvalue on Agreement_Title__c (before insert) { 

    Map<String,Agreement_Title__c[]> relatedScores = new Map<String, Agreement_Title__c[]>(); 

    for (Agreement_Title__c agmtt : trigger.new) { 
     if(!relatedScores.containsKey(agmtt.WLU_Combination_Value__c)){ 

      relatedScores.put(agmtt.WLU_Combination_Value__c, new Agreement_Title__c[]{}); 
    } 

    relatedScores.get(agmtt.WLU_Combination_Value__C).add(agmtt); 

    for(Workload_Unit_Score__c wus : [Select Id, Score__c, WLU_Combination_Value__c 
              FROM Workload_Unit_Score__c 
              WHERE WLU_Combination_Value__c 
              IN : relatedScores.keySet()]){ 
     for(Agreement_Title__c agmtt2 : relatedScores.get(wus.WLU_Combination_Value__c)){ 
      agmtt.Workload_Unit_Score__c = wus.Score__c; 
      } 
     } 
} 

Antwort

0

Die erste Sache ist die fehlende close-curlybracket am Ende. Ihre erste IF-Anweisung wurde nicht geschlossen. Aufgeklebter Code:

trigger updateWLUvalue on Agreement_Title__c (before insert) { 

    Map<String,Agreement_Title__c[]> relatedScores = new Map<String, Agreement_Title__c[]>(); 

    for (Agreement_Title__c agmtt : trigger.new) { 
     if(!relatedScores.containsKey(agmtt.WLU_Combination_Value__c)) { 

      relatedScores.put(agmtt.WLU_Combination_Value__c, new Agreement_Title__c[]{}); 
     } 
    } 

    relatedScores.get(agmtt.WLU_Combination_Value__C).add(agmtt); 

    for(Workload_Unit_Score__c wus : [Select Id, Score__c, WLU_Combination_Value__c 
              FROM Workload_Unit_Score__c 
              WHERE WLU_Combination_Value__c 
              IN : relatedScores.keySet()]) 
    { 
     for(Agreement_Title__c agmtt2 : relatedScores.get(wus.WLU_Combination_Value__c)) { 
      agmtt.Workload_Unit_Score__c = wus.Score__c; 
     } 
    } 
}