Transactions in CRM-PlugIn

12/08/2008 - 23:42 von Franz Watzmann | Report spam
Hallo zusammen,

diesmal habe ich eine Frage zur PlugIn-Entwicklung. Ich habe ein kleines
PlugIn entwickelt, mit dem bei beliebigen Entitàten ein Ticketname nach
der Form <Pràfix>-<lfdNr.> generiert wird. Das PlugIn reagiert auf das
Create-Event (Pre-Stage) und làuft synchron.

Das PlugIn durchlàuft dabei folgende Schritte:
1) aus einer "Counter-Entitàt" für die entsprechende Entitàt die
aktuelle lfd. Nr. beziehen
2) den ermittelten Wert hochzàhlen und den Ticketnamen bilden
3) die neue lfd. Nr. in die Counter-Entitàt zurückgeschrieben
4) bei der eigentlichen Entitàt der Ticketname speichern.
Das ganze funktioniert soweit einwandfrei.

Jetzt meine Frage(n). Was passiert, wenn (von untersch. Arbeitsplàtzen)
im gleichen Moment für die gleiche Entitàt jeweils ein neuer Datensatz
angelegt werden soll. Kann es passieren, dass das PlugIn für mehrere
Sitzungen gleichzeitig ablàuft? Oder werden die Sitzungen nacheinander
ausgeführt, d.h. müssen konkurierende Sitzungen warten bis eine andere
durchgelaufen ist. Oder kann man verhinden, dass ein PlugIn mehrfach zur
gleichen Zeit ausgeführt wird. Kritisch ist die Zeit zwischen den
Schritten 1) und 3).

Bei der o.g. Vorgehensweise kommt es außerdem noch zu einer kleinen
Unschönheit (kosmetischer Fehler). Wenn die neue lfd. Nr. in der
"Counter-Entitàt" zurückgeschrieben wurde, aber beim Abspeichern des
Ticketnamen in der "eigentlichen" Entitàt ein Fehler auftritt, entstehen
Lücken. Dies ist zwar nicht dramatisch, aber unschön. Kann man in einem
PlugIn Transaktionen, nach dem Prinzip "BEGIN TRANSACTION", "COMMIT
TRANSACTION" bzw. "ROLLBACK TRANSACTION" benutzen?


Wie immer bin ich für jede Antwort dankbar!


Schöne Grüße

Franz (CRM-Neuling)
 

Lesen sie die antworten

#1 Jürgen Beck
13/08/2008 - 20:08 | Warnen spam
"Franz Watzmann" schrieb im Newsbeitrag
news:

Hallo Franz,

es gibt leider keine Transaktionen in CRM, PlugIns laufen
nichtdetermininistisch, also nicht vorhersagbar a, und außerdem kann es bei
einem Mehrprozessorsystem passieren, dass mehere PlugIns gleichzeitig
ablaufen.

Also denkbar schlechte Voraussetzugen für Deinen Counter. :-(

Ggflls. kann man mit einer SharedVariable die PlugIns miteinander
kommunizieren lassen, so dass es keine gleichzeitigen Ausführungen gibt.
Siehe hierzu "Passing Data Between Plug-ins". Wenn das nicht geht, fallen
mir spontan auch keine supporteten Verfahrungen für dieses Problem ein.

Viele Grüße,
Jürgen
Jürgen Beck
Dipl. Kfm./Wirtschaftsinformatik
MVP, MCSD.NET, MCITP DBA, MCDBA, MCSE
Microsoft Certified Business Management Solutions Professional
Microsoft Certified CRM Developer
Microsoft Certified Trainer

ComBeck IT Services & Business Solutions
Microsoft Gold Certified Partner
Microsoft Small Business Specialist
Developing & Supporting Business Applications from small business to big
enterprises covering scores of sectors
Web: http://www.combeck.de
Community: http://www.mscrm-community.de



Hallo zusammen,

diesmal habe ich eine Frage zur PlugIn-Entwicklung. Ich habe ein kleines
PlugIn entwickelt, mit dem bei beliebigen Entitàten ein Ticketname nach
der Form <Pràfix>-<lfdNr.> generiert wird. Das PlugIn reagiert auf das
Create-Event (Pre-Stage) und làuft synchron.

Das PlugIn durchlàuft dabei folgende Schritte:
1) aus einer "Counter-Entitàt" für die entsprechende Entitàt die
aktuelle lfd. Nr. beziehen
2) den ermittelten Wert hochzàhlen und den Ticketnamen bilden
3) die neue lfd. Nr. in die Counter-Entitàt zurückgeschrieben
4) bei der eigentlichen Entitàt der Ticketname speichern.
Das ganze funktioniert soweit einwandfrei.

Jetzt meine Frage(n). Was passiert, wenn (von untersch. Arbeitsplàtzen)
im gleichen Moment für die gleiche Entitàt jeweils ein neuer Datensatz
angelegt werden soll. Kann es passieren, dass das PlugIn für mehrere
Sitzungen gleichzeitig ablàuft? Oder werden die Sitzungen nacheinander
ausgeführt, d.h. müssen konkurierende Sitzungen warten bis eine andere
durchgelaufen ist. Oder kann man verhinden, dass ein PlugIn mehrfach zur
gleichen Zeit ausgeführt wird. Kritisch ist die Zeit zwischen den
Schritten 1) und 3).

Bei der o.g. Vorgehensweise kommt es außerdem noch zu einer kleinen
Unschönheit (kosmetischer Fehler). Wenn die neue lfd. Nr. in der
"Counter-Entitàt" zurückgeschrieben wurde, aber beim Abspeichern des
Ticketnamen in der "eigentlichen" Entitàt ein Fehler auftritt, entstehen
Lücken. Dies ist zwar nicht dramatisch, aber unschön. Kann man in einem
PlugIn Transaktionen, nach dem Prinzip "BEGIN TRANSACTION", "COMMIT
TRANSACTION" bzw. "ROLLBACK TRANSACTION" benutzen?


Wie immer bin ich für jede Antwort dankbar!


Schöne Grüße

Franz (CRM-Neuling)

Ähnliche fragen