2013-01-22 29 views
3

我们最后的自动活动是将组件发布到活动目标。我们在编辑脚本中编写了下面的代码。发布失败,在工作流程的最后阶段

' 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 

此代码执行成功,但是当我们检查的发布队列分量越来越失败,错误项中医认为:34-20615-16-V0不存在。

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

+0

谢谢你的问题,我们会感兴趣您在提交到[51区的外表套上具体建议(http://area51.stackexchange.com/proposals/38335/tridion?referrer=gPujQMxthNCNn9xqeeO2NA2 )。如果您有时间,请使用同一个SO帐户注册。 –

+0

请更新此问题并接受您的答案,以便可以关闭此问题。 –

回答

1

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

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

当发布活动不是最后的时候,发布者有足够的时间来获取项目的动态版本。

解决方法可以等待发布交易在自动活动来完成,或做一些与OnCheckIn事件

+0

你不能只发布该对象的非动态版本? (从API中删除-v0) –

+0

@NunoLinhares我正在考虑将此添加为一个选项,但最终会出现相反的问题 - 在工作流将检入之前发布最新签入的版本,即发布旧版本 –

+0

嗯......有趣的问题。我期望别人有这个问题,似乎非常通用,有一个发布行动作为工作流程的最后一步... –

0

问题是设置发布方法为False activateWorkflow参数后解决。

+1

要小心 - 你确定它没有发布你以前的版本吗? –

0

我们有同样的错误,我们已经通过发送组件用几秒钟的延迟发布解决了这个问题:

Call oComp.Publish("tcm:0-1-65538", False, False, True, dateAdd("s",10,Now)) 
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]"); 

    }