2015-04-02 4 views
9

Soweit ich sagen kann, Out-of-Box Sitecore kommt nicht mit einer Möglichkeit, etwas zu einem bestimmten Zeitpunkt zu veröffentlichen. Damit meine ich eine GENAUE Tageszeit.Der beste Weg, um zu bestimmten Zeiten in Sitecore zu veröffentlichen

Wie ich es verstehe, schalten Sie den Veröffentlichungsagenten ein, indem Sie ein Intervall festlegen ... sagen wir jede halbe Stunde (es scheint nicht so, als wäre es eine gute Idee, häufiger zu veröffentlichen). Dann haben Ihre Autoren Veröffentlichungseinschränkungen für Elemente festgelegt. Wenn diese Einschränkung besteht, wird das Element bei der nächsten Ausführung des Veröffentlichungsagenten veröffentlicht. Richtig?

Das obige Szenario lässt nicht zu, dass etwas zu einer bestimmten Tageszeit veröffentlicht wird. Wenn ich eine Seite habe, die morgen um 8 Uhr live gehen muss, ist es möglich, dass sie nicht vor 8:30 Uhr live ist, abhängig davon, wann das Intervall in Bezug auf 8 Uhr morgens läuft. Habe ich das richtig?

Was ist der beste Ansatz, um Dinge einzurichten, damit Autoren Artikel zu bestimmten Tageszeiten veröffentlichen können?

Antwort

5

Sie befinden sich auf dem Veröffentlichungsagenten. Alle SiteCore-Agenten sind intervallbasiert und können nicht zu einem bestimmten Zeitpunkt ausgeführt werden. Sie können das Intervall weit nach unten drehen, aber da das Publizieren zum größten Teil eine Serienaufgabe ist. Wenn Ihr Intervall beispielsweise 5 Minuten beträgt und Ihre Website-Veröffentlichung 7 Minuten dauert, erhalten Sie eine Häufung von Veröffentlichungsaufträgen wird alle 5 Minuten in die Warteschlange gestellt).

Die einzige Möglichkeit, eine Veröffentlichung zu einem bestimmten Zeitpunkt zu garantieren, besteht darin, dass jemand sie zu diesem Zeitpunkt über den Inhaltseditor ausführt. Automationstechnisch hat Sitecore dafür nichts. In der Vergangenheit, in der die Uhrzeit für die Ausführung eines Jobs entscheidend war, habe ich Windows-geplante Aufgaben ausgeführt und eine URL auf der Website angeklickt, um sie zu starten. Der andere Ansatz, den Sie für den Inhalt verwenden könnten, wenn die Tageszeit so wichtig ist, ist, dass Sie ein Datetime-Feld auf einer Basisvorlage haben und dann einen httpBeginRequest-Pipeline-Schritt ausführen, der nach dem ItemResolver ausgeführt wird. Lassen Sie diesen Schritt die Zeit auf dem Feld lesen, dann über die Pipeline, wenn der Artikel noch nicht "live" ist.

2

Es ist ein Modul, in dem Sitecores Marktplatz für diesen:

https://marketplace.sitecore.net/en/Modules/Automated_Publisher.aspx

Jedesmal Autor Verlag Einschränkungen auf ein Element stellt das Modul einen neuen geplanten Task ergänzt und Reportagen, Publikationen, das Elements an der bestimmten Zeit.

+1

Dies scheint der beste Ansatz, aber nach dem Kommentar auf der Seite funktioniert es nicht mit 7.2. Wir betreiben 7,5 (wird in diesem Jahr auf 8 aktualisiert). Es scheint, als gäbe es viele großartige Sitecore-Module, die schnell veraltet sind und nicht aktualisiert werden. Bummel. – Scott

+0

@Scott gibt es auch einen SDN Forum Post, der sagt, dass es auf 7.2 funktioniert. Ich würde es versuchen. Ansonsten wurde die Quelle ebenfalls auf den Marktplatz hochgeladen, also versuche es selbst zu erstellen. –

+1

@Scott Sie haben immer noch das gleiche Problem mit der Veröffentlichung zur EXACT-Zeit, Sie erhalten dennoch die Zeitvariation basierend auf dem Intervall des Aufgabenagenten. – jammykam

2

Sie können folgen Sie den Anweisungen in diesen link zu einem bestimmten Zeitpunkt eine Aufgabe auslösen, müssen Sie den Code für den Verlag Aufgabe zu schreiben, so etwas wie:

PublishOptions options = 
     new PublishOptions(master, web, PublishMode.Smart, 
     Sitecore.Globalization.Language.Parse("en"), DateTime.Now) 
      { 
       Deep = true; 
      }; 

Publisher publisher = new Publisher(options); 
publisher.PublishAsync(); 
0

Ich hatte auch diese Aufgabe zu tun . Sie können die Standard-SiteCore-Scheduler nicht verwenden, da sie nur x-Perioden ausführen. Dies kann davon abhängen, wann der Apppool des Site-Core wiederverwendet wurde, usw. Ich landete, obwohl die folgenden Reifen springen nach oben:

Erstellen Sie eine Klasse in Ihrer Website:

public class PublishCommand 
{ 
    public void RunFullPublish() 
    { 
     using (new SecurityDisabler()) 
     { 
      var source = Factory.GetDatabase("master"); 
      var target = Factory.GetDatabase("web"); 

      List<PublishOptions> options = new List<PublishOptions>(); 
      foreach (Language language in source.Languages) 
      { 
       options.Add(new PublishOptions(source, target, PublishMode.Full, language, DateTime.Now)); 
      } 

      PublishManager.Publish(options.ToArray()); 
     } 
    } 
} 

diese dann irgendwie auf Ihrer Website muss ausgesetzt werden. Ich habe eine Webseite erstellt, die ich anrufen kann. Sie benötigen dann einen Mechanismus, um die Webseite aufzurufen. Ich habe ein Powershell-Skript geschrieben (RunUrl.ps1):

param([string]$url="https:/mywebsite/RunFullPublish.aspx") 

Write-Host "calling URL $url" 
$request = [System.Net.WebRequest]::Create($url) 
$response = $request.GetResponse() 
$response.Close() 

Powershell basiert auf this answer

ich dann das Powershell-Skript ein Standardfenster mit Scheduler jeden x Zeit anrufen können.

Verwandte Themen