SharePoint Rule Engines (Part 1) -Vorbereitungen

SharePoint Rule Engines (Part 1) und der erste Teil der verlorenen Saga/Serie. hier wird die Basis - also die SharePoint Solution - erklärt.

SharePoint Rule Engines (Part 1) -Vorbereitungen

Update 2019: Hier der erste Teil der besagten Serie, wir schauen uns die SharePoint Full-Trust Solution an.

Was war, was wird ?

In der Einleitung habe ich bereits erwähnt, das Ganze Vorhaben in eine SharePoint Solution zu packen. Diese Solution wird vorerst SiteColumns, einen SiteContentType sowie eine Liste beinhalten. Alles Standard bis auf das "Bonus Per Participant" Feld, diesem geben wir ein Custom Rendering mit.




Die User Story:

Als Projektmanager möchte ich in einer Projekt Liste die Einnahmen, Ausgaben, die Projektteilnehmer, Fälligkeitsdatum, eine RegelGruppe und die zu verwendende Rule Engine als Metadaten pflegen können und per Button-Klick automatisch den Bonus pro Teilnehmer, nach frei definierbaren Regeln, berechnen Lassen.

Das Regelwerk
Entscheidung
Falls das Feld "RuleGroup" befüllt ist, soll die Regel mit dem Wert aus dem Feld "RuleGroup" angewandt werden ansonsten nehme die Default Regel.

Default Regel
Falls die Differenz v. Einnahmen u. Ausgaben größer 0 ist, soll die Differenz durch die Teilnehmeranzahl dividiert werden. Dies ergibt dann den Bonus pro Teilnehmer


Technische Umsetzung:

Es wird eine SharePoint Farm-Solution erstellt mit folgenden Komponenten:

- Felder:
             bspDueDate (DateTime Field) Mandatory
             bspParticipants (UserMulti Field) Mandatory
             bspEarnings (Currency Field) Mandatory
             bspExpenses (Currency Field)
             bspRuleGroup (Text Field)
             bspRuleEngine (Choice Field) Mandatory Choices: JavaScript, SRE (Simple Rule Engine), NxBRE
             bspBonusPerParticipant (Currency Field mit angepasstem Rendering)

- ContentTypes:
             Project (Basierend auf Item)
             Felder: Title, DueDate, Participants, Earnings, Expenses, RuleGroup, RuleEngine, BonusPerParticipant

- Lists:
            Projects: ContentType Project
            BSFiles Einfache Dokumentenbibliothek

- Modules:
           jquery-1.8.2.min.js: Ziel BSFiles/JS
           bspBonusPerParticipant.js: Ziel BSFiles/JS

- Features:
                DataModel (beinhaltet alle Felder, ContentTypes und Listen)
                Modules (beinhaltet alle Files)

Let´s do it...

Als erstes legen wir in Visual Studio ein neues SharePoint Projekt an (Template "Empty SharePoint Project"). Dieses habe ich z.B. BonusScheme genannt. Bis auf das BonusPerParticipant Feld ist alles straight forward und verlangt keiner weiteren Erklärung. Es sollte in ungefähr so aussehen.

BonusPerParticipant Field
Wir werden das Rendering des BonusPerParticipant Feldes überschreiben. Das Feld wird readonly, sprich die Eingabe in der Edit oder NewForm wird verhindert. Zusätzlich werden wir links von diesem Feld einen Button (Calculate) anbringen.

Field Definition:

Die SiteColumn Definition sollte in etwa wie folgt aussehen. Wir können zwar die JSLink Eigenschaft auch an dieser Stelle überladen, jedoch finde ich gefühlt *richtiger* diesen (wie weiter unten) in der List Definition zu implementieren.

In der List Definition für die Projects Liste (schema.xml) werden wir die JSLink Eigenschaft für das BonusPerParticipant Feld verwenden und somit unsere JavaScript Datei mit dem angepasstem Rendering und der JavaScript Logik laden.

Die Anpassungen in der Schema.xml (Zeile 52 - 62) :


Die dazu gehörige JavaScript Datei:
Der Code sollte soweit selbst erklärend sein, falls danach verlangt wird könnte ich einen separaten Blogeintrag zu Custom Field Rendering Templates erstellen.



An der Oberfläche würde es in etwa so aussehen:

Damit wären wir mit der Initialen Solution fertig. In den nächsten Schritten werden wir unsere Solution um weitere .NET Rule Engines erweitern.

spaytac/BonusScheme
Sample SharePoint solution for calculating the bonus per participant in different ways (e.g. Rule Engines) - spaytac/BonusScheme