6

トランザクション内の SharePoint コンテキストで一連の操作を実行する方法を知りたいです。たとえば、次のようなことができるようになりたいです。

context.BeginTransaction();
listItemA.Update();
listItemB.Update();
context.CommitTransaction();

OOTB API ではこれが不可能であることはわかっていますが、誰かがこれを達成する方法を考え出さなければなりません。トランザクションを処理するためにデータベース接続への参照を取得することは可能ですか? または他のアイデアはありますか?

4

6 に答える 6

8

SharePoint は技術的に SQL をストレージのバッキングとして使用していますが、データベース ベースのアプリケーションのように扱うことは想定されていません。SP は、ある種の偽のファイルシステムを作成します。これは、API を介して対話するものです。したがって、開発者の観点からは、Sharepoint はほとんどトランザクションがありません。

残念ながら、これでほとんどすべてです:)データベースに直接関与しようと考えても、旧約聖書の痛みが生じます。衣服の引き裂き、泣き叫び、歯ぎしり;)

于 2009-02-19T00:23:30.880 に答える
6

Recycle() を使用するだけです。GUID[] で GUID を追跡します。1 つが失敗した場合は、de RecycleBin を開き、GUID ですべてを復元/削除します

GUID[] guids = new GUID[];
SPWeb web;
SPListItem item;
SPList list;

try
{
    foreach item in list

    GUID current = item.Recycle()
    guids.add(current);

    item.Delete();
}
catch{
    if one fails : web.RecycleBin.Restore(guids);
}

if all succeed : web.RecycleBin.Delete(guids):
于 2010-02-10T14:36:12.327 に答える
1

もう 1 つのオプションは、こちらで説明されているワークフローを使用することです。Windows SharePoint Services がワークフロー アクティビティを処理する方法で説明されているように:

Windows SharePoint Services は、なんらかのイベントが発生するのを待っているために続行できないポイントに到達するまで、ワークフローを実行します。たとえば、ユーザーはタスクを完了として指定する必要があります。この "コミット ポイント" でのみ、Windows SharePoint Services は以前の Windows SharePoint Services 固有のワークフロー アクティビティで行われた変更をコミットします。これらの変更は、単一の SQL トランザクションにバッチ処理されます。

于 2009-07-29T09:07:49.607 に答える
0

Sharepoint は SQL サーバーのようなトランザクション機能を提供しません。

Rutger Hemrika が投稿したように、これは私が今まで見たどの方法よりもはるかに優れた方法です。

于 2012-11-20T10:47:48.110 に答える
0

Sharepoint は、そのままではトランザクション サポートを提供しません。SharePoint 用の System.Transactions リソース マネージャーの構築に関する優れたリソースを次に 示しますが、労力を節約し、重要なデータを RDB に直接保存します。

于 2015-01-05T16:15:56.503 に答える