Mengelola Item Kalender Outlook

Artikel ini membahas Outlook MapiCalendar item kalender disimpan sebagai MSG. Untuk bekerja dengan janji iCalendar (ICS) berbasis standar dan permintaan rapat, lihat Kelola Janjian; untuk menyimpan dan membaca item kalender di dalam PST, lihat Mengelola Item Kalender dalam File PST.

Aspose.Email MapiCalendar kelas menyediakan metode dan atribut untuk mengatur berbagai properti item kalender. Bagian ini menyediakan contoh kode untuk:

Buat dan Simpan Item Kalender

Potongan kode berikut menunjukkan cara membuat dan menyimpan item kalender dalam format ICS.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

// Create the appointment
MapiCalendar calendar = new MapiCalendar(
    "LAKE ARGYLE WA 6743",
    "Appointment",
    "This is a very important meeting :)",
    new DateTime(2012, 10, 2, 13, 0, 0),
    new DateTime(2012, 10, 2, 14, 0, 0));

calendar.Save(dataDir + "CalendarItem_out.ics", AppointmentSaveFormat.Ics);

Simpan Item Kalender sebagai File MSG

Potongan kode berikut menunjukkan cara menyimpan item kalender sebagai MSG.

calendar.Save(dataDir + "CalendarItemAsMSG_out.Msg", AppointmentSaveFormat.Msg);

Simpan ID Produk untuk Item Kalender MAPI ke ICS

The ProductIdentifier properti dari MapiCalendarIcsSaveOptions kelas digunakan untuk menyimpan item kalender MAPI ke file iCalendar (ICS) sambil mempertahankan informasi tanggal dan waktu asli serta pengidentifikasi produk khusus. Properti ini menentukan pengidentifikasi untuk produk yang membuat objek iCalendar.

Contoh kode berikut menunjukkan cara bekerja dengan data iCalendar (ICS) dalam objek kalender MAPI:

var icsSaveOptions = new MapiCalendarIcsSaveOptions
{
    KeepOriginalDateTimeStamp = true,
    ProductIdentifier = "Foo Ltd"
};

mapiCalendar.Save("my.ics", icsSaveOptions);

Dapatkan Jumlah Total Acara

The CalendarReader kelas memungkinkan penanganan acara kalender dengan mudah. Properti berikut dan sebuah metode memungkinkan Anda bekerja dengan banyak acara:

  • CalendarReader.Count - Properti Count dari kelas CalendarReader memungkinkan Anda mengambil jumlah komponen Vevent (acara) yang ada dalam kalender, memudahkan pelacakan total jumlah acara.
  • CalendarReader.IsMultiEvents - Properti ini menentukan apakah kalender berisi beberapa acara. Ini memberikan nilai boolean yang menunjukkan apakah kalender memiliki lebih dari satu acara, membantu mengidentifikasi kalender dengan satu atau banyak acara.
  • CalendarReader.Method - Properti Method memperoleh tipe metode iCalendar yang terkait dengan objek kalender. Ini mengembalikan tipe metode, seperti “REQUEST”, “PUBLISH”, atau “CANCEL”, memberikan wawasan berharga tentang tujuan kalender.
  • CalendarReader.Version - Mendapatkan Versi iCalendar.
  • CalendarReader.LoadAsMultiple() Metode ini memungkinkan pemuatan daftar acara dari kalender yang berisi banyak acara. Ini mengembalikan daftar objek Appointment, memungkinkan akses mudah dan pemrosesan masing‑masing acara secara terpisah.

Contoh kode berikut menunjukkan cara Anda dapat menerapkan kemampuan ini dalam proyek Anda:

var reader = new CalendarReader(fileName);
Console.WriteLine("Calendar contains " + reader.Count + " events");
Console.WriteLine("The Version of the calendar is " + reader.Version);
Console.WriteLine("The Method of the calendar is " + reader.Method);
Console.WriteLine("Does the calendar contain multiple events? - " + reader.IsMultiEvents);
List<Appointment> appointments = reader.LoadAsMultiple();

Tambahkan Pengingat Tampilan

Potongan kode berikut menunjukkan cara menambahkan pengingat tampilan ke kalender.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

// Create Appointment 
Appointment app = new Appointment("Home", DateTime.Now.AddHours(1), DateTime.Now.AddHours(1), "organizer@domain.com", "attendee@gmail.com");
MailMessage msg = new MailMessage();
msg.AddAlternateView(app.RequestApointment());
MapiMessage mapi = MapiMessage.FromMailMessage(msg);
MapiCalendar calendar = (MapiCalendar)mapi.ToMapiMessageItem();

// Set calendar Properties 
calendar.ReminderSet= true;
calendar.ReminderDelta = 45;//45 min before start of event

string savedFile = (dataDir + "calendarWithDisplayReminder.ics");
calendar.Save(savedFile, AppointmentSaveFormat.Ics);

Tambahkan Pengingat Audio

Potongan kode berikut menunjukkan cara menambahkan pengingat audio ke kalender.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
Appointment app = new Appointment("Home", DateTime.Now.AddHours(1), DateTime.Now.AddHours(1), "organizer@domain.com", "attendee@gmail.com");

MailMessage msg = new MailMessage();
msg.AddAlternateView(app.RequestApointment());
MapiMessage mapi = MapiMessage.FromMailMessage(msg);
MapiCalendar calendar = (MapiCalendar)mapi.ToMapiMessageItem();

// Set calendar properties
calendar.ReminderSet = true;
calendar.ReminderDelta = 58;//58 min before start of event
calendar.ReminderFileParameter = dataDir + "Alarm01.wav";
string savedFile = (dataDir + "calendarWithAudioReminder_out.ics");
calendar.Save(savedFile, AppointmentSaveFormat.Ics);

Tambah/Ambil Lampiran dari File Kalender

Potongan kode berikut menunjukkan cara menambahkan/mengambil lampiran dari file kalender.

string[] files = new string[3];
files[0] = dataDir + "attachment_1.doc";
files[1] = dataDir + "download.png";
files[2] = dataDir + "Desert.jpg";

Appointment app1 = new Appointment("Home", DateTime.Now.AddHours(1), DateTime.Now.AddHours(1), "organizer@domain.com", "attendee@gmail.com");
foreach (string file in files)
{
    using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(file)))
    {
        app1.Attachments.Add(new Attachment(ms, Path.GetFileName(file)));
    }
}

app1.Save(dataDir + "appWithAttachments_out.ics", AppointmentSaveFormat.Ics);

Appointment app2 = Appointment.Load(dataDir + "appWithAttachments_out.ics");
Console.WriteLine(app2.Attachments.Count);
foreach (Attachment att in app2.Attachments)
    Console.WriteLine(att.Name);

Periksa Status Penerima dalam Permintaan Pertemuan

Potongan kode berikut menunjukkan cara menampilkan status penerima dari permintaan pertemuan.

MapiMessage message = MapiMessage.FromFile(fileName);
foreach (MapiRecipient recipient in message.Recipients)
{
    Console.WriteLine(recipient.RecipientTrackStatus);
}

Buat MAPI Calendar TimeZone dari Zona Waktu Standar

Potongan kode berikut menunjukkan cara Membuat MapiCalendarTimeZone dari Zona Waktu standar.

MapiCalendarTimeZone timeZone = new MapiCalendarTimeZone(TimeZoneInfo.Local);

Setel Pengingat untuk Janji

Pengingat dapat ditambahkan ketika sebuah janji dibuat. Alarm ini dapat dipicu berdasarkan kriteria berbeda seperti n menit sebelum jadwal dimulai, mengulangi n kali dengan interval n. Tag yang berbeda dapat digunakan untuk membuat pemicu ini dalam skrip yang diapit oleh BEGIN:VALARM dan END:VALARM di dalam janji. Ada sejumlah varian di mana pengingat dapat diatur pada sebuah janji.

Tambahkan Tag untuk Menetapkan Pengingat

Potongan kode berikut menunjukkan cara mengatur pengingat dengan menambahkan tag.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

string location = "Meeting Location: Room 5";
DateTime startDate = new DateTime(1997, 3, 18, 18, 30, 00),
endDate = new DateTime(1997, 3, 18, 19, 30, 00);
MailAddress organizer = new MailAddress("aaa@amail.com", "Organizer");
MailAddressCollection attendees = new MailAddressCollection();
attendees.Add(new MailAddress("bbb@bmail.com", "First attendee"));

Appointment target = new Appointment(location, startDate, endDate, organizer, attendees);

// Audio alarm that will sound at a precise time and
// Repeat 4 more times at 15 minute intervals:
AppointmentReminder audioReminder = new AppointmentReminder();
audioReminder.Trigger = new ReminderTrigger(new DateTime(1997, 3, 17, 13, 30, 0, DateTimeKind.Utc));
audioReminder.Repeat = 4;
audioReminder.Duration = new ReminderDuration(new TimeSpan(0, 15, 0));
audioReminder.Action = ReminderAction.Audio;
ReminderAttachment attach = new ReminderAttachment(new Uri("ftp://Host.com/pub/sounds/bell-01.aud"));
audioReminder.Attachments.Add(attach);
target.Reminders.Add(audioReminder);


// Display alarm that will trigger 30 minutes before the
// Scheduled start of the event it is
// Associated with and will repeat 2 more times at 15 minute intervals:
AppointmentReminder displayReminder = new AppointmentReminder();
ReminderDuration dur = new ReminderDuration(new TimeSpan(0, -30, 0));
displayReminder.Trigger = new ReminderTrigger(dur, ReminderRelated.Start);
displayReminder.Repeat = 2;
displayReminder.Duration = new ReminderDuration(new TimeSpan(0, 15, 0));
displayReminder.Action = ReminderAction.Display;
displayReminder.Description = "Breakfast meeting with executive team at 8:30 AM EST";
target.Reminders.Add(displayReminder);

// Email alarm that will trigger 2 days before the
// Scheduled due date/time. It does not
// Repeat. The email has a subject, body and attachment link.
AppointmentReminder emailReminder = new AppointmentReminder();
ReminderDuration dur1 = new ReminderDuration(new TimeSpan(-2, 0, 0, 0));
emailReminder.Trigger = new ReminderTrigger(dur1, ReminderRelated.Start);
ReminderAttendee attendee = new ReminderAttendee("john_doe@host.com");
emailReminder.Attendees.Add(attendee);
emailReminder.Action = ReminderAction.Email;
emailReminder.Summary = "REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING";
emailReminder.Description = @"A draft agenda needs to be sent out to the attendees to the weekly managers meeting (MGR-LIST). Attached is a pointer the document template for the agenda file.";
ReminderAttachment attach1 = new ReminderAttachment(new Uri("http://Host.com/templates/agenda.doc"));
emailReminder.Attachments.Add(attach1);
target.Reminders.Add(emailReminder);

// Procedural alarm that will trigger at a precise date/time
// And will repeat 23 more times at one hour intervals. The alarm will
// Invoke a procedure file.
AppointmentReminder procReminder = new AppointmentReminder();
procReminder.Trigger = new ReminderTrigger(new DateTime(1998, 1, 1, 5, 0, 0, DateTimeKind.Utc));
procReminder.Repeat = 23;
procReminder.Duration = new ReminderDuration(new TimeSpan(1, 0, 0));
procReminder.Action = ReminderAction.Procedure;
ReminderAttachment attach2 = new ReminderAttachment(new Uri("ftp://Host.com/novo-procs/felizano.exe"));
procReminder.Attachments.Add(attach2);
target.Reminders.Add(procReminder);
target.Save(dataDir + "savedFile_out.ics");

Konversi Appointment EML ke MSG dengan Badan HTML

Sejak versi 19.3, Aspose.Email menyediakan kemampuan untuk mengkonversi Appointment EML ke MSG sambil mempertahankan badan HTML dari janji. Aspose.Email menyediakan sebuah MapiConversionOptions.ForcedRtfBodyForAppointment properti yang memiliki nilai default true. Ketika nilai dari MapiConversionOptions.ForcedRtfBodyForAppointment diatur ke true, isi janji dikonversi ke format RTF. Untuk mempertahankan format isi janji dalam HTML, atur nilai dari MapiConversionOptions.ForcedRtfBodyForAppointment menjadi false.

Contoh berikut menunjukkan penggunaan MapiConversionOptions.ForcedRtfBodyForAppointment properti untuk menjaga format isi janji dalam format HTML.

// Outlook directory
string dataDir = RunExamples.GetDataDir_Outlook();

MailMessage mailMessage = MailMessage.Load(dataDir + "TestAppointment.eml");

MapiConversionOptions conversionOptions = new MapiConversionOptions();
conversionOptions.Format = OutlookMessageFormat.Unicode;

// default value for ForcedRtfBodyForAppointment is true
conversionOptions.ForcedRtfBodyForAppointment = false;

MapiMessage mapiMessage = MapiMessage.FromMailMessage(mailMessage, conversionOptions);

Console.WriteLine("Body Type: " + mapiMessage.BodyType);

mapiMessage.Save(dataDir + "TestAppointment_out.msg");

Setel Status Item Kalender MAPI Secara Manual

Atur status objek MAPI Calendar secara eksplisit, mengganti perilaku default. Ini memungkinkan kontrol yang lebih baik atas status acara kalender, terutama ketika menangani permintaan rapat yang diterima. Secara default, ketika rapat dibuat, statusnya adalah MapiCalendarState.Meeting. Ketika diterima di kotak masuk penerima, secara otomatis berubah menjadi MapiCalendarState.Received, dan kelas pesan-nya diperbarui menjadi “IPM.Schedule.Meeting.Request”. Menggunakan SetStateForced memungkinkan penetapan status secara manual menjadi Received, yang dapat berguna untuk mempertahankan informasi penyelenggara saat menyimpan kalender sebagai file MSG. Namun, ini dapat mencegah penerusan atau pengiriman kembali rapat yang tepat.

Contoh kode di bawah ini menunjukkan cara membuat sebuah MapiCalendar objek, tentukan penyelenggara, dan secara eksplisit atur statusnya menjadi keduanya Meeting dan Received dengan SetStateForced. Kemudian menyimpan item kalender sebagai file .msg.

MapiCalendar appointment = new MapiCalendar(
    "LAKE ARGYLE WA 6743",
    "Appointment",
    "This is a very important meeting :)",
    new DateTime(2024, 5, 10, 12, 30, 0, DateTimeKind.Utc),
    new DateTime(2024, 5, 10, 13, 30, 0, DateTimeKind.Utc));

appointment.Organizer = new MapiElectronicAddress
{
    EmailAddress = "test@aaa.com",
    DisplayName = "test display Name"
};

appointment.SetStateForced(MapiCalendarState.Meeting | MapiCalendarState.Received);

appointment.Save("appointment.msg", AppointmentSaveFormat.Msg);

Lihat Juga