2010-01-22 3 views
4

Dans Sitecore, est-il possible de configurer un workflow de sorte que le changement d'un champ d'un élément n'entraîne pas un état d'approbation?Workflow de Sitecore sur des champs spécifiques d'un article

Nous aimerions que plusieurs champs soient modifiables et immédiatement publiables, tout en imposant un workflow pour un changement de champ spécifique. Ce champ, s'il est édité, passerait l'élément à l'état "En attente d'approbation".

Je n'ai rien trouvé sur la façon de le faire dans le reference.

J'ai depuis écrit un code qui est sorti de Steve's reply et un exemple sur cet extrait:

class Filter 
{ 
    public void Process(WorkflowPipelineArgs args) 
    { 
     Database master = Factory.GetDatabase("master"); 
     Item item = args.DataItem; 
     IWorkflow wf = master.WorkflowProvider.GetWorkflow(item); 
     AllowPublishIfNoChangeToBodyField(item, wf); 
    } 

    /// <summary> 
    /// If the item's 'Body' field was not modified change the workflow state to Pending Publication 
    /// by running the Approve and Submit for Publication command 
    /// </summary> 
    /// <param name="item"></param> 
    /// <param name="wf"></param> 
    void AllowPublishIfNoChangeToBodyField(Item item, IWorkflow wf) 
    { 
     using (new Sitecore.SecurityModel.SecurityDisabler()) 
     { 
      if (true//pseudo code for now: body wasn't modified) 
      { 
       wf.Execute("{command-id}", item, "allow edits and publishing of all fields other than 'Body'", false); 
      } 
     } 
    } 
} 

Le problème est le « Etat suivant » de la « commande » écrasements tout changement d'état que je fais à la élément dans l'action.

Répondre

7

Cela ressemble à une action de flux de travail personnalisée qui ferait l'affaire, l'allumerait lorsque l'utilisateur soumettrait la modification et vérifierait par programme les modifications sur le champ.

Si une modification a été apportée, déplacez le flux de production dans l'état "En attente d'approbation", si ce n'est pas simplement quitter et laisser passer dans l'état de publication automatique.

Il y a un extrait sur le sdn justement intitulé "Changing the Workflow State on an Item via API", je ne l'ai pas essayé moi-même mais il devrait probablement faire l'affaire.

+0

Steve, J'ai mis à jour ma question, pour inclure du nouveau code. Les modifications apportées au flux de travail (j'ai validé l'état a été modifié avec item.State.GetWorkflowState()) ne sont pas enregistrées après l'action. Je pense que le reste de la 'Commande' qui consiste à passer de l'état au champ 'Next State' de la commande est en cours de traitement après mon action. Des pensées? Merci! – David

Questions connexes