0

過去に、SharePoint Designerを使用してドキュメントワークフローを開発し、「GlobalVairables」を作成しました。これらは、私が知る限り、ワークフローインスタンス全体でグローバルな変数です。

Visual Studioワークフロープロジェクトで同等のグローバル変数を作成するにはどうすればよいですか?私の最初のアイデアは、モジュールで次のようなフィールドのセットを作成することでした。

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Field ID="{2FE15855-3CAB-44A6-AB29-1600204FCA20}" Name="TechRev1"
         MaxLength="255" DisplayName="Technical Reviewer 1" Description=""
         Direction="None" Type="User" Overwrite="TRUE" />
  <Field ID="{517B22A5-1B89-4C24-82BE-3D4FD99645BC}" Name="TechRev2"
         MaxLength="255" DisplayName="Technical Reviewer 2" Description=""
         Direction="None" Type="User" Overwrite="TRUE"/>
<Elements/>

これは正しいアプローチですか?ASPXフォームからグローバル変数にアクセスするにはどうすればよいですか?

4

1 に答える 1

0

Visual Studioでワークフローを開発した結果、ワークフローでグローバル状態を保持するには、SharePointリストとクラススコープ変数の組み合わせを使用する必要があるという結論に達しました。

いつリストを使用する必要があります。

  • ワークフロー内の多くの異なるクラス間でデータにアクセスする必要があります

次の場合は、クラススコープの変数を使用する必要があります。

  • データは1つのクラスでのみ必要です

  • データはシリアル化できるタイプです(プリミティブ型、[Serializable]でマークされたタイプ)。私のソリューションにはそのようなタイプが1つあります。

    [シリアル化可能]publicclass ReviewerBag {public Dictionary Reviewers {get; セットする; } public string Moderator {get; セットする; }

    public ReviewerBag()
    {
        Reviewers = new Dictionary<string,Reviewer>();
    }
    ...
    

    }

  • ワークフローのクラス間でデータが必要な場合でも変数を使用できますが、クラスで変数が宣言されるたびに、ワークフローがアイドル状態になったとき(ワークフローがユーザーがタスクを完了するのを待つときなど)に独立してシリアル化されることに注意してください)。ワークフローの再開時に変数が個別に逆シリアル化されるため、変数は同期しなくなります。話の教訓は、このシナリオでデータを保存するためにリストを使用することです!

于 2012-11-21T15:13:52.963 に答える