Plugin beim Leadimport triggern

30. Januar 2013 17:09

Hallo Zusammen,

wie kann ich beim Import von Leads ein Plugin Triggern?

ich habs so versucht:

Code:
public Leads()
            : base(typeof(Leads))
        {
            base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(20, "Create", "lead", new Action<LocalPluginContext>(ExecutePreLeadsCreateOrUpdate)));
            base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(20, "Update", "lead", new Action<LocalPluginContext>(ExecutePreLeadsCreateOrUpdate)));
            base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(20, "Import", "lead", new Action<LocalPluginContext>(ExecutePreLeadsCreateOrUpdate)));
           
        }


Pre Import lead und aufgerufen wird die ExecutePreLeadsCreateOrUpdate
Ich weiß, der Name ist irreführend, war auch nur ein Test. Er läuft da aber nicht rein.

Hat irgendwer eine Idee?

PS: für Update und Create funktioniert das! Ich habe auch den Plugin Step für "Any" Entity im Pluginregistration Tool auf diese Plugin registriert.
Hilft aber nix.

Viele Grüße
Pascal

Re: Plugin beim Leadimport triggern

2. Februar 2013 22:14

Hallo Pascal,

die Nachricht Import sollte richtig sein, bist du sicher, das dein PlugIn richtig geschrieben ist und auf die Nachricht richtig reagiert?

Re: Plugin beim Leadimport triggern

4. Februar 2013 09:38

Guten Morgen,

mein Code sieht so aus

Code:
public class Imports : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException("serviceProvider");
            }
           
            // get the required interface from the service provider
            IPluginExecutionContext localContext = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }
           
            IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));

            ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
            tracer.Trace("ENTER: AnyEntity.AnyEntityPlugin.Execute");

            // retrieve the target entity
            Entity targetEntity = null;
            // Check if the input parameters property bag contains a target
            // of the create operation and that target is of type Entity.
            if (localContext.InputParameters.Contains("Target") && localContext.InputParameters["Target"] is Entity)
            {
                targetEntity = (Entity)localContext.InputParameters["Target"];
                throw new InvalidPluginExecutionException("Entity: " + targetEntity.LogicalName);
            }
            else
            {
                return;
            }
        }
    }   


Ich möchte da eigentlich nur reindebuggen. Am besten gleich mit dem ersten if. Aber das geht nicht.
Das macht die Fehlersuche ziemlich schwer.

Registriert ist gegen
Primary Entity: None
Second Entity: None

Message: Import
Pre Operation oder Post Operation macht keien Unterschied
Synchron oder Asynchron auch nicht.


Edit:
Ich glaube die richtige Message ist Create - wenn ich die aktiviere schlägt der Import wegen der Exception fehl. Debuggen kann ich das ding trotzdem nicht.
Naja...

Trotzdem wäre ich für weitere Tipps und ggf. eigene Feldversuche dankbar :D
Viele Grüße
Pascal

Re: Plugin beim Leadimport triggern

4. Februar 2013 12:23

Hallo Pascal,

Code:
                targetEntity = (Entity)localContext.InputParameters["Target"];
                throw new InvalidPluginExecutionException("Entity: " + targetEntity.LogicalName);

außer dem zuweisen des aktuellen Datensatzes und einer Exception macht dein Code aber noch nichs.

Kommt denn die Exception?

Und wieso ist dein PLugin gegen keine Entität registriert? Soll das auf allen Entitäten laufen?
Ansonsten sollte Primary Entity natülich Lead sein, damit er auf das Lead reagiert. Und Create sollte auch bei einem Import funktionieren.

Hast du mal mit dem PlugIn Registration Tool überprüft, ob dein PlugIn richtig installiert und eingerichtet ist?

Re: Plugin beim Leadimport triggern

4. Februar 2013 12:37

Hallo Michael,

ja ich weiß, das sie weiter nix tut :-)

Die exception sehe ich nur im Server Trace.
Das war auf alle Entitäten registiert, weil ich ursprünglich die Import Message testen wollte. Und für die steht im SDK, das Primary and Secondary Entity auf none stehen sollen.

Beim Create macht es eigentlich keinen Sinn.

Wobei wir Plugins auf Pre Create für den Lead laufen haben, die genau das tun, was ich will. Die Triggern aber nur, wenn ich über die Oberfläche den Lead erstelle.

Zum heulen alles.

Re: Plugin beim Leadimport triggern

4. Februar 2013 17:04

Hallo Pascal,

mit dem Statement aus dem ersten Post registrierst du das Plugin auf dem Pipline Execution Stage 20 = Pre-operation.
Die Validierung läuft vorher auf Pipline Execution Stage 10 = Pre-validation. Wenn die Sätze aus Deinem Import gegen Validierungs-Regeln verstossen, wird das Plugin auf Stage 20 nicht getriggert. Evtl. könnte das eine Ursache sein.
Du könntest das ausschliessen indem Du das Plgin auf Pre-validation registrierst.

Gruss Jens

Re: Plugin beim Leadimport triggern

6. Februar 2013 13:07

Hallo,

wenn ich für Pre-Operation das Create Event aktiviere und nur die throw Exception mache, dann schlägt der Import fehl. Ich kann aber weiterhin nicht debuggen. Das geht nur über die Gui.
mache ich den dem Plugin etwas anderes z.B. das setzen von feldern, dann passiert einfach garnix. die Daten werden importiert und das wars. Es werden keine Feldänderungen oder so gemacht. -> Starte ich den gleichen Code über die Gui, dann geht es.

Ich habe das jetzt mit Advisory Hours an Microsoft gegeben.
Sollen die sich drum kümmern und mir bescheid sagen, wie es geht.

Ich poste hier wie es geht, wenn MS mir eine Lösung sagen konnte.

Viele Grüße und danke für die Hilfen.
Pascal

PS: Ich habe keine Benachrichtigung über die Antwort von Jens bekommen, obwohl das angehakt ist - sonst hätte ich schon früher geantwortet.