这是一个场景:我有一个包含组件 A 的页面。组件 A 有几个链接的组件 B 和 C。如果编辑器修改组件 B 并希望在组件仍在工作流中时发布到暂存目标,以便审阅者可以查看暂存的更改服务器在批准组件 B 之前。当编辑器预览组件时,他可以看到更改,但是当他发布到暂存目标时,它将获取组件 A 的最后签入版本,该版本仍然链接到组件 B 的未修改版本。如何务实覆盖默认行为以允许编辑在完成项目活动之前将其更改发布到暂存环境?
此外,当组件 B 直接插入第二页时,我能够使用以下内容从工作流自动化活动中的 VBScript 发布:
Dim strItemURI
strItemURI = CurrentWorkItem.GetItem(2).ID
Dim oComp
Set oComp = TDSE.GetObject(strItemURI, 1)
Call oComp.Publish("tcm:0-13-65537", True, True, False)
Set oComp = Nothing
FinishActivity“自动活动”“发布到暂存”“完成”
我是否需要编写自定义解析器来完成上述场景,以允许在工作流中发布到暂存环境的链接组件的修改版本?
任何想法或样品将不胜感激。
谢谢。
更新:
我正在尝试创建 TBB,它将替换包中项目的修改版本。对此有任何想法吗?这是一些代码:
public void Transform(Engine engine, Package package)
{
try
{
_publicationID = engine.PublishingContext.ResolvedItem.Item.Id.PublicationId;
string stagingTarget = Settings.GetSetting("StagingTargetUri");
PublicationTarget target = new PublicationTarget(new TcmUri(stagingTarget), engine.GetSession());
if(engine.PublishingContext.ResolvedItem.PublicationTarget!=null){
if (stagingTarget.Contains(engine.PublishingContext.ResolvedItem.PublicationTarget.Id.ToString()))
{
foreach (Item item in package.GetAllByType(ContentType.Component))
{
VersionedItem versionedItem = (VersionedItem)engine.GetObject(item);
if (versionedItem.LockType.HasFlag(LockType.InWorkflow))
{
Component componentInWorkflow =
(Component)engine.GetObject(new TcmUri(versionedItem.Id.ItemId, versionedItem.Id.ItemType, versionedItem.Id.PublicationId, 0));
package.Remove(item);
Item mainComponent= package.CreateTridionItem(ContentType.Component,componentInWorkflow);
package.PushItem(mainComponent);
}
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}