Menerapkan Objek COM Ekstensi Pembuatan Objek

Ekstensi pembuatan objek adalah objek COM yang diimplementasikan sebagai server in-proc. Ekstensi pembuatan objek primer dan sekunder harus menerapkan antarmuka IDsAdminNewObjExt.

Menerapkan IDsAdminNewObjExt

Saat wizard pembuatan objek dibuat, ia menginisialisasi setiap ekstensi pembuatan objek dengan memanggil metode IDsAdminNewObjExt::Initialize ekstensi. Metode Inisialisasi menyediakan ekstensi dengan informasi tentang kontainer tempat objek sedang dibuat, nama kelas objek baru dan informasi tentang wizard itu sendiri. Jika wizard pembuatan objek mulai membuat objek baru dari objek yang ada, parameter pADsCopySource tidak akan NULL. Dalam hal ini, ekstensi harus mencoba untuk mendapatkan data sebanyak mungkin dari objek yang disalin seperti yang layak.

Setelah ekstensi diinisialisasi, metode IDsAdminNewObjExt::AddPages dipanggil. Ekstensi harus menambahkan halaman atau halaman ke wisaya selama metode ini. Halaman wizard dibuat dengan mengisi struktur PROPSHEETPAGE lalu meneruskan struktur ini ke fungsi CreatePropertySheetPage. Halaman kemudian ditambahkan ke wizard dengan memanggil fungsi panggilan balik yang diteruskan ke AddPages di parameter lpfnAddPage .

Sebelum halaman ekstensi ditampilkan, IDsAdminNewObjExt::SetObject dipanggil. Ini memasok ekstensi dengan penunjuk antarmuka IAD untuk objek yang dibuat.

Saat halaman wizard ditampilkan, halaman harus menangani dan merespons pesan pemberitahuan wizard yang diperlukan, seperti PSN_SETACTIVE dan PSN_WIZNEXT.

Saat pengguna menyelesaikan semua halaman wizard, wizard akan menampilkan halaman "Selesai" yang menyediakan ringkasan data yang dimasukkan. Wizard mendapatkan data ini dengan memanggil metode IDsAdminNewObjExt::GetSummaryInfo untuk setiap ekstensi. Metode GetSummaryInfo menyediakan BSTR yang berisi data teks yang ditampilkan di halaman "Selesai". Ekstensi pembuatan objek tidak harus menyediakan data ringkasan. Dalam hal ini, GetSummaryInfo harus mengembalikan E_NOTIMPL. GetSummaryInfo hanya dipanggil satu kali untuk setiap ekstensi, bukan per halaman, jadi jika ekstensi pembuatan objek menambahkan lebih dari satu halaman, ekstensi harus menggabungkan data ringkasan ke dalam satu string.

Ketika pengguna mengklik tombol Selesai di halaman "Selesai", wizard memanggil masing-masing metode ID ekstensiAdminNewObjExt::WriteData dengan konteks DSA_NEWOBJ_CTX_PRECOMMIT. Ketika ini terjadi, ekstensi harus menulis data yang dikumpulkan ke properti yang sesuai menggunakan metode IADs::P ut atau IADs::P utEx. Antarmuka IAD disediakan untuk ekstensi dalam metode IDsAdminNewObjExt::SetObject. Ekstensi tidak boleh menerapkan properti cache dengan memanggil IAD::SetInfo. Ketika semua properti telah ditulis, ekstensi pembuatan objek utama menerapkan perubahan dengan memanggil IAD::SetInfo. Ini dibahas secara lebih rinci di bawah ini.

Jika terjadi kesalahan, ekstensi akan diberi tahu tentang kesalahan dan selama operasi itu terjadi ketika metode IDsAdminNewObjExt::OnError dipanggil.

Menerapkan Wizard Pembuatan Objek Utama

Implementasi wizard pembuatan objek utama identik dengan wizard pembuatan objek sekunder, kecuali bahwa wizard pembuatan objek utama harus melakukan beberapa langkah lagi.

Sebelum halaman pertama diberhentikan, wizard pembuatan objek harus membuat objek direktori sementara. Untuk melakukan ini, panggil metode IDsAdminNewObjPrimarySite::CreateNew. Penunjuk ke antarmuka IDsAdminNewObjPrimarySite diperoleh dengan memanggil QueryInterface dengan IID_IDsAdminNewObjPrimarySite pada antarmuka IDsAdminNewObj yang diteruskan ke IDsAdminNewObjExt::Initialize. Metode CreateNew membuat objek sementara baru dan memanggil IDAdminNewObjExt::SetObject untuk setiap ekstensi.

Ketika wizard pembuatan objek berisi lebih dari satu halaman, sistem mengimplementasikan halaman "Selesai" yang menampilkan ringkasan informasi objek yang akan disimpan. Ketika tombol Selesai pada halaman "Selesai" diklik, sistem akan memanggil setiap ID ekstensi pembuatan objekAdminNewObjExt::WriteData dan kemudian menerapkan objek sementara ke memori persisten. Namun, jika wizard pembuatan objek hanya berisi satu halaman, halaman akan memiliki tombol OK dan Batalkan alih-alih tombol Kembali, Berikutnya, dan Batal yang biasanya ditemukan dalam wizard dan tidak ada halaman "Selesai" yang disediakan. Karena itu, wizard ekstensi pembuatan objek satu halaman harus memanggil IDAdminNewObjPrimarySite::Commit untuk melakukan operasi tulis dan simpan. Ekstensi pembuatan objek utama satu halaman harus memanggil Penerapan sebagai respons terhadap pemberitahuan PSN_WIZFINISH.

Karena ekstensi pembuatan objek lainnya dapat menambahkan halaman ke wizard, ekstensi pembuatan objek utama mungkin tidak tahu apakah ada lebih dari satu halaman dalam panduan. Ini bukan masalah karena dua alasan: Pertama, jika sistem mengimplementasikan halaman "Selesai", ekstensi pembuatan objek utama akan menerima pemberitahuan PSN_WIZNEXT alih-alih pemberitahuan PSN_WIZNEXT. Kedua, Penerapan akan gagal secara tidak berbahaya jika wizard berisi lebih dari satu halaman.