none
UserProfile - Ajout d'une connexion Active Directory par code - Exception "Object Reference not set" RRS feed

  • Question

  • Bonjour à tous,
    [SP2010 - SP1 - VS 2010]
    Je tente désespérement la création d'une connexion Active Directory dans le user Profile Application par code sans succès jusqu'à maintenant.
    Environnement AD : Forêt MultiDomaine (mais c'est un détail puisque sur un seul domaine, j'ai le même problème)
    La doc étant ... Inexistante sur cette partie, je ne vois pas où peut se trouver l'erreur.
    L'objectif est de ne pas avoir à selectionner les OU qui sont nombreuses dans l'AD cible.
     Le code utilisé est celui-ci :
    //Root Domain
                    if (domains[0] != null)
                    {
                        partitionID = domains[0].DomainGuid;
                        distinguishedNameDomain = domains[0].DistinguishedName;
                    }
                    List<string> containersToInclude = new List<string>();
                    List<string> containersToExclude = new List<string>();
                    
                    foreach (ADDomain domain in domains)
                    {
                        partitionID = domain.DomainGuid;
                        distinguishedNameDomain = domain.DistinguishedName;
    
                        //Get All OU to Add
                          List<OrganisationalUnit> OUs = GetAllUsersOrganizationUnits(domain);
                        List<OrganisationalUnit> ExcludeOUs = GetAllExcludeOrganizationUnits(domain);
                        containersToInclude.Add(domain.DistinguishedName);
                        
                        OUs.ForEach(x => containersToInclude.Add(x.ADDistinguishedName));
                        ExcludeOUs.ForEach(x => containersToExclude.Add(x.ADDistinguishedName));
                    }
                    //Done for all Domains
    
                    DirectoryServiceNamingContext directoryContext = new DirectoryServiceNamingContext(
                                                        distinguishedNameDomain,
                                                        _forestName,
                                                        false,
                                                        partitionID,
                                                        containersToInclude,
                                                        containersToExclude,
                                                        null, false);
                    directoriesNamingContexts.Add(directoryContext);
                    
    
                    //Create the Connection. Objectives will be to get ALL OU USERS in the AD Forest and set it
                    //as source of this connection
                    profileManager.ConnectionManager.AddActiveDirectoryConnection(ConnectionType.ActiveDirectory,
                                                                                  connectionName,
                                                                                  _forestName,
                                                                                  false,
                                                                                  userdomain,
                                                                                  username,
                                                                                  GetSecureString(passwordConnection),
                                                                                  directoriesNamingContexts,
                                                                                  null,
                                                                                  null,null);

    Et à l'execution du code ci dessus, voilà l'erreur qui m'est remontée :
     
       at Microsoft.Office.Server.UserProfiles.ActiveDirectoryConnection.AddAttributeFlows(MVConfiguration mvConfiguration, DSML dsmlMASchema, List`1 attributeInclusions)
       at Microsoft.Office.Server.UserProfiles.DirectoryServiceConnection.UpdateInternal()
       at Microsoft.Office.Server.UserProfiles.Connection.<Update>b__4()
       at Microsoft.SharePoint.SPSecurity.<>c__DisplayClass4.<RunWithElevatedPrivileges>b__2()
       at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode)
       at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param)
       at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode)
       at Microsoft.Office.Server.UserProfiles.Connection.Update()
       at Microsoft.Office.Server.UserProfiles.ConnectionManager.AddActiveDirectoryConnection(ConnectionType type, String displayName, String server, Boolean useSSL, String accountDomain, String accountUsername, SecureString accountPassword, List`1 namingContexts, String spsClaimProviderTypeValue, String spsClaimProviderIdValue, String adClaimIDMapAttribute)
        
    Une idée ?
    Merci pour votre aide.
    AB
     

    Mister Barber
    • Déplacé Hengzhe Li mardi 21 février 2012 06:40 merge forum (Origine :Développement Sharepoint 2010)
    mercredi 19 octobre 2011 09:09

Réponses

  • Salut Mister Barber !

    Si j'ai bien compris, c'est depuis le SP1 que ça fonctionne pas. ?

    Au niveau de cette ligne :  profileManager.ConnectionManager.AddActiveDirectoryConnection je constate que tu as 3 parametres passé à null à la fin. Peut etre que l'un (ou les trois) de ces paramètre est devenu obligatoire.

    Sinon dans le constructeur de DirectoryServiceNamingContext, le parametre preferedDomainControllers est passé à null. As tu essayer de renseigner le PDC ?

     

    • Marqué comme réponse Mister BARBER jeudi 20 octobre 2011 15:30
    jeudi 20 octobre 2011 07:18
  • Hello Lionel Limozin,

    C'est bon... J'ai trouvé d'où provenait cette erreur...

    Ta réponse m'a mis la puce à l'oreille effectivment sur les paramètres NULL de l'appel !!

    Parce que l'erreur qui est remonté sentait le null non traité dans la méthode, j'ai mis du string.empty à la place du NULL et...cela marche mieux tout de suite...

    Morale de l'histoire, paramètre null non testé, paramètre source de l'erreur .... dommage que MS ne le fasse pas partout mais bon ... l'erreur est humaine :-)

    Merci LL.

     


    Mister Barber
    • Marqué comme réponse Mister BARBER jeudi 20 octobre 2011 15:34
    jeudi 20 octobre 2011 15:34

Toutes les réponses

  • Salut Mister Barber !

    Si j'ai bien compris, c'est depuis le SP1 que ça fonctionne pas. ?

    Au niveau de cette ligne :  profileManager.ConnectionManager.AddActiveDirectoryConnection je constate que tu as 3 parametres passé à null à la fin. Peut etre que l'un (ou les trois) de ces paramètre est devenu obligatoire.

    Sinon dans le constructeur de DirectoryServiceNamingContext, le parametre preferedDomainControllers est passé à null. As tu essayer de renseigner le PDC ?

     

    • Marqué comme réponse Mister BARBER jeudi 20 octobre 2011 15:30
    jeudi 20 octobre 2011 07:18
  • Hello Lionel Limozin,

    C'est bon... J'ai trouvé d'où provenait cette erreur...

    Ta réponse m'a mis la puce à l'oreille effectivment sur les paramètres NULL de l'appel !!

    Parce que l'erreur qui est remonté sentait le null non traité dans la méthode, j'ai mis du string.empty à la place du NULL et...cela marche mieux tout de suite...

    Morale de l'histoire, paramètre null non testé, paramètre source de l'erreur .... dommage que MS ne le fasse pas partout mais bon ... l'erreur est humaine :-)

    Merci LL.

     


    Mister Barber
    • Marqué comme réponse Mister BARBER jeudi 20 octobre 2011 15:34
    jeudi 20 octobre 2011 15:34