Привет!
Сегодня я расскажу вам интересную особенность работы алгоритма поиска сотрудников на портале SAP MSS.
Исходные данные
Есть сотрудник, который является совместителем. Т.е. в системе у него два табельных номера.
Есть портал MSS, на котором у менеджера есть возможность создать заявку на отпуск за сотрудника.
Когда менеджер, с помощью поля поиска пытается найти подчиненного, алгоритм находит только одно совпадение. Другими словами, у менеджера есть возможность сформировать заявку на отпуск только для одного табельного номера.
Бизнес такое ограничение не устраивает, он хочет видеть все табельные номера. Поэтому возникла необходимость найти причину такого поведения.
Отладка
Примечание:
Здесь и ниже по тексту, при упоминании методов речь будет идти о методах класса CL_HIER_VIS_MANAGER.
Когда менеджер вводит часть ФИО в поле поиска и нажимает, например, Enter, на стороне бекэнда в методе EXECUTE_SEARCH( ) происходит вызов метода SEARCH_DATA( ).
В методе SERCH_DATA( ) вызывается метод SEARCH( ), который возвращает таблицу с найденными сотрудниками.
Как мы видим, на данном этапе в таблице две записи.
Далее, после того, как отработал метод SEARCH( ), в методе EXECUTE_SEARCH( ) последовательно выполняются две операции: сортировка таблицы и удаление дубликатов.
И все бы ничего, но обратите внимание, по каким полям выполняется сравнение при удалении дубликатов.
В этих полях хранятся ФИО и ID фотографии сотрудника.
«Стоп. Фотографии?» — спросите вы. Да.
Судя по всему, логика работы такая:
Если случилось так, что в организации у одного менеджера в подчинении находятся два сотрудника с абсолютно одинаковыми ФИО, то фотографии то у них будут разные и алгоритм поиска честно вернет обоих сотрудников.
Однако, в нашем случае, когда сотрудник является совместителем, в системе у его табельных номеров будет одна и та же фотография. И я не уверен, что их ID будут разными. Если у вас есть какие-нибудь соображения по этому поводу, пожалуйста сообщите мне.
А что если фотографии просто не загружены? Тогда поле SEL_FIELD_IMAGE будет содержать одинаковые значения (как, собственно, и произошло в нашем примере).
Итак, причина отображения только одного табельного номера понятна.
Для отображения всех табельных номеров можно расширить стандартный код и сравнивать, например, СНИЛС. Но это всегда успеется. Поэтому решено было сначала попробовать загрузить фотографии и посмотреть что будет.
Чем закончилась история, расскажу позже.
На этом все. Пока!