outlook - 即使我在 Item_Write 中设置了取消,也会发送 session 通知

标签 outlook vsto outlook-addin outlook-2010

我在 Item_Write 事件处理程序中为 session 请求设置 Cancel 检查,因为如果我在 Item_Send 中将 Cancel 设置为 true, session 窗口将关闭。我想要做的是提示用户他们有收件人,这些收件人通常会使用功能区中的自定义按钮进行处理(按钮详细信息对我的问题并不重要)。无论如何,当我尝试取消 Item_Write 事件时,无论如何都会发送 session 通知。无论我尝试什么,我都无法阻止 session 通知发出,即使我将 ref Cancel 设置为 true。如果我在 Item_Send 上取消,则窗口关闭,这不是用户想要的。此时我唯一能想到的可能是 requestDetailsRegion.SaveRequestDetailsToLocalOutlookItemProperties(),它将自定义表单区域字段属性保存到 AppointmentItem 上定义的自定义属性,触发 Application_Item_Load 事件,这不知何故提示 Outlook 发送 session 邀请注意,就好像它正在等待中一样。我在 Outlook 2010 中运行它。提前致谢。

下面是一些示例代码:

  void Item_Write(ref bool Cancel)        
 {    

            Cancel = CancelInvite(Cancel);                
 }

        private bool CancelInvite(bool Cancel)
        {

            Inspector activeInspector = Globals.ThisAddIn.Application.ActiveInspector();
            WindowFormRegionCollection formRegions = Globals.FormRegions[activeInspector];
            RequestDetailsFormRegion requestDetailsRegion = formRegions.RequestDetailsForm;


                // Add request form details to meeting item.
                requestDetailsRegion.SaveRequestDetailsToLocalOutlookItemProperties();

                // Checking if there's an incomplete form request pending submission
                if (requestDetailsRegion.txtFileName_Hidden.TextLength == 0 &&
                    appointmentItem != null && appointmentItem.MeetingStatus != OlMeetingStatus.olMeetingCanceled)
                {
                    Persons meetingRecipients = new Persons();



                    foreach (Outlook.Recipient recipient in appointmentItem.Recipients)
                        if (recipient.Address != activeInspector.Session.CurrentUser.Address)
                            meetingRecipients.Add(new MeetingRecipient(recipient));

                    if (meetingRecipients.ContainsSpecialRecipients)
                    {                           
                        CustomDialog customDialog = new CustomDialog();
                        customDialog.OkButtonText = messageBoxTextStatusOK;
                        customDialog.CancelButtonText = messageBoxTextStatusCancel;

                        DialogResult dialogResult = customDialog.ShowDialog();

                        if (dialogResult == DialogResult.Cancel)
                        {
                            Cancel = true;
                        }
                        else
                        {
                            Cancel = false;
                        }    

                        customDialog.Close();
                    }
                }                

            return Cancel;
        }

   public void SaveRequestDetailsToLocalOutlookItemProperties()
        {
            if (this.OutlookItem is Outlook.AppointmentItem)
            {
                Outlook.AppointmentItem appointmentItem = (Outlook.AppointmentItem)this.OutlookItem;

                // Checking if organizer already cancelled meeting. If so, then no need to update apppointment item properties.
                if (appointmentItem.MeetingStatus != Outlook.OlMeetingStatus.olMeetingCanceled)
                {

                    appointmentItem.ItemProperties[RequestSubmitted].Value = chkSubmitted.Checked; // Hidden 
                    appointmentItem.ItemProperties[Filename].Value = txtFileName_Hidden.Text; // Hidden

                    appointmentItem.ItemProperties[ReasonForVisit].Value = txtReason.Text;

   // SPARING SIMILAR LINES OF CODE

    ...
                    chkSaved.Checked = true;
                }
            }

最佳答案

您永远不会将 (ref) Cancel 参数设置为 true

void Item_Write(ref bool Cancel)        
 {    

            this.cancelInviteResult = CancelInvite(Cancel);
            Cancel = this.cancelInviteResult; 
 }

关于outlook - 即使我在 Item_Write 中设置了取消,也会发送 session 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15917115/

相关文章:

visual-studio-2008 - 如何为 Outlook 插件内置自动更新?

vba - 使用 VBA 阅读新的 Outlook 电子邮件?

vba - 在 Outlook 2016 中添加上下文菜单项

java - 如何在 Outlook 中阅读今天起的电子邮件

c# - 如何在 C# VSTO 3 的 word 文档中验证具有给定 ID 的表是否存在

C# VSTO : How to block a user from interacting with client (Excel) for a brief period?

c# - 如何自动化测试 Outlook Add-In?

vba - 使用VBA永久删除Outlook中的MailMessage吗?

c# - VSTO 字 2016 : Squiggly underline without affecting undo

macos - macOS : Native Add-in, 上的 Outlook 2016 如何进行