无法添加自定义用户 属性,即使它不存在
Unable to add custom user property even if it does not exist
我已经为 Outlook 2016 / 2019 实现了 VSTO 插件。我添加了一个自定义 属性。在生产中,对于一个用户(该用户也在不同的机器上尝试过),每当我们尝试添加自定义 属性 时,我们都会遇到异常。
我正在使用以下代码片段:--
UserProperty securedFlag = mailItem.UserProperties.Find("Custom.Secured", true);
int currentValue = -1;
if (securedFlag == null)
{
try
{
securedFlag = mailItem.UserProperties.Add("Custom.Secured", OlUserPropertyType.olInteger, false, OlFormatInteger.olFormatIntegerPlain);
}
catch(System.Exception ex)
{
DarkAddInEventLog.WriteException(ex, "Secure");
}
}
当我们执行上面的代码时,它会抛出以下异常:--
“已存在同名但数据类型不同的自定义字段。请输入不同的名称。”
我还尝试通过传递 false(在 find API 的第二个参数中)在非自定义属性中搜索相同的 属性,这也会抛出此 属性 不会抛出的异常存在。因此似乎可以确认这个属性之前是不存在的
现在我有两个疑问:--
1- 如果这个 属性 不存在,那么为什么 outlook 会抛出这个错误?
2- 同一个插件正在与其他用户一起使用,但只有一个用户面临此问题。是不是和一些邮箱配置有关?
该错误意味着同名 属性 已在同一邮箱中使用,它甚至可能不是您的 属性,但由于所有自定义属性都使用相同的 GUID (PS_PUBLIC_STRINGS
), 你可以运行解决这个重名问题。
您唯一的选择是使用不同的名称(并确保它不会通用到足以与其他一些应用程序创建的其他属性发生冲突 - 例如,您可以为所有属性添加一个唯一的前缀,例如“ MyCompanyProp.") 或完全避免使用 UserProperties
集合并使用 PropertyAccessor
设置您的自定义属性,使用您自己的自定义 GUID 指定命名属性的完整 DASL 名称。
我已经为 Outlook 2016 / 2019 实现了 VSTO 插件。我添加了一个自定义 属性。在生产中,对于一个用户(该用户也在不同的机器上尝试过),每当我们尝试添加自定义 属性 时,我们都会遇到异常。
我正在使用以下代码片段:--
UserProperty securedFlag = mailItem.UserProperties.Find("Custom.Secured", true);
int currentValue = -1;
if (securedFlag == null)
{
try
{
securedFlag = mailItem.UserProperties.Add("Custom.Secured", OlUserPropertyType.olInteger, false, OlFormatInteger.olFormatIntegerPlain);
}
catch(System.Exception ex)
{
DarkAddInEventLog.WriteException(ex, "Secure");
}
}
当我们执行上面的代码时,它会抛出以下异常:--
“已存在同名但数据类型不同的自定义字段。请输入不同的名称。”
我还尝试通过传递 false(在 find API 的第二个参数中)在非自定义属性中搜索相同的 属性,这也会抛出此 属性 不会抛出的异常存在。因此似乎可以确认这个属性之前是不存在的
现在我有两个疑问:--
1- 如果这个 属性 不存在,那么为什么 outlook 会抛出这个错误?
2- 同一个插件正在与其他用户一起使用,但只有一个用户面临此问题。是不是和一些邮箱配置有关?
该错误意味着同名 属性 已在同一邮箱中使用,它甚至可能不是您的 属性,但由于所有自定义属性都使用相同的 GUID (PS_PUBLIC_STRINGS
), 你可以运行解决这个重名问题。
您唯一的选择是使用不同的名称(并确保它不会通用到足以与其他一些应用程序创建的其他属性发生冲突 - 例如,您可以为所有属性添加一个唯一的前缀,例如“ MyCompanyProp.") 或完全避免使用 UserProperties
集合并使用 PropertyAccessor
设置您的自定义属性,使用您自己的自定义 GUID 指定命名属性的完整 DASL 名称。