Outlook 即使我已在项目_Write中设置了取消,仍将发送会议通知

Outlook 即使我已在项目_Write中设置了取消,仍将发送会议通知,outlook,vsto,outlook-addin,outlook-2010,Outlook,Vsto,Outlook Addin,Outlook 2010,我正在会议请求的Item_Write事件处理程序中设置Cancel check,因为如果我在Item_Send中将Cancel设置为true,会议窗口将关闭。我试图做的是提示用户他们有通常会使用功能区中的自定义按钮处理的收件人(按钮详细信息对我的问题不重要)。无论如何,当我试图取消项目写入事件时,会发送会议通知。无论我怎么做,我都无法阻止会议通知发出,即使我将ref Cancel设置为true。如果我取消发送项目,那么窗口将关闭,这不是用户想要的。此时我唯一能想到的可能是requestDetai

我正在会议请求的Item_Write事件处理程序中设置Cancel check,因为如果我在Item_Send中将Cancel设置为true,会议窗口将关闭。我试图做的是提示用户他们有通常会使用功能区中的自定义按钮处理的收件人(按钮详细信息对我的问题不重要)。无论如何,当我试图取消项目写入事件时,会发送会议通知。无论我怎么做,我都无法阻止会议通知发出,即使我将ref Cancel设置为true。如果我取消发送项目,那么窗口将关闭,这不是用户想要的。此时我唯一能想到的可能是requestDetailsRegion.SaveRequestDetailsToLocalOutlookItemProperties(),它将自定义表单区域字段属性保存到AppointItem上定义的自定义属性,正在触发应用程序\u项目\u加载事件,这会以某种方式提示Outlook发送会议邀请通知,好像它处于挂起状态。我在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; 
 }

谢谢你的回复,德米特里。我确实喜欢。我将更新代码示例。尽管将“取消”设置为true,但仍会发生此情况。这正是让我抓狂的问题。我只是想澄清一下,当我说“它发生了…”时,尽管将“取消”设置为true,但仍会发送会议通知。再次感谢。您的Application.ItemSend事件处理程序是什么?感谢您检查Dmitry。至于当前在应用程序中的内容。ItemSend…什么都没有。但在我使用CancelInvite签入应用程序.ItemSend之前,当Cancel==true时,它会阻止发送请求通知,但会突然关闭窗口。如果用户从对话框中选择“不发送”,则希望返回会议请求表单。很抱歉,我忘了在我的问题中包括这一点。我将相应地进行更新。我将把对取消检查函数的调用放回ItemSend中,但这次我看是否可以取消关闭窗口。我认为在告诉用户这个要求无法满足之前,这是我目前唯一明智的选择。