2015-04-02 13 views
9

O ile mi wiadomo, od razu po instalacji Sitecore nie ma możliwości opublikowania czegoś w określonym czasie. Mam na myśli dokładną porę dnia.Najlepszy sposób publikowania w określonym czasie w Sitecore

Jak rozumiem, włączasz agenta wydawniczego ustawiając interwał ... powiedzmy co pół godziny (nie wydaje się, że dobrym pomysłem byłoby automatyczne publikowanie częściej niż to). Następnie masz swoich autorów ustawić ograniczenia publikowania przedmiotów. Po przekroczeniu tego ograniczenia element jest publikowany przy następnym uruchomieniu agenta publikowania. Poprawny?

Powyższy scenariusz nie pozwala na publikację czegoś o określonej porze dnia. Jeśli mam stronę, która musi zostać opublikowana jutro o 8 rano, możliwe, że nie będzie ona dostępna do godziny 8:30 rano, w zależności od tego, kiedy interwał zostanie wykonany w stosunku do godziny 8 rano. Czy mam to prawidłowe?

Jakie jest najlepsze podejście do konfiguracji, aby autorzy mogli publikować przedmioty o określonych porach dnia?

Odpowiedz

5

Masz rację co do agenta wydawniczego. Wszyscy agenci Sitecore działają w oparciu o przedziały czasowe i nie mają gwarancji uruchomienia w określonym czasie. Możesz przerwać interwał w dół, ale ponieważ publikowanie jest w większości zadaniem seryjnym, jeśli Twój interwał wynosi, powiedzmy, 5 minut, a publikowanie witryny zajmuje 7 minut, dostaniesz kupkę zadań publikowania (jak jeden jest umieszczany w kolejce co 5 minut).

Jedynym sposobem na zagwarantowanie, że publikacja nastąpi w określonym czasie, jest wykonanie przez kogoś czynności w tym czasie za pośrednictwem edytora treści. Z punktu widzenia automatyzacji Sitecore nie ma nic do tego. W przeszłości, gdzie czas zegarowy był kluczowy dla uruchomienia zadania, widziałem zaplanowane zadania w systemie Windows i kliknąłem adres URL w witrynie, aby go uruchomić.

Innym rozwiązaniem, które można zastosować dla zawartości, jeśli pora dnia jest tak ważna, jest posiadanie pola datetime na szablonie podstawowym, a następnie wykonanie kroku potoku httpBeginRequest, który działa po ItemResolver. Czy ten krok odczytuje czas na polu, a następnie o potoku, jeśli element nie jest jeszcze "na żywo".

2

Jest to moduł w Sitecore Marketplace za to:

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

Everytime autor ustawia ograniczenia wydawnicze do elementu, moduł dodaje nowe zaplanowane zadanie i publishs element w określonym czasie.

+1

Wydaje się to najlepszym podejściem, ale zgodnie z komentarzem na stronie nie działa z 7.2. Uruchomimy 7.5 (w tym roku uaktualnimy do 8). Wygląda na to, że istnieje wiele świetnych modułów Sitecore, które szybko się dezaktualizują i nie są uaktualniane. Bummer. – Scott

+0

@Scott istnieje również post na forum SDN, który mówi, że działa on w wersji 7.2. Spróbowałbym. W przeciwnym razie źródło zostało również przesłane na rynek, więc spróbuj go zbudować samodzielnie. –

+1

@Scott W dalszym ciągu będziesz mieć ten sam problem z publikowaniem w czasie EXACT, nadal będziesz mieć zmienność czasu na podstawie interwału agenta zadań. – jammykam

2

Można postępować zgodnie z instrukcjami w tej link do uruchomienia zadania w określonym czasie, trzeba będzie napisać kod dla zadania wydawniczej, coś jak:

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

musiałem zrobić to zadanie również . Nie można korzystać ze standardowych programów planujących sitecore, ponieważ działają one tylko w x okresach i może się to różnić w zależności od tego, kiedy Apppool rdzenia witryny został poddany recyklingowi itp. Skończyło się jednak następujących skoków obręcze:

Zbuduj klasy w swojej witrynie internetowej:

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()); 
     } 
    } 
} 

ten musi następnie wystawienie na swojej stronie internetowej w jakiś sposób. Zbudowałem stronę internetową, którą mógłbym nazwać. Następnie potrzebujesz mechanizmu wywoływania strony internetowej. Napisałem skrypt PowerShell (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 na podstawie this answer

mogę następnie wywołać skrypt PowerShell każdy okres x czasu przy użyciu standardowych okien planującego.