これは、REST APIとワークフローの組み合わせで行うことができます。 Sharepointの完全なnoobieであることは分かりましたが、このステップバイステップのワークフローの例が他の誰かを助けることを願っています。
まず、私は主に私の解決策を考え出すするために、これらの2つのブログを使用:
Wonder Laura - Loop through multiple Sharepoint items
Kemanth Kumar - Loop Through SharePoint Custom List Items
決勝ワークフロー
![enter image description here](https://i.stack.imgur.com/YOokV.jpg)
ステップ1: Sharepointで2つのリストを作成します。私の場合、リストAはスタッフリストのすべてのスタッフリストであり、リストBはLeaveRequestsと呼ばれます。
ログの表示:
あなたは、私がスクリプト全体でログ履歴に書かれていることがわかります。これらのログを表示するには、リストAページに移動し、変更するスタッフメンバーをクリックし、上部のリボンでワークフローアイコンを点灯させます。それをクリックすると、その特定のスタッフメンバーのために実行中または実行中のすべてのワークフローが一覧表示されます。
APIは、私たちは、APIへの呼び出しを通じてを置くことになり、どのようなAPIのリターンを見ていない時期にいらいらすることができ
結果。 API結果を表示する方法については、この記事の最後を参照して電子メールを簡単に表示してください。
ステップ2: Sharepointデザイナーを開き、左側のパネルで[ワークフロー]をクリックし、上部のリボンに[リストワークフロー]をポップアップします。 "List Workflow"をクリックし、作成したList A(StaffList)を選択します。これは、ユーザーによって手動で更新され、ワークフローを実行するリストになります。ポップアップボックスに名前と説明を入力し、プラットフォームタイプをSharepoint 2013 Workflowにする必要があります。
![enter image description here](https://i.stack.imgur.com/gLNhu.jpg)
![enter image description here](https://i.stack.imgur.com/iXXgo.jpg)
それから時に自動的に起動するワークフローを選択し、トップのリボンで、[開始オプション]で[ワークフロー設定]をクリックして、自動的にこのワークフローの実行を行い、そのワークフローを保存する必要があります項目が変更されました。
![enter image description here](https://i.stack.imgur.com/VsH6t.jpg)
ステップ3:は、ウェブサーバの時間を使用して開始時刻を表示。
![enter image description here](https://i.stack.imgur.com/Tw1Vw.jpg)
それは開始時刻リボンと名前からステージを作成します。
アクションリボンから、[ワークフロー変数を設定]をクリックします。ワークフロー変数をクリックし、StartUrlという新しい文字列変数を作成します。文字列ビルダーのSharepointまたはWebサイトのアドレスに値を設定します。
![enter image description here](https://i.stack.imgur.com/J6bEF.jpg)
アクションリボンから辞書を構築する選択します。 "this"をクリックすると、ボックスがポップアップします。 「Accept」と「Content-Type」という名前の2つの項目を作成し、両方のString型の値はapplication/jsonになります; odata = verbose。次に、requestHeadersという新しい辞書変数に出力します。
![enter image description here](https://i.stack.imgur.com/aIUbl.jpg)
今、あなたは、アクションのリボンからHTTP Webサービスを呼び出します。 "this"をクリックし、URLボックスに最初の変数を入力します。変数を入力しないでください。機能しない場合は、[追加]または[参照の変更]をクリックして参照を行います。ボックスがポップアップし、日付ソースからワークフロー変数とパラメータを選択し、ソースからフィールドから変数StartUrlを選択します。メソッドを使用して[OK]をクリックします。レスポンス・コンテンツをresponseContentという辞書変数に、レスポンス・ヘッダーをresponseHeadersという辞書変数に、応答ステータス・コードを文字列変数responseCodeに設定します。その後、右のドロップダウン矢印をクリックしてプロパティを編集し、コールのプロパティを編集します。ボックスがポップアップし、リクエストヘッダーを変数requestHeadersに設定します。
![enter image description here](https://i.stack.imgur.com/VZ3Fu.jpg)
今、あなたは、アクションのリボンから辞書から取得アイテムを使用して、コールからの応答を取得する必要があります。項目パスはDate /(0)に設定し、辞書はresponseHeadersにする必要があります(通常これはresponseContentですが、サーバーのDateはヘッダーにあります)。 StartDateという文字列変数に出力します。これの詳細については、この役に立つリンクを参照してください。これはGMT時に行われることに注意してください。誰かがこれをより読みやすい日付形式に変換するアイディアを持っているなら、私に知らせてください。
これで、開始日を記録できます。アクションリボンから履歴へのログを選択し、メッセージをクリックして開始:を入力すると、変数を入力する必要があります。変数を入力しないでください。機能しない場合は、[追加]または[参照の変更]をクリックして参照を行います。ボックスがポップアップし、日付ソースからワークフロー変数とパラメータを選択し、ソースからフィールドから変数StartDateを選択します。
![enter image description here](https://i.stack.imgur.com/Iidgd.jpg)
ステップ4: LeaveRequestsリスト(リストB)から更新する必要があるレコードのリストを取得する段階を作成します。 Start Time Stageの「Transition to stage」領域に「stage to」アクションを挿入して、Start Timeステージをこの新しいステージに向けます。
私は両方のリストの間で共通のフィールドとしてユーザーを使用しました。目的は、StaffListInactiveという列をyesまたはnoのいずれかで更新することです。これらの値は、実際にはリストAのフィールドから取得されます。
変更されているリストAのスタッフメンバーのIDを取得することから始めます。 StaffListIDというInteger型のワークフロー変数を設定します。私の場合のソースからのフィールドは現在のリストのデータソースで値を検索し、従業員名とユーザーID(Integerとして)として返されます。フィールドは従業員名、値は現在の項目の検索、従業員名、ユーザーID番号として返されます。今RestUrlと呼ばれるのREST APIになります別のワークフロー変数の型の文字列を設定し
![enter image description here](https://i.stack.imgur.com/pKW5z.jpg)
。リストGUIDの取得、返すリストからのフィールドの選択、必要な結果のみのフィルタリング、返される結果の数の増加など、多くの魔法がこのURLで発生します。 Sharepointのデフォルトは100レコードです。
あなたBASEのSharePointサイトの以下のようにリストから項目を取得するため、このURLの形式は次のとおりです。追加のクエリ/フィルタとのリンクについては
http://yoursharepointid.sharepoint.com/_api/web/lists/getbyid(guid「yourlistguid」)/アイテム
:
http://yoursharepointid.sharepoint.com/_api/web/lists/getbyid(guid 'yourlistguid')/アイテム?$ = ColumnNameに、Column2Name & $フィルタを選択= ColumnNameにEQ 'コンテンツ' & $トップ= 9999
GUIDを取得するには、Sharepoint Designer 2013で、左パネルの[リストとライブラリ]をクリックし、リストB(LeaveRequests)を選択します。リストIDが表示されます。これを 'と'の間のGUID領域に挿入します。
カラム名にスペースがある場合は、スペースの代わりにx0020を挿入する必要があります。だから私のEmployee_x0020_Nameのように見えます。また、Employee IDを取得するには、列名:Employee_x0020_NameIdの最後にIDを含める必要があります。この列をフィルタリングするには、Employee_x0020_Name/Idである必要があります。
だから、最後に私のURLは次のようになります。
ます。http://****.sharepoint.com/_api/web/lists/getbyid(GUID "*********** ************ ')/アイテム$選択= ID、StaffListInactive、Employee_x0020_NameId & $フィルター= Employee_x0020_Name/IDのEQ? '[%変数:StaffListID%]' & $トップ= 9999
変数を挿入するときは、必ずルックアップを実行してください。
これで、上記の手順3で行ったのと同じ辞書を作成する必要があります。アクションをコピーして新しい変数を再割り当てすることができます(ただし、このワークフローでは必須ではありません)。変更する必要がある唯一の変数は、上で作成したRestUrlへのWebサービス呼び出しのURL変数です。ビルドディクショナリアクションをコピーする場合は、AcceptとContent-Typeの項目をもう一度追加する必要があります。
ディクショナリアクションからアイテムを取得する場合、これに対するパスはd/resultsになり、ディクショナリはresponseContentになり、これをListという辞書変数に出力します。
![enter image description here](https://i.stack.imgur.com/HqepH.jpg)
ステップ5:今、私たちはAPIから引き出された結果の数をカウントし、各レコードを更新するループを介してそれらを実行します。
別のステージを作成するCclledは非アクティブステータスを更新します。
辞書のカウント項目を追加し、辞書をリスト変数に設定し、ItemCountという新しい整数変数を出力します。ループリボンからの値を持つインデックス0
![enter image description here](https://i.stack.imgur.com/3wdk8.jpg)
と呼ばれる整数変数を設定
は、条件付きループを挿入します。可変インデックスを変数ItemCountよりも小さく読み込むように値を更新します。変数インデックス:ループ番号をログアクションを追加し、それを呼び出すことによって実行されているループあなたがログインすることができますループでは
![enter image description here](https://i.stack.imgur.com/Oc5gC.jpg)
。
![enter image description here](https://i.stack.imgur.com/3CLhM.jpg)
さて、この次の部分は含める必要はありませんが、私はそれが更新され、ユーザーが実際にあなたが更新したいユーザーであることを確認するには、このチェックを持って良いことだと感じ。 IEでは、両方のリストのユーザーのIDを比較します。
パスがd/results([%Variable:index%])/ Employee_x0020_NameIdである辞書アクションからGet Itemを追加します。変数を参照することを忘れないでください。ディクショナリはresponseContentで、出力変数はEmployeeID型整数と呼ばれます。
条件リボンから「値が等しい場合は」を追加し、最初の値を次のように設定します。データソースは現在のリスト、ソースのフィールドは従業員名、フィールドは従業員名、値は参照ですデータソースの現在の項目、ソースからのフィールドは従業員名と返されたユーザーID番号です。 If文の2番目の値[追加]をクリックし、リストからユーザーのワークフロー参照を選択し、ボックスがポップアップしたときに、データ・ソースは、ソースからのワークフロー変数とパラメータとフィールド変数されることになるために
![enter image description here](https://i.stack.imgur.com/lQRmc.jpg)
従業員ID。
![enter image description here](https://i.stack.imgur.com/4Sdpf.jpg)
今、私たちは、リストA(StaffList)から値を取得し、リストB(LeaveRequests)でそれを設定することによって、レコードを更新する必要があります。
アクションリボンから「リストアイテムを更新」を追加してこのリストをクリックし、リストドロップダウンからリストB(LeaveRequests)を選択します。[追加]ボタンをクリックし、[このフィールドを設定]を変更する列に追加します(私の名前はStaffListInactive)。[この値に]のルックアップをクリックします。ボックスがポップアップすると、日付ソースは現在のリストになります。ソースからのフィールドは非アクティブです(これはリストAから更新するフィールドです)。フィールドは非アクティブで、値は現在のアイテムの検索であり、非アクティブです。
![enter image description here](https://i.stack.imgur.com/Ch4i3.jpg)
それが完了したら、あなたが「更新リスト項目」ウィンドウのフィールドと値を更新する必要があります。フィールドをIDに設定し、値はワークフロー変数とEmployeeIDの参照です。
![enter image description here](https://i.stack.imgur.com/XeJUJ.jpg)
レコードが更新されたことをログインします。
ここで、インデックス変数に1を加えて設定する必要があります。これはif文の外側にありますが、ループ内にあります。
「計算する」アクションを追加し、これを変数インデックス+1に設定します。これを数値変数IndexPlusOneに出力します。
変数インデックスを変数IndexPlusOneに設定しました。
手順6:終了時刻を記録します。
これは、開始時間ステージと同じです。そのため、開始時間ステージをコピーしてワークフローの最下部に貼り付け、すべてのステージがリンクされていることを確認してください。詳細を更新してください。結論として
![enter image description here](https://i.stack.imgur.com/tMOdY.jpg)
あなたがリストAの詳細を更新する場合、リストBは現在、変更されたスタッフに基づいてリストAで選択したフィールドに一致するように選択したフィールドを更新します。
API結果続き...
これは多くの人々に古い帽子であってもよいが、エラーテストのために非常に有用で来たかもしれません。
Webサービスの呼び出し後に、[電子メールで送信]アクションを追加します。 [宛先]フィールドでメールを選択し、件名を付けます。電子メールの本文に、responseHeadersおよびresponseContent変数を追加します。ワークフローが実行されるたびに、電子メールで通知されます。電子メールは、ワークフローログ内のレコードの更新よりも速く到達するため、トラブルシューティングを迅速に行うことができました。 ![enter image description here](https://i.stack.imgur.com/kYzbO.jpg)
大きな包括的な答え。ありがとうウェス。 – 14Data