Salesforce基于另一个对象将值传递给Multipicklist

Salesforce基于另一个对象将值传递给Multipicklist,salesforce,apex,Salesforce,Apex,好久不见,关于Apex中的多图标列表的快速问题。 条件如下: 1.两个标准对象:任务和帐户,任务链接到帐户。 2.任务中的主题字段包含三个值:A、B、C。 3.此外,帐户中还有一个字段(Multipicklist)包含相同的值a、B、C 每次我都会在某个帐号下创建一个任务,如果我用a输入主题,我希望帐号中的字段可以用a更新; 然后,如果我创建了主题为B的任务,则帐户中的字段应为(a;B) 这是我的代码: if(IsSC && t.Status == PickListValuesS

好久不见,关于Apex中的多图标列表的快速问题。 条件如下: 1.两个标准对象:任务和帐户,任务链接到帐户。 2.任务中的主题字段包含三个值:A、B、C。 3.此外,帐户中还有一个字段(Multipicklist)包含相同的值a、B、C

每次我都会在某个帐号下创建一个任务,如果我用a输入主题,我希望帐号中的字段可以用a更新; 然后,如果我创建了主题为B的任务,则帐户中的字段应为(a;B)

这是我的代码:

if(IsSC && t.Status == PickListValuesStandard.Task_Completed){
                Account student = new Account(Id = t.WhatId);
                student.LatestCompletedActivity__pc = t.Subject;
                student.LatestCompletedActivityDate__pc = t.ActivityDate;
                if(t.Subject.contains('Post OC Call')){
                    student.Center_TouchPoints__c += (';Post OC Call');
                }
                if(t.Subject.contains('Third Week Call')){
                    student.Center_TouchPoints__c += (';Third Week Call');
                }
                update student;
            }
上面我附加的粗体部分应该像我描述的那样工作,不幸的是,它没有

有人能帮我理解这个场景吗?我怎样才能做到这一点


提前感谢,

我刚刚意识到我犯了一个多么大的错误,我的想法是,如果我想更新帐户中的多图标列表,首先,我需要检查它是否为空。以下是最新消息:

if(IsSC && t.Status == PickListValuesStandard.Task_Completed){
                //Account student = new Account(Id = t.WhatId);
                Account student = [select Center_TouchPoints__c from Account where Id=:t.WhatId];
                student.LatestCompletedActivity__pc = t.Subject;
                student.LatestCompletedActivityDate__pc = t.ActivityDate;
                if(student.Center_TouchPoints__c==null){
                    if(t.Subject.contains('Post OC Call')){
                        student.Center_TouchPoints__c = 'Post OC Call;';
                    }
                    if(t.Subject.contains('Third Week Call')){
                        student.Center_TouchPoints__c = 'Third Week Call;';
                    }
                }else if(student.Center_TouchPoints__c.contains ('Post OC Call') && t.Subject.contains('Third Week Call')){
                    student.Center_TouchPoints__c += ';Third Week Call';
                }

                update student;
            }

不过,如果你们有更好的主意,请开枪打我

我刚刚意识到我犯了一个多么大的错误,我的想法是,如果我想更新帐户中的多图标列表,首先,我需要检查它是否为空。以下是最新消息:

if(IsSC && t.Status == PickListValuesStandard.Task_Completed){
                //Account student = new Account(Id = t.WhatId);
                Account student = [select Center_TouchPoints__c from Account where Id=:t.WhatId];
                student.LatestCompletedActivity__pc = t.Subject;
                student.LatestCompletedActivityDate__pc = t.ActivityDate;
                if(student.Center_TouchPoints__c==null){
                    if(t.Subject.contains('Post OC Call')){
                        student.Center_TouchPoints__c = 'Post OC Call;';
                    }
                    if(t.Subject.contains('Third Week Call')){
                        student.Center_TouchPoints__c = 'Third Week Call;';
                    }
                }else if(student.Center_TouchPoints__c.contains ('Post OC Call') && t.Subject.contains('Third Week Call')){
                    student.Center_TouchPoints__c += ';Third Week Call';
                }

                update student;
            }

不过,如果你们有更好的主意,请开枪打我

一种可能使这更灵活的方法是循环检查picklist中的所有可用值,查看任务的主题是否包含该picklist值,以及是否将其添加到选定的picklist值中。这是假设选取列表项的名称或标签与输入到任务主题中的值相匹配。这样,您就可以添加不同的条目或更改选择列表值,而无需更改代码

下面是我认为这会是什么样子

if(IsSC && t.Status == PickListValuesStandard.Task_Completed){
    Account student = [select Center_TouchPoints__c from Account where Id=:t.WhatId];
    student.LatestCompletedActivity__pc = t.Subject;
    student.LatestCompletedActivityDate__pc = t.ActivityDate;

    Schema.DescribeFieldResult fieldDescribe = account.Center_TouchPoints__c.getDescribe();

     //retrieves picklist values
    List<Schema.PicklistEntry> picklistVals = fieldResult.getPicklistValues();    
    String picklistString = ''; 
    for(Schema.PicklistEntry plv : picklistVals){ //Loop through picklist values
        if(t.subject.contains(plv.getValue()) && !student.Center_TouchPoints__c.contains(plv.getValue())) {
            //If if this picklist value is in the subject and it hasn't been selected already add it.
            picklistString += (plv.getValue() + '; ');
        }
    }
    if(student.Center_TouchPoints__c == null) 
        student.Center_TouchPoints__c = picklistString.substring(1);
    else 
        student.Center_TouchPoints__c += (';' + picklistString);
    update student;
}

if(IsSC&t.Status==PickListValuesStandard.Task\u已完成){
帐户学生=[从Id=:t.WhatId]的帐户中选择中心接触点c];
学生最近完成的活动\uuu pc=t.科目;
student.LatestCompletedActivityDate\uu pc=t.ActivityDate;
Schema.DescribeFieldResult FieldDescripte=帐户.Center\u接触点\uuuu c.GetDescripte();
//检索选取列表值
List picklistVals=fieldResult.getPicklistValues();
字符串picklistString='';
对于(Schema.PicklistEntry plv:picklistVals){//通过picklist值循环
if(t.subject.contains(plv.getValue())&&!student.Center\u接触点\u\u c.contains(plv.getValue())){
//如果此选取列表值位于主题中且尚未选定,则添加它。
picklistString+=(plv.getValue()+';');
}
}
if(student.Center\u接触点\u\u c==null)
student.Center\u TouchPoints\uu c=picklistString.substring(1);
其他的
student.Center_TouchPoints_uuc+=(“;”+picklistString);
更新学生;
}

希望这有帮助

一种可能使这更灵活的方法是循环检查picklist中的所有可用值,查看任务的主题是否包含该picklist值,以及是否将其添加到选定的picklist值中。这是假设选取列表项的名称或标签与输入到任务主题中的值相匹配。这样,您就可以添加不同的条目或更改选择列表值,而无需更改代码

下面是我认为这会是什么样子

if(IsSC && t.Status == PickListValuesStandard.Task_Completed){
    Account student = [select Center_TouchPoints__c from Account where Id=:t.WhatId];
    student.LatestCompletedActivity__pc = t.Subject;
    student.LatestCompletedActivityDate__pc = t.ActivityDate;

    Schema.DescribeFieldResult fieldDescribe = account.Center_TouchPoints__c.getDescribe();

     //retrieves picklist values
    List<Schema.PicklistEntry> picklistVals = fieldResult.getPicklistValues();    
    String picklistString = ''; 
    for(Schema.PicklistEntry plv : picklistVals){ //Loop through picklist values
        if(t.subject.contains(plv.getValue()) && !student.Center_TouchPoints__c.contains(plv.getValue())) {
            //If if this picklist value is in the subject and it hasn't been selected already add it.
            picklistString += (plv.getValue() + '; ');
        }
    }
    if(student.Center_TouchPoints__c == null) 
        student.Center_TouchPoints__c = picklistString.substring(1);
    else 
        student.Center_TouchPoints__c += (';' + picklistString);
    update student;
}

if(IsSC&t.Status==PickListValuesStandard.Task\u已完成){
帐户学生=[从Id=:t.WhatId]的帐户中选择中心接触点c];
学生最近完成的活动\uuu pc=t.科目;
student.LatestCompletedActivityDate\uu pc=t.ActivityDate;
Schema.DescribeFieldResult FieldDescripte=帐户.Center\u接触点\uuuu c.GetDescripte();
//检索选取列表值
List picklistVals=fieldResult.getPicklistValues();
字符串picklistString='';
对于(Schema.PicklistEntry plv:picklistVals){//通过picklist值循环
if(t.subject.contains(plv.getValue())&&!student.Center\u接触点\u\u c.contains(plv.getValue())){
//如果此选取列表值位于主题中且尚未选定,则添加它。
picklistString+=(plv.getValue()+';');
}
}
if(student.Center\u接触点\u\u c==null)
student.Center\u TouchPoints\uu c=picklistString.substring(1);
其他的
student.Center_TouchPoints_uuc+=(“;”+picklistString);
更新学生;
}

希望这有帮助

可爱!绝对应该试一试!谢谢可爱!绝对应该试一试!谢谢