Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Rozšíření pro vytvoření objektu je COM objekt implementovaný jako server v rámci procesu. Rozšíření pro vytvoření primárního i sekundárního objektu musí implementovat rozhraní IDsAdminNewObjExt.
Implementace IDsAdminNewObjExt
Při vytvoření průvodce vytvořením objektu inicializuje každé rozšíření pro vytvoření objektu voláním metody IDsAdminNewObjExt::Initialize. Metoda Initialize poskytuje rozšíření s informacemi o kontejneru, ve které se objekt vytváří, název třídy nového objektu a informace o samotném průvodci. Pokud průvodce vytvořením objektu začne vytvářet nový objekt z existujícího objektu, parametr pADsCopySource nebude null. V tomto případě by se rozšíření mělo pokusit získat tolik dat z objektu, který se kopíruje, jak je to možné.
Po inicializaci rozšíření se volá metoda IDsAdminNewObjExt::AddPages. Rozšíření musí během této metody přidat stránku nebo stránky do průvodce. Stránka průvodce je vytvořena vyplněním PROPSHEETPAGE struktury a předáním této struktury do CreatePropertySheetPage funkce. Stránka se pak přidá do průvodce voláním funkce zpětného volání, která je předána do AddPages v lpfnAddPage parametru.
Před zobrazením stránky rozšíření se volá IDsAdminNewObjExt::SetObject. To poskytuje rozšíření s IADs ukazatelem rozhraní pro objekt, který se vytváří.
Během zobrazení stránky průvodce by stránka měla zpracovávat a odpovídat na všechny nezbytné zprávy s oznámením průvodce, jako jsou PSN_SETACTIVE a PSN_WIZNEXT.
Když uživatel dokončí všechny stránky průvodce, zobrazí se v průvodci stránka Dokončení, která obsahuje souhrn zadaných dat. Průvodce získá tato data voláním metody IDsAdminNewObjExt::GetSummaryInfo metody pro každou z rozšíření. Metoda GetSummaryInfo poskytuje BSTR, která obsahuje textová data zobrazená na stránce Dokončit. Rozšíření pro vytvoření objektu nemusí zadávat souhrnná data. V tomto případě by GetSummaryInfo měla vrátit E_NOTIMPL. GetSummaryInfo je volána pouze jednou pro každé rozšíření, nikoli pro každou stránku, takže pokud rozšíření pro vytvoření objektu přidá více než jednu stránku, musí rozšíření zkombinovat souhrnná data do jednoho řetězce.
Když uživatel klikne na tlačítko Dokončit na stránce "Dokončit", průvodce zavolá každou z metod IDsAdminNewObjExt::WriteData s kontextem DSA_NEWOBJ_CTX_PRECOMMIT. V takovém případě by rozšíření mělo zapsat shromážděná data do příslušných vlastností pomocí IADs::Put nebo IADs::PutEx metody. Rozhraní IADs je poskytováno rozšíření v metodě IDsAdminNewObjExt::SetObject. Rozšíření by nemělo provést vlastnosti uložené v mezipaměti pomocí volání IADs::SetInfo. Když jsou zapsány všechny vlastnosti, primární rozšíření pro vytvoření objektu potvrdí změny voláním IADs::SetInfo. Toto je podrobněji popsáno níže.
Pokud dojde k chybě, rozšíření bude upozorněno na chybu a na to, během které operace k ní došlo, když je volána metoda IDsAdminNewObjExt::OnError.
Implementace průvodce vytvořením primárního objektu
Implementace průvodce vytvořením primárního objektu je shodná s průvodcem vytvořením sekundárního objektu s tím rozdílem, že průvodce vytvořením primárního objektu musí provést několik dalších kroků.
Před tím, než je první stránka odstraněna, musí průvodce vytvořením objektu vytvořit dočasný adresářový objekt. Uděláte to tak, že zavoláte metodu IDsAdminNewObjPrimarySite::CreateNew. Ukazatel na rozhraní IDsAdminNewObjPrimarySite se získá voláním QueryInterface s IID_IDsAdminNewObjPrimarySite na rozhraní IDsAdminNewObj, které se předává IDsAdminNewObjExt::Initialize. Metoda CreateNew vytvoří nový dočasný objekt a volá IDAdminNewObjExt::SetObject pro každé rozšíření.
Pokud průvodce vytvořením objektu obsahuje více než jednu stránku, systém implementuje stránku Dokončit, která zobrazí souhrn informací o objektu, které se mají uložit. Po kliknutí na tlačítko Dokončit na stránce Dokončení systém zavolá metodu IDAdminNewObjExt::WriteData každého rozšíření pro vytvoření objektu a pak uloží dočasný objekt do trvalé paměti. Pokud však průvodce vytvořením objektu obsahuje jenom jednu stránku, bude stránka mít tlačítka OK a Zrušit, místo tlačítek Zpět, Další a Zrušit, které se obvykle nacházejí v průvodci, a není k dispozici žádná stránka "Dokončit". Z tohoto důvodu musí průvodce vytvořením jednostránkového objektu volat IDsAdminNewObjPrimarySite::Commit, aby prováděl operace zápisu a uložení. Jednostránkové rozšíření pro vytvoření primárního objektu by mělo volat Commit v reakci na oznámení PSN_WIZFINISH.
Vzhledem k tomu, že rozšíření pro vytváření jiných objektů můžou do průvodce přidávat stránky, nemusí rozšíření pro vytvoření primárního objektu vědět, jestli v průvodci existuje více než jedna stránka. Nejedná se o problém ze dvou důvodů: Zaprvé, pokud systém implementuje stránku "Dokončit", rozšíření pro vytvoření primárního objektu obdrží oznámení PSN_WIZNEXT místo oznámení PSN_WIZNEXT. Za druhé, Provedení selže bez následků, pokud průvodce obsahuje více než jednu stránku.