Detail Lines rufen Update Plugins mehrfach auf

5. Dezember 2012 16:58

Hallo,

ich habe ein Plugin geschrieben, welches beim Update einer z.b. Rechnungsposition irgendwas macht.

Code:
protected void ExecuteUpdateInvoiceProduct(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }

            if (localContext.PluginExecutionContext.Depth == 1)
            {
                // verify if the Target Parameter is not null
                if (localContext.PluginExecutionContext.InputParameters["Target"] != null)
                {
                    // check if the Target Parameter is of type Entity
                    if (localContext.PluginExecutionContext.InputParameters["Target"] is Entity)
                    {
                        Entity targetentity = (Entity)localContext.PluginExecutionContext.InputParameters["Target"];
                        // check if the Target Parameter is of required type
                        if (targetentity.LogicalName.ToLowerInvariant().Equals(localContext.PluginExecutionContext.PrimaryEntityName.ToLowerInvariant()))
                        {
                            if (targetentity.Contains("productid") || targetentity.Contains("quantity") || targetentity.Contains("priceperunit"))
                            {
                                //Tue was auch immer
                            }
                        }
                    }
                }
            }


diese Funktion wird sage und schreibe 5 mal aufgerufen und dabei ist Depth == 1 nur einmal falsch.
in der Funktion selber mache ich kein Update auf die Entität! Ich füge der geänderten Entität lediglich mit "targetentity["myfield"] ein weiteres Feld hinzu, eben um zu verhindern, das es mehrfach aufgerufen wird. Bei anderen Entitäten klappt das auch immer. Nur hier nicht.

Warum wird das so oft aufgerufen und kann ich das verhindern?

Viele Grüße
Pascal

Re: Detail Lines rufen Update Plugins mehrfach auf

6. Dezember 2012 09:36

Hallo Pascal,

Ich füge der geänderten Entität lediglich mit "targetentity["myfield"] ein weiteres Feld hinzu

Aber genau damit änderst du doch die Entität, auf die dein PlugIn registriert ist.

Eine kleine Frage zum Code, was soll diese Abfrage bewirken, bzw. was willst du da erreichen?
Entity targetentity = (Entity)localContext.PluginExecutionContext.InputParameters["Target"];
// check if the Target Parameter is of required type
if (targetentity.LogicalName.ToLowerInvariant().Equals(localContext.PluginExecutionContext.PrimaryEntityName.ToLowerInvariant()))

Re: Detail Lines rufen Update Plugins mehrfach auf

6. Dezember 2012 10:04

Hallo Michael,

ich lasse das Plugin in der PreOperation laufen.

Es ist also noch nicht gespeichert und ich füge dem zu speichernden werten lediglich einen weiteren hinzu, ohne einen 2ten Updaterequest auszuführen.

Selbst wenn das ein eigenes Update wäre, warum ändert sich dann nicht der depth Wert? Der ist 4 mal auf 1 und nur einmal kommt er mit 2 wieder ins Plugin rein.

Kann es sein, das im Hintergrund noch Asynchron vom CRM irgendwas gemacht wird? Ein Asynchrones Plugin, welches z.B. die Mengenrabatte neu berechnet?

Die Abfrage ist Sinnfrei, aber daran scheitert es auch nicht....


Viele Grüße
Pascal

Re: Detail Lines rufen Update Plugins mehrfach auf

6. Dezember 2012 12:10

Hallo Pascal,

ich lasse das Plugin in der PreOperation laufen.

Es ist also noch nicht gespeichert und ich füge dem zu speichernden werten lediglich einen weiteren hinzu, ohne einen 2ten Updaterequest auszuführen.

ok, das ist perfekt :-)

Selbst wenn das ein eigenes Update wäre, warum ändert sich dann nicht der depth Wert? Der ist 4 mal auf 1 und nur einmal kommt er mit 2 wieder ins Plugin rein.
Kann es sein, das im Hintergrund noch Asynchron vom CRM irgendwas gemacht wird? Ein Asynchrones Plugin, welches z.B. die Mengenrabatte neu berechnet?

Das ist eine gute Frage. Habt ihr noch andere PlugIns oder Workflows auf dieser Entität?
Das CRM selbst macht soweit ich weiß keine eigenen Aufrufe auf dem Positionssatz solange keines der Money Felder oder die Währung geändert werden.

Die Abfrage ist Sinnfrei, aber daran scheitert es auch nicht....

ok, dann habe ich es doch richtig verstanden :wink: