Mein erstes Plugin macht Probleme

20. April 2012 09:37

Moin an alle,

um zu verstehen wie Plugins funktioniern habe ich mir erstmal ein kleines Plugin geschrieben welches eine Automatische Nummer zu meinen neuen Leads hinzufügt.
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;

namespace AutoNumber
{
    public class AutoNumber:IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // Fordern Sie den Ausführungskontext vom Dienstanbieter an.
            Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
                serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));// hier ist der Breakpoint

            // Die InputParameters-Sammlung enthält alle Informationen, die in der Meldungsanforderung übergeben wurden.
            if (context.InputParameters.Contains("Target") &&context.InputParameters["Target"] is Entity)
            {
                // Fordern Sie die Zielentität von den Eingabeparametern an.
                Entity entity = (Entity)context.InputParameters["Target"];

                QueryExpression qe = new QueryExpression("lead");

                // Rufen Sie das new_autonumber-Feld auf
                qe.ColumnSet = new ColumnSet();
                qe.ColumnSet.Columns.Add("new_autonumber");

                // Sortieren Sie die Datensätze absteigend nach autonumber (höchste autonumber zuerst)
                OrderExpression oe = new OrderExpression();
                oe.AttributeName = "new_autonumber";
                oe.OrderType = OrderType.Descending;
                qe.Orders.Add(oe);

                // Verwenden Sie Auslagerung, um nur einen Datensatz zurückzugeben
                qe.PageInfo = new PagingInfo();
                qe.PageInfo.Count = 1;
                qe.PageInfo.PageNumber = 1;
                qe.PageInfo.PagingCookie = null;

                // Fordern Sie den Organisationsdienstverweis an.
                IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

                // Rufen Sie die erste Seite (ein Datensatz) der Leaddatensätze ab
                EntityCollection ec = service.RetrieveMultiple(qe);

                // Spät gebundene Entität
                Entity lead = (Entity)ec[0];

                int nextnumber = 1;  // Standardmäßiger Anfangswert

                // Berechnen Sie den nächsten autonumber-Wert, falls Wert vorhanden
                if (lead.Attributes.Contains("new_autonumber"))
                    nextnumber = (int)lead.Attributes["new_autonumber"] + 1;

                // Fügen Sie der Entität die autonumber hinzu
                entity.Attributes.Add("new_autonumber", nextnumber);
            }
        }
    }
}

Anschließend habe ich es signiert und mit dem PluginRegistration Tool aus dem SDK meiner CRM Test Anwendung hinzugefügt.

Bei meinen Lead Formular habe ich ein neues Feld new_autonumber hinzugefügt, vom Typ gane Zahl.

Doch leider wird beim erstellen eines neuen Leads keine Nummer eingetragen.

Zum Debugen habe ich mich mit den remote Debuger mit den Server verbinden und alle Prozesse wie hier beschrieben rangehängt http://msdn.microsoft.com/en-us/library/gg328574.aspx.
Das Plugin und das dpb File sind im Assembly Ordner des Servers drin, doch wird der Breakpoint nie erreicht.

Wie kann ich noch überprüfen od ds Plugin richtig arbeitet.

MfG René

Re: Mein erstes Plugin macht Probleme

20. April 2012 10:42

Hallo René,

auf was hast du denn dein PlugIn registriert?
Hänge doch mal Hardcopys der entsprechenden Seiten aus dem Registration Tool an.

Und dir ist schon klar, das du zwar das Feld mit der Autonumber im PlugIn um eins erhöst, es aber an keiner Stelle wieder ins CRM schreibst, jedenfalls nicht mir dem hier geposteten Code.

Re: Mein erstes Plugin macht Probleme

20. April 2012 14:22

die Bild vom Regtools sind hier https://skydrive.live.com/#cid=2E48681C ... &sc=photos

das mit Code wundert mich gerade, da ich genau nach MOC vogegangen bin und das hier war die Aufgabe
Szenario: Ein Unternehmen möchte seine Leads von Microsoft Dynamics CRM
automatisch nummerieren lassen. Das Unternehmen verwaltet regelmäßig eine
große Anzahl von Leads und möchte mithilfe eines Nummerierungssystems
schnell auf diese verweisen können.
Zielbeschreibung: Führen Sie diese Übungseinheit anhand folgender Informationen durch:
1.Das Feld Auto Number ist ein benutzerdefiniertes Feld mit der
Bezeichnung „new_autonumber“ und wird dem Formular
hinzugefügt.
2.Das Feld Auto Number ist im Formular deaktiviert.
3.Der Wert im Feld Auto Number wird schrittweise auf die nächste
freie Nummer erhöht. Wenn z. B. die höchste im System vorhandene
Nummer 23 ist, erhält der nächste Lead die Nummer 24.
4.Das Plug-In wird mit dem im SDK zur Verfügung stehenden Plug-
In-Registrierungstool für das Pre-Event der Create-Meldung für die
Lead-Entität registriert.


MfG René

Re: Mein erstes Plugin macht Probleme

23. April 2012 08:10

Hallo René,

es bleibt aber dabei, im ganzen Code wird das Ergebnis nicht wieder ins CRM geschrieben, der Wert kann also nicht erhöht werden.
Entweder ist das nicht der vollständige Code, oder er funktioniert nicht.