Tridion 2011 Sp1 允许将组件的修订版本发布到暂存目标

Posted

技术标签:

【中文标题】Tridion 2011 Sp1 允许将组件的修订版本发布到暂存目标【英文标题】:Tridion 2011 Sp1 allow to publish revision version of the component to staging target 【发布时间】: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 的最新主要版本。 【参考方案1】:

根据文档:

如果满足最低批准,您可以在 Workflow 中发布项目 为发布目标设置的状态。如果项目在工作流程中并且 不符合最低审批状态,内容管理员 发布项目的最后签入版本。

这意味着您需要:

Minimum Approval Status 设置为Publication target 上的类似“Staging”

作为工作流程的第一步,将组件的Approval Status 设置为“Staging”

【讨论】:

我相信,如果项目仍在工作流程中,您拥有的最低批准状态并不重要。在项目被批准并退出工作流程后发生发布时的此问题。当编辑器修改组件时,它将在工作流中“创建或编辑组件”,而不是他想将此版本的组件发布到 Staging 以供审查并完成他的活动。我能够通过添加自动活动步骤并使用 VBScript 来务实地发布,但这仅在组件 A 被修改并直接添加到页面时才有效。

以上是关于Tridion 2011 Sp1 允许将组件的修订版本发布到暂存目标的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SDL Tridion 2011 SP1 中将一个 XSLT TBB 的输出传递到另一个 XSLT TBB

Tridion 2009 SP1:如何为定期发布安排内容页面?

Tridion 组件链接在动态组件演示中未解析

将大型二进制文件上传到 SDL Tridion Multimedia Components 时出错

Tridion 2009 SP1 TcmUploadAssembly 无法覆盖现有的 TBB

ASCX 用户控制 SDL Tridion 2011