Question

Y at-il un pipeline que je peux ajouter et / ou d'un événement pour intercepter qui me permettrait de régler le verrou sur un élément que si un verrou dans le système étranger est possible? [ principalement intéressé par cette fonctionnalité dans la bibliothèque des médias]

Nous recherchons actuellement pour fournir des fonctionnalités de la synchronisation avec les éléments Sitecore et je suis en cours d'exécution à travers une liste de cas d'utilisation pour déterminer la faisabilité. Le verrouillage d'un élément doit actuellement verrouiller un élément dans le système étranger.

Je lis de John West blog expliquant l'interception des mises à jour de l'article.

Si vous devez être en mesure de bloquer l'opération de sauvegarde, considérons le pipeline saveUI, l'élément: événement enregistrement ou validateurs sur le terrain. Si vous avez besoin pour éviter l'effet visuel dans l'interface utilisateur qui indique que Sitecore a sauvé l'élément sélectionné, considérez les pipelines saveUI ou validateurs champ.

Ceci est utile pour moi plus tard quand je dois bloquer éventuellement l'économie d'un élément en raison d'une erreur dans le système étranger, mais il ne rien d'état que le verrouillage / édition commence.

J'ai également noté sur John blog pIPELINES importants qu'il n'y a pas "uiEditItem" ou tout ce qui semble noter un pipeline avec le montage de l'élément.

Était-ce utile?

La solution

Vous pouvez propably placer votre propre processeur avant "Sitecore.Pipelines.Save.CheckItemLock" dans la section saveUI.

Dans votre processeur, vous pouvez arrêter la sauvegarde d'un élément en appelant la méthode AbortPipeline. Si vous voulez vérifier si l'élément enregistré est verrouillé, vous pouvez vérifier si le champ de verrouillage a changé.

Voici quelques exemples de code:

public class CheckForeignLock {
    protected bool UserIsTryingToLockItem(SaveArgs args) {
        var lockfield = args.Fields.SingleOrDefault(x => x.ID == FieldIDs.Lock);
        return lockfield != null && lockfield.OriginalValue != lockfield.Value;                 
    }
    protected bool CanLock() {
        // your code
    }
    public void Process(SaveArgs args) {
        if(UserIsTryingToLockItem(args) && !CanLock()) {
            args.AbortPipeline();
        }
    }
}

Et ici l'endroit où vous pouvez enregistrer votre processeur:

<processor mode="on" type="Sitecore.Pipelines.Save.ParseXml, Sitecore.Kernel" />
<processor mode="on" type="YourAssembly.CheckForeignLock, YourAssembly" />
<processor mode="on" type="Sitecore.Pipelines.Save.CheckItemLock, Sitecore.Kernel" />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top