2017-10-11 3 views
1

Je suis tombé sur les besoins de l'entreprise dans Sitecore où pour quelques articles nous n'avons pas besoin de flux de travail joint mais nous voulons créer une nouvelle version lorsque nous verrons éditer l'élément.Comment créer une version d'élément sitecore sans workflow?

Je ne peux pas appliquer le réglage ci-dessous car il aura un impact sur tous les éléments et mon flux de travail ne sera pas utile.

<setting name="RequireLockBeforeEditing" value="true"/> 

J'ai aussi passé par stackoverflow question et il a donné ci-dessous solution, mais pas sûr de quel événement il devrait être.

public Item StartEditing(Item item) 
{ 
    Error.AssertObject((object) item, "item"); 
    if (!Settings.RequireLockBeforeEditing || Context.User.IsAdministrator) 
    return item; 
    if (this._context.IsAdministrator || StandardValuesManager.IsStandardValuesHolder(item) || !this.HasWorkflow(item) && !this.HasDefaultWorkflow(item) || !this.IsApproved(item)) 
    return this.Lock(item); 
    Item obj = item.Versions.AddVersion(); 
    if (obj != null) 
    return this.Lock(obj); 
    else 
    return (Item) null; 
} 
+0

Voulez-vous forcer la nouvelle version d'un article pour tous les éditeurs lorsqu'ils commencent à éditer un article? Vous pouvez jeter un oeil à l'événement "item: locked", mais n'est-ce pas assez pour utiliser le bouton "ribbon> Versions> Add"? –

+0

Oui, nous souhaitons forcer la nouvelle version d'un élément pour tous les éditeurs lorsqu'ils commencent à modifier un élément. Non, nous ne pouvons pas utiliser l'option ruban car les éditeurs ne le connaissent pas. Je vais créer la version sur l'élément: événement verrouillé. J'ai également vérifié show.config là j'ai vu l'article: commande d'édition pouvons-nous tirer parti de cela? –

+0

Je ne pense pas que la commande "item: edit" soit appelée partout, par ex. pas sûr de l'éditeur d'expérience? –

Répondre

1

Essayez quelque chose comme ceci:

élément Patch: événement enregistré:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
    <sitecore> 
    <events> 
     <event name="item:saved"> 
     <handler type="PersonalizationDemo.Data.Items.ItemEventHandler, PersonalizationDemo" method="OnItemSaved"/> 
     </event> 
    </events> 
    </sitecore> 
</configuration> 

Mettre en oeuvre la classe de gestionnaire d'événements personnalisé:

namespace PersonalizationDemo.Data.Items 
{ 
    using Sitecore.Data.Items; 
    using Sitecore.Events; 
    using System; 

    public class ItemEventHandler 
    { 
     protected void OnItemSaved(object sender, EventArgs args) 
     { 
      if (args == null) { return; } 

      var sitecoreEventArgs = args as SitecoreEventArgs; 
      if (sitecoreEventArgs == null) { return; } 

      if (sitecoreEventArgs.Parameters.Length < 2) { return; } 

      var item = sitecoreEventArgs.Parameters[0] as Item; 
      if (item == null) { return; } 

      if (!this.ShouldItemBeProcessed(item)) { return; } 

      var itemChanges = sitecoreEventArgs.Parameters[1] as ItemChanges; 
      if (itemChanges == null) { return; } 

      if (itemChanges.FieldChanges.Contains(Sitecore.FieldIDs.Lock)) 
      { 
       var fieldChange = itemChanges.FieldChanges[Sitecore.FieldIDs.Lock]; 
       if (fieldChange.Value == "<r />") { return; } 

       this.CreateNewVersion(item); 
      } 
     } 

     protected bool ShouldItemBeProcessed(Item item) 
     { 
      // TODO implement necessary check 
      return true; 
     } 

     protected void CreateNewVersion(Item item) 
     { 
      var newItem = item.Versions.AddVersion(); 

      newItem.Editing.BeginEdit(); 
      // update necessary field if you need that 
      newItem.Editing.EndEdit(); 
     } 
    } 
} 
+0

c'est sur l'article enregistré. Je veux créer une version comme un utilisateur lorsque vous cliquez sur le verrouillage et modifier –

+0

Lock & Edit met également à jour l'élément. L'événement 'item: saved' est probablement appelé. Cela ressemble à une bonne alternative à l'événement 'item: locked'. –

+0

@SunilAher ce code fonctionne exactement lorsque vous cliquez sur le bouton «Modifier». Sous le capot lorsque vous cliquez sur le bouton "Modifier", Sitecore modifie la valeur du champ "Verrouiller" de l'élément et le sauvegarde également. Et le code ci-dessus vérifie les modifications dans le champ Sitecore.FieldIDs.Lock de l'élément, et s'il a été modifié, il crée une nouvelle version. Essayez, vous verrez que ça fonctionne. –