Implémentation de l’objet COM 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’objets primaires et secondaires doivent implémenter l’interface IDsAdminNewObjExt .
Implémentation d’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 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 est démarré 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 à partir de l’objet en cours de copie.
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 transmettant cette structure à la fonction CreatePropertySheetPage . La page est ensuite ajoutée à l’Assistant en appelant la fonction de rappel passée à AddPages dans le paramètre lpfnAddPage .
Avant l’affichage de la page d’extension, IDsAdminNewObjExt::SetObject est appelé. Cela fournit à l’extension un pointeur d’interface IADs pour l’objet en cours de création.
Lorsque la page de l’Assistant s’affiche, celle-ci 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 termine toutes les pages de l’Assistant, celui-ci 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 de texte affichées dans la page « Finish ». Une extension de création d’objet n’a pas besoin de fournir des données récapitulatives. Dans ce cas, GetSummaryInfo doit retourner E_NOTIMPL. GetSummaryInfo n’est appelé qu’une seule fois pour chaque extension, et non par page. Par conséquent, si l’extension de création d’objet ajoute plusieurs pages, l’extension doit combiner les données récapitulatives en une seule chaîne.
Lorsque 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 DSA_NEWOBJ_CTX_PRECOMMIT . 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. Une fois toutes les propriétés écrites, l’extension de création d’objet principal valide les modifications en appelant IADs::SetInfo. Ceci est décrit plus en détail ci-dessous.
Si une erreur se produit, l’extension est avertie de l’erreur et de l’opération au cours de laquelle elle s’est produite lorsque la méthode IDsAdminNewObjExt::OnError est appelée.
Assistant Implémentation d’un Assistant Création d’objet principal
L’implémentation d’un Assistant création d’objet principal est identique à un Assistant création d’objets secondaire, sauf qu’un Assistant création d’objet principal doit effectuer quelques étapes supplémentaires.
Avant que la première page ne soit ignorée, l’Assistant Création d’objets 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 objet temporaire et appelle IDsAdminNewObjExt::SetObject pour chaque extension.
Lorsqu’un Assistant création d’objet contient plusieurs pages, le système implémente une page « Finish » qui affiche un résumé des informations d’objet à enregistrer. Lorsque vous cliquez sur le bouton Terminer de la page « Terminer », le système appelle la méthode IDAdminNewObjExt::WriteData de l’extension de création de l’objet, puis valide l’objet temporaire dans la mémoire persistante. Toutefois, si l’Assistant Création d’objets ne contient qu’une seule page, la page aura des boutons OK et Annuler au lieu des boutons Précédent, Suivant et Annuler qui se trouvent normalement dans un Assistant et aucune page « Terminer » n’est fournie. Pour cette raison, un Assistant création d’un objet monopage doit appeler IDsAdminNewObjPrimarySite::Commit pour effectuer les opérations d’écriture et d’enregistrement. Une extension de création d’objet principal monopage doit appeler Commit 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 existe plusieurs pages dans l’Assistant. Il ne s’agit pas d’un problème pour deux raisons : tout d’abord, si le système implémente la page « Finish », l’extension de création d’objet principal reçoit la notification PSN_WIZNEXT au lieu de la notification PSN_WIZNEXT . Deuxièmement, la validation échoue inoffensivement si l’Assistant contient plusieurs pages.