如何以编程方式禁用 Outlook 中的联系人编辑?

How to programatically disable contacts editing in Outlook?

在 Outlook 中,我们需要禁用编辑从外部源(作为我们加载项的一部分)导入的联系人。为了区分此类联系人,我们引入了用户定义的 属性,这是我们在导入期间设置的(例如 ExternalId)。

但是您如何在代码中禁用此类联系人的编辑功能?

无法以编程方式执行此操作。

我想说没有简单的方法可以禁用在 Outlook 中编辑联系人。

但是!您可以开发自定义 UI,它可以在大多数情况下阻止编辑联系人 - 替换 Inspectors 和 Explorer 中的默认 UI。因此,用户将获得您的自定义 UI,您可以在其中允许或不允许编辑联系人。有关详细信息,请参阅 Creating Outlook Form Regions

您可能还会发现 Advanced Outlook view and form regions 有帮助。

当然可以禁用它!

您可以禁用显示带有联系人详细信息的对话框(关键提示​​:挂钩 Application.ItemLoad,如果您不想编辑该联系人,您可以取消该事件)

或者,最好您可以拒绝保存更改。请参阅示例代码。

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    this.Application.Inspectors.NewInspector += Inspectors_NewInspector;
}

private void Inspectors_NewInspector(Outlook.Inspector Inspector)
{
    Outlook.ContactItem contact = Inspector.CurrentItem as Outlook.ContactItem;
    if (null != contact)
    {
        if (Utils.IsNonEditableContact(contact))
        {
            contact.Write += CancelSaveEventForContact;
        }
    }
}        

private void CancelSaveEventForCrmContact(ref bool Cancel)
{
    MessageBox.Show("Editing of the this contacts in Outlook is not allowed.", "I'm sorry!", MessageBoxButtons.OK, MessageBoxIcon.Error);
    Cancel = true;
}