Salesforce передает значения в Multipicklist на основе другого объекта - PullRequest
1 голос
/ 09 октября 2019

давно не виделись, быстрый вопрос о мультипиклисте в 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;
            }

Жирная часть, которую я прикрепил вышедолжен работать так, как я описал, к сожалению, это не так.

Может кто-нибудь помочь мне понять сценарий? Как мне этого добиться?

Заранее спасибо,

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Один из способов сделать это немного более гибким - это просмотреть все доступные значения в списке выбора и посмотреть, содержит ли тема задачи это значение списка выбора и добавит ли оно это к выбранным значениям списка выбора. Это предполагает, что имя или метка записей списка выбора соответствуют значениям, введенным в тему задачи. Таким образом, вы сможете добавлять разные записи или изменять значения списка выбора без изменения кода. Вот пример получения и циклического перебора всех значений списка выбора

вот как я думаю, это выглядело бы ...

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;
}

Надеюсь, это поможет!

0 голосов
/ 09 октября 2019

Я только что понял, какую большую ошибку я совершил, вот мысль: если я хочу обновить мультиплейлист в учетной записи, первым делом мне нужно проверить, является ли он нулевым или нет. Вот обновление:

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;
            }

Однако, если у кого-нибудь из вас есть идея получше, пожалуйста, пристрелите меня!

...