Bagikan melalui


Antarmuka IOleUndoManager (ocidl.h)

Antarmuka IOleUndoManager memungkinkan kontainer menerapkan operasi batalkan dan ulangi multi-tingkat untuk tindakan yang terjadi dalam kontrol yang terkandung.

Warisan

Antarmuka IOleUndoManager mewarisi dari antarmuka IUnknown . IOleUndoManager juga memiliki jenis anggota ini:

Metode

Antarmuka IOleUndoManager memiliki metode ini.

 
IOleUndoManager::Tambahkan

Menambahkan unit urungkan sederhana ke koleksi. Saat unit pembukaan induk terbuka, manajer urungkan menambahkan unit urungkan ke unit tersebut dengan memanggil IOleParentUndoUnit::Add.
IOleUndoManager::Close

Menutup unit urungkan induk yang ditentukan. (IOleUndoManager.Close)
IOleUndoManager::D iscardFrom

Menginstruksikan manajer batalkan untuk membuang unit urungkan yang ditentukan dan semua unit urungkan di bawahnya pada tumpukan urungkan atau ulangi.
IOleUndoManager::Enable

Mengaktifkan atau menonaktifkan manajer urungkan.
IOleUndoManager::EnumRedoable

Membuat objek enumerator yang dapat digunakan pemanggil untuk melakukan iterasi melalui serangkaian unit urungkan tingkat atas dari tumpukan fase pengulangan.
IOleUndoManager::EnumUndoable

Membuat objek enumerator yang dapat digunakan pemanggil untuk melakukan iterasi melalui serangkaian unit urungkan tingkat atas dari tumpukan batalkan.
IOleUndoManager::GetLastRedoDescription

Mengambil deskripsi untuk unit urungkan tingkat atas yang berada di atas tumpukan pengulangan.
IOleUndoManager::GetLastUndoDescription

Mengambil deskripsi untuk unit urungkan tingkat atas yang berada di atas tumpukan batalkan.
IOleUndoManager::GetOpenParentState

Mengambil informasi status tentang unit pembukaan induk terbuka paling dalam. (IOleUndoManager.GetOpenParentState)
IOleUndoManager::Buka

Membuka unit pembukaan induk baru, yang menjadi bagian dari tumpukan pembukaan unit yang berisinya.
IOleUndoManager::RedoTo

Menginstruksikan manajer urungkan untuk memanggil tindakan batalkan kembali melalui tumpukan pengulangan, ke bawah ke dan termasuk unit urungkan yang ditentukan.
IOleUndoManager::UndoTo

Menginstruksikan manajer urungkan untuk memanggil tindakan batalkan kembali melalui tumpukan urungkan, ke bawah ke dan termasuk unit urungkan yang ditentukan.

Keterangan

Kontrol harus membuat unit batalkan dengan antarmuka IOleUndoUnit atau unit urungkan induk dengan antarmuka IOleParentUndoUnit yang berasal dari IOleUndoUnit. Kedua antarmuka ini melakukan tindakan batalkan dan unit urungkan induk juga dapat berisi unit urungkan berlapis.

Manajer urungkan menyediakan layanan urungkan dan urungkan terpusat. Ini mengelola unit urungkan induk dan unit urungkan sederhana pada tumpukan urungkan dan ulangi. Apakah objek aktif UI atau tidak, objek dapat menyetor unit pembukaan pada tumpukan ini dengan memanggil metode di manajer urungkan.

Manajer urungkan terpusat kemudian memiliki data yang diperlukan untuk mendukung antarmuka pengguna urungkan dan ulangi untuk aplikasi host dan dapat membuang informasi urungkan secara bertahap saat tumpukan menjadi penuh.

Manajer batalkan diimplementasikan sebagai layanan dan objek mendapatkan pointer ke IOleUndoManger dari antarmuka IServiceProvider . Biasanya diimplementasikan oleh kontainer. Layanan ini mengelola dua tumpukan, tumpukan batalkan dan tumpukan pengulangan, yang masing-masing berisi unit urungkan yang dihasilkan oleh objek yang disematkan atau oleh aplikasi kontainer itu sendiri.

Unit urungkan biasanya dihasilkan sebagai respons terhadap tindakan yang diambil oleh pengguna akhir. Objek tidak menghasilkan tindakan batalkan untuk peristiwa terprogram. Bahkan, peristiwa terprogram harus menghapus tumpukan batalkan karena peristiwa terprogram mungkin dapat membatalkan asumsi yang dibuat oleh unit urungkan pada tumpukan.

Ketika status objek berubah, objek akan membuat unit urungkan yang merangkum semua informasi yang diperlukan untuk membatalkan perubahan tersebut. Objek memanggil metode di manajer urungkan untuk menempatkan unit urungkan pada tumpukan. Kemudian, ketika pengguna akhir memilih operasi Batalkan, manajer batalkan mengambil unit pembatalan teratas dari tumpukan, memanggil tindakannya dengan memanggil metode IOleUndoUnit::D o , lalu merilisnya. Ketika pengguna akhir memilih operasi Ulangi, manajer urungkan mengambil unit pengulangan teratas dari tumpukan, memanggil tindakannya dengan memanggil metode IOleUndoUnit::D o , lalu merilisnya.

Manajer urungkan memiliki tiga status: status dasar, status batalkan, dan status fase pengulangan. Ini dimulai dalam status dasar. Untuk melakukan tindakan dari tumpukan batalkan, tindakan tersebut menempatkan dirinya ke dalam status batalkan, memanggil IOleUndoUnit::D o pada unit urungkan, dan kembali ke status dasar. Untuk melakukan tindakan dari tumpukan pengulangan, tindakan tersebut menempatkan dirinya ke dalam status fase pengulangan, memanggil IOleUndoUnit::D o pada unit urungkan, dan kembali ke status dasar.

Jika manajer urungkan menerima unit urungkan baru saat berada dalam status dasar, manajer akan menempatkan unit pada tumpukan batalkan dan membuang seluruh tumpukan pengulangan. Saat berada dalam status batalkan, ia menempatkan unit masuk pada tumpukan fase pengulangan. Saat berada dalam status pengulangan, ia menempatkannya di tumpukan batalkan tanpa membersihkan tumpukan pengulangan.

Manajer urungkan juga memungkinkan objek untuk membuang tumpukan batalkan atau ulangi mulai dari objek apa pun di salah satu tumpukan.

Aplikasi host menentukan cakupan manajer urungkan. Misalnya, dalam satu aplikasi, cakupannya mungkin berada di tingkat dokumen; manajer urungkan terpisah dipertahankan untuk setiap dokumen; dan urungkan dikelola secara independen untuk setiap dokumen. Namun, aplikasi lain mempertahankan satu manajer urungkan, dan oleh karena itu satu urungkan cakupan, untuk seluruh aplikasi.

Penanganan Kesalahan

Operasi batalkan gagal dan meninggalkan dokumen dalam keadaan tidak stabil adalah sesuatu yang harus dihindari oleh manajer urungkan, membatalkan unit, dan aplikasi itu sendiri. Akibatnya, ada persyaratan tertentu yang membatalkan unit, manajer urungkan, dan aplikasi atau komponen yang menggunakan urungkan harus sesuai.

Untuk melakukan urungkan, manajer urungkan memanggil IOleUndoUnit::D o pada satu atau beberapa unit urungkan yang dapat, pada gilirannya, berisi lebih banyak unit. Jika unit di suatu tempat dalam hierarki gagal, kesalahan pada akhirnya akan mencapai manajer urungkan, yang bertanggung jawab untuk melakukan upaya untuk mengembalikan status dokumen ke apa yang sebelum panggilan ke unit tingkat atas terakhir. Manajer batalkan melakukan putar kembali dengan memanggil IOleUndoUnit::D o pada unit yang ditambahkan ke tumpukan pengulangan selama upaya batalkan. Jika pemutaran kembali juga gagal, maka manajer urungkan dipaksa untuk meninggalkan semuanya dan kembali ke aplikasi. Manajer urungkan menunjukkan apakah pembatalan berhasil, dan aplikasi dapat mengambil tindakan yang berbeda berdasarkan ini, seperti menginisialisasi ulang komponen sehingga berada dalam status yang diketahui.

Semua langkah dalam menambahkan unit batalkan ke tumpukan harus dilakukan secara atomik. Artinya, semua langkah harus berhasil atau tidak satu pun dari mereka harus berhasil.

Aplikasi host yang menyediakan manajer urungkan memutuskan tindakan apa yang harus diambil ketika urungkan gagal. Setidaknya, itu harus memberi tahu pengguna tentang kegagalan. Aplikasi host akan diberitahu oleh manajer urungkan apakah pembatalan berhasil dan apakah upaya pembatalan berhasil. Jika pembatalan dan pembatalan gagal, aplikasi host dapat menyajikan pengguna dengan beberapa opsi, termasuk segera mematikan aplikasi.

Unit pembatasan sederhana tidak boleh mengubah status objek apa pun jika mengembalikan kegagalan. Ini termasuk status tumpukan pengulangan atau urungkan tumpukan jika melakukan pengulangan. Mereka juga diharuskan untuk menempatkan unit yang sesuai pada tumpukan ulang atau batalkan jika berhasil. Aplikasi harus stabil sebelum dan sesudah unit dipanggil.

Unit pembatasan induk memiliki persyaratan yang sama dengan unit sederhana, dengan satu pengecualian. Jika satu atau beberapa anak berhasil sebelum kegagalan anak lain, unit induk harus menerapkan unit yang sesuai pada tumpukan pengulangan dan mengembalikan kegagalan ke induknya. Jika tidak ada anak yang berhasil, unit induk harus menerapkan unit pengulangannya hanya jika telah membuat perubahan status yang perlu digulung balik. Misalnya, unit induk berisi tiga unit sederhana. Dua unit pertama berhasil dan ditambahkan ke tumpukan fase pengulangan, tetapi yang ketiga gagal. Pada titik ini, unit induk menerapkan unit pengulangannya dan mengembalikan kegagalan.

Sebagai efek samping, unit induk tidak boleh membuat perubahan status yang bergantung pada keberhasilan anak-anak mereka. Melakukan ini akan menyebabkan perilaku putar kembali rusak. Jika unit induk membuat perubahan status, unit tersebut harus melakukannya sebelum memanggil anak apa pun. Kemudian, jika perubahan status gagal, itu tidak boleh melakukan unit pengulangannya, itu tidak boleh memanggil anak-anak, dan itu harus mengembalikan kegagalan ke induknya.

Manajer urungkan memiliki satu persyaratan utama untuk penanganan kesalahan: untuk mencoba membatalkan saat pembatalan atau pengulangan gagal.

Objek yang tidak sesuai

Objek yang tidak mendukung urungkan multi-tingkat dapat menyebabkan masalah serius untuk layanan urungkan global. Karena objek tidak dapat diandalkan untuk memperbarui manajer pembatalan dengan benar, unit apa pun yang dikirimkan oleh objek lain juga dicurigai, karena unitnya mungkin mengandalkan status objek yang tidak sesuai. Mencoba membatalkan unit objek yang sesuai mungkin tidak berhasil, karena status dalam objek yang tidak sesuai tidak akan cocok.

Untuk mendeteksi objek yang tidak mendukung urungkan multi-tingkat, periksa nilai OLEMISC_SUPPORTSMULTILEVELUNDO. Objek yang dapat berpartisipasi dalam layanan urungkan global menetapkan nilai ini.

Ketika objek tanpa nilai ini ditambahkan ke konteks urungkan yang terlihat pengguna, praktik terbaik adalah menonaktifkan antarmuka pengguna urungkan untuk konteks ini. Atau, dialog dapat disajikan kepada pengguna, menanyakan kepada mereka apakah akan mencoba memberikan dukungan pembukaan parsial, mengerjakan ketidakpatuhan objek baru.

Selain itu, objek yang tidak sesuai dapat ditambahkan ke kontainer berlapis. Dalam hal ini, kontainer berlapis perlu memberi tahu manajer urungkan bahwa urungkan tidak dapat lagi didukung dengan aman dengan memanggil IOleUndoManager::Enable dengan FALSE.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows 2000 Server [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header ocidl.h

Lihat juga

IOleParentUndoUnit

IOleUndoUnit