Microsoft Dynamics CRM 2011 | XrmSvcToolkit–createRecord Funktion

In meinen ersten beiden Teilen ging es um die fetch– bzw. retrieve Funktion, heute stelle ich Euch die createRecord Funktion etwas näher vor.

Hier jedoch nicht mit einem einfachen Beispiel, wie Ihr es im Toolkit findet, sondern mit einem komplexeren Vorgang – der Erstellung einer Service Aktivität.

Hier müssen wir einige Punkte beachten:

– Pflichtfelder müssen gefüllt sein,

– Lookupfelder, Picklistenfelder und Datum-Felder in dem korrekten Format angegeben werden

– die Besonderheiten von Customers und Ressources berücksichtigen.

Schauen wir uns zunächst die komplette Funktion an, bevor ich die Details näher beschreibe:

XrmSvcToolkit.createRecord({
        entityName: „ServiceAppointment“,
        entity: {Subject: Subject, ServiceId: { Id: Service[0].id, LogicalName: „service“ }, ScheduledStart: startdate, ScheduledEnd: enddate, ActualStart: startdate, ActualEnd: enddate, RegardingObjectId: { Id: Obj, LogicalName: „Account“}, ActualDurationMinutes: Durat, ScheduledDurationMinutes: Durat },
        async: false,
        successCallback: function (result) {
            // do the rest stuff
            XrmSvcToolkit.createRecord({
                entityName: „ActivityParty“,
                entity: {
                PartyId: { Id: Customer[0].id, LogicalName: CustomerType },
                ParticipationTypeMask: {Value: 11},
                ActivityId: { Id: result.ActivityId, LogicalName: „serviceappointment“ }
                },
                async: false,
                successCallback: function (results) {
                },
                errorCallback: function (errors) {
                    throw errors;
                }
            });
        },
        errorCallback: function (error) {
            throw error;
        }
});

In diesem Fall übergeben wir zunächst die Attribute im Punt entity: in den Schemanamen-Bezeichnungen – genau, es handelt sich ja um eine REST Funktion (Ich sehe, Ihr habt die ersten Teile bereits gelesen).

Dabei gilt für Lookup-Felder, dass wir hier mit {Id: Guid, LogicalName: “service” } das Format einhalten müssen, um das Feld korrekt zu füllen.

Gleiches auch bei Datums- oder Picklistfeldern. In meinem Fall habe ich diese vorher in einer Variablen hinterlegt.

Kommen wir zur Besonderheit, das wir hier das Customers Feld füllen wollen. Hier handelt es sich um ein Mehrfach-Lookup-Feld. Daher wird dies auch auf spezielle Weise gefüllt.

Wir erzeugen uns hierfür einen ActivityParty-Datensatz und übergeben mit der ParticipationTypeMask den Typ, den wir benötigen. In unserem Fall 11 für Customer. Weitere Werte findet Ihr im SDK.

Wenn Ihr also bei einem Termin die Felder Organizer, RequiredAttendee und/oder OptionalAttendee füllen wollt, so sieht der Code hierfür so aus:

XrmSvcToolkit.createRecord({
    //Requiredattendees = 5, Optionalattendees = 6
        entityName: „ActivityParty“,
        entity: {
        PartyId: { Id: Customer[0].id, LogicalName: CustomerType },
        ParticipationTypeMask: {Value: 6},
        ActivityId: { Id: result.ActivityId, LogicalName: „appointment“ }
        },
        async: false,
        successCallback: function (results) {
        },
        errorCallback: function (errors) {
            throw errors;
        }
});
XrmSvcToolkit.createRecord({
    //Organizer
        entityName: „ActivityParty“,
        entity: {
        PartyId: { Id: Owner[0].id, LogicalName: „systemuser“ },
        ParticipationTypeMask: {Value: 7},
        ActivityId: { Id: result.ActivityId, LogicalName: „appointment“ }
        },
        async: false,
        successCallback: function (results) {
        },
        errorCallback: function (errors) {
            throw errors
        }
});

Die Felder Organizer, RequiredAttendee solltet Ihr übrigens mindestens setzen, um die Aktivität auch in dem jeweiligen Kalender angezeigt zu bekommen. Ansonsten habt Ihr nämlich eine Aktivität erzeugt, diese taucht jedoch in keinem Kalender auf.

Bei der Service-Aktivität gilt es die Resources zu füllen, damit die Service-Aktivität in den Kalendern auftaucht.

Achtet darauf, dass Ihr diese Einträge direkt in der successCallback: function Eurer erstellten Aktivität ausführt und nicht etwa nachdem Ihr die Service Aktivität / den Termin erzeugt habt.

Beachtet, dass der CustomerType “Lead” (gilt nur für den Termin), “Contact” oder “Account” sein kann. Daher habe ich mich für eine Variable entschieden, die ich in Abhängigkeit auswähle.

Und bei ActivityId: übergeben wir die Id aus dem erzeugten Aktivitätsdatensatz mit result.ActivityId.

Achtet auch darauf, dass Ihr async nicht mischt, also etwa die Aktivität mit async: true, die ActivityParties jedoch mit async: false erstellen wollt – dies kann nicht funktionieren!

Ihr seht aber schon, dass es mit einigen wenigen Code-Zeilen gelingt, Datensätze automatisch zu erzeugen.

Viel Spaß in der Umsetzung und bis zum nächsten Mal.

Technorati Tags:

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s