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

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

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

4

4 回答 4

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]");

    }
于 2013-06-19T19:03:30.407 回答
1

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

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

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

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

于 2013-01-22T09:03:24.613 回答
0

Issue is resolved after setting activateWorkflow parameter of Publish method to False.

于 2013-01-24T09:23:48.530 回答
0

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

Call oComp.Publish("tcm:0-1-65538", False, False, True, dateAdd("s",10,Now))
于 2013-06-11T11:08:13.163 回答