Добрый день.
Хочу поделиться опытом, который мы приобрели еще порядка года назад, совмещая интеграцию корппортала с 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 отдела кадров или его сотрудников.