none
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?

    Freitag, 30. Oktober 2015 11:04

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

    Montag, 2. November 2015 07:40
    Moderator
  • 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

    Montag, 2. November 2015 08:17
  • siehe:

    http://www.magnetismsolutions.com/blog/paulnieuwelaar/2015/09/07/working-with-dynamics-crm-activity-party-lists-in-c--plugins


    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website XING LinkedIn Facebook Twitter

    Dieser 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

    Montag, 2. November 2015 14:09