Ich führe eine geplante Veröffentlichung meiner Sitecore-Master-Datenbank unter Verwendung der Sitecore-Veröffentlichungs-API aus. Ich rufe einen Web-Service in geplanten Intervallen während des Tages auf, der den folgenden Code ausführt (zur Lesbarkeit etwas komprimiert):
%Vor%Wenn wir den obigen Code ausführen, veröffentlicht er alles im Inhaltsknoten, einschließlich aller Nachkommen, unabhängig vom Status des Arbeitsablaufs. Es ist so, als würde der Workflow komplett ignoriert. Dies ist nicht, was wir anstreben, und verursacht viele Probleme auf unserer Live-Website.
Wenn wir die gleiche Aktion innerhalb von Sitecore Desktop ausführen, wird alles im Inhaltsknoten veröffentlicht, einschließlich aller Nachkommen, die publishable sind (dh in der letzten Workflow-Phase). Es werden keine Elemente in der Struktur veröffentlicht, die sich noch im Entwurfsmodus befinden. Dies ist das erforderliche Verhalten.
Ich habe versucht, den Code als Benutzer ohne Administratorrechte zu implementieren, indem ich den obigen Code mit der folgenden using-Anweisung umgebe:
%Vor%Leider hat das keinen Effekt.
Gibt es etwas Offensichtliches, das ich übersehen habe, oder mache ich es richtig und Sitecore macht es falsch? Kann mir bitte jemand helfen?
Das Seltsame, was mir aufgefallen ist, ist auch, dass die Entwürfe, die veröffentlicht wurden, wenn sie in der Live-Datenbank betrachtet wurden, absolut nichts im Sitecore-Desktop in Bezug auf Felder oder Metadaten zeigten. Sie zeigten auch eine Warnung, dass "Der aktuelle Artikel keine Version in" Englisch: Englisch "hat."
TL; DR Der Root-Inhaltsknoten hatte eine Version in einer anderen Sprache. Diese Version wurde entfernt, oder die Veröffentlichung in englischer Sprache verhinderte die Veröffentlichung von Elementen im Entwurfsmodus
OK, nachdem wir den von @ techphoria414 vorgeschlagenen Code getestet hatten, wurde klar, dass der Kontext nicht das Problem war. Der Verlag hat den Workflow doch eingehalten, aber das Problem ist, dass der Root-Content-Node eine Version in einer anderen Sprache hat (Japanisch - frag mich nicht, wie es dahin kam), aber die Nachkommenknoten haben keine Versionen in Japanisch überhaupt. In der Tat ist unsere master-Datenbank nur so konfiguriert, dass sie Englisch als Sprache hat, so dass es für einen anderen Benutzer als admin nicht einmal möglich sein sollte, eine Version in einer anderen Sprache hinzuzufügen.
Ich habe einige Tests durchgeführt und festgestellt, dass der Publisher den Workflow für Elemente ignoriert, die in einer anderen Sprache vorhanden sind. Stellen Sie sich das folgende Szenario vor:
1) Sie fügen einen Ordner und ein darunter liegendes Element hinzu ("Workflow-Element testen"), das über einen Workflow verfügt. Übernehmen Sie den Artikel nicht, sondern belassen Sie ihn in Version 1 im Entwurfsmodus (d. H. Er sollte nicht veröffentlicht werden können). Der enthaltende Ordner hat nur eine Version in einer Sprache (Englisch):
2) Sie veröffentlichen den Ordner mit einer tiefen Veröffentlichung in Ihrer Web-Datenbank (mit dem Code in meiner Frage). Dies führt zu folgendem (Ordner hinzugefügt, aber Entwurf "Test-Workflow-Element" wurde nicht hinzugefügt). Dies ist das erwartete Verhalten - yay!
3) Fügen Sie eine neue Version zum enthaltenden Ordner in einer anderen Sprache hinzu.
4) Überprüfen Sie den Arbeitsablaufstatus des untergeordneten Elements, jetzt, wo Japanisch als Sprache ausgewählt ist. Beachten Sie, in der Gosse sagt es nicht mehr, dass es im Entwurfsmodus ist, aber es gibt überhaupt keine Version in Japanisch (wie rechts gesehen).
5) Veröffentlichen Sie den enthaltenden Ordner in allen Sprachen in der Web-DB, genau wie zuvor. Beachten Sie, dass der "Test-Workflow-Artikel" veröffentlicht wurde, aber überhaupt keine Versionen enthält. Das ist mit unserem Publish passiert, abgesehen von dem root content-Knoten, der bedeutet, dass unzählige Artikel veröffentlicht wurden, die nicht veröffentlicht werden sollten
Nun, warum unser root content-Knoten eine Version in Japanisch hat, ist ein komplettes Rätsel, aber zumindest haben wir herausgefunden, warum unsere Entwurfselemente veröffentlicht wurden, damit wir sie in Zukunft verhindern können. Ich vermute, dass es etwas mit der Aktualisierung von Sitecore zu tun hat, da es zwei japanische Versionen gibt, die in etwa den Upgrade-Daten der letzten zwei Jahre entsprechen.
Das Problem besteht wahrscheinlich darin, dass Ihr Web-Service nicht in einem Site-Kontext ausgeführt wird, für den der Workflow aktiviert ist.
Der einfachste Weg, dies innerhalb Ihres Codes zu tun, ist die Verwendung von SiteContextSwitcher
, um zur "Shell" -Site zu wechseln.
Was die veröffentlichten Artikel ohne Versionen anbelangt: Theoretisch würde dies auch bei regelmäßigem Publizieren passieren. Workflow beschränkt die Veröffentlichung von Artikelversionen, nicht die Artikel selbst. In Ihrem Code müssen Sie beim Iterieren von Elementen und in anderen Fällen überprüfen, ob item.Versions.Count > 0
vor dem Rendern vorhanden ist.
Tags und Links c# publish sitecore sitecore6 sitecore-workflow