Fermer

novembre 23, 2020

Implémentation du flux de travail dans Sitecore: une mini-série Partie 3 – Application du flux de travail


Dans mon article précédent dans cette mini-série, je suis passé en revue la création du Simple Workflow et ses états. Dans cet article, nous verrons comment placer automatiquement les éléments Sitecore dans l'état Brouillon lors de la création. Nous allons couvrir deux approches pour l'implémenter: définir l'état Brouillon dans les valeurs standard des éléments ou utiliser le moteur de règles pour attribuer des valeurs de flux de travail lors de la création d'élément. L'utilisation du moteur de règles est mon approche recommandée, mais il existe certains scénarios dans lesquels la définition de l'état Brouillon dans les valeurs standard des éléments peut être efficace. Nous verrons également comment appliquer le flux de travail au contenu préexistant si les flux de travail sont mis en œuvre après la mise en service.

Route 1: Définition de l'état du brouillon dans les valeurs standard

Allez simplement à l'élément Valeurs standard d'un modèle pour les éléments que vous souhaitez inscrire automatiquement dans le processus de workflow lors de la création. Puis mettez à jour ses champs d'accordéon de workflow pour placer l'élément dans le workflow simple.

 Settingworkflowstandardvalue

Très facile, non? Il y a un inconvénient majeur à cette approche que je veux souligner. Si votre solution Sitecore contient plusieurs locataires pour différentes entreprises et que vous souhaitez appliquer un flux de travail à un modèle utilisé dans plusieurs locataires, vous ne devez PAS utiliser cet itinéraire. Les auteurs de contenu d'autres locataires n'auront pas d'accès configuré pour déplacer le contenu dans le flux de travail. En outre, le flux de travail est spécifique au processus métier d’une entreprise. Il n’est pas logique d’appliquer ces règles de workflow au contenu d’une autre entreprise. Si vous êtes dans ce scénario, je vous recommande vivement de prendre Route 2 plutôt que celui-ci.

 Sitecore - Comprendre les approches de développement: un Outlook Sitecore

Si votre client est le seul client attendu dans la solution Sitecore ou si vous avez un petit sous-ensemble de modèles auxquels vous souhaitez appliquer le flux de travail, alors Route 1 est certainement efficace. Ajoutez simplement les informations sur l'état du workflow à l'accordéon de workflow sur les éléments Valeurs standard des modèles.

Route 2: Utilisation du moteur de règles pour inscrire du contenu

L'itinéraire que je recommande de suivre consiste à créer une règle dans Sitecore pour placer automatiquement un nouveau l'élément créé dans votre site dans l'état Brouillon du flux de travail simple. Avec cet itinéraire, vous pouvez spécifier les conditions à remplir pour vous inscrire. Si vous avez plusieurs locataires dans votre solution Sitecore, vous pouvez spécifier de n'appliquer ce flux de travail personnalisé qu'aux éléments créés sous certains sites. Pour appliquer cette règle, lisez cet excellent article de blog écrit par Amir Setoudeh. Après avoir suivi les étapes écrites dans ce billet de blog, je vous recommande d'apporter les modifications ci-dessous pour ce flux de travail simple.

 public override void Apply (TRuleContext ruleContext)
{
      if (ruleContext.Item == null) return;
      if (! ID.IsID (workflowid)) return;

      en utilisant (new SecurityDisabler ())
      {
         using (new EditContext (ruleContext.Item))
         {
            var workflow = Factory.GetDatabase ("maître") ?. WorkflowProvider.GetWorkflow (workflowid);
            if (workflow! = null)
            {
               ruleContext.Item.Fields ["__Workflow"] .Value = "{383BA454-6AFA-44BA-8B80-CB0F17C3A196}";
               ruleContext.Item.Fields ["__Default Workflow"] .Value = "{383BA454-6AFA-44BA-8B80-CB0F17C3A196}";
               ruleContext.Item.Fields ["__Workflow State"] .Value = "{2FAE5E8D-E153-4F89-BE87-5F367FCAFEE9}";
            }
         }
      }
} 

Dans le billet de blog lié, workflow.Start (ruleContext.Item) est utilisé pour inscrire l'élément de contenu dans le flux de travail. Cependant, une fois que l'élément de contenu a franchi le processus d'approbation une fois, il ne reviendra plus dans le flux de travail une fois que des modifications y auront été apportées. Mon code ci-dessus permet au contenu de rentrer dans l'état Brouillon après avoir été approuvé si d'autres modifications doivent être apportées et approuvées. Si vous n'avez pas besoin de contenu pour réintégrer le flux de travail, restez en ligne avec le billet de blog lié.

 Simpleworkflowrulesengine

Vous devrez également spécifier la règle selon laquelle appliquer le flux de travail à un élément. Pour moi, je voulais appliquer le flux de travail lorsqu'un auteur de contenu insérait des éléments dans des dossiers spécifiques. Dans la capture d'écran ci-dessus, si un utilisateur insérait un élément sous l'élément global, il serait automatiquement inscrit dans le flux de travail simple à l'état Brouillon.

Application du flux de travail à un contenu préexistant

Vous êtes peut-être en train de mettre en œuvre Flux de travail Sitecore pour les auteurs de contenu de votre site une fois que des tonnes de contenu ont déjà été créées. Dans l'un ou l'autre des itinéraires que vous avez choisi ci-dessus, vous voudrez toujours placer tout le contenu en direct préexistant dans l'état Approuvé. Pour ce faire, j'ai écrit un script PowerShell qui remplira automatiquement les champs de l'accordéon Workflow sur chaque élément de contenu qui se trouve sous un élément spécifique (y compris l'élément spécifique). Ce script peut prendre très longtemps s'il y a beaucoup de contenu préexistant. Soyez prêt. Voir ce script ci-dessous:

 $ folderItem = Get-Item -Path "master: "

Get-ChildItem -Path $ folderItem.FullPath -Recurse -WithParent |
        ForEach-Object {
            Write-Host "Passage à l'état approuvé" $ _. Nom
            $ _. Édition.BeginEdit ()
            $ _. Champs ["__Workflow State"] .Value = "{0BE6F9DA-8636-4BDA-887A-F0587FFF17EA}"
            $ _. Champs ["__Default Workflow"] .Value = "{383BA454-6AFA-44BA-8B80-CB0F17C3A196}"
            foreach ($ version dans $ _. Versions.GetVersions ($ true))
            {
                if ($ version.Locking.IsLocked ())
                {
                    $ version.Editing.BeginEdit ()
                    $ version.Locking.Unlock ()
                    $ version.Editing.EndEdit ()
                }
            }
            $ _. Editing.EndEdit ()
        }






Source link