JSLink: URL-Feld-Wert setzen

Kurzfassung

Problem

Wie kann per JSLink der Wert eines URL-Felds auf einem SharePoint-Formular gesetzt werden?

Lösung

setLink: function (ctx) {
        // Feld-Wert setzen
	ctx.CurrentFieldValue = "https://www.advis.ch, ADVIS AG";

        // Default-Edit-Template zurückgeben
	return SPFieldUrl_Edit(ctx);
}

Längere Fassung

Um möglichst einfach neue Elemente in einer Liste zu erstellen, sollen in einem Projekt gemäss den Anforderungen einige Feldwerte bereits vorbelegt werden, wenn das Formular geöffnet wird. Die Werte sollen zu diesem Zweck über die URL übergeben werden. Bei einer rein client-seitigen Lösung bietet es sich dafür an, JavaScript-Code mittels JSLink an das Formular anzubinden.

Die Werte aus der URL lassen sich einfach mit der von SharePoint bereitgestellten Funktion aus dem Query-String ermitteln:

var linkTitle = GetUrlKeyValue("linkTitle");
var linkUrl = GetUrlKeyValue("linkUrl");

jslink_urlParameter

Wie die Werte verschiedener Feldtypen (u.a. auch URL-Feld) in einem JSLink ausgelesen werden, erklärt Stefan Bauer in seinem Blog-Post. Um einen Wert zu setzen, kann bei vielen Feldtypen die Zuweisung einfach umgedreht werden. Dies scheint beim URL-Feld jedoch nicht zu klappen. Auch die sonst oftmals verwendete Notation mit einem Objekt mit den Eigenschaften „URL“ und „Description“ bringt hier keinen Erfolg. Nach einer kurzen Analyse mittels JSLink im Edit-Form hat sich gezeigt, dass der Wert als String im Format „URL, Beschreibung“ gesetzt werden muss. Gleich kann ja z.B. auch mit PowerShell ein URL-Wert gesetzt werden.

Somit kann das JSLink-Script einfach fertiggestellt werden:

// Type für MDS registrieren
Type.registerNamespace("eSuite");
eSuite.FormHelper = eSuite.FormHelper || {};

// Namespace mit Helper-Funktionen
eSuite.FormHelper = {
 setLink: function (ctx) {
		var linkTitle = GetUrlKeyValue("linkTitle");
		var linkUrl = GetUrlKeyValue("linkUrl");

        var fieldValue = linkUrl + ", " + linkTitle;
        ctx.CurrentFieldValue = fieldValue;

        return SPFieldUrl_Edit(ctx); // Default-Edit-Template zurückgeben
    }
};

// Template Override registrieren
(function () {
    var ctx = {};
    ctx.Templates = {};

    ctx.Templates.Fields = {
        "MeinLinkFeld": {
            "NewForm": eSuite.FormHelper.setLink
        }
    };

    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx);
})();

Resultat

jslink_resultat

Andreas Hebeisen
Software Engineer


Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s