Где перехватить блокировку / редактирование элементов в Sitecore - PullRequest
1 голос
/ 16 февраля 2012

Существует ли конвейер, к которому я могу добавить и / или событие для перехвата, которое позволило бы мне установить блокировку на элемент, только если блокировка во внешней системе возможна? заинтересованы в этой функции в библиотеке мультимедиа]

В настоящее время мы стремимся обеспечить функциональность синхронизации с элементами Sitecore, и я проверяю список вариантов использования для определения целесообразности. Для блокировки предмета в настоящее время необходимо заблокировать предмет во внешней системе.

Я прочитал блог Джона Уэста , объясняющий перехват обновлений предметов.

Если вам нужно блокировать операцию сохранения, рассмотрите конвейер saveUI, элемент: событие сохранения или валидаторы поля. Если вам нужно предотвратить визуальный эффект в пользовательском интерфейсе, который указывает, что Sitecore сохранил выбранный элемент, рассмотрите конвейер saveUI или валидаторы полей.

Это полезно для меня позже, когда мне, возможно, потребуется заблокировать сохранение элемента из-за ошибки во внешней системе, но в нем ничего не говорится, когда начинается блокировка / редактирование.

Я также отметил в блоге Джона Важные конвейеры , что нет "uiEditItem" или чего-либо, что, кажется, отмечает конвейер с редактированием элемента.

1 Ответ

2 голосов
/ 17 февраля 2012

Возможно, вы разместите свой собственный процессор перед "Sitecore.Pipelines.Save.CheckItemLock" в разделе saveUI.

В вашем процессоре вы можете прервать сохранение элемента, вызвав метод AbortPipeline. Если вы хотите проверить, заблокирован ли сохраненный элемент, вы можете проверить, изменилось ли поле блокировки.

Вот пример кода:

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

А вот место, где вы могли бы зарегистрировать свой процессор:

<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" />
...