Архитектура данных контроллера и страницы - PullRequest
0 голосов
/ 02 октября 2018

Имеет ли Salesforce возможность отображать таблицу следующим образом:

См. Рисунок

Например, данные - это карта, где ключ - сотрудник, а значение - список.отчетов.

В таблице должно быть указано, какие сотрудники не заполняли отчет за последние 3 месяца.

В отчете есть поле Искать сотрудника и месяц.

Какиспользовать апекс: повторить в этом случае?

КОНТРОЛЛЕР

podchinennie = false;

lastMonths = new List<String>();
 lastYears = new List<Integer>();

for (Integer i = 0; i < 3; i++) {
    String num = String.valueOf(Date.today().addMonths(-i).Month());
    if (num.length() == 1) num = '0' + num;
    lastMonths.add(num);
    if (!lastYears.contains(date.today().addMonths(-i).year())) {
        lastYears.add(date.today().addMonths(-i).year());
    }
}

lastMonths.sort();
lastYears.sort();
System.debug(lastMonths);
System.debug(lastYears);

 mrlist = [
        select Id, Name,CreatedById,
                TERF_MR_month__c, TERF_MR_year__c,
                TERF_MR_EmployeeFullName__c, TERF_MR_EmployeeEmail__c, TERF_MR_Status__c
        from TERF_MR__c
        where CreatedById = :UserInfo.getUserId() OR TERF_MR_EmployeeEmail__c = :UserInfo.getUserEmail()
        order by CreatedDate desc
];
empsReportList = [
        select Id, Name,
                TERF_MR_month__c, TERF_MR_year__c,
                TERF_MR_EmployeeFullName__c,
                TERF_MR_EmployeeEmail__c,
                TERF_MR_Status__c,
                TERF_MR_EmployeeManagerEmail__c,
                TERF_MR_monthNumber__c
        from TERF_MR__c
        where TERF_MR_EmployeeManagerEmail__c = :UserInfo.getUserEmail() AND TERF_MR_monthNumber__c IN:lastMonths AND TERF_MR_year__c IN:lastYears
        order by CreatedDate desc
];

List<TERF_Employee__c> emps = [SELECT Name, TERF_EMP_Manager__r.TERF_EMP_Email__c  From TERF_Employee__c WHERE TERF_EMP_Manager__r.TERF_EMP_Email__c =: UserInfo.getUserEmail()];

Set<String> employees = new Set<String>();
if (!emps.isEmpty()) {
    for (TERF_Employee__c emp : emps) {
        employees.add(emp.Name);
    }
}

if (empsReportList.size() > 0 && employees.size() > 0) {
    empMap = new Map<String, Id[]>();
    for (TERF_MR__c mr : empsReportList) {
        for (String emp : employees) {
            if (mr.TERF_MR_EmployeeFullname__c == emp) {
                if (empMap.keySet().contains(emp)) {
                    if (mr.TERF_MR_monthNumber__c == lastMonths[0]) {
                        empMap.get(emp)[0] = mr.Id;
                    } else if (mr.TERF_MR_monthNumber__c == lastMonths[1]) {
                        empMap.get(emp)[1] = mr.Id;
                    } else if (mr.TERF_MR_monthNumber__c == lastMonths[2]) {
                        empMap.get(emp)[2] = mr.Id;
                    }
                } else {
                    Id[] arr = new Id[3];
                    if (mr.TERF_MR_monthNumber__c == lastMonths[0]) {
                        arr[0] = mr.Id;
                    } else if (mr.TERF_MR_monthNumber__c == lastMonths[1]) {
                        arr[1] = mr.Id;
                    } else if (mr.TERF_MR_monthNumber__c == lastMonths[2]) {
                        arr[2] = mr.Id;
                    }
                    empMap.put(emp, arr);
                }
            }
        }
    }
    if (empMap.size() > 0) {
        podchinennie = true;
    }
}
for (String empString: employees) {
    if (!empMap.keySet().contains(empString)) {
        empMap.put(empString, new Id[3]);
    }
}

VF PAGE

 <table class="interactiveTable" width="100%">
        <thead>
        <tr>
            <td> Employee / Month </td>
            <td>{!lastMonths[0]} </td>
            <td>{!lastMonths[1]}  </td>
            <td> {!lastMonths[2]} </td>
        </tr>
        </thead>

        <apex:repeat value="{!employees}" var="emp">
            <tr>
                <td>{!emp}</td>
                <td>{!empMap[emp][0]}</td>
                <td>{!empMap[emp][1]}</td>
                <td>{!empMap[emp][2]}</td>
            </tr>
        </apex:repeat>
    </table>
...