在工作流程的最后阶段发布失败

时间:2013-01-22 07:09:37

标签: tridion tridion-2011

我们的最终自动活动是将组件发布到实时目标。我们在编辑脚本中编写了以下代码。

' Script for Automatic Activity Content Manager Workflow

Set oTDSE = CreateObject("TDS.TDSE")
Call oTDSE.Initialize
Set oWorkItem = CurrentWorkItem.GetItem(3)
sDestinationServer = "tcm:0-18-65538"
Set oComp = oTDSE.GetObject(oWorkItem.ID, 3) 

Call oComp.Publish(sDestinationServer, True, True, True)

FinishActivity "Automatic Activity ""Process Complete"" Finished"

set oWorkItem = Nothing
set oComp = Nothing
set oTDSE = Nothing

此代码正在成功执行,但是当我们检查发布队列组件失败时出现错误项目tcm:34-20615-16-v0不存在。

当我们将组件发布到早期活动中的暂存时,相同的代码工作正常。

4 个答案:

答案 0 :(得分:1)

问题是,在脚本中,您正在发布组件的动态版本(-v0)。由于发布是异步操作,因此不会立即发布项目,而是创建发布事务(链接到动态版本)。

在此之后,您的脚本已完成并且项目已签入。现在,发布者开始处理您的发布事务并发现不再有动态版本,因此您的例外。

如果发布活动不是最后一次,则发布商有足够的时间来获取项目的动态版本。

解决方法可以是等待发布事务在自动活动中完成,或者使用OnCheckIn事件执行某些操作

答案 1 :(得分:1)

是的,这是我经常在客户所面对的。特别是当您在工作流程中的上一个活动是自动的并且发布到实时时。 我做的最简单的方法是:

  • 自动代码中的第一个FinishActivity
  • 然后发布workflow=false
PublishCoreServiceClient.FinishActivity(activityInstance.Id, finishData, publishoptions);           
            }

 //Now Publish      
ComponentData component = (ComponentData)PublishCoreServiceClient.Read(componentid, publishoptions);
if (GetConfigurationValues(component, PublishCoreServiceClient))
{
    PublishInstructionData publishInstructionData = new PublishInstructionData();
    publishInstructionData.MaximumNumberOfRenderFailures = 100;
    publishInstructionData.RollbackOnFailure = true;

    ResolveInstructionData resolveInstructionData = new ResolveInstructionData();
    resolveInstructionData.IncludeWorkflow = false;
    resolveInstructionData.IncludeChildPublications = true;
    resolveInstructionData.IncludeComponentLinks = true;
    publishInstructionData.ResolveInstruction = resolveInstructionData;

    RenderInstructionData renderInstructionData = new RenderInstructionData();
    publishInstructionData.RenderInstruction = renderInstructionData;

    List<string> ItemToPublish = new List<string>();
    ItemToPublish.Add(component.Id);
    if (!String.IsNullOrEmpty(Utilities.LIVE_URI))
    {
        PublicationTargetData pubtarget = (PublicationTargetData)PublishCoreServiceClient.Read(Utilities.LIVE_URI, publishoptions);
        List<string> target = new List<string>();
        target.Add(pubtarget.Id);

        PublishCoreServiceClient.Publish(ItemToPublish.ToArray(), publishInstructionData, target.ToArray(), PublishPriority.Normal, publishoptions);
        Logger.Debug("ElapsedMilliseconds Publish [" + _watch.ElapsedMilliseconds + " ms]");

    }

答案 2 :(得分:0)

将Publish方法的activateWorkflow参数设置为False后解决问题。

答案 3 :(得分:0)

我们遇到了同样的错误,我们通过发送组件以几秒延迟发布来解决它:

Call oComp.Publish("tcm:0-1-65538", False, False, True, dateAdd("s",10,Now))