Implémentation de l’objet COM d’extension de création d’objet

Une extension de création d’objet est un objet COM implémenté en tant que serveur in-proc. Les extensions de création d’objet primaire et secondaire doivent implémenter l’interface IDsAdminNewObjExt .

Implémentation de IDsAdminNewObjExt

Lorsque l’Assistant Création d’objet est créé, il initialise chaque extension de création d’objet en appelant la méthode IDsAdminNewObjExt :: Initialize de l’extension. La méthode Initialize fournit l’extension avec des informations sur le conteneur dans lequel l’objet est créé, le nom de classe du nouvel objet et des informations sur l’Assistant lui-même. Si l’Assistant Création d’objet démarre pour créer un objet à partir d’un objet existant, le paramètre pADsCopySource n’est pas null. Dans ce cas, l’extension doit tenter d’obtenir autant de données que possible de l’objet copié.

Une fois l’extension initialisée, la méthode IDsAdminNewObjExt :: AddPages est appelée. L’extension doit ajouter la ou les pages à l’Assistant pendant cette méthode. Une page d’Assistant est créée en remplissant une structure PROPSHEETPAGE , puis en passant cette structure à la fonction CreatePropertySheetPage . La page est ensuite ajoutée à l’Assistant en appelant la fonction de rappel transmise à AddPages dans le paramètre lpfnAddPage .

Avant l’affichage de la page d’extension, IDsAdminNewObjExt :: setObject est appelée. Cela fournit l’extension avec un pointeur d’interface IADs pour l’objet en cours de création.

Lorsque la page de l’Assistant s’affiche, la page doit gérer et répondre aux messages de notification de l’Assistant nécessaires, tels que PSN _ SetActive et PSN _ WIZNEXT.

Lorsque l’utilisateur remplit toutes les pages de l’Assistant, l’Assistant affiche une page « terminer » qui fournit un résumé des données entrées. L’Assistant obtient ces données en appelant la méthode IDsAdminNewObjExt :: GetSummaryInfo pour chacune des extensions. La méthode GetSummaryInfo fournit un BSTR qui contient les données texte affichées dans la page « Finish ». Une extension de création d’objet n’a pas besoin de fournir des données de synthèse. Dans ce cas, GetSummaryInfo doit retourner E _ NOTIMPL. GetSummaryInfo est appelé une seule fois pour chaque extension, pas par page. par conséquent, si l’extension de création d’objet ajoute plusieurs pages, l’extension doit combiner les données de synthèse en une seule chaîne.

Quand l’utilisateur clique sur le bouton Terminer dans la page « terminer », l’Assistant appelle chacune des méthodes IDsAdminNewObjExt :: WriteData de l’extension avec le contexte de la _ _ _ prévalidation de DSA NEWOBJ CTX . Dans ce cas, l’extension doit écrire les données collectées dans les propriétés appropriées à l’aide de la méthode IADs ::P ut ou IADs ::P Utex . L’interface IADs est fournie à l’extension dans la méthode IDsAdminNewObjExt :: setObject . L’extension ne doit pas valider les propriétés mises en cache en appelant IADs :: setinfo. Lorsque toutes les propriétés ont été écrites, l’extension de création d’objet principal valide les modifications en appelant IADs :: setinfo. Ce sujet est abordé plus en détail ci-dessous.

Si une erreur se produit, l’extension est avertie de l’erreur et pendant quelle opération elle s’est produite lorsque la méthode IDsAdminNewObjExt :: OnError est appelée.

Implémentation d’un assistant de création d’objet principal

L’implémentation d’un assistant de création d’objet principal est identique à un assistant de création d’objet secondaire, à ceci près qu’un assistant de création d’objet principal doit exécuter quelques étapes supplémentaires.

Avant la fermeture de la première page, l’Assistant Création d’objet doit créer l’objet de répertoire temporaire. Pour ce faire, appelez la méthode IDsAdminNewObjPrimarySite :: CreateNew . Un pointeur vers l’interface IDsAdminNewObjPrimarySite est obtenu en appelant QueryInterface avec IID _ IDsAdminNewObjPrimarySite sur l’interface IDsAdminNewObj qui est passée à IDsAdminNewObjExt :: Initialize. La méthode CreateNew crée un nouvel objet temporaire et appelle IDsAdminNewObjExt :: setObject pour chaque extension.

Quand un assistant de création d’objet contient plusieurs pages, le système met en œuvre une page « terminer » qui affiche un résumé des informations relatives aux objets à enregistrer. Quand l’utilisateur clique sur le bouton Terminer sur la page « terminer », le système appelle chaque méthode IDsAdminNewObjExt :: WriteData de l’extension de création d’objet, puis valide l’objet temporaire dans la mémoire persistante. Toutefois, si l’Assistant Création d’objet ne contient qu’une seule page, les boutons OK et Annuler s’affichent au lieu des boutons précédent, suivant et Annuler , normalement disponibles dans un Assistant et aucune page « terminer » n’est fournie. Pour cette raison, un Assistant extension de création d’objet à page unique doit appeler IDsAdminNewObjPrimarySite :: Commit pour effectuer les opérations d’écriture et d’enregistrement. Une extension de création d’objet principal d’une seule page doit appeler la validation en réponse à la notification PSN _ WIZFINISH .

Étant donné que d’autres extensions de création d’objets peuvent ajouter des pages à l’Assistant, l’extension de création d’objet principal peut ne pas savoir s’il y a plus d’une page dans l’Assistant. Ce n’est pas un problème pour deux raisons : tout d’abord, si le système implémente la page « terminer », l’extension de la création de l’objet principal recevra la notification PSN _ WIZNEXT au lieu de la notification _ WIZNEXT PSN . Deuxièmement, la validation échouera sans danger si l’Assistant contient plus d’une page.