【发布时间】:2012-10-10 01:28:11
【问题描述】:
这是一个场景:我有一个包含组件 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;
}
}
【问题讨论】:
-
组件 A 是否也在工作流中或被任何人签出?
-
您能否描述一下您的目标的最低审批级别,以及您执行发布操作时每个项目的审批状态?
-
Nickoli,组件 A 不在工作流程中,但因为它已链接组件 B,它不会让我发布组件 B 的版本 0。我认为是因为它仍然链接到最新签入的版本。
-
Staging 有 Default_Draft,Live 有 default_live。这可以更改,因为我们正在尝试实施自定义工作流程。
-
您的组件是作为动态组件演示发布还是静态嵌入到页面中?我问的原因是因为在您的代码中您在组件上调用“发布”,但如果它是静态嵌入的,它应该触发页面上的重新发布以及其上所有 CP 的最新主要版本。
标签: tridion tridion-2011