Я не знаю, как отсортировать список SObject Case.

У меня есть List<Case> newCases, который я повторяю для цикла, где я сохраняю дела в свой новый List<Case> casesList.

for (Case newCase : newCases) {
            if(newCase.Case_Content__c == '111' && newCase.Status == '24'){
                String cuid = newCase.CUID__c;
                cuidSet.add(cuid);
                casesList.add(newCase);
                casesList.sort(); //TODO sorting by CUID__c
            }
        }

Что мне нужно сделать, так это отсортировать этот новый список по полю CUID__c. Таким образом, дела с одинаковым CUID объединяются.

Спасибо за любую помощь :)

3
David 25 Янв 2019 в 14:26
Тесно связанные, возможно дублирующиеся: salesforce.stackexchange.com/a/161180
 – 
sfdcfox
25 Янв 2019 в 19:52

2 ответа

Для этого вам необходимо реализовать класс Wrapper с сопоставимым интерфейсом.

Чтобы реализовать собственный порядок сортировки для sObject в списках, создайте класс-оболочку для sObject и реализуйте интерфейс Comparable. Класс-оболочка содержит рассматриваемый sObject и реализует метод compareTo, в котором вы указываете логику сортировки.

Например:

global class OpportunityWrapper implements Comparable {

    public Opportunity oppy;

    // Constructor
    public OpportunityWrapper(Opportunity op) {
        oppy = op;
    }

    // Compare opportunities based on the opportunity amount.
    global Integer compareTo(Object compareTo) {
        // Cast argument to OpportunityWrapper
        OpportunityWrapper compareToOppy = (OpportunityWrapper)compareTo;

        // The return value of 0 indicates that both elements are equal.
        Integer returnValue = 0;
        if (oppy.Amount > compareToOppy.oppy.Amount) {
            // Set return value to a positive value.
            returnValue = 1;
        } else if (oppy.Amount < compareToOppy.oppy.Amount) {
            // Set return value to a negative value.
            returnValue = -1;
        }

        return returnValue;       
    }
}

А затем для сортировки просто вызовите метод сортировки после добавления записей в список оболочек.

        OpportunityWrapper[] oppyList = new List<OpportunityWrapper>();
        Date closeDate = Date.today().addDays(10);
        oppyList.add( new OpportunityWrapper(new Opportunity(
            Name='Edge Installation',
            CloseDate=closeDate,
            StageName='Prospecting',
            Amount=50000)));
        oppyList.add( new OpportunityWrapper(new Opportunity(
            Name='United Oil Installations',
            CloseDate=closeDate,
            StageName='Needs Analysis',
            Amount=100000)));
        oppyList.add( new OpportunityWrapper(new Opportunity(
            Name='Grand Hotels SLA',
            CloseDate=closeDate,
            StageName='Prospecting',
            Amount=25000)));

        // Sort the wrapper objects using the implementation of the 
        // compareTo method.
        oppyList.sort();

Итак, в вашем случае CaseWrapper будет сравнивать CUID__c, чтобы определить порядок сортировки в методе compareTo.

Источник: https://developer.salesforce.com /docs/atlas.en-us.apexcode.meta/apexcode/apex_list_sorting_sobject.htm

11
Pranay Jaiswal 25 Янв 2019 в 14:34

Вы можете снова запросить обращения, где идентификаторы IN: caseList, затем Order BY CUID__c ASC/DESC. Да, это смешно, но это работает.

Ура!

2
Chickengwings 19 Сен 2019 в 15:02