SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

JSLink lädt manchmal nicht

bewertet von 0 Usern
Nicht beantwortet Dieser Beitrag hat 0 Geprüfte Antworten | 4 Antworten | 1 Follower

Top-25-Beitragsschreiber
367 Beiträge
Christian Merkel erstellt in 19 Sep 2017 15:35

Hi,

ich arbeite sehr oft mit JSLink um Formulare oder Ansichten anzupassen.

Im großen und ganzen funktioniert das auch wunderbar. Leider habe ich manchmal das Phänomen, dass die Scripts nicht geladen bzw. ausgeführt werden (geladen schon).

MDS ist aus.

Wir haben bei uns auch ein etwas "komplexeres" Verfahren etabliert, um allen Seiten die gleiche JSLink Version bereitzustellen:

In der Root-SiteCollection befinden sich die Scripte, welche dynamisch eingebunden werden sollen. Hier hat jeder Lese-Recht.

In den jeweiligen Seiten befinden sich die JSLink-Scripte, welche die eigentlichen Scripte dynamisch laden. Dies geschieht mit folgendem Aufruf:

(function(){
    var scriptKey = "TagCloudSource.js";
    var scriptLink = "/Scripts/Source/TagCloud/TagCloudSource.js";

    SP.SOD.executeFunc("clienttemplates.js", "SPClientTemplates", function(){
        SP.SOD.registerSod(scriptKey,scriptLink);
        SP.SOD.executeFunc(scriptKey, null, function(){
            console.log("ScriptOnDemand loaded: " + scriptKey);
        });
    });

    /* config part */
    SP.SOD.executeOrDelayUntilScriptLoaded(function () {
            MyNamespace.TagCloud.tagCloudTitle = "Top Tags für '{0}'";        // title for each tag cloud based on field name
            MyNamespace.TagCloud.tagDelim = ' | ';                // delimiter between the tags
            MyNamespace.TagCloud.tagAutoSize = true;                        // calculated size for each tag depending on occurrence
            MyNamespace.TagCloud.ListTemplateType = 850;                    // 850 --> Pages library
            MyNamespace.TagCloud.showTagCount = true;                        // Display total count for each tag

            MyNamespace.TagCloud.RegisterTemplate();
        }, scriptKey);
})();

Die eigentlichen Scripte haben dann immer als letzte Zeile folgendes im Bauch:

// notify final script load
SP.SOD.notifyScriptLoadedAndExecuteWaitingJobs("TagCloudSource.js");

Sobald ich die Entwicklungsconsole offen lasse, funktionieren die Aufrufe zu 100%. Sonst kommt es vor, das ab und zu beim Aufruf die Scripte nicht feuern....

Woran könnte das Verhalten liegen?

Könnten irgenwelche Timeouts oder so beim Nachladen dafür sorgen?

Danke euch :)

SharePoint Enthusiast

Ich helfe gern, wenn es mein Zeit zu lässt :)
Gern auch per direkter Anfrage auf XING

Alle Antworten

Top-10-Beitragsschreiber
18.988 Beiträge

Dieses Script-On-Demand Zeug ist ziemlich sicher das Problem. Vermutlich kommt es einfach vor, daß in manchen Fällen Deine Scriptdatei nicht rechtzeitig zur Verfügung steht. Beim Ausführen mit Debugger ist die Ausführung (wegen des Debuggers) so verlangsamt, daß immer genug Zeit ist, die Datei nachzuladen. Ich würde versuchen davon wegzukommen.

Warum macht Ihr das so? Ihr könnt doch die Dateien im Root lassen und trotzdem überall direkt als JSLink einbinden. Oder auch in den Layouts-Ordner schmeißen und von dort referenzieren.

Viele Grüße
Andi
af @ evocom de
Blog
Top-25-Beitragsschreiber
367 Beiträge

1. JSLink erlaubt nur relative Links zur jeweiligen SiteCollection. Ein Link direkt ins Root geht nicht (zumindest war das in den Tests immer der Fall)

2. Dieser Aufbau erlaubt es uns die Konfig pro SiteCollection nochmals ggf. anzupassen (siehe Config-Part)

3. Im Layouts wäre theoretisch gut, aber dann komme ich nicht ran, ohne Admin-Rechte auf die Server (ist bei uns sehr stark reklementiert)

4. Im Layouts muss es bei jeder Anpassungen auf allen WFE-Servern nachgezogen werden

5. Im Layouts haben wir nicht die Möglichkeit das Script in einem Entwurfsmodus bereitzustellen um es zu testen (jetzt in der Bibo ist das möglich dank Versionierung :) )

 

Welche Alternative zu dem SOD hätte ich denn noch...

SharePoint Enthusiast

Ich helfe gern, wenn es mein Zeit zu lässt :)
Gern auch per direkter Anfrage auf XING

Top-10-Beitragsschreiber
18.988 Beiträge

Ich lasse alle Deine Argumente gelten (außer 1.) und kenne natürlich solche Beschränkungen. Sollte nur ein Vorschlag sein, wie man es auch machen könnte.

Wie man das gewünschte Szenario ohne SOD, aber trotzdem dynamisch machen könnte, weiß ich auch nicht. Mit SOD habe ich allerdings schon viele schlechte Erfahrungen gemacht.

Viele Grüße
Andi
af @ evocom de
Blog
Top-25-Beitragsschreiber
367 Beiträge

Bei 1. war auch eher gemeint, dass es dann keine Möglichkeit gibt, diese als "Custom Views" dem Endanwender für spezielle Listen direkt anzubieten...

Manuell kann ich da vieles reinlinken... Aber das war nicht unser Anspruch :)

Leider hab ich auch keinen Ansatz, wie ich das Verhalten des "nicht ladens" provozieren kann. In über 90% der Fälle gehts ja wie gesagt. Und wie du schon sagtest, mit der Console gehts zu 100%, selbst wenn ich das permanete Neuladen etc. ausstelle.

Sicher müssen wir uns damit irgendwie noch weiter auseinander setzen. vielleicht find ich noch einen Workaround...

SharePoint Enthusiast

Ich helfe gern, wenn es mein Zeit zu lässt :)
Gern auch per direkter Anfrage auf XING

Seite 1 von 1 (5 Elemente) | RSS