У меня есть две цели публикации: одна - это этап, а другая - производство. Публикация на Production должна придерживаться ограничений публикации, но публикация на сцене не должна смотреть или отбрасывать действительные и действительные даты и публиковать при любых обстоятельствах.Ограничение переопределения публикации Sitecore
Я написал трубопровод публикации (PipelinePublishProvider). Я не уверен, как мне удастся временно перезаписать значения полей, чтобы он публиковал каждую сцену.
public class StagePublishOverride : PipelinePublishProvider
{
public override PublishHelper CreatePublishHelper(PublishOptions options)
{
Assert.ArgumentNotNull(options, "options");
if (options.TargetDatabase.Name.ToLower() == "stage")
{
Item itemToBePublished = new Item(options.RootItem.ID, options.RootItem.InnerData, new Database("web"));
itemToBePublished.Editing.BeginEdit();
itemToBePublished.Publishing.ValidTo = DateTime.MaxValue;
itemToBePublished.Publishing.ValidFrom = DateTime.MinValue;
itemToBePublished.Editing.EndEdit();
options.RootItem = itemToBePublished;
}
if (options is ExtendedPublishOptions)
return new ExtendedPublishHelper(options as ExtendedPublishOptions);
return new PublishHelper(options);
}
}
public class ExtendedPublishHelper : PublishHelper
{
private readonly ExtendedPublishOptions _options;
public ExtendedPublishHelper(ExtendedPublishOptions options)
: base(options)
{
_options = options;
}
public override Item GetVersionToPublish(Item sourceItem)
{
Assert.ArgumentNotNull(sourceItem, "sourceItem");
if (Options is ExtendedPublishOptions)
{
return sourceItem.Publishing.GetValidVersion(Options.PublishDate, _options.RequireApproval);
}
return sourceItem.Publishing.GetValidVersion(Options.PublishDate, true);
}
}
public class ExtendedPublishOptions : PublishOptions
{
public ExtendedPublishOptions(Database sourceDatabase, Database targetDatabase, PublishMode mode, Language language, DateTime publishDate, bool requireApproval)
: base(sourceDatabase, targetDatabase, mode, language, publishDate)
{
RequireApproval = requireApproval;
}
public bool RequireApproval { get; set; }
}
}
Код обновлен. Сделано изменение, чтобы получить элемент через метод PublishHelper.GetSourceItem. Предыдущий метод «PublishHelper.GetItemToPublish» фактически проверяет дату публикации и, следовательно, не будет удовлетворять запросу публикации без ограничений. –
Спасибо Амир! Этот код действительно сработал. Очень ценю вашу помощь. –