Добрый день.
Хочу поделиться опытом, который мы приобрели еще порядка года назад, совмещая интеграцию корппортала с 1С и AD. Возможно, решения окажется не новым, но читая один из форумов я наткнулся на замечание:
Так вот. Эта проблема решаема.
Выполняя настройку будем следовать правилу, чтобы администраторы и сотрудники отдела кадров выполняли как можно меньше дополнительной работы и чтобы интеграция в наименьшей степени зависела от человеческого фактора.
Итак,
Первый делом настроем интеграцию с AD.
Как видно из кода, добавление пользователя из 1С "превращено" в прописывание XML_ID у нужного пользователя.
При следующем импорте из 1С произойдет обновление данных у всех пользователей, у которых прописан XML_ID, но это уже штатная работы интеграции.
Таким образом, чтобы пользователь появился на портале со всей информацией, необходимо настроить интеграцию с 1С так, чтобы она выполнялась два раза.
Осталось только обеспечить информирование отдела кадров о том, что на портале появился новый пользователь и что ему надо прописать e-mail. Это легко делается с помощью почтового уведомления на событие NEW_USER. Для его генерации мы создадим обработчик события "AfterUserAdd":
И настраиваем почтовый шаблон на данное событие, исользуя макросы, которые задали в $arEventFields и в качестве адресатов указываем e-mail отдела кадров или его сотрудников.
Хочу поделиться опытом, который мы приобрели еще порядка года назад, совмещая интеграцию корппортала с 1С и AD. Возможно, решения окажется не новым, но читая один из форумов я наткнулся на замечание:
2) Устанавливать галочку "Создавать пользователя", значит выгрузки пользователей из 1С уже отметаются, пользователи будут дублироваться. |
Выполняя настройку будем следовать правилу, чтобы администраторы и сотрудники отдела кадров выполняли как можно меньше дополнительной работы и чтобы интеграция в наименьшей степени зависела от человеческого фактора.
Итак,
Первый делом настроем интеграцию с AD.
- Заведем на портале новый домен. В вкладке "Настройка полей" уберем те поля, которые будут передаваться из 1С. В моем случае это были Фамилия, Имя, Отчество, т.к. из AD они приходили англоязычными. Если в вашем домене используются русскоязычные имена, то можно эту настройку пропустить
- Рекомендуется настроить периодичность интеграции.
- В модуле настройки AD/LDAP установить "Создавать новых пользователей при первой успешной авторизации". Таким образом, пользователь будет автоматически добавляться, как только "новичок" зайдет на портал.
- Пользователи, поступающие из 1С только обновляются
- Ключевым для сопоставления сотрудника, введенного в 1С и пользователем AD является e-mail
AddEventHandler("main", "OnBeforeUserAdd", Array("MyClass", "OnBeforeUserAddHandler")); ........ // создаем обработчик события "OnBeforeUserAdd" function OnBeforeUserAddHandler(&$arFields) { // проверяем, что пользователь поступил из 1С if ($arFields["UF_1C"] == "Y"): // организовываем поиск по e-mail в уже добавленных пользователях $filter = Array( "EMAIL" => $arFields["EMAIL"] //фильтруем по почте ); $rsUsers = CUser::GetList(($by="id"), ($order="asc"), $filter); // выбираем пользователей $rsUsers->NavStart(); // Если нашли, то пропишем этому пользователяю XML_ID if (intval($rsUsers->SelectedRowsCount())>0): $arUserAD = $rsUsers->Fetch(); $xmlid = $arFields["XML_ID"]; $NameAD = $arUserAD["LAST_NAME"]; $arUpdateField = Array( "XML_ID" => $arFields["XML_ID"] ); $oUser = new CUser; $oUser->Update($arUserAD["ID"], $arUpdateField); endif; return false; // Здесь обязательно возвращаем false, тем самым даем команду // о прекращении дальнейшей обработки endif; return true; } |
При следующем импорте из 1С произойдет обновление данных у всех пользователей, у которых прописан XML_ID, но это уже штатная работы интеграции.
Таким образом, чтобы пользователь появился на портале со всей информацией, необходимо настроить интеграцию с 1С так, чтобы она выполнялась два раза.
Осталось только обеспечить информирование отдела кадров о том, что на портале появился новый пользователь и что ему надо прописать e-mail. Это легко делается с помощью почтового уведомления на событие NEW_USER. Для его генерации мы создадим обработчик события "AfterUserAdd":
AddEventHandler("main", "OnAfterUserAdd", Array("MyClass", "OnAfterUserAddHandler")); ... // создаем обработчик события "OnAfterUserAdd" function OnAfterUserAddHandler(&$arFields) { IF ($arFields["RESULT"] == ""): return; endif; $arEventFields = array( "EMAIL" => &$arFields["EMAIL"] , "USER_ID" => &$arFields["ID"] , "LOGIN" => &$arFields["LOGIN"] , "NAME" => &$arFields["NAME"] , "LAST_NAME" => &$arFields["LAST_NAME"] , "LAST_NAME_AD" => &$arFields["UF_LASTNAME_EN"] , "NAME_AD" => &$arFields["UF_FIRSTNAME_EN"] , "RESULT" => &$arFields["RESULT"] , "RESULT_MESSAGE" => &$arFields["RESULT_MESSAGE"] ); CEvent::Send("NEW_USER", "s1", $arEventFields); } |
И настраиваем почтовый шаблон на данное событие, исользуя макросы, которые задали в $arEventFields и в качестве адресатов указываем e-mail отдела кадров или его сотрудников.