salesforce 比较标准对象和自定义对象并赋值

salesforce compare standard obj and custom object and assign value

我有自定义对象 "A" 和标准对象大小写。 Case standard obj 具有对自定义 obj "A" 的查找。两个对象之间有一个字段称为 Customer_ID__c。如果 "Case.Custom_Id__c" 匹配自定义对象 "A" 中的记录,我编写了一个触发器(在插入之前、更新之前)将案例记录关联到正确的现有自定义对象 "A" 记录。不幸的是,它没有发生,我不知道去哪里找。

trigger IAACaseRelateASAP on Case (before insert, before update) {

    Id recordtypes = [Select Id, name
                              From RecordType 
                              Where SobjectType = 'Case'
                              AND Name = 'I Buy'
                              LIMIT 1].Id;

    Set<String> casId = new Set<String>();
    for(Case cs : Trigger.new)
    {
      if(cs.RecordtypeId == recordtypes && cs.Type == 'Contact Me')
      {
        if(cs.custm_Obj_A_Name__lookupfield__c == null && (cs.Customer_ID__c != null || cs.Customer_ID__c !='0'))
        {
          casId.add(cs.Customer_ID__c);
        }
      }
    }
    system.debug('Case Set Ids' + casId);
    List<A__c> aList = [Select Customer_ID__c, Id
                                         From A__c
                                         Where Customer_ID__c IN: casId
                                         AND
                                         A__c != 'Provider'];
    System.Debug('equals' + aList);

    Map<String, A__c> aMapId = new Map<String, A__c>();                  
    for(A__c aAcct : aList)
    {
      aMapId.put(aAcct.Customer_ID__c, aAcct);
    } 
    for(Case cas : Trigger.new)
    {
      if(cas.RecordtypeId == recordtypes && cas.Type == 'Contact Me')
      {
        if(cas.custm_Obj_A_Name__lookupfield__c == null && (cas.Customer_ID__c != null || cas.Customer_ID__c !='0'))
        {
          if(aMapId.containsKey(cas.Customer_ID__c))
          {
            A__c aAcct = aMapId.get(cas.Customer_ID__c);
            System.Debug('Case IAA ASAP Account value: ' + asapAcct);
          }
        }
      }
    }  

}

最好在遍历您的案例以构建您的 Customer_ID__c id 集时同时构建带有客户 id 的案例列表,这样您就不必遍历整个新列表第二次。一般来说,触发器还有其他几个问题,但我会忽略这些,只关注你问的问题。认为你的问题是你实际上没有在这个区域设置 case 字段:

      if(aMapId.containsKey(cas.Customer_ID__c))
      {
        A__c aAcct = aMapId.get(cas.Customer_ID__c);
        System.Debug('Case IAA ASAP Account value: ' + asapAcct);
      }

应该是:

      if(aMapId.containsKey(cas.Customer_ID__c))
      {
        cas.custm_Obj_A_Name__lookupfield__c = aMapId.get(cas.Customer_ID__c).Id;
      }