2010-11-24 32 views
6

Je construis une application basée sur ce site http://msdn.microsoft.com/en-us/library/dd633661%28v=EXCHG.80%29.aspxC# créer un élément de calendrier avec EWS, comment récupérer les résultats?

appointment.Subject = "Status Meeting"; 
appointment.Body = "The purpose of this meeting is to discuss status."; 
appointment.Start = new DateTime(2009, 3, 1, 9, 0, 0); 
appointment.End = appointment.Start.AddHours(2); 
appointment.Location = "Conf Room"; 
appointment.RequiredAttendees.Add("[email protected]"); 
appointment.RequiredAttendees.Add("[email protected]"); 
appointment.OptionalAttendees.Add("[email protected]"); 
appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy); 

comment je peux retourner les résultats XML "... < t: ItemId Id = "AAMkADk =" ChangeKey = "DwAAAB"/> ..." donc je peux l'utiliser plus tard pour supprimer ou modifier l'élément du calendrier!?!

Microsoft a fait un travail de dieu avec tout le cadre, mais ont-ils vraiment oublié cette petite chose?

J'ai trouvé une solution (non logique pour moi) http://blogs.msdn.com/b/exchangedev/archive/2010/02/25/determining-the-id-of-a-sent-message-by-using-extended-properties-with-the-ews-managed-api.aspx devrais-je utiliser ceci pour résoudre le problème?

acclamations

Répondre

5

Il ressemble à la solution que vous avez trouvé est ne pas retourner les résultats Xml, persay. La solution consiste à ajouter un identifiant unique à l'e-mail en tant que ExtendedPropertyDefinition. Ensuite, après l'avoir envoyée, la solution recherche dans le dossier "Éléments envoyés" une copie sauvegardée de l'e-mail qui vient d'être envoyé en effectuant une correspondance sur l'identifiant unique qui a été ajouté avant l'envoi de l'e-mail.

Puis, comme écrit sur le blog,

Voici la requête XML qui est généré par appel FindItems dans l'exemple de code ci-dessus.

<m:FindItem Traversal="Shallow"> 
    <m:ItemShape> 
     <t:BaseShape>IdOnly</t:BaseShape> 
     <t:AdditionalProperties> 
     <t:FieldURI FieldURI="item:Subject" /> 
     <t:ExtendedFieldURI PropertySetId="20b5c09f-7cad-44c6-bdbf-8fcbeea08544" PropertyName="MyExtendedPropertyName" PropertyType="String" /> 
     </t:AdditionalProperties> 
    </m:ItemShape> 
    <m:IndexedPageItemView MaxEntriesReturned="5" Offset="0" BasePoint="Beginning" /> 
    <m:Restriction> 
     <t:IsEqualTo> 
     <t:ExtendedFieldURI PropertySetId="20b5c09f-7cad-44c6-bdbf-8fcbeea08544" PropertyName="MyExtendedPropertyName" PropertyType="String" /> 
     <t:FieldURIOrConstant> 
      <t:Constant Value="MyExtendedPropertyValue" /> 
     </t:FieldURIOrConstant> 
     </t:IsEqualTo> 
    </m:Restriction> 
    <m:ParentFolderIds> 
     <t:DistinguishedFolderId Id="sentitems" /> 
    </m:ParentFolderIds> 
</m:FindItem> 

Notez la balise XML contenant l'identifiant unique.

<t:ExtendedFieldURI PropertySetId="20b5c09f-7cad-44c6-bdbf-8fcbeea08544" PropertyName="MyExtendedPropertyName" PropertyType="String" /> 
+0

merci, donc c'est comme je le comprends un peu comment, alors que dois-je faire pour obtenir l'itemID et le ChangeKey? après avoir "enregistré" le rendez-vous. Enregistrer (SendInvitationsMode.SendToAllAndSaveCopy); ? –

+0

Jetez un oeil à ce lien - http://blogs.msdn.com/b/exchangedev/archive/2010/03/16/loading-properties-for-multiple-items-with-one-call-to-exchange- web-services.aspx. Gardez à l'esprit que EWS est un "service Web" et que les résultats de la sollicitation du service sont sérialisés (c'est-à-dire en XML comme vous l'avez demandé). – bitxwise

7

je pourrais être absent le point, mais après vous sauver pouvez obtenir appointment.Id que je crois est l'identifiant unique de ce rendez-vous. Conservez-le quelque part et vous pourrez ensuite accéder à la nomination à nouveau pour modifier ou supprimer avec:

Appointment appointment = Appointment.Bind(service, new ItemID("saved id value")); 

Après cela, vous pouvez modifier les valeurs avec les mêmes propriétés que celles utilisées pour les mettre à l'origine, puis numéro:

appointment.Update(ConflictResolutionMode.AlwaysOverwrite); 

ou à supprimer:

appointment.Delete(DeleteMode.HardDelete); 

Vous ne devez pas accéder au XML du tout.

(N.B. En ce que je peux vous dire ne pouvez pas mettre à jour ou supprimer des rendez-vous des calendriers de dossiers publics, mais vous pouvez les créer.)

0

Autre moyen est de charger l'objet après votre action. Mais comme il est dit avant, vous pouvez utiliser le Appointment.Id.