如何从PublishEndRemoteEventArgs获取发布选项? C#,Sitecore

时间:2018-02-15 17:37:37

标签: c# sitecore publish publishing

我添加了一个publish:end方法,以便在发布特定类型的项目时发布特定的相关项目。我有OnPublishEnd和OnPublishEndRemote方法,但我需要确保发布到与刚刚发布的项目相同的发布目标。我已经在OnPublishEnd事件中有发布者,但我不确定如何在远程事件中获取它:

public void OnPublishEnd(object sender, EventArgs args)
{
    var sitecoreArgs = args as Sitecore.Events.SitecoreEventArgs;
    if (sitecoreArgs == null)
    {
        return;
    }

    var publisher = sitecoreArgs.Parameters[0] as Publisher;
    if (publisher == null)
    {
        return;
    }

    var rootItem = publisher.Options.RootItem;
    if (rootItem.TemplateID == IEventConstants.TemplateId)
    {
        PublishEventParent(rootItem, publisher);
    }
}

public void OnPublishEndRemote(object sender, EventArgs args)
{
    var args2 = args as PublishEndRemoteEventArgs;
    if (args2 == null)
    {
        return;
    }
    Item rootItem = Factory.GetDatabase("web").GetItem(new ID(args2.RootItemId));
    if (rootItem.TemplateID == IEventConstants.TemplateId)
    {
        PublishEventParent(rootItem, ???publisher???);
    }
}

public void PublishEventParent(Item item, Publisher publisher)
{
    var adHocPage =
        item.Axes.GetAncestors().FirstOrDefault(x => x.TemplateID == IAd_Hoc_PageConstants.TemplateId);
    if (adHocPage != null)
    {
        publisher.Publish();
    }
}

如何在远程事件中获取发布者/发布选项/发布目标?

1 个答案:

答案 0 :(得分:1)

以下是PublishEndRemoteEventArgs类中的所有属性列表。

发布结束远程事件通常在CD服务器上触发。它们不应该与master数据库有任何联系,因此不应该在那里进行任何其他发布。

public bool CompareRevisions { get; protected set; }

public bool Deep { get; protected set; }

public DateTime FromDate { get; protected set; }

public string LanguageName { get; protected set; }

public PublishMode Mode { get; protected set; }

public DateTime PublishDate { get; protected set; }

public List<string> PublishingTargets { get; protected set; }

public bool RepublishAll { get; protected set; }

public Guid RootItemId { get; protected set; }

public string SourceDatabaseName { get; protected set; }

public string TargetDatabaseName { get; protected set; }