2013-01-22 1 views
3

Notre dernière activité automatique consiste à publier le composant vers la cible active. Nous avons ci-dessous le code écrit dans le script d'édition.La publication échoue à l'étape finale du flux de travail

' 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 

Ce code est en cours d'exécution, mais avec succès lorsque nous vérifions la publication composante de file d'attente est obtenir échoué avec l'erreur L'élément tcm: 34-20615-16-v0 n'existe pas.

Le même code fonctionne correctement lorsque nous publions le composant dans une activité antérieure.

+0

Merci pour votre question, nous pourrions vous intéresser à engager dans la [zone 51 Tridion de proposition spécifique] (http://area51.stackexchange.com/proposals/38335/tridion?referrer=gPujQMxthNCNn9xqeeO2NA2). Inscrivez-vous avec le même compte SO si vous avez un moment. –

+0

Veuillez mettre à jour cette question et acceptez votre réponse afin que cette question puisse être classée. –

Répondre

1

Le problème est que dans le script vous publiez la version dynamique (-v0) du composant. Comme la publication est une opération asynchrone, l'élément n'est pas publié immédiatement, mais la transaction de publication est créée (qui est liée à la version dynamique). Après cela, votre script est terminé et l'élément est archivé. Maintenant, l'éditeur commence par traiter votre transaction de publication et découvre qu'il n'y a plus de version dynamique, d'où votre exception.

Lorsque l'activité de publication n'est pas terminée, l'éditeur dispose de suffisamment de temps pour obtenir la version dynamique d'un élément.

Solution peut être attendre la publication transaction pour compléter votre activité automatique, ou faire quelque chose avec l'événement OnCheckIn

+0

Vous ne pouvez pas simplement publier la version non dynamique de l'objet? (supprimer le -v0 de l'API) –

+0

@NunoLinhares J'envisageais de l'ajouter en option, mais vous pourriez vous retrouver avec le problème inverse: publier la dernière version archivée, avant que le workflow ne la vérifie, c'est-à-dire en éditant l'ancienne version –

+0

Hmm ... problème intéressant. Je m'attendrais à d'autres ont eu ce problème, semble très générique d'avoir une action de publication comme la dernière étape dans un flux de travail ... –

0

problème est résolu après paramétrage activateWorkflow de méthode Publier sur False.

+1

Soyez prudent avec cela - êtes-vous sûr qu'il ne publie pas votre version précédente? –

0

Nous avons eu la même erreur et nous avons résolu en envoyant le composant à publier avec quelques secondes de retard:

Call oComp.Publish("tcm:0-1-65538", False, False, True, dateAdd("s",10,Now)) 
1

Oui, c'est un fréquent que je fait face à des clients endroit. Surtout quand votre dernière activité dans le workflow est automatique et Publish to Live. façon plus simple que je l'ai fait est:

  • Première FinishActivity dans le code automatique
  • Puis Publier 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]"); 

    } 
Questions connexes