我们的最终自动活动是将组件发布到实时目标。我们在编辑脚本中编写了以下代码。
' 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不存在。
当我们将组件发布到早期活动中的暂存时,相同的代码工作正常。
答案 0 :(得分:1)
问题是,在脚本中,您正在发布组件的动态版本(-v0)。由于发布是异步操作,因此不会立即发布项目,而是创建发布事务(链接到动态版本)。
在此之后,您的脚本已完成并且项目已签入。现在,发布者开始处理您的发布事务并发现不再有动态版本,因此您的例外。
如果发布活动不是最后一次,则发布商有足够的时间来获取项目的动态版本。
解决方法可以是等待发布事务在自动活动中完成,或者使用OnCheckIn事件执行某些操作
答案 1 :(得分:1)
是的,这是我经常在客户所面对的。特别是当您在工作流程中的上一个活动是自动的并且发布到实时时。 我做的最简单的方法是:
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))