2015-04-02 11 views
9

Theo như tôi có thể biết, Sitecore ngoài hộp không đi kèm với một cách để xuất bản một cái gì đó tại một thời điểm cụ thể. Bởi vì tôi có nghĩa là một thời gian chính xác trong ngày.Cách tốt nhất để xuất bản vào thời điểm cụ thể trong Sitecore

Khi tôi hiểu điều đó, bạn bật tác nhân xuất bản bằng cách đặt khoảng thời gian ... giả sử cứ sau nửa giờ (có vẻ như không nên tự động xuất bản thường xuyên hơn). Sau đó, bạn có tác giả của bạn thiết lập các hạn chế xuất bản trên các mặt hàng. Khi giới hạn đó trôi qua, mục được xuất bản vào lần tới khi tác nhân xuất bản chạy. Chính xác?

Kịch bản trên không cho phép nội dung nào đó được xuất bản vào một thời điểm cụ thể trong ngày. Nếu tôi có một trang cần phát trực tiếp lúc 8 giờ sáng ngày mai, có thể nó sẽ không hoạt động cho đến khoảng 8:30 sáng tùy thuộc vào khoảng thời gian chạy trong mối quan hệ đến 8 giờ sáng. Tôi có đúng không?

Cách tiếp cận tốt nhất để thiết lập mọi thứ để tác giả có thể xuất bản các mặt hàng vào những thời điểm cụ thể trong ngày là gì?

Trả lời

5

Bạn đúng trên đại lý xuất bản. Tất cả các đại lý của Sitecore đều dựa trên khoảng thời gian và không được bảo đảm chạy vào một thời điểm cụ thể. Bạn có thể xoay vòng theo quãng đường, nhưng vì xuất bản là một nhiệm vụ nối tiếp cho hầu hết các phần, Nếu khoảng thời gian của bạn là 5 phút và xuất bản trang web của bạn mất 7 phút, bạn sẽ nhận được một đống công việc xuất bản (như một được đặt vào hàng đợi mỗi 5 phút).

Cách duy nhất để bảo đảm xuất bản xảy ra tại một thời điểm cụ thể là yêu cầu ai đó làm việc đó tại thời điểm đó thông qua trình chỉnh sửa nội dung. Tự động khôn ngoan, Sitecore không có bất cứ điều gì cho việc này. Trong quá khứ, nơi mà thời gian đồng hồ là rất quan trọng cho một công việc để chạy, tôi đã thấy Windows nhiệm vụ theo lịch trình chạy và nhấn một URL trên trang web để kick nó đi.

Cách tiếp cận khác mà bạn có thể thực hiện cho nội dung nếu thời gian trong ngày quan trọng, là có trường datetime trên mẫu cơ sở, sau đó có bước đường dẫn httpBeginRequest chạy sau ItemResolver. Có bước đó đọc thời gian trên trường, sau đó về đường ống nếu mục đó chưa "sống".

2

Có một mô-đun trong Sitecore Marketplace cho việc này:

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

Mỗi một tác giả đặt ra những hạn chế xuất bản đến một mục, các mô-đun bổ sung thêm một nhiệm vụ theo lịch trình mới và publishs mục tại thời điểm cụ thể.

+1

Điều này có vẻ là cách tiếp cận tốt nhất, nhưng theo nhận xét trên trang, nó không hoạt động với 7.2. Chúng tôi đang chạy 7,5 (sẽ được nâng cấp lên 8 năm nay). Có vẻ như có rất nhiều mô-đun Sitecore tuyệt vời đã lỗi thời và không được nâng cấp. Rất tiếc. – Scott

+0

@Scott cũng có một bài đăng trên diễn đàn SDN cho biết nó hoạt động trên 7.2. Tôi sẽ thử nó. Nếu không, nguồn cũng được tải lên Marketplace, do đó hãy thử tự xây dựng nó. –

+1

@Scott Bạn vẫn sẽ gặp sự cố tương tự khi xuất bản vào thời gian EXACT, bạn sẽ vẫn nhận được biến thể thời gian dựa trên khoảng thời gian tác vụ tác vụ. – jammykam

2

Bạn có thể làm theo các hướng dẫn trong link này để kích hoạt một nhiệm vụ trên một thời gian cụ thể, Bạn sẽ phải viết mã cho nhiệm vụ xuất bản, Một cái gì đó như:

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

tôi phải làm nhiệm vụ này cũng . Bạn không thể sử dụng lịch biểu sitecore tiêu chuẩn vì chúng chỉ chạy x thời gian và điều này có thể khác nhau tùy thuộc vào khi Apppool của lõi trang web được tái chế, v.v. Tôi đã kết thúc nhảy dù hoops sau:

xây dựng một lớp trong trang web của bạn:

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

này sau đó cần phơi bày trên trang web của bạn bằng cách nào đó. Tôi đã xây dựng một trang web mà tôi có thể gọi. Sau đó, bạn cần một cơ chế để gọi trang web. Tôi đã viết một kịch bản 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 dựa trên this answer

sau đó tôi có thể gọi các kịch bản PowerShell mỗi giai đoạn x thời gian sử dụng một cửa sổ tiêu chuẩn Scheduler.

Các vấn đề liên quan