1

Is there any Sitecore API which can be used to clear the publish queue? Occasionally (possibly related to Unicorn sync) I find that there are hundreds of publishing operations in the job viewer (/sitecore/admin/jobs.aspx). I would like to build an admin page which would allow me to clear this publish queue. Obviously, I could just write some crude SQL statements to delete the records in the PublishQueue table, but it's better to use the API when possible.

4
  • /sitecore/admin/PublishQueueStats.aspx will allow you to cleanup a publish queue (at least that's what it says - didn't test it yet)
    – Gatogordo
    Jun 27, 2017 at 11:44
  • I think cleanup does not mean "remove all items in the publish queue" Jun 27, 2017 at 11:54
  • because I tried that, and it did not make any change to the queued jobs. Jun 27, 2017 at 11:56
  • Added the database provider method that the CleanupPublishQueue should lead to in the answer.. that might also help.
    – Gatogordo
    Jun 27, 2017 at 12:07

1 Answer 1

1

As said, the sitecore/admin/PublishQueueStats.aspx will allow you to cleanup a publish queue so you might not have to write it yourself. If you still want to, this is the code behind the cleanup button on that page:

protected void OnClick(object sender, EventArgs e)
{
    Database database = Factory.GetDatabase(this.Databases.SelectedValue);
    if (database == null)
    {
      ...
    }
    else
    {
      TimeSpan timeSpan = DateUtil.ParseTimeSpan(this.IntervalToKeep.Text, TimeSpan.MaxValue);
      if (timeSpan == TimeSpan.MaxValue)
      {
        ...
      }
      else
      {
        PublishManager.CleanupPublishQueue(DateTime.Now - timeSpan, database);
      }
    }
  }

So the API you are looking for is PublishManager.CleanupPublishQueue.

This should call the CleanupPublishQueue in the SqlProvider:

public override bool CleanupPublishQueue(DateTime to, Sitecore.Data.DataProviders.CallContext context)
{
    to = DateUtil.ToUniversalTime(to);
    this.Api.Execute(" DELETE FROM {0}PublishQueue{1} WHERE {0}Date{1} <= {2}to{3}", (object) "to", (object) to);
    return true;
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.