none
Mail App: Outlook overwrites extended properties set with makeEwsRequestAsync RRS feed

  • Question

  • Hello

    I do not understand this strange behaviour in Outlook...the extended property set in mail app with makeEwsRequestAsync is overwritten when in Outlook someone saves the item after clicking a button to set that property in mail app. And even this only happens in some cases.

    Here are the steps we are taking and where the problem occures:

    1. we create appointment via makeEwsRequestAsync (we get back ItemId and ChangeKey)
    2. we use above ItemId with displayAppointmentForm (which shows the proper appointment)
    3. in this form we activate the app and then:
    4. use makeEwsRequestAsync to create an extended property on this appointment
    5. use makeEwsRequestAsync to get the item (with our extended property) just to check if this property is set (and it is)
    6. then there is a button inside the app which also sets body content by using prepandAsync
    7. (The problem) user then clicks save (or Send) in Outlook (here the extended property made in step 4. gets deleted)

    The above problem does not happen if:

    • appointment is created in Outlook instead in our mail app via makeEwsRequestAsync or
    • between step 1. and 2. there is some pause (random but it seems longer then 10 sec...sometimes 30+ sec even required..in other words appointment is atleast 30 seconds old) or
    • you do the steps on existing appointment (skipping step 1 - working on existing appointment)

    I assume this happens becouse of Outlook synchorization with Exchange. However this does not happen if you do this steps on existing appointment (or older then 30 seconds).

    After debugging and trying a lot of different scenrios i came to one possible explanation (can it be true?)...when you create an item in Outlook it sets some property on this item. If this property is present then Outlook does not overwrite, if not then Outlook overwrites.

    If my above understanding is correct, which property do i then need to set when creating appointment so that Outlook Will behave like it does if appointment is created inside Outlook?

    Any comments on this are appritiated.


    Anze Javornik

    Tuesday, June 3, 2014 5:10 PM

All replies

  • UPDATE:

    It appears, that actaully this overwrite behaviour is completly random. In todays test Outlook sometimes has overwritten custom properties and other times not.

    Why would even Outlook (clicking Save or Send Update on appointment) change custom properties crated (or changed) with EWS calls - Outlook should not even be aware of these properties so i dont understand how they can get overriden by it?


    Anze Javornik

    Thursday, June 5, 2014 2:12 AM
  • Hi Anze,

     >> I assume this happens because of Outlook synchronization with Exchange. However this does not happen if you do this steps on existing appointment (or older than 30 seconds).

    I agree with you that it is because of Outlook synchronization with Exchange.

    >> However this does not happen if you do this steps on existing appointment (or older than 30 seconds).

    Since Outlook didn’t know it was an existing item (because of the synchronization), the “Save” behavior will equal to “Create” instead of “Update”, so I’m afraid it is the difference of the behavior rather than a flag in item.

    Regards,

    Jeffrey


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.



    Thursday, June 5, 2014 7:32 AM
    Moderator
  • Thanks for the reply.

    However this behaviour happens even on appointments that are older then day or more (As i mentioned in 2nd post, the behaviour is completely random).

    On appointment, that was created a month ago we set extended property (which does get set - confirmed with GetItem EWS) and then click Save or Send Update. When we reopen this appointment the property is no longer set.

    Why would Outlook override custom extended properties which it should not even be aware they exist?


    Anze Javornik

    Thursday, June 5, 2014 10:57 AM
  • Hi Anze, 

    As we understand, this issue seems to be random and also need to be invested in our lab engaging cross teams to see whats happening in this case.

    We request you to raise a paid support service request with us. If the support engineer determines that the issue is the result of a product issue the service request will be a no-charge case and you won't be charged. Please visit the

    below link to see the various paid support options that are available to better
    meet your needs. http://support.microsoft.com/default.aspx?id=fh;en-us;offerprophone

    Regards,

    Mahesh



    Tuesday, June 24, 2014 8:22 PM
  • Sorry for not updating this post...after further investigation it is not random at all...it always happens. (The only randomness was coused by Outlook sync time)

    Steps to reproduce (in Outlook client):

    1. create an app which sets a custom extended property (via makeEwsRequestAsync)
    2. open existing appointment
    3. use app to set extended custom property (via makeEwsRequestAsync) and make some changes to the body (just to be sure that in step 5 Save actually happens)
    4. confirm that property is set by doing either GetItem or FindItem EWS call (query for additional custom property)
    5. click Send or Save
    6. close the appointment form
    7. open the appointment again
    8. make makeEwsRequestAsync for this item and query for this custom property -> it is no longer set, or is set to the value before step 5. (In Snyc Log folder you will see sync errors)

    To me, this is not expected behaviour....all custom properties should be preserved (and i am pretty sure this was working not that long ago...i suspect API 1.1 and its Outlook update is the culprit)


    Anze Javornik

    Tuesday, June 24, 2014 8:43 PM
  • Thanks Anze for the update.

    We understand your concern, but would be nice if you could raise this as a support ticket as clarified in my previous reply. Because this needs to be investigated in detail to conclude this as an issue or not. 


    Tuesday, June 24, 2014 9:51 PM
  • Thanks for the reply...

    However i have already posted steps on how to reproduce this issue (i did update the post few times so please re-read it if it might contain some more informtaion).

    ... about to "conclude if this an issue or not"...saving custom properties and expecting them to be saved ....i am sorry, but i do think is expected and asking me for a paied support on this is wrong (if you cannot reproduce the problem we have in steps above, then obviously our code has a problem, if you can then a fix is recuired - or this is unsupported)

    ...however this works in OWA


    Anze Javornik

    Tuesday, June 24, 2014 10:12 PM
  • Hi Anze,

    Thank you very much for the repro steps - we're looking into this on the product team side. No need to open any support tickets. We'll get back on this thread as soon as we can.

    Thanks,

    -Andrew

    Tuesday, June 24, 2014 10:28 PM
  • Anze, can you post the EWS Requests you are using to both Set the Extended Property, and also to retrieve it?
    Wednesday, June 25, 2014 12:12 AM
  • Sorry for late replay...did not notice your response / request. Below are the requests and responses (i removed Body from response for better readaility and removed some emails that were in it). Notice that i set TestPropertyA to true. If calling GetItem it returns the correct value true. After clicking Save or Send in Outlook and reopening the appointment form, the GetItem returns false (which is the value that was set before i set it to true).

    Also please do not pay attention to ChangeKey, since i did capture the calls just to provide the soap code and not the actual calls. (If you would like the actual requests and responses i can provide that aswell).

    As mentioned above, this Works correctly in OWA.

    UPDATE:

    Also, in case you are wondering since this is in compose mode where ItemId from API is unavailable, i get ItemId by using FindItem EWS call with proper search criteria to retrive this appointment and get its ItemId.

    Here is the request to set the property.

    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"               xmlns:xsd="http://www.w3.org/2001/XMLSchema"               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <soap:Header>
        <RequestServerVersion Version="Exchange2013" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" soap:mustUnderstand="0" />
      </soap:Header>
      <soap:Body>
        <UpdateItem ConflictResolution="AutoResolve" MessageDisposition="SaveOnly" SendMeetingInvitationsOrCancellations="SendToNone"       xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"       xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
          <ItemChanges>
            <t:ItemChange>
              <t:ItemId Id="AAMkADJiNzFkNGQ2LWI4ZTMtNGE2NS1hNmE0LWZhNWMyOTdkMWZlOABGAAAAAADeBjprf/wHTZvkPMDIJYldBwCW8Ca8+Uk+QaBu9Ua1m1UrAAAAAAEOAACW8Ca8+Uk+QaBu9Ua1m1UrAAAWLnUYAAA=" ChangeKey="DwAAABYAAACW8Ca8+Uk+QaBu9Ua1m1UrAAAWLc+/" />
              <t:Updates>
                <t:SetItemField>
                  <t:ExtendedFieldURI PropertySetId="7CE0C542-49FD-4221-8897-B3A17EF2C83D" PropertyName="prop:TestPropertyB" PropertyType="StringArray" />
                  <t:Item>
                    <t:ExtendedProperty>
                      <t:ExtendedFieldURI PropertySetId="7CE0C542-49FD-4221-8897-B3A17EF2C83D" PropertyName="prop:TestPropertyB" PropertyType="StringArray" />
                      <t:Values>
                        <t:Value>{"itemId":"AAMkADJiNzFkNGQ2LWI4ZTMtNGE2NS1hNmE0LWZhNWMyOTdkMWZlOABGAAAAAADeBjprf/wHTZvkPMDIJYldBwCW8Ca8+Uk+QaBu9Ua1m1UrAAAAAAENAACW8Ca8+Uk+QaBu9Ua1m1UrAAAH68M7AAA=","subject":"Canceled: New app 30062014","owner":"removed for security","type":"message","hasattachments":true,"datetimecreated":"2014-06-04T10:59:20Z","order":8}</t:Value>
                      </t:Values>
                    </t:ExtendedProperty>
                  </t:Item>
                </t:SetItemField>
                <t:SetItemField>
                  <t:ExtendedFieldURI PropertySetId="7CE0C542-49FD-4221-8897-B3A17EF2C83D" PropertyName="prop:TestPropertyA" PropertyType="Boolean" />
                  <t:Item>
                    <t:ExtendedProperty>
                      <t:ExtendedFieldURI PropertySetId="7CE0C542-49FD-4221-8897-B3A17EF2C83D" PropertyName="prop:TestPropertyA" PropertyType="Boolean" />
                      <t:Value>true</t:Value>
                    </t:ExtendedProperty>
                  </t:Item>
                </t:SetItemField>
              </t:Updates>
            </t:ItemChange>
          </ItemChanges>
        </UpdateItem>
      </soap:Body>
    </soap:Envelope>

    Response of set proeprty call:

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
      <s:Header>
        <h:ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="969" MinorBuildNumber="13" Version="V2_13" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
      </s:Header>
      <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <m:UpdateItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
          <m:ResponseMessages>
            <m:UpdateItemResponseMessage ResponseClass="Success">
              <m:ResponseCode>NoError</m:ResponseCode>
              <m:Items>
                <t:CalendarItem>
                  <t:ItemId Id="AAMkADJiNzFkNGQ2LWI4ZTMtNGE2NS1hNmE0LWZhNWMyOTdkMWZlOABGAAAAAADeBjprf/wHTZvkPMDIJYldBwCW8Ca8+Uk+QaBu9Ua1m1UrAAAAAAEOAACW8Ca8+Uk+QaBu9Ua1m1UrAAAWLnUYAAA=" ChangeKey="DwAAABYAAACW8Ca8+Uk+QaBu9Ua1m1UrAAAWLc/A"/>
                </t:CalendarItem>
              </m:Items>
              <m:ConflictResults>
                <t:Count>0</t:Count>
              </m:ConflictResults>
            </m:UpdateItemResponseMessage>
          </m:ResponseMessages>
        </m:UpdateItemResponse>
      </s:Body>
    </s:Envelope>

    GetItem request for this appointment

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"               xmlns:xsd="http://www.w3.org/2001/XMLSchema"               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <soap:Header>
        <RequestServerVersion Version="Exchange2013" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" soap:mustUnderstand="0" />
      </soap:Header>
      <soap:Body>
        <GetItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"       xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
          <ItemShape>
            <t:BaseShape>IdOnly</t:BaseShape>
            <t:AdditionalProperties>
              <t:FieldURI FieldURI="item:Subject"/>
              <t:FieldURI FieldURI="item:DateTimeCreated"/>
              <t:FieldURI FieldURI="message:From"/>
              <t:FieldURI FieldURI="item:Categories"/>
              <t:FieldURI FieldURI="item:Body"/>
              <t:FieldURI FieldURI="calendar:RequiredAttendees"/>
              <t:FieldURI FieldURI="calendar:Organizer"/>
              <t:FieldURI FieldURI="calendar:Start"/>
              <t:FieldURI FieldURI="calendar:End"/>
              <t:FieldURI FieldURI="calendar:IsRecurring"/>
              <t:FieldURI FieldURI="item:Attachments"/>
              <t:FieldURI FieldURI="task:Owner"/>
              <t:ExtendedFieldURI PropertyTag="31752" PropertyType="Binary" />
              <t:ExtendedFieldURI PropertySetId="7CE0C542-49FD-4221-8897-B3A17EF2C83D" PropertyName="prop:TestPropertyB" PropertyType="StringArray" />
              <t:ExtendedFieldURI PropertySetId="7CE0C542-49FD-4221-8897-B3A17EF2C83D" PropertyName="prop:TestPropertyA" PropertyType="Boolean" />
            </t:AdditionalProperties>
          </ItemShape>
          <ItemIds>
            <t:ItemId Id="AAMkADJiNzFkNGQ2LWI4ZTMtNGE2NS1hNmE0LWZhNWMyOTdkMWZlOABGAAAAAADeBjprf/wHTZvkPMDIJYldBwCW8Ca8+Uk+QaBu9Ua1m1UrAAAAAAEOAACW8Ca8+Uk+QaBu9Ua1m1UrAAAWLnUYAAA=" />
          </ItemIds>
        </GetItem>
      </soap:Body>
    </soap:Envelope>

    And its response

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
      <s:Header>
        <h:ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="969" MinorBuildNumber="13" Version="V2_13" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
      </s:Header>
      <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <m:GetItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
          <m:ResponseMessages>
            <m:GetItemResponseMessage ResponseClass="Success">
              <m:ResponseCode>NoError</m:ResponseCode>
              <m:Items>
                <t:CalendarItem>
                  <t:ItemId Id="AAMkADJiNzFkNGQ2LWI4ZTMtNGE2NS1hNmE0LWZhNWMyOTdkMWZlOABGAAAAAADeBjprf/wHTZvkPMDIJYldBwCW8Ca8+Uk+QaBu9Ua1m1UrAAAAAAEOAACW8Ca8+Uk+QaBu9Ua1m1UrAAAWLnUYAAA=" ChangeKey="DwAAABYAAACW8Ca8+Uk+QaBu9Ua1m1UrAAAWLc/A"/>
                  <t:Subject>response</t:Subject>
                  <t:Body BodyType="HTML" IsTruncated="false">...</t:Body>
                  <t:Attachments>
                    <t:ItemAttachment>
                      <t:AttachmentId Id="AAMkADJiNzFkNGQ2LWI4ZTMtNGE2NS1hNmE0LWZhNWMyOTdkMWZlOABGAAAAAADeBjprf/wHTZvkPMDIJYldBwCW8Ca8+Uk+QaBu9Ua1m1UrAAAAAAEOAACW8Ca8+Uk+QaBu9Ua1m1UrAAAWLnUYAAABEgAQAEtcRGfQG0FDo2o7HonrI74="/>
                      <t:Name>response</t:Name>
                      <t:Size>196341</t:Size>
                      <t:LastModifiedTime>2014-06-25T09:23:16</t:LastModifiedTime>
                      <t:IsInline>false</t:IsInline>
                    </t:ItemAttachment>
                    <t:ItemAttachment>
                      <t:AttachmentId Id="AAMkADJiNzFkNGQ2LWI4ZTMtNGE2NS1hNmE0LWZhNWMyOTdkMWZlOABGAAAAAADeBjprf/wHTZvkPMDIJYldBwCW8Ca8+Uk+QaBu9Ua1m1UrAAAAAAEOAACW8Ca8+Uk+QaBu9Ua1m1UrAAAWLnUYAAABEgAQAOSneIsK/cxIny39jJI37wo="/>
                      <t:Name>f</t:Name>
                      <t:Size>4922</t:Size>
                      <t:LastModifiedTime>2014-06-25T09:23:16</t:LastModifiedTime>
                      <t:IsInline>false</t:IsInline>
                    </t:ItemAttachment>
                    <t:ItemAttachment>
                      <t:AttachmentId Id="AAMkADJiNzFkNGQ2LWI4ZTMtNGE2NS1hNmE0LWZhNWMyOTdkMWZlOABGAAAAAADeBjprf/wHTZvkPMDIJYldBwCW8Ca8+Uk+QaBu9Ua1m1UrAAAAAAEOAACW8Ca8+Uk+QaBu9Ua1m1UrAAAWLnUYAAABEgAQAFyIzp3PjtBFsJzqkiH9DBU="/>
                      <t:Name>g</t:Name>
                      <t:Size>125654</t:Size>
                      <t:LastModifiedTime>2014-06-25T09:25:48</t:LastModifiedTime>
                      <t:IsInline>false</t:IsInline>
                    </t:ItemAttachment>
                    <t:ItemAttachment>
                      <t:AttachmentId Id="AAMkADJiNzFkNGQ2LWI4ZTMtNGE2NS1hNmE0LWZhNWMyOTdkMWZlOABGAAAAAADeBjprf/wHTZvkPMDIJYldBwCW8Ca8+Uk+QaBu9Ua1m1UrAAAAAAEOAACW8Ca8+Uk+QaBu9Ua1m1UrAAAWLnUYAAABEgAQAG4nQG6AF81OtIecdY47Oks="/>
                      <t:Name>h</t:Name>
                      <t:Size>542603</t:Size>
                      <t:LastModifiedTime>2014-06-25T09:57:14</t:LastModifiedTime>
                      <t:IsInline>false</t:IsInline>
                    </t:ItemAttachment>
                  </t:Attachments>
                  <t:DateTimeCreated>2014-06-25T09:22:44Z</t:DateTimeCreated>
                  <t:HasAttachments>true</t:HasAttachments>
                  <t:ExtendedProperty>
                    <t:ExtendedFieldURI PropertySetId="7ce0c542-49fd-4221-8897-b3a17ef2c83d" PropertyName="prop:TestPropertyB" PropertyType="StringArray"/>
                    <t:Values>
                      <t:Value>{"itemId":"AAMkADJiNzFkNGQ2LWI4ZTMtNGE2NS1hNmE0LWZhNWMyOTdkMWZlOABGAAAAAADeBjprf/wHTZvkPMDIJYldBwCW8Ca8+Uk+QaBu9Ua1m1UrAAAAAAENAACW8Ca8+Uk+QaBu9Ua1m1UrAAAH68M7AAA=","subject":"Canceled: New app 30062014","owner":"removed for security","type":"message","hasattachments":true,"datetimecreated":"2014-06-04T10:59:20Z","order":8}</t:Value>
                    </t:Values>
                  </t:ExtendedProperty>
                  <t:ExtendedProperty>
                    <t:ExtendedFieldURI PropertySetId="7ce0c542-49fd-4221-8897-b3a17ef2c83d" PropertyName="prop:TestPropertyA" PropertyType="Boolean"/>
                    <t:Value>false</t:Value>
                  </t:ExtendedProperty>
                  <t:Start>2014-06-25T07:00:00Z</t:Start>
                  <t:End>2014-06-25T07:30:00Z</t:End>
                  <t:IsRecurring>false</t:IsRecurring>
                  <t:Organizer>
                    <t:Mailbox>
                      <t:Name>Anže Javornik</t:Name>
                      <t:EmailAddress>removed for securtiy</t:EmailAddress>
                      <t:RoutingType>SMTP</t:RoutingType>
                      <t:MailboxType>Mailbox</t:MailboxType>
                    </t:Mailbox>
                  </t:Organizer>
                  <t:RequiredAttendees>
                    <t:Attendee>
                      <t:Mailbox>
                        <t:Name>Anže Javornik</t:Name>
                        <t:EmailAddress>removed for securtiy</t:EmailAddress>
                        <t:RoutingType>SMTP</t:RoutingType>
                        <t:MailboxType>Mailbox</t:MailboxType>
                      </t:Mailbox>
                      <t:ResponseType>Unknown</t:ResponseType>
                    </t:Attendee>
                  </t:RequiredAttendees>
                </t:CalendarItem>
              </m:Items>
            </m:GetItemResponseMessage>
          </m:ResponseMessages>
        </m:GetItemResponse>
      </s:Body>
    </s:Envelope>


    Anze Javornik

    Wednesday, June 25, 2014 10:35 AM
  • Thanks that should help to track down what's going on. Can you answer the following:

    1) Is this an Appointment or a Meeting? (In your repro steps you say Appointment, but often people interchange the two so I want to make sure) Is your app trying to send out meeting updates?

    2) Does this also repro in a Read Mode App? (if you haven't tried, that's fine. But just seeing if this is a compose only issue)

    3) You mentioned there were sync logs that showed the conflict, uploading that may tell us immediately what the problem is. (or it may not...)

    thanks,

    Tim

    Wednesday, June 25, 2014 6:31 PM
  • Hi

    1) To be honest i dont know the exact difference aswell...i belive it is appointment: In Outlook create new appointment and activate app on that - through app UpdateItem EWS call it is always set to SaveOnly and SendToNone.

    2) In read mode it is not possible to click Save or Send, so extended properties are always preserved...however before API 1.1 release, when in Outlook it was possible to activate app in compose mode, this was working OK. Also this Works in OWA in compose mode...it seems only Outlook overwrites it if you click Save or Send.

    3) Here are the logs that were generated now

    If i clicked Send the log is

    21:08:24 Message class: {SU:IPM.Appointment}
    21:08:24 Appointment Conflict Resolution
    21:08:24 Local subject: {SU:Test Appointment}
    21:08:24 Remote subject: {SU:Test Appointment}
    21:08:24 Local Message Entry ID: {CB:70, LPB:0x00000000DE063A6B7FFC074D9BE43CC0C825895D070096F026BCF9493E41A06EF546B59B552B00000000010E000096F026BCF9493E41A06EF546B59B552B000000000D400000}
    21:08:24 Remote Message Entry ID: {CB:70, LPB:0x00000000DE063A6B7FFC074D9BE43CC0C825895D070096F026BCF9493E41A06EF546B59B552B00000000010E000096F026BCF9493E41A06EF546B59B552B000000000D400000}
    21:08:24 Local Message ChgKey: {CB:20, LPB:0x1959229CD13D2E45BA4758027D04C7B000015820}
    21:08:24 Remote Message ChgKey: {CB:22, LPB:0x96F026BCF9493E41A06EF546B59B552B0000162DCFEF}
    21:08:24 Local Message PCL: {CB:44, LPB:0x141959229CD13D2E45BA4758027D04C7B0000158201696F026BCF9493E41A06EF546B59B552B0000162DCFEF}
    21:08:24 Remote Message PCL: {CB:44, LPB:0x141959229CD13D2E45BA4758027D04C7B0000158201696F026BCF9493E41A06EF546B59B552B0000162DCFEF}
    21:08:24 Checking local modifications
    21:08:24 Post-Resolve property: 0x0E12000D
    21:08:24 Post-Resolve property: 0x0E13000D
    21:08:24 Critical stop property: 0x10090102
    21:08:24 Conflict Merge property: 0x10090102
    21:08:24 Compare property: 0x3FF10003
    21:08:24 Compare named property: 0x8208001F
    21:08:24 Compare named property: 0x823A000B
    21:08:24 Merge named property: 0x82040003
    21:08:24 Getting remote properties
    21:08:24 Checking remote modifications
    21:08:24 Compare (conflict) property: 0x3FF10003
    21:08:24 Local: {I4:1060}
    21:08:24 Remote: {I4:1060}
    21:08:24 Equal
    21:08:24 Compare (conflict) named property: 0x8208001F
    21:08:24 Local: {SU:}
    21:08:24 Remote: {SU:}
    21:08:24 Equal
    21:08:24 Compare (conflict) named property: 0x823A000B
    21:08:24 Local: {B:TRUE}
    21:08:24 Remote: {B:TRUE}
    21:08:24 Equal
    21:08:24 DWORD OR-ed named property: 0x82040003
    21:08:24 Local: {I4:128}
    21:08:24 Remote: {I4:0}
    21:08:24 Not equal (merged){L:0x00000080}
    21:08:24 Post-Appointment Resolution (Current winner = Remote)
    21:08:24 Recipient Conflict Resolution
    21:08:24 Number of rows modified 1
    21:08:24 Resolving user: {SU:Anže Javornik}
    21:08:24 Recipient Local Resolution
    21:08:24 Ignore property: 0x30000003
    21:08:24 Ignore property: 0x0FFF0102
    21:08:24 Compare property: 0x3001001F
    21:08:24 Ignore property: 0x0FFE0003
    21:08:24 Ignore property: 0x0FF90102
    21:08:24 Compare property: 0x3002001F
    21:08:24 Compare property: 0x3003001F
    21:08:24 Ignore property: 0x300B0102
    21:08:24 Ignore property: 0x39000003
    21:08:24 Compare property: 0x39050003
    21:08:24 Compare property: 0x39FE001F
    21:08:24 Compare property: 0x39FF001F
    21:08:24 Compare property: 0x3A20001F
    21:08:24 Compare property: 0x3A40000B
    21:08:24 Compare property: 0x3A710003
    21:08:24 Compare property: 0x3D010102
    21:08:24 Compare property: 0x5FDE0003
    21:08:24 Merge property: 0x5FDF0003
    21:08:24 Ignore property: 0x5FF6001F
    21:08:24 Ignore property: 0x5FF70102
    21:08:24 Merge property: 0x5FFD0003
    21:08:24 Merge property: 0x5FFF0003
    21:08:24 Ignore property: 0x0FF60102
    21:08:24 Compare property: 0x0C150003
    21:08:24 Recipient Remote Resolution
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Compare (conflict) property: 0x3001001F
    21:08:24 Local: {SU:Anže Javornik}
    21:08:24 Remote: {SU:Anže Javornik}
    21:08:24 Equal
    21:08:24 Critical properties merged into remote item.
    
    21:08:24 Successfully auto-resolved
    

    If i click Save the log is (note that now clicking Save preserved the property - however i think this depends on Outlook sync time - sometimes it seems its ok and Works for few minutes to hours, other times it does not)

    21:08:26 Message class: {SU:IPM.Appointment}
    21:08:26 Appointment Conflict Resolution
    21:08:26 Local subject: {SU:Test Appointment}
    21:08:26 Remote subject: {SU:Test Appointment}
    21:08:26 Local Message Entry ID: {CB:70, LPB:0x00000000DE063A6B7FFC074D9BE43CC0C825895D070096F026BCF9493E41A06EF546B59B552B00000000010E000096F026BCF9493E41A06EF546B59B552B000000000D400000}
    21:08:26 Remote Message Entry ID: {CB:70, LPB:0x00000000DE063A6B7FFC074D9BE43CC0C825895D070096F026BCF9493E41A06EF546B59B552B00000000010E000096F026BCF9493E41A06EF546B59B552B000000000D400000}
    21:08:26 Local Message ChgKey: {CB:20, LPB:0x1959229CD13D2E45BA4758027D04C7B000015827}
    21:08:26 Remote Message ChgKey: {CB:22, LPB:0x96F026BCF9493E41A06EF546B59B552B0000162DCFF0}
    21:08:26 Local Message PCL: {CB:44, LPB:0x141959229CD13D2E45BA4758027D04C7B0000158271696F026BCF9493E41A06EF546B59B552B0000162DCFEF}
    21:08:26 Remote Message PCL: {CB:44, LPB:0x141959229CD13D2E45BA4758027D04C7B0000158201696F026BCF9493E41A06EF546B59B552B0000162DCFF0}
    21:08:26 Checking local modifications
    21:08:26 Critical stop property: 0x10090102
    21:08:26 Conflict Merge property: 0x10090102
    21:08:26 Ignore property: 0x3FFA001F
    21:08:26 Merge named property: 0x82040003
    21:08:26 Getting remote properties
    21:08:26 Checking remote modifications
    21:08:26 DWORD OR-ed named property: 0x82040003
    21:08:26 Local: {I4:128}
    21:08:26 Remote: {I4:0}
    21:08:26 Not equal (merged){L:0x00000080}
    21:08:26 Critical properties merged into remote item.
    
    21:08:26 Successfully auto-resolved
    


    Anze Javornik

    Wednesday, June 25, 2014 7:16 PM
  • Now even Save stopped working - it makes Outlook owerwrite the property....however nothing gets logged in Sync Issues. If a log will come into folder at later time i will update this post.

    Also it seems that in read mode you can still click Save...at this moment Save is working again in compose and read mode.

    The only way i got action Save to not work is if i created the appointment via EWS call with taht property already set. (Waiting 5 minutes) Opening it and changing the property and clicking Save then overrides the property and nothing is shown in Sync Issues. (However we had this behaviour before - thats why we belived it was random - since it did work but only for me - all others had the problem where this would also override the property...after awhile it stopped working for me aswell - i will keep trying and when it stops will post the log if it appears)

    Action Send Update always overrides the property value.


    Anze Javornik

    Wednesday, June 25, 2014 7:52 PM
  • Taking a look at the Conflict Logs, your two custom properties are not showing up in the logs, which is curious (which means there shouldn't be a problem with the merge...so it's unclear where the problem is happening).

    Looking into this will require us to setup a local repro and maybe have to track this down if the problem is happening on the server or the client, so it may take a while to find the cause.

    I'm curious as to why the existing CustomProperties interface on the mail app doesn't meet the requirement for whatever you are trying to do? That function goes to the local item, so it should avoid those issues?

    Wednesday, June 25, 2014 9:10 PM
  • We are not using API CustomProperties becouse we need to access (read or write) the properties of any item, not just activating item.

    We also used to use these properties for filter in FindItem EWS call, which is not possible on CustomProperties (or atleast i think so, becouse - to my knowladge - they are stored as base64 string).

    However since we removed the filtering on this we could change that properties are stored in APIs CustomProperties...do you know how to select this property with GetItem EWS call (whats the property name, ...) and is it a base64 serialized JSON string - or some other format? Also around a year ago i posted a question about this on this forum where it was said it can be done but is not recommended...is there any reason why this is not recomended and if done this way could it couse other problems - or is not recomended becouse API provides function for this?

    As far as reproducing the issue goes i have been testing now for few hours and what i found out is that (i hope it might help):

    • clicking Send or Send Update always overwrites the properties in Outlook. In OWA it works.
    • clicking Save depends on Outlook Sync - so its really hard to track and debug. In OWA it Works.

    Anze Javornik

    Wednesday, June 25, 2014 9:35 PM
  • Anze, it's not recommended, because the custom properties are encoded in a specific format. If we choose to change that format in the future, we will end up breaking any code that depends on it.

    Thanks for detailed repro steps.

    Thursday, June 26, 2014 4:13 AM
  • Thanks for explanation...will not take that road then.

    Please let me know if there is anything more i can do to help trace the problem (maybe provide an app?).

    Thanks for all the help!


    Anze Javornik

    Thursday, June 26, 2014 8:17 AM
  • Hey Anze, sorry it took so long to respond. I followed up with the team that owns sync in Outlook, and the problem is that the "Send Update" on Outlook takes Precedence over all other updates. So what is happening is that the EWS Call changes the property on the SERVER. But the Local Copy that you hit "Send/Send Update" on will always overwrite anything else. There unfortunately is no merging of properties in that case. Ideally the server copy would merge with the local copy and preserve the Custom Property you changed, but according to the sync team, that work is not planned at this time. The "Save" option should work, but it seems like it is inconsistent which probably indicates a bug. However, with the overriding problem of the "Send Update" blowing away the property, fixing the Save issue probably wouldn't solve your problem.

    I realize this wasn't the answer you were looking for. Can you describe in more detail the problem you are trying to solve, and maybe we can find a workaround or design a new feature to meet the scenario if we find it to be a common ask? It sounds like you are trying to save a custom property that is searchable via EWS? Is there anything else to it?

    Tuesday, July 8, 2014 8:01 PM
  • Hi

    Sorry for late reply.

    We have an app in which you can set certian custom properties. Once you change (set or modify) another custom property gets set indicating if current Exchange Item has changes.

    A user also has a button in app which then uses all these custom properties to set body content. If this button is not clicked, then the changes are still kept in those custom properties and behaves like "Draft" - allows working in read or edit mode.

    Those custom properties can be any sort of data, including Exchange Items:

    • then you can search if this Exchange Item was linked with another
    • search which were not linked yet
    • ...

    Anze Javornik

    Thursday, July 10, 2014 10:01 PM