3

最後の自動アクティビティは、コンポーネントをライブターゲットに公開することです。Editスクリプトで記述された以下のコードがあります。

' 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

問題は、スクリプトでコンポーネントの動的バージョン(-v0)を公開していることです。公開は非同期操作であるため、アイテムはすぐには公開されませんが、公開トランザクションが作成されます(動的バージョンにリンクしています)。

この後、スクリプトが完了し、アイテムがチェックインされます。これで、パブリッシャーは公開トランザクションの処理を開始し、動的バージョンがもう存在しないことを発見しました。したがって、例外です。

公開アクティビティが最後でない場合、発行者はアイテムの動的バージョンを取得するのに十分な時間があります。

回避策は、自動アクティビティで公開トランザクションが完了するのを待つか、OnCheckInイベントで何かを行うことです。

于 2013-01-22T09:03:24.613 に答える
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 に答える
0

Publish メソッドの activateWorkflow パラメータを 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 に答える