[gelöst] Plugins in MSCRM

9. November 2012 12:30

Hallo,

mittlerweile kann ich in MSCRM Pligins für Worhflows in Visual studio erstellen.
es gibt ja aber auch die Möglichket Plugins für die Applikation zu erstellen also keine Workflow Plugins.
hierzu fehlen mir jegliche Grundlagen.
Gibt es irgenwo eine leicht verständliche Übersicht, wo ich mich bzgl. Applakationsplugins einlesen kann?

Kann mir jemand den aufbau kurz erklären?

Vielen lieben Dank im Voraus.
Zuletzt geändert von mscrm2011 am 16. November 2012 17:22, insgesamt 1-mal geändert.

Re: Plugins in MSCRM

9. November 2012 18:39

Hallo,

die beste Dokumentation ist das SDK. Dort gibt es auch sehr gute Einführungen und Beispiele zu diesem Thema im SDK.

Re: Plugins in MSCRM

9. November 2012 22:16

Hallo,

Danke, ich habe mir das einmal angeschaut. Ich kann jetzt schon ein bisschen was machen.
bei einer Sache hänge ich nun fest. Ich möchte, wenn ich auf der Sitemap au Verkaufschancen klicke komme ich ja in die Listen Ansicht. mit dem entsprechenden Ansichten.
Hier scheint Der Event RetrieveMultiple auszulösen. Hier möchte ich hingehen, und jeden Datensatz, der in dieser Liste vorhanden ist vor dem Anzeigen ein Feld editieren.
Ich weiss nicht, wo ich hier ansetzen soll. Scheinbar kann ich hier im Plugin nur eine Query oder eine Condition bearbeiten. aber nicht die zurückgegebenen entitäten.

Wenn ich den Event Retrieve nutzte und dann nicht Quert, sonder Target. kann ich zwar auf den Datensatz zugreifen, aber der Event wird nur beim öffnen eines einzelnen Datensatz gefeuert. das hilft mir leider nicht weiter.

kann mir jemend hier etwas hilfestellung leisten?

Vielen Dank!

Re: Plugins in MSCRM

12. November 2012 09:03

Hi,
die Grundlegende Frage ist bei welchem Event das Ganze aufgerufen werden soll? Ansonsten könntest du folgendes machen (Code kurz ausgedacht ;)):
var query = new QueryExpression();
query.EntityName = "opportunity";
query.ColumnSet = new ColumnSet(true); << um alle Attribute auszulesen (hier kannst du auch nur auf dein Feld gehen welches du bearbeiten möchtest)
[query.Criteria.AddCondition("statecode", ConditionOperation.Equal, 0) << hier kannt du beispielsweise auf nur aktive opportunities gehen]
var result = service.RetrieveMultiple(query);
foreacH(var ent in result.Entities)
{
if(!ent.ContainsKey(dein feld))
{
ent.Attributes.Add(feld, Wert); << hier vllt entsprechend casten ob EntityReference oder int oder Picklist (OptionSet)
}
else
{
ent.Attributes.Remove(feld);
ent.Attributes.Add(feld, Wert); << hier vllt entsprechend casten ob EntityReference oder int oder Picklist (OptionSet)
}
}

Grüße
gE3z

Re: Plugins in MSCRM

12. November 2012 11:14

Hallo,

vielen Dank für deine Antwort. So ähnlich habe ich das schon ausprobiert. das Problem ist hierbei:
Code:
service.RetrieveMultiple(query);

das ich das plugin bei genau diesem Event registriert habe, ruft es sich quasi in einer Endlosschleife auf.
ich muss Entweder schon an die Entitäten herankommen, ohne ein "retreiveMultiple" oder wenn ich in der Applikation auf Verkaufschance klicke, wird noch eine anderer Event gefeuert, den ich abfangen kann, um dann über Service.RetrieveMultiple mir die Sachen zu holen.

Weiss da einer eine mögliche lösung?

Vielen Dank im Voraus.

Re: Plugins in MSCRM

12. November 2012 11:41

Hi,
was mir spontan einfällt es entweder über eine LinqQuery zu machen oder über eine SqlAbfrage.
Linq könnte bsp. so aussehen: So einen Specific Context kannst du dir mit dem CrmSvcUtil Tool erstellen.
var query = from op in service.specificContext.opportunity
where op.statecode.Value.Equals(0)
select op;
var result = query.ToList();
und dann so deine Felder setzen wie oben beschrieben.

oder

SqlConnection conn = new SqlConnection(SQLCONNECTION);
SqlDataAdapter adap = new SqlDataAdapter("SELECT * FROM FilteredOpportunity", conn);
DataTable dt = new DataTable();
adap.Fill(dt);

foreach(DataRow row in dt.Rows)
{
do code
}

Grüße
gE3z

Re: Plugins in MSCRM

12. November 2012 12:15

Hallo,

Danke Für deine Antwort. Ich habe noch einen anderen Ansatz gefunden.
Ich probiere das aus, und wenn das Klappt, poste ich die lösung.

Vielen Dank!

Re: Plugins in MSCRM

12. November 2012 16:53

Hallo,

so, ich gehe nun hin und filtere noch zusätzlich auf "Depth" im context:
Code:
 if (context.InputParameters.Contains("Query") &&
            context.InputParameters["Query"] is QueryExpression && context.Depth == 1)

das scheint zu funktionieren. :-D

ich habe noch eine allgemeine Frage zu den Plugins:
es gibt ja die Workflow Plugins:
Code:
public class XXXXXXX:CodeActivity

diese kann ich wals Workflow Steps hinzufügen

und dann och die Applikations Plugins: IPlugin
Code:
public class XXXXXXX:IPlugin

bei diesesn muss ja beim Pligin Registrieren ein Step mit registriert werden.

gibt es dort noch mehr Möglichkeiten, oder ist das alles?

Danke!

Re: Plugins in MSCRM

12. November 2012 17:14

Hi,
an deinem Step kannst du auch noch Images hängen, wenn du möchtest um bestimmte Felder nur zur erhalten. Gibst du kein Image an, werden dir meines wissens nach alle Attribute zurück geliefert. Ansonsten reicht dir 1Step.

Grüße
gE3z

Re: Plugins in MSCRM

12. November 2012 18:39

Hallo,

Gibst du kein Image an, werden dir meines wissens nach alle Attribute zurück geliefert

Das stimmt so nicht. Wird kein Image angegeben und verwendet, gibt es im CRM das sogenannte Target und den Context. Welche Daten diese beide enthalten ist davon abhängig, auf welcher Nachricht das PlugIn registriert ist und welche Daten im CRM geändert wurden.

Re: Plugins in MSCRM

15. November 2012 17:50

Hallo,

was ist ein Image?? kann mir das kurz einer erklären?

Re: Plugins in MSCRM

16. November 2012 09:22

Hallo,

ein PlugIn wird auf einer Message registriert, z.B. auf Update. Diesem Step kannst du dann noch ein Pre und ein Post Image hinzufügen. Im Pre Image stehen die Daten´, die beim öffnen des Datensatzes in der Entität gestanden haben, im Post Image stehen die Daten, die beim speichern der Entität im Datensatz stehen.

Re: Plugins in MSCRM

16. November 2012 17:22

Hallo Vielen Dank!