Привет!

Сегодня я расскажу вам интересную особенность работы алгоритма поиска сотрудников на портале SAP MSS.

Исходные данные

Есть сотрудник, который является совместителем. Т.е. в системе у него два табельных номера.

Есть портал MSS, на котором у менеджера есть возможность создать заявку на отпуск за сотрудника.

Когда менеджер, с помощью поля поиска пытается найти подчиненного, алгоритм находит только одно совпадение. Другими словами, у менеджера есть возможность сформировать заявку на отпуск только для одного табельного номера.

Рис 1

Бизнес такое ограничение не устраивает, он хочет видеть все табельные номера. Поэтому возникла необходимость найти причину такого поведения.

Отладка

Примечание:

Здесь и ниже по тексту, при упоминании методов речь будет идти о методах класса CL_HIER_VIS_MANAGER.

Когда менеджер вводит часть ФИО в поле поиска и нажимает, например, Enter, на стороне бекэнда в методе EXECUTE_SEARCH( ) происходит вызов метода SEARCH_DATA( ).

Рис 2

В методе SERCH_DATA( ) вызывается метод SEARCH( ), который возвращает таблицу с найденными сотрудниками.

Рис 3

Как мы видим, на данном этапе в таблице две записи.

Далее, после того, как отработал метод SEARCH( ), в методе EXECUTE_SEARCH( ) последовательно выполняются две операции: сортировка таблицы и удаление дубликатов.

Рис 4 И все бы ничего, но обратите внимание, по каким полям выполняется сравнение при удалении дубликатов.

Рис 5

В этих полях хранятся ФИО и ID фотографии сотрудника.

Рис 6

«Стоп. Фотографии?» — спросите вы. Да.

Рис 7

Судя по всему, логика работы такая:

Если случилось так, что в организации у одного менеджера в подчинении находятся два сотрудника с абсолютно одинаковыми ФИО, то фотографии то у них будут разные и алгоритм поиска честно вернет обоих сотрудников.

Однако, в нашем случае, когда сотрудник является совместителем, в системе у его табельных номеров будет одна и та же фотография. И я не уверен, что их ID будут разными. Если у вас есть какие-нибудь соображения по этому поводу, пожалуйста сообщите мне.

А что если фотографии просто не загружены? Тогда поле SEL_FIELD_IMAGE будет содержать одинаковые значения (как, собственно, и произошло в нашем примере).

Итак, причина отображения только одного табельного номера понятна.

Для отображения всех табельных номеров можно расширить стандартный код и сравнивать, например, СНИЛС. Но это всегда успеется. Поэтому решено было сначала попробовать загрузить фотографии и посмотреть что будет.

Чем закончилась история, расскажу позже.

На этом все. Пока!