Fragensteller
CRM2011 - Appointment.RequiredAttendees Add and Delete Users

Frage
-
Hallo,
wie kann ich ein einem schon vorhandenen Termin einen Benutzer hinzufügen oder gegebenfalls entfernen. Ich schaffe es ein Termin einen anderen User zuzuweisen, ein Termin zu erstellen mit mehreren Usern. Aber ich weiß einfach nicht wie ich ein Termin soweit anpassen kann, dass er die Users(Teilnehmer - RequiredAttendees) separat entfernen oder hinzufügen kann.
Hier ist mal mein Code wie ich einem Termin der vorhanden ist, zwei Teilnehmer einfüge:
public bool UpdateAppointmentAddTeilnehmer(string GuidFromAppointment, string GuidAddTeilnehmer, string GuidAddTeilnehmer1) { bool re_Bool = false; try { // Guid vom Teilnehmer. Guid guid_Teilnehmer = new Guid(GuidAddTeilnehmer); EntityReference TeilnehmerId = new EntityReference("systemuser", guid_Teilnehmer); // Guid vom Teilnehmer. Guid guid_Teilnehmer1 = new Guid(GuidAddTeilnehmer1); EntityReference TeilnehmerId1 = new EntityReference("systemuser", guid_Teilnehmer1); List<ActivityParty> party = new List<ActivityParty>(); party.Add(new ActivityParty { PartyId = TeilnehmerId, }); party.Add(new ActivityParty { PartyId = TeilnehmerId1, }); if (isAppointment(GuidFromAppointment)) { // Termin wird angepasst. Appointment termin = new Appointment(); termin.Id = new Guid(GuidFromAppointment); // Neuer Teilnehmer wird zugewiesen. termin.RequiredAttendees = party.ToArray(); // Termin wird aktualisiert. service.Update(termin); } } catch (Exception ex) { re_Bool = false; } return re_Bool; }
Doch wie kann ich jetzt bei einem vorhandenen Termin ein Teilnehmer entfernen oder ein Teilnehmer hinzufügen???
Bei meiner Methode füge ich zwar zwei Teilnehmer zu, aber die Teilnehmer die schon enthalten waren, werden überschrieben!
Ich möchte, dass die neuen Teilnehmer beigefügt werden und so will ich auch, dass die jeweilgen Teilnehmer entfert werden können?
Kann mir jemand sagen wie das möglich ist?
Alle Antworten
-
Hallo,
um einen Teilnehmer hinzuzufügen musst du nur die bestehenden Teilnehmer auslesen und deinem Party Object zusätzlich zuweisen.
Genauso kannst du Teilnehmer entfernen. Du liest alle vorhandenen Teilnehmer aus und ordnest nur die Teilnehmer dem Party Object zu, die im Termin verbleiben sollen.
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
Blog
Website XING LinkedIn Facebook Twitter -
Hallo Michael Sulz,
wie kann ich aus einem Appointment Object die RequiredAtteendees auslesen?
Ich habe verschiedene Sachen probiert, aber nicht geschafft :(
try { List<ActivityParty> party = new List<ActivityParty>(); ActivityParty[] pp; Appointment termin = new Appointment(); // Termin Objekt erstellt termin.Id = new Guid(GuidFromAppointment); // den gewünschten Termin zugewiesen // pp = termin.RequiredAttendees.ToArray(); // versucht die Teilnehmer in ein Array zu speichern, funktioniert nicht: Fehlermeldung:Der Wert darf nicht NULL sein. Parametername: source // nachdem das mit dem Array nicht ging habe ich das versucht: foreach (var required in termin.RequiredAttendees) { // hier kommt auch eine Fehlermeldung: objektverweis wurde nicht auf eine objektinstanz festgelegt party.Add(new ActivityParty { PartyId = required.PartyId, }); } } catch (Exception ex) { sw.WriteLine(ex.Message); }
Ich weiß leider nicht wie ich die Teilnehmer auslesen kann. Sonst habe ich den selben schritt wie die gedacht, doch leider weiß ich nicht wie das auslesen wird :/
Ich hoffe du kannst mir ein Code Snippet geben oder einen Link wo das angezeigt wird.
Ich freue mich über jegliche weitere Hilfe.
Liebe Grüße
-
siehe:
https://msdn.microsoft.com/de-de/library/gg334289.aspx
https://msdn.microsoft.com/de-de/library/gg334604.aspxhttps://msdn.microsoft.com/de-de/library/gg309711.aspx
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
Blog
Website XING LinkedIn Facebook Twitter -
siehe:
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
Blog
Website XING LinkedIn Facebook TwitterDieser Link hat mir geholfen danke!
Doch hier möchte ich gerne wissen wie ich bei dem lamda Ausdruck überprüfen kann ob der gewünschte Teilnehmer schon vorhanden ist:
Guid appointmentId = new Guid(GuidFromAppointment); Entity appointment = service.Retrieve("appointment", appointmentId, new ColumnSet("requiredattendees")); EntityCollection required = appointment.GetAttributeValue<EntityCollection>("requiredattendees"); EntityReference teilnehmerId = new EntityReference("systemuser", new Guid(GuidFromTeilnehmer)); if (required != null) { required.Entities.ToList().ForEach(party => { EntityReference partyId = party.GetAttributeValue<EntityReference>("partyid"); sw.WriteLine("8."); if (partyId.Id == teilnehmerId.Id) { } else { Entity party1 = new Entity("activityparty"); party1["partyid"] = teilnehmerId; required.Entities.Add(party1); appointment["requiredattendees"] = required; service.Update(appointment); } }); }
Hier überprüfe ich ob es den Teilnehmer schon gibt, denn wenn er vorhanden ist, soll dieser nicht hinzugefügt werden! Doch bei meinem Code fügt er so oder so ein, weil ich die ForEach - Schleife nicht abbrechen kann.
Wie kann ich nur dann ein Teilnehmer hinzufügen wenn dieser nicht schon enthalten ist und nur dann ein löschen wenn er enthalten ist?
Wie kann ich mittels Entiy das erreichen.
LG