Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rozszerzenie tworzenia obiektu jest obiektem COM zaimplementowanym jako serwer w procesie. Zarówno rozszerzenia tworzenia obiektów podstawowych, jak i pomocniczych muszą implementować interfejs IDsAdminNewObjExt.
Implementacja IDsAdminNewObjExt
Po utworzeniu kreatora tworzenia obiektu inicjuje każde rozszerzenie tworzenia obiektu przez wywołanie identyfikatorów rozszerzeniaAdminNewObjExt::Initialize metody. Metoda Initialize dostarcza rozszerzeniu informacji o kontenerze, w którym tworzony jest obiekt, nazwie klasy nowego obiektu i samym kreatorze. Jeśli kreator tworzenia obiektu zostanie uruchomiony w celu utworzenia nowego obiektu na podstawie istniejącego obiektu, parametr pADsCopySource nie będzie NULL. W takim przypadku rozszerzenie powinno podjąć próbę uzyskania jak najwięcej danych z skopiowanego obiektu.
Po zainicjowaniu rozszerzenia wywoływana jest metoda IDsAdminNewObjExt::AddPages. Rozszerzenie musi dodać stronę lub strony do kreatora podczas tej metody. Strona kreatora jest tworzona przez wypełnienie struktury PROPSHEETPAGE, a następnie przekazanie tej struktury do funkcji CreatePropertySheetPage. Następnie strona zostanie dodana do kreatora przy użyciu funkcji zwrotnej przekazanej do AddPages w parametrze o nazwie lpfnAddPage.
Przed wyświetleniem strony rozszerzenia wywoływana jest IDsAdminNewObjExt::SetObject. Dostarcza rozszerzeniu wskaźnik interfejsu IAD dla obiektu, który jest tworzony.
Gdy strona kreatora jest wyświetlana, powinna ona obsługiwać i odpowiadać na wszelkie niezbędne komunikaty powiadomień kreatora, takie jak PSN_SETACTIVE oraz PSN_WIZNEXT.
Gdy użytkownik ukończy wszystkie strony kreatora, kreator wyświetli stronę "Zakończ", która zawiera podsumowanie wprowadzonych danych. Kreator uzyskuje te dane, wywołując metodę IDsAdminNewObjExt::GetSummaryInfo dla każdego z rozszerzeń. Metoda GetSummaryInfo udostępnia BSTR, który zawiera dane tekstowe wyświetlane na stronie "Zakończ". Rozszerzenie tworzenia obiektu nie musi dostarczać danych podsumowania. W takim przypadku GetSummaryInfo powinien zwrócić E_NOTIMPL. GetSummaryInfo jest wywoływana tylko raz dla każdego rozszerzenia, a nie na stronę, więc jeśli rozszerzenie tworzenia obiektu dodaje więcej niż jedną stronę, rozszerzenie musi połączyć dane podsumowania w jeden ciąg.
Gdy użytkownik kliknie przycisk Zakończ na stronie "Zakończ", kreator wywołuje każdą z identyfikatorów rozszerzeniaAdminNewObjExt::WriteData z kontekstem DSA_NEWOBJ_CTX_PRECOMMIT. W takim przypadku rozszerzenie powinno zapisywać zebrane dane w odpowiednich właściwościach przy użyciu metody IADs::Put lub IADs::PutEx. Interfejs IADs jest dostarczany do rozszerzenia w metodzie IDsAdminNewObjExt::SetObject. Rozszerzenie nie powinno zatwierdzać buforowanych właściwości przez wywołanie IADs::SetInfo. Po zapisaniu wszystkich właściwości rozszerzenie tworzenia obiektu podstawowego zatwierdza zmiany, wywołując IADs::SetInfo. Zostało to omówione bardziej szczegółowo poniżej.
Jeśli wystąpi błąd, rozszerzenie zostanie o nim powiadomione oraz podczas której operacji do niego doszło, gdy wywoływana jest metoda IDsAdminNewObjExt::OnError.
Implementowanie kreatora tworzenia obiektu podstawowego
Implementacja kreatora tworzenia obiektu podstawowego jest identyczna z kreatorem tworzenia obiektu pomocniczego, z tą różnicą, że kreator tworzenia obiektu podstawowego musi wykonać jeszcze kilka kroków.
Zanim pierwsza strona zostanie odrzucona, kreator tworzenia obiektu musi utworzyć tymczasowy obiekt katalogu. W tym celu wywołaj metodę IDsAdminNewObjPrimarySite::CreateNew. Wskaźnik do interfejsu IDsAdminNewObjPrimarySite jest uzyskiwany przez wywołanie QueryInterface z IID_IDsAdminNewObjPrimarySite na interfejsie IDsAdminNewObj, który jest przekazywany do IDsAdminNewObjExt::Initialize. Metoda CreateNew tworzy nowy obiekt tymczasowy i wywołuje IDsAdminNewObjExt::SetObject dla każdego rozszerzenia.
Gdy kreator tworzenia obiektu zawiera więcej niż jedną stronę, system implementuje stronę "Zakończ", która wyświetla podsumowanie informacji o obiekcie do zapisania. Po kliknięciu przycisku Zakończ na stronie "Zakończ", system wywoła metodę IDsAdminNewObjExt::WriteData dla każdego identyfikatora rozszerzenia tworzenia obiektu, a następnie zatwierdzi obiekt tymczasowy do pamięci trwałej. Jeśli jednak kreator tworzenia obiektu zawiera tylko jedną stronę, to strona będzie mieć przyciski OK i Anuluj zamiast przycisków Wstecz, Dalej i Anuluj, które zwykle występują w kreatorze, i nie zostanie podana strona „Zakończ”. W związku z tym kreator tworzenia obiektów jednostronicowych musi wywołać IDsAdminNewObjPrimarySite::Commit, aby wykonać operacje zapisu i zapisania. Jednostronicowe rozszerzenie tworzenia obiektu podstawowego powinno wywołać Commit w odpowiedzi na powiadomienie PSN_WIZFINISH.
Ponieważ inne rozszerzenia tworzenia obiektów mogą dodawać strony do kreatora, rozszerzenie tworzenia obiektu podstawowego może nie wiedzieć, czy w kreatorze znajduje się więcej niż jedna strona. Nie jest to problem z dwóch powodów: po pierwsze, jeśli system implementuje stronę "Zakończ", rozszerzenie tworzenia obiektu podstawowego otrzyma powiadomienie PSN_WIZNEXT zamiast powiadomienia PSN_WIZNEXT. Po drugie, zatwierdzenie nie zaszkodzi, jeśli kreator zawiera więcej niż jedną stronę.