Frage

Gibt es eine Pipeline, die ich zu und/oder Ereignis hinzufügen kann, um abzufangen, dass ich die Sperre nur dann auf einem Gegenstand einstellen kann, wenn eine Sperre im Fremdsystem möglich ist? Hauptsächlich interessiert an dieser Funktionalität in der Medienbibliothek

Wir möchten derzeit Synchronisierungsfunktionen mit Sitecore -Elementen bereitstellen, und ich mache eine Checkliste von Anwendungsfällen durch, um die Machbarkeit zu bestimmen. Wenn Sie einen Artikel sperren, müssen Sie derzeit einen Artikel im fremden System sperren.

Ich habe John Wests gelesen Blogeintrag Erklären Sie das Abfangen von Element -Updates.

Wenn Sie in der Lage sein müssen, den Speichervorgang zu speichern, berücksichtigen Sie die SaveUi -Pipeline, das Element: Speichernereignis oder Feld Validatoren. Wenn Sie den visuellen Effekt in der Benutzeroberfläche verhindern müssen, der angibt, dass Sitecore das ausgewählte Element gespeichert hat, berücksichtigen Sie die SaveUi -Pipeline oder die Feldprüfer.

Dies ist für mich später nützlich, wenn ich möglicherweise die Einsparung eines Elements aufgrund eines Fehlers im Fremdsystem blockieren muss, aber es wird nichts angibt, wenn die Sperre/Bearbeitung beginnt.

Ich habe auch Johns bemerkt Wichtige Pipelines Blog -Beitrag, dass es kein "uieditem" oder irgendetwas gibt, das eine Pipeline mit Artikelbearbeitung zu beachten scheint.

War es hilfreich?

Lösung

Sie können Ihren eigenen Prozessor in den Abschnitt "SaveUi" in den SaveUi -Abschnitt in den eigenen "eigenen Prozessor" platzieren.

In Ihrem Prozessor können Sie das Speichern eines Elements abbrechen, indem Sie die Abortpipeline -Methode aufrufen. Wenn Sie prüfen möchten, ob das gespeicherte Element gesperrt wird, können Sie überprüfen, ob sich das Feld Sperrungsfeld geändert hat.

Hier ist ein Beispielcode:

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();
        }
    }
}

Und hier der Ort, an dem Sie Ihren Prozessor registrieren können:

<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" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top