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.
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.
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.
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.
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
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.
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.