2013-01-22 62 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]"); 

    }