Я сделал немного по другому, с использованием SQL Server
1) Создал связанный сервер
PHP код:
EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5', 'ADSDSOObject', 'adsdatasource'
Настроил сопоставление пользователей локального и доменного на вкладке Безопасность в свойствах 'ADSI'.
Локальный - это sql пользователь под которым Аксапта 3.0 подключается БД.
Удаленный - это доменный пользователь, кто может читать AD.
2) Создал хранимую процедуру в БД. Параметр
DOMAIN - это полное имя домена в нашей сети.
PHP код:
CREATE PROCEDURE dbo.sp_GetListUserAD
AS
BEGIN
SET NOCOUNT ON;
SELECT samaccountname, givenname, sn, displayName, mail
FROM openquery(ADSI,
'SELECT samaccountname, givenname,sn, displayName, mail
FROM ''LDAP://DOMAIN'' WHERE objectCategory=''person'' AND objectClass=''user'' ')
WHERE samaccountname IS NOT NULL AND mail IS NOT NULL
ORDER BY samaccountname;
END
GO
3) В Аксапте сделал пример Job:
X++:
static void Job_ViewUsers()
{
Connection con = new Connection();
Statement stmt = con.createStatement();
ResultSet resultSet;
str sqlExpression = "EXEC sp_GetListUserAD";
;
resultSet = stmt.executeQuery(sqlExpression);
while (resultSet.next())
{
//SELECT samaccountname, givenname, sn, displayName, mail
info(strfmt('Login = %1, Имя = %2, Фамилия = %3, ФИО = %4, E-mail = %5' ,resultSet.getString(1), resultSet.getString(2), resultSet.getString(3), resultSet.getString(4), resultSet.getString(5)));
}
}
Источники:
Проблема с SQL запросом
http://www.sql.ru/forum/actualthread...y+adsi#7194114