从 Sitecore 发布处理器获取要发布的项目的 ID
Get IDs of Items to be Published from Sitecore Publishing Processor
我正在尝试在 Sitecore 中编写自定义发布处理器,以便我可以记录发布任何项目的确切日期和时间。我正在使用的代码(我改编自 Uli Welterbach 的代码 here)不会引发错误,但它似乎没有给我实际发布的项目的 ID。我做错了什么?
public class PublicationProcessor : PublishProcessor
{
public override void Process(PublishContext context)
{
Assert.ArgumentNotNull(context, "context");
var cqs = context.Queue.ToList();
string connectionString = "Data Source=MyServer;initial catalog=AuditHistory; User ID=sa;Password=123456789;Integrated Security=false;";
var query = @"INSERT INTO [dbo].[ItemHistory]
([ItemID])
VALUES
(@ItemId)";
using (SqlConnection cn = new SqlConnection(connectionString))
{
foreach (var itemId in GetPublishQueueItems(context.PublishOptions))
{
using (SqlCommand cmd = new SqlCommand(query, cn))
{
// define parameters and their values
cmd.Parameters.Add("@ItemId", SqlDbType.UniqueIdentifier, 50).Value = itemId.ToGuid();
// open connection, execute INSERT, close connection
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
}
}
}
private IEnumerable<ID> GetPublishQueueItems(PublishOptions options)
{
if (options.Mode == PublishMode.Incremental)
return PublishQueue.GetPublishQueue(options).Select(candidate => candidate.ItemId).ToArray();
return PublishQueue.GetContentBranch(options).Select(candidate => candidate.ItemId).ToArray();
}
您应该使用 publish:itemProcessing
管道。这在发布项目时触发。您将获得项目 ID。我有一个博客 post,其中我使用了 publish:itemProcessed
,它在项目发布后触发。 link 是 https://hishaamn.wordpress.com/2016/04/07/sitecore-incremental-publish-summary/
实现方式类似
代码示例
public void OnItemProcessing(object sender, EventArgs args)
{
var itemArgs = args as ItemProcessingEventArgs;
if (itemArgs != null)
{
//Retrieve the current Item being published;
var itemId = itemArgs.Context.ItemId;
//Your code here;
}
}
配置
对于 Sitecore 7.x,publish:itemProcessing
位于 Web.config 中,对于 Sitecore 8.x,publish:itemProcessing
在 App_Config 文件夹的 Sitecore.config 中找到
谢谢
你可以试试context.ProcessedItemIds
我正在尝试在 Sitecore 中编写自定义发布处理器,以便我可以记录发布任何项目的确切日期和时间。我正在使用的代码(我改编自 Uli Welterbach 的代码 here)不会引发错误,但它似乎没有给我实际发布的项目的 ID。我做错了什么?
public class PublicationProcessor : PublishProcessor
{
public override void Process(PublishContext context)
{
Assert.ArgumentNotNull(context, "context");
var cqs = context.Queue.ToList();
string connectionString = "Data Source=MyServer;initial catalog=AuditHistory; User ID=sa;Password=123456789;Integrated Security=false;";
var query = @"INSERT INTO [dbo].[ItemHistory]
([ItemID])
VALUES
(@ItemId)";
using (SqlConnection cn = new SqlConnection(connectionString))
{
foreach (var itemId in GetPublishQueueItems(context.PublishOptions))
{
using (SqlCommand cmd = new SqlCommand(query, cn))
{
// define parameters and their values
cmd.Parameters.Add("@ItemId", SqlDbType.UniqueIdentifier, 50).Value = itemId.ToGuid();
// open connection, execute INSERT, close connection
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
}
}
}
private IEnumerable<ID> GetPublishQueueItems(PublishOptions options)
{
if (options.Mode == PublishMode.Incremental)
return PublishQueue.GetPublishQueue(options).Select(candidate => candidate.ItemId).ToArray();
return PublishQueue.GetContentBranch(options).Select(candidate => candidate.ItemId).ToArray();
}
您应该使用 publish:itemProcessing
管道。这在发布项目时触发。您将获得项目 ID。我有一个博客 post,其中我使用了 publish:itemProcessed
,它在项目发布后触发。 link 是 https://hishaamn.wordpress.com/2016/04/07/sitecore-incremental-publish-summary/
实现方式类似
代码示例
public void OnItemProcessing(object sender, EventArgs args)
{
var itemArgs = args as ItemProcessingEventArgs;
if (itemArgs != null)
{
//Retrieve the current Item being published;
var itemId = itemArgs.Context.ItemId;
//Your code here;
}
}
配置
对于 Sitecore 7.x,publish:itemProcessing
位于 Web.config 中,对于 Sitecore 8.x,publish:itemProcessing
在 App_Config 文件夹的 Sitecore.config 中找到
谢谢
你可以试试context.ProcessedItemIds