Какие обходные пути для поддержки отсутствующих транзакций (откат и принятие) в списках SharePoint? - PullRequest
1 голос
/ 21 мая 2011

SharePoint не обеспечивает поддержку транзакций (откат и принятие) в операциях со списком данных.Каковы обходные пути для достижения транзакционного поведения.

Вариант использования 1: Когда элемент добавляется в список, я хочу обновить другой элемент списка.Но если обновление не удается, я хочу откатить элемент, добавленный в первый список.

Вариант использования 2: Обновление 10 элементов списка программно.В случае сбоя 10-го обновления я хочу откатить предыдущие 9 обновлений.

Хотя список SharePoint не является реляционной базой данных и не должен быть реляционной базой данных, разработчики все чаще используют его для хранения важных для бизнеса данных (для которых требуется целостность данных).) и им не рекомендуется использовать внешний список, поскольку он накладывает множество ограничений на функции, доступные в обычных списках.

Ответы [ 2 ]

3 голосов
/ 21 мая 2011

Поскольку SPL-списки не обеспечивают неотъемлемую поддержку транзакций, вам придется самостоятельно выполнять операции отката.

В обоих случаях использования 1 и 2 самый простой способ смоделировать транзакцию - это прочитать состояние любого элемента списка, который вы изменяете, до выполнения обновления, а затем записать это состояние обратно, если вы обнаружите сбой. Это не идеальное решение, так как достаточно серьезная ошибка также может помешать вашему откату обновлений. Это цена, которую вы платите за отсутствие транзакций поддержки хранилища данных.

При этом, хотя многие клиенты будут запрашивать хранение критически важных для бизнеса данных в списках SPList, я бы сказал, что ваша задача - убедить их, что это не очень хорошая идея, и что транзакционные базы данных, к которым обращаются через веб-сервисы, являются гораздо более безопасный SP-совместимый способ хранения важных данных.

0 голосов
/ 20 июля 2011

Я считаю, что это немного проще, если вы используете списки, которые поддерживают управление версиями.Я использую промежуточный класс для доступа к элементам списка.Когда я вызываю .Update () для этого класса, я сохраняю идентификатор текущей версии любого элемента, который я обновляю.Если позже что-то пойдет не так в «транзакции», я просто вернусь к этому идентификатору версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...