Чтение информации о пользователе в Active Directory из Dynamics AX с использованием определенного контроллера домена - PullRequest
0 голосов
/ 10 июля 2019

У нас есть несколько контроллеров домена, которые можно использовать для чтения информации о пользователях AD.

Когда имя домена "mydomain.co.uk" используется в качестве домена AD, любой из этих немногих контроллеров домена выбирается для этой цели.

Однако, если изменения в AD не были распространены на все контроллеры домена, результаты не возвращаются.

Для решения этой проблемы я решил всегда указывать на определенный контроллер домена, который равен "dc1.mydomain.co.uk".

В C # это легко сделать примерно так:

new PrincipalContext(ContextType.Domain, 
                    "dc1.mydomain.co.uk:389", 
                    "OU=Groups,DC=mydomain,DC=co,DC=uk", 
                    domainUsername, 
                    domainPassword)

Однако в X ++ только "mydomain.co.uk" работает:

static void validateDomain(Args _args)
{
    xAxaptaUserManager          Axmanage;
    NetworkDomain               networkDomain = "";

    // Works
    networkDomain = "mydomain.co.uk";

    // Does not work
    networkDomain = "dc1";
    networkDomain = "dc1.mydomain.co.uk";
    networkDomain = "dc1.mydomain.co.uk:389";
    networkDomain = "LDAP://dc1.mydomain.co.uk:389/";

    Axmanage = new xAxaptaUserManager();

    info(strFmt("%1", Axmanage.validateDomain(networkDomain)));
}

Как я могу достичь такой же функциональности с xAxaptaUserManager в MS Dynamics AX 2012 R3, если это возможно?

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Мы не в вашей сети, поэтому мы не можем все протестировать, но если xAxaptaUserManager, то есть класс ядра, не работает, но вы можете сделать это за C# ...просто создайте "помощник" сборки, который вы вызываете из AX.

См. ссылки ниже:

https://docs.microsoft.com/en-us/dynamicsax-2012/developer/how-to-add-a-reference-to-a-net-assembly

https://docs.microsoft.com/en-us/dynamicsax-2012/developer/net-interop-from-x

1 голос
/ 11 июля 2019

Я должен был сказать это раньше, и вы можете предпочесть это как решение.

В AX вы можете просто позвонить .NET код. Я думаю, что вам, возможно, придется поместить это в server метод в class или table, если это не сработает сразу.

System.DirectoryServices.AccountManagement.PrincipalContext     principalContext =
        new System.DirectoryServices.AccountManagement.PrincipalContext(System.DirectoryServices.AccountManagement.ContextType::Domain,
                                                                        "dc1.mydomain.co.uk:389",
                                                                        "OU=Groups,DC=mydomain,DC=co,DC=uk",
                                                                        "username",
                                                                        "password");
...