【问题标题】:Can't remove email or phone numbers from EWS contact object无法从 EWS 联系人对象中删除电子邮件或电话号码
【发布时间】:2018-08-24 15:37:08
【问题描述】:

我正在尝试通过删除 EmailAddress1 和 BusinessPhone 来更新 EWS 联系人对象。

我正在参考这篇 MSDN 博客文章,其中详细介绍了如何处理电子邮件。 https://blogs.msdn.microsoft.com/emeamsgdev/2012/05/17/ews-managed-api-how-to-remove-email1-email2-email3-from-a-contact/

我想我已经大致弄清楚了,但我不知道如何为一组 ExtendedPropertyDefinition 创建 ExtendedPropertyDefinition。这是博客文章中的 C# 代码。

ExtendedPropertyDefinition[] Email1PropertyGroup = new 
  ExtendedPropertyDefinition[5]{ PidLidEmail1DisplayName, 
    PidLidEmail1AddressType, 
    PidLidEmail1Address, 
    PidLidEmail1OriginalDisplayName, 
    PidLidEmail1OriginalEntryId};

这是我对 javascript 等效项的尝试

const emailDisplayName          = new ews.ExtendedPropertyDefinition(ews.DefaultExtendedPropertySet.Address, 0x8080, ews.MapiPropertyType.String);
const emailAddressType          = new ews.ExtendedPropertyDefinition(ews.DefaultExtendedPropertySet.Address, 0x8082, ews.MapiPropertyType.String);
const emailAddress              = new ews.ExtendedPropertyDefinition(ews.DefaultExtendedPropertySet.Address, 0x8083, ews.MapiPropertyType.String);
const emailOriginalDisplayName  = new ews.ExtendedPropertyDefinition(ews.DefaultExtendedPropertySet.Address, 0x8084, ews.MapiPropertyType.String);
const emailOriginalEntryId      = new ews.ExtendedPropertyDefinition(ews.DefaultExtendedPropertySet.Address, 0x8085, ews.MapiPropertyType.Binary);
const emailPropertyGroup = 
  new ews.ExtendedPropertyDefinition([emailDisplayName, 
                                      emailAddressType, 
                                      emailAddress, 
                                      emailOriginalDisplayName, 
                                      emailOriginalEntryId]);
const updatedContact = 
  ews.Contact.Bind(window.exchangeService, 
                   ewsId, 
                   emailPropertyGroup).then(response => {

但是当我在我的 .Bind 中传递这个 emailPropertyGroup 时,我得到了一个异常。如果我没有通过 emailPropertyGroup,我可以更新我的联系人,并且我只删除了 Surname、GivenName 等内容。

在成功的绑定解决方案中,我将使用此代码删除这些属性。

response.RemoveExtendedProperty(emailDisplayName);
response.RemoveExtendedProperty(emailAddressType);
response.RemoveExtendedProperty(emailAddress);                  
response.RemoveExtendedProperty(emailOriginalDisplayName);            
response.RemoveExtendedProperty(emailOriginalEntryId);

但是,我从来没有访问过这个代码,因为我一绑定就得到一个异常。这是一个例外。

debuggability.js:870 [31mUnhandled rejection TypeError: this.PropertySet.Contains is not a function
at GetItemRequest.get [as EmitTimeZoneHeader] (https://sr1.genband.com/genlync/bundle-electron.js:136846:37)
at GetItemRequest../vendor/ews-javascript-api/js/Core/Requests/ServiceRequestBase.js.ServiceRequestBase.WriteToXml (https://sr1.genband.com/genlync/bundle-electron.js:140968:111)
at GetItemRequest../vendor/ews-javascript-api/js/Core/Requests/ServiceRequestBase.js.ServiceRequestBase.EmitRequest (https://sr1.genband.com/genlync/bundle-electron.js:140642:18)
at GetItemRequest../vendor/ews-javascript-api/js/Core/Requests/ServiceRequestBase.js.ServiceRequestBase.BuildXHR (https://sr1.genband.com/genlync/bundle-electron.js:140608:14)
at https://sr1.genband.com/genlync/bundle-electron.js:141665:33
at Promise._execute (https://sr1.genband.com/genlync/bundle-electron.js:2238:9)
at Promise._resolveFromExecutor (https://sr1.genband.com/genlync/bundle-electron.js:4593:18)
at new Promise (https://sr1.genband.com/genlync/bundle-electron.js:4189:10)
at GetItemRequest../vendor/ews-javascript-api/js/Core/Requests/SimpleServiceRequestBase.js.SimpleServiceRequestBase.InternalExecute (https://sr1.genband.com/genlync/bundle-electron.js:141664:16)
at https://sr1.genband.com/genlync/bundle-electron.js:139547:19
at Promise._execute (https://sr1.genband.com/genlync/bundle-electron.js:2238:9)
at Promise._resolveFromExecutor (https://sr1.genband.com/genlync/bundle-electron.js:4593:18)
at new Promise (https://sr1.genband.com/genlync/bundle-electron.js:4189:10)
at GetItemRequest../vendor/ews-javascript-api/js/Core/Requests/MultiResponseServiceRequest.js.MultiResponseServiceRequest.Execute (https://sr1.genband.com/genlync/bundle-electron.js:139546:16)
at ExchangeService../vendor/ews-javascript-api/js/Core/ExchangeService.js.ExchangeService.InternalBindToItems (https://sr1.genband.com/genlync/bundle-electron.js:128751:24)
at ExchangeService../vendor/ews-javascript-api/js/Core/ExchangeService.js.ExchangeService.BindToItem (https://sr1.genband.com/genlync/bundle-electron.js:128533:21)
at Function../vendor/ews-javascript-api/js/Core/ServiceObjects/Items/Contact.js.Contact.Bind (https://sr1.genband.com/genlync/bundle-electron.js:150740:24)
at Object.updateContact [as @@ews/update-addressbook] (https://sr1.genband.com/genlync/bundle-electron.js:90551:90)
at https://sr1.genband.com/genlync/bundle-electron.js:90889:46
at https://sr1.genband.com/genlync/bundle-electron.js:91653:24
at https://sr1.genband.com/genlync/bundle-electron.js:189169:291
at https://sr1.genband.com/genlync/bundle-electron.js:90997:24
at ContactsContainer._handleUpdateContact (https://sr1.genband.com/genlync/bundle-electron.js:71762:17)
at ContactsView._handleEditContactModalSave (https://sr1.genband.com/genlync/bundle-electron.js:72656:17)
at ModalCreateEditPABContactView.<anonymous> (https://sr1.genband.com/genlync/bundle-electron.js:81774:28)
at commitCallbacks (https://sr1.genband.com/genlync/bundle-electron.js:44319:15)
at commitLifeCycles (https://sr1.genband.com/genlync/bundle-electron.js:46940:13)
at commitAllLifeCycles (https://sr1.genband.com/genlync/bundle-electron.js:48102:9)
at HTMLUnknownElement.callCallback (https://sr1.genband.com/genlync/bundle-electron.js:38698:14)
at Object.invokeGuardedCallbackDev (https://sr1.genband.com/genlync/bundle-electron.js:38737:16)
at invokeGuardedCallback (https://sr1.genband.com/genlync/bundle-electron.js:38594:27)
at commitRoot (https://sr1.genband.com/genlync/bundle-electron.js:48206:9)
at performWorkOnRoot (https://sr1.genband.com/genlync/bundle-electron.js:49173:42)
at performWork (https://sr1.genband.com/genlync/bundle-electron.js:49123:7)
at batchedUpdates (https://sr1.genband.com/genlync/bundle-electron.js:49242:9)
at batchedUpdates (https://sr1.genband.com/genlync/bundle-electron.js:40486:12)
at dispatchEvent (https://sr1.genband.com/genlync/bundle-electron.js:41577:5)[0m

另外,是否为每个扩展属性 ID 定义了常量?博文只传入原始的十六进制值,例如 0x8080。这些是否记录在任何地方?

【问题讨论】:

    标签: ews-javascript-api


    【解决方案1】:

    根据生成的soap信封,十六进制值只是十六进制编码的id:

    <t:ExtendedFieldURI DistinguishedPropertySetId="Address" PropertyId="32896" PropertyType="String" />
    <t:ExtendedFieldURI DistinguishedPropertySetId="Address" PropertyId="32898" PropertyType="String" />
    <t:ExtendedFieldURI DistinguishedPropertySetId="Address" PropertyId="32899" PropertyType="String" />
    <t:ExtendedFieldURI DistinguishedPropertySetId="Address" PropertyId="32900" PropertyType="String" />
    <t:ExtendedFieldURI DistinguishedPropertySetId="Address" PropertyId="32901" PropertyType="Binary" />
    

    doc 显示了一个在参数中接受数字的构造函数,尝试将十六进制替换为相应的数字。

    您可以在此处找到完整的属性列表参考:[MS-OXPROPS]: Exchange Server Protocols Master Property List

    【讨论】:

      【解决方案2】:

      好的,明白了。我通过将每个属性的其他 ExtendedPropertyDefinition 对象作为数组传递来创建一个新的 ExtendedPropertyDefinition。相反,现在我正在使用这些属性创建一个新的 PropertySet,这似乎可行。

          const emailDisplayName          = new ews.ExtendedPropertyDefinition(ews.DefaultExtendedPropertySet.Address, 0x8080, ews.MapiPropertyType.String);
          const emailAddressType          = new ews.ExtendedPropertyDefinition(ews.DefaultExtendedPropertySet.Address, 0x8082, ews.MapiPropertyType.String);
          const emailAddress              = new ews.ExtendedPropertyDefinition(ews.DefaultExtendedPropertySet.Address, 0x8083, ews.MapiPropertyType.String);
          const emailOriginalDisplayName  = new ews.ExtendedPropertyDefinition(ews.DefaultExtendedPropertySet.Address, 0x8084, ews.MapiPropertyType.String);
          const emailOriginalEntryId      = new ews.ExtendedPropertyDefinition(ews.DefaultExtendedPropertySet.Address, 0x8085, ews.MapiPropertyType.Binary);
      
          const emailPropertyGroup        = new ews.PropertySet(ews.BasePropertySet.FirstClassProperties, [emailDisplayName, emailAddressType, emailAddress, emailOriginalDisplayName, emailOriginalEntryId]);
      
          const updatedContact = ews.Contact.Bind(window.exchangeService, ewsId, emailPropertyGroup).then(response => {
      

      【讨论】:

        【解决方案3】:

        这是正确创建 ExtendedPropertyDefinition Array 的方法

        let emailPropertyGroup = [
            emailDisplayName,
            emailAddressType,
            emailAddress,
            emailOriginalDisplayName,
            emailOriginalEntryId
        ];
        

        然后你可以像这样将它添加到属性集

        let props = new PropertySet(BasePropertySet.IdOnly);
        props.Add(ContactSchema.DisplayName);
        props.Add(ContactSchema.GivenName);
        props.Add(ContactSchema.EmailAddresses);
        props.Add(ContactSchema.EmailAddress1);
        props.AddRange(emailPropertyGroup); // this line
        

        v 0.9.2 中缺少 ExtendedPropertyCollection 类的代码,即使您修复了上述代码,也会导致错误。我在 npm 上发布了 @next ag 的最新更改。这将在@next 标记或 0.9.3

        中与 v 0.9.3-dev.1 一起使用

        【讨论】:

          猜你喜欢
          • 2018-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-04
          • 2011-08-23
          • 1970-01-01
          • 2018-03-16
          相关资源
          最近更新 更多