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

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




JSLink lädt manchmal nicht

Unbeantwortet Dieser Beitrag hat 4 Antworten

Ohne Rang
367 Beiträge
Christian Merkel erstellt 19 Sept. 2017 15:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

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 :)

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 19 Sept. 2017 16:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

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
Ohne Rang
367 Beiträge
Christian Merkel Als Antwort am 19 Sept. 2017 16:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

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

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 19 Sept. 2017 18:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

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
Ohne Rang
367 Beiträge
Christian Merkel Als Antwort am 20 Sept. 2017 09:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

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