Triggers OpportunityContactRole数据访问

Triggers OpportunityContactRole数据访问,triggers,salesforce,apex-code,Triggers,Salesforce,Apex Code,我想从opportunitycontactrole中找到一个人的名字。。。这是可能的还是完全偏离了基准?这是我已经拥有的代码。我意识到从contactRole获取contactID并没有返回姓名。。。我需要什么来取名呢 trigger add_primary_advisor on Opportunity(before update) { for(Opportunity o: Trigger.new){ if (!Trigger.oldMap.get(o.id).IsClosed)

我想从opportunitycontactrole中找到一个人的名字。。。这是可能的还是完全偏离了基准?这是我已经拥有的代码。我意识到从contactRole获取contactID并没有返回姓名。。。我需要什么来取名呢

trigger add_primary_advisor on Opportunity(before update) {

for(Opportunity o: Trigger.new){

     if (!Trigger.oldMap.get(o.id).IsClosed) {
       OpportunityContactRole contactRole =
            [select ContactID from OpportunityContactRole where IsPrimary = true and OpportunityId = :o.id];
       if (contactRole != null) {
         o.Primary_Advisor__c=contactRole.contactID;
       }
     }
   }    
}
//如果Contact.Name不起作用,请尝试获取Contact.FirstName、Contact.LastName
列表名称=新列表();
对于(OpportunityContactRole contactRole)=
[从OpportunityContactRole中选择Contact.Name,其中IsPrimary=true,OpportunityId=:o.id]){
name.add(contactRole.Contact.name)
}

当我尝试将该查询的结果分配给字符串列表时,我得到一个错误,表示它正在返回OpportunityContactRolesSF查询结果返回类型为Sobject的列表,因此您将无法执行此操作。我已经编辑了上面的代码以满足您的需要
 //If Contact.Name doesn't works try fetching Contact.FirstName, Contact.LastName 
   List<String> names = new List<String>();
    for(OpportunityContactRole contactRole =
        [select Contact.Name from OpportunityContactRole where IsPrimary = true and OpportunityId = :o.id]){
      names.add(contactRole .Contact.name)
  }