• PowerShell サンプル – ビューの作成、取得、編集、削除

    こんにちは、SharePoint サポートの佐伯です。
    今回の投稿では、PowerShell を使用してビューの基本的な操作を実施する方法についてご紹介します。
    あまり PowerShell のご経験がない方にも分かりやすくするために、ここではシンプルなサンプルをご紹介していきます。目的の処理を実装する際にご参考になりましたら幸いです。
    実装の際は MSDN の資料も合わせてご参照ください。

    ■ビューの作成

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します

    $list = $web.Lists["<リスト名>"]

    #ビューのコレクションを取得します。

    $views = $list.Views

    #ビュー名を設定します。

    $viewName = "<ビュー名>"

    #ビューに表示する列を設定します。

    $viewFields = New-Object System.Collections.Specialized.StringCollection

    $viewFields.Add("<列の内部名>")

    $viewFields.Add("<列の内部名>")

    #クエリを設定します。

    $query = '<CAML 文字列>'

    #表示するアイテム数を設定します。

    $rowLimit = <アイテム数>

    #指定のアイテム数に制限して表示するかページングを行うかを設定します。

    $paged = <True または False>

    #ビューを既定のビューにするかを設定します。

    $defaultView = <True または False>

    #ビューを追加します。

    $view = $views.Add($viewName, $viewFields, $query, $rowLimit, $paged, $defaultView)

     

     





















    ) タイトル順にアイテムを表示するビューを追加する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ニュース"]
    $views = $list.Views
    $viewName = "タイトル順"
    $viewFields = New-Object System.Collections.Specialized.StringCollection
    $viewFields.Add("LinkTitle")
    $viewFields.Add("Modified")
    $query = '<OrderBy><FieldRef Name="LinkTitle" /></OrderBy>'
    $rowLimit = 30
    $paged = $true
    $defaultView = $false
    $view = $views.Add($viewName, $viewFields, $query, $rowLimit, $paged, $defaultView)


    ■ビューの取得

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します

    $list = $web.Lists["<リスト名>"]

    #ビューのコレクションを取得します。

    $views = $list.Views

    #ビューを取得します。

    $view = $views[<インデックス番号、ビュー名、またはビューの GUID>]

    #ビューのプロパティ値を取得します。

    $view.<ビューのプロパティ>

     

     

     

     






    ) ビュー名を取得する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ニュース"]
    $views = $list.Views
    $view = $views[0]
    $view.Title

    ) ビューの GUID を取得する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list= $web.Lists["ニュース"]
    $views = $list.Views
    $view = $views["すべてのアイテム"]
    $view.ID

    ) ビューのサイト相対 URL を取得する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ニュース"]
    $views = $list.Views
    $guid = [System.Guid]("51352a9b-f6af-47a1-9377-b63ebfb6e6c8")
    $view = $views[$guid]
    $view.Url

    参考 : その他の <ビューのプロパティ> は下記の資料をご参照ください。
    http://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spview_properties(v=office.15).aspx


    ■ビューの編集

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します

    $list = $web.Lists["<リスト名>"]

    #ビューのコレクションを取得します。

    $views = $list.Views

    #ビューを取得します。

    $view = $views[<インデックス番号、ビュー名、またはビューの GUID>]

    #ビューのプロパティに値を設定します。

    $view.<ビューのプロパティ> = <変更後のプロパティ値>

    #ビューを更新します。

    $view.Update()

     













    ) ビュー名を更新する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list= $web.Lists["ニュース"]
    $views = $list.Views
    $view = $views["すべてのアイテム"]
    $view.Title = "すべてのニュース"
    $view.Update()

    ) アイテム 20 毎にページングされるよう設定する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ニュース"]
    $views = $list.Views
    $view = $views["すべてのニュース"]
    $view.Paged = $true
    $view.RowLimit = 20
    $view.Update()

    参考 : その他の <ビューのプロパティ> は下記の資料をご参照ください。
    http://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spview_properties(v=office.15).aspx


    ■ビューの削除

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します

    $list = $web.Lists["<リスト名>"]

    #ビューのコレクションを取得します。

    $views = $list.Views

    #削除するビューの GUID を変数にセットします。

    $guid = [System.Guid]("<GUID 文字列>")

    #ビューを削除します。

    $views.Delete($guid)












    ) ビューを削除する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ニュース"]
    $views = $list.Views
    $guid = [System.Guid]("a8271a7d-14ba-4fb5-a068-66f75f67b9ee")
    $views.Delete($guid)


    -
    補足
    目的の処理を実施した後は、SPWeb.Dispose メソッドを使用して SPWeb オブジェクトを閉じ、リソースを解放します。

    $web.Dispose()




    ) 登録日の降順でアイテムを表示するビューを追加する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ニュース"]
    $views = $list.Views
    $viewName = "登録日(降順)"
    $viewFields = New-Object System.Collections.Specialized.StringCollection
    $viewFields.Add("LinkTitle")
    $viewFields.Add("Created")
    $viewFields.Add("Author")
    $query = '<OrderBy><FieldRef Name="Created" Ascending="FALSE" /></OrderBy>'
    $rowLimit = 30
    $paged = $true
    $defaultView = $false
    $view = $views.Add($viewName, $viewFields, $query, $rowLimit, $paged, $defaultView)
    $web.Dispose()

  • OneDrive for Business 同期クライアント導入・運用時で抑えておきたいポイント

    こんにちは SharePoint サポートの森 健吾 (kenmori) です。

    今回の投稿では、Windows クライアント版の OneDrive for Business 同期クライアントについて抑えておきたいポイントをまとめさせていただきます。一般ユーザー向けの製品ですので細かい説明が必要ではありますが、今回の投稿はよくある質問をなるべく網羅することに努め、細かく説明するよりも詳細については参考資料を記載してなるべく全体をお話できるようご紹介しています。

    今回の投稿は以下の流れでご紹介します。

    目次

    1. OneDrive for Business 同期クライアントとは
    2. インストール方法と構成上の注意事項
    3. パフォーマンスや制限事項に関する情報
    4. 基���的な動作・使用方法に関する情報
    5. もし、問題が発生したら

    1. OneDrive for Business 同期クライアントとは

    OneDrive for Business 同期クライアントとは一言でいうと、SharePoint (Online / OnPremise) サイト内にあるドキュメント ライブラリを %userprofile% フォルダ内に複製し、ネットワークがつながっている時は常にお互いを同期更新するようなアプリケーションです。

    この製品は、クラウド ストレージに対して、社内外を問わず複数の PC でシームレスに同期できるのが魅力です。

    この製品は OneDrive for Business を使用するための必須条件ではありません。むしろ、クラウド ストレージをローカル PC のディスク使用量の削減に使用する場合、本製品は推奨されません。その場合はブラウザーのお気に入りにライブラリ ページを登録しておくほうが得策です。

    同期する対象のサービス、製品としては、下記となります。

    ・個人用サイト内に存在するドキュメント ライブラリ (OneDrive for Business)
    ・SharePoint サイトの通常のライブラリ

    名前の通り、主な用途は前者 (OneDrive for Business との同期) です。後者は複数ユーザーが使用するとファイルの書き込みに対する競合が発生することと、同期対象ファイル数が 5000 アイテムであるという点を前提として考慮し使用してください。
    なお、このクライアント アプリケーションは、コンシューマ向けの Outlook.com 内に存在する OneDrive には対応していません。

    タイトル : OneDrive for Business とは
    アドレス :
    http://office.microsoft.com/ja-jp/sharepoint-server-help/HA102822076.aspx

    タイトル : SharePoint Server 2013 での OneDrive for Business の計画
    アドレス :
    http://technet.microsoft.com/ja-jp/library/dn232145(v=office.15).aspx

    タイトル : OneDrive for Business または SharePoint サイト ライブラリをコンピューターと同期する
    アドレス :
    http://office.microsoft.com/ja-jp/support/HA102832401.aspx?CTT=5&origin=HA103425074

     

    2. インストール方法と構成上の注意事項

     OneDrive for Business 同期クライアントは、下記の製品をインストールしている場合はすでに端末にインストールされています。

     

    OneDrive for Business 同期クライアントを内包する製品

    Office Professional Plus 2013
    ・Office 365 (下記契約) からダウンロードできる Office クライアント
     Office 365 Enterprise E3
     Office 365 Midsize Business
       (今後 O365 使用可能範囲が拡大するなどの話もあります。)

     

    Office 2010 環境と共存させたい場合のために OneDrive for Business 同期クライアントの単体モジュールがサポート技術情報 2903984 からインストール可能です。

    SharePoint Workspace (GROOVE 2010) とは共存できないためアンインストールすることを推奨しています。ただし、どうしても難しい場合は、Office 2010 SP2 を適用することで互換性を高めることが可能となります。

    Office 2007 については、すでに延長サポート フェーズであるため、新バージョンと混在した際の互換性向上の措置がとられていません。

    タイトル : SharePoint 2013 および SharePoint Online において OneDrive for Business (旧 SkyDrive Pro) 同期クライアントをインストールする方法
    アドレス :
    http://support.microsoft.com/kb/2903984

     

    3. パフォーマンスや制限事項に関する情報

    OneDrive for Business 同期クライアントに関するパフォーマンス境界と制限事項を一部だけ以下に記載します。

    個人用サイトの記憶域
     ユーザーあたり 1 TB  (記憶域は今後拡張を予定しているようです。)
    ファイル アップロードの上限
     ファイルあたり 2 GB
    同期の制限
     ファイルやフォルダーを含め、OneDrive for Business ライブラリで
    20,000
     アイテムファイルやフォルダーを含め、サイト ライブラリで 5,000 アイテム


    なお、記載はないですが、OneDrive for Business 同期クライアントは、サーバーのファイルをクライアントに同期しますので、クライアント側には同期対象のライブラリの容量に加えて、それらのファイルに該当するドキュメント キャッシュを保持します。

    そのため、同期対象のライブラリの 2 倍程度のディスク容量を使用することは、少なくとも想定しておく必要があります。

     

    また、下記 KB 2933738 によると同期することができない動作上の制限事項は以下があります。

    ・ファイルおよびフォルダーに使用する文字数 (ファイル名は最大 256 文字 他)
    ・無効な記号制限  (\ / : * ? “ < > | # % , 波形符号 (~) で始まるファイル名)
    ・サポートされないフォルダー名 (forms)
    ・無効なファイルの種類 (*.tmp, *.ds_store, desktop.ini, thumbs.db、ehthumbs.db
    ・OneNote ノートブック
    ・開いているファイルは同期できません

    上記は、重要と思われる内容を一部だけピックアップしているだけですべてではありません。詳細は以下のサイトをご参照ください。

    タイトル : SharePoint Online: ソフトウェアの境界と制限
    アドレス :
    http://office.microsoft.com/ja-jp/office365-sharepoint-online-enterprise-help/HA102694293.aspx

    タイトル : OneDrive for Business を介して SharePoint ライブラリをコンピューターに同期する際の制限事項
    アドレス :
    http://support.microsoft.com/kb/2933738/ja

     

    4. 基本的な動作・使用方法に関する情報

    OneDrive for Business ライブラリの同期ボタンをクリックして、同期を開始しましょう。

    OneDrive for Business 同期クライアントでライブラリを同期すると、クライアント PC 上に同期対象フォルダーが現れます。このフォルダー内に存在するファイルには、同期の状態をあらわすアイコンが表示されます。

    フォルダー同期のためのネットワーク I/O は最小限になるよう考慮されています。
    同期の処理では、GROOVE.EXE が SharePoint 側の変更ログと、クライアント側のディレクトリ変更を検出し、差分で同期対象のファイルをリストアップします。このリストに対してMSOSYNC.EXE がドキュメント キャッシュを使用したファイルの同期処理を行います。

    1) 同期の状態に関する説明

    同期の動作については、アイコンの表す状態と併記して簡単に説明します。


    アイコンなし ・・・ 未認識ファイル GROOVE.EXE が同期対象のファイルとして処理を実施していない状況です。

    青・同期中アイコン ・・・ 同期中ファイル GROOVE.EXE ファイルがサーバーとクライアント間で差異を検出したが、まだ MSOSYNC.EXE が同期できていない状況を表します。

    緑・チェック アイコン ・・・ 同期済みファイル GROOVE.EXE が最新であり、同期済みと認識しているファイルです。(ただし、サーバー側のファイル確認の間隔があるため、タイムラグによって更新されていないかもしれません。)

    赤・× アイコン ・・・ 競合したファイル 別のユーザーによるサーバー側のファイルとクライアント側のファイルで更新が確認され、どちらかで上書きするとデータが損失してしまう際に表示されます。この状況が発生したら、本投稿の後半に記載した競合発生時のトラブルシューティングを実施ください。

    2) 操作メニューに関する説明

     次に同期クライアントの操作メニューの紹介です。OneDrive for Business 同期クライアントのメイン モジュールである GROOVE.EXE が起動されるとタスクトレイアイコンとして表示されます。右クリックメニューを見てみましょう。



    OneDrive for Business フォルダーを表示する ・・・ ローカルの同期対象フォルダーをエクスプローラで開きます。

    新しいライブラリの同期 ・・・ここから、新しい同期先のライブラリを登録できます。OneDrive for Business 同期クライアントは複数のライブラリを同期することが可能です。このメニューの他にも、ブラウザーでドキュメント ライブラリを開き、[同期] アイコンを使用するのが便利です。

    今すぐ同期 ・・・ 同期処理を今すぐ実行します。サーバー側の変更確認間隔は約 10 分と長いため、同期中の状態が続いており今同期させておきたい場合にはこのメニューをクリックします。

    同期の一時停止 ・・・実際の同期処理 (MSOSYNC.EXE) は一時的に中断されます。同期対象ファイルのリスト化 (Groove.exe) は引き続き実行されます。再開されるまでファイルの同期の状態アイコンは青・同期中となり、同期処理 (MSOSYNC.EXE) は行われません。

    同期の再開 ・・・ 同期を再開します。MSOSYNC.EXE は即座に同期対象リストを確認して処理を実行開始します。同期の一時停止中の間、[同期の一時停止] メニューが [同期の再開] メニューに置き換わっています。

    同期の問題を表示する ・・・ 複数ユーザー使用するライブラリなどで他ユーザーによってファイルが更新されていることから、ファイル同期で競合が発生して赤×アイコンが現れた際に表示されます。
    ファイルを Office アプリケーションで開き、サーバー側、クライアント側のどちらのバージョンを残すかを選択することができます。

      

     

    フォルダーの同期の停止 ・・・ フォルダー同期を解除します。新しいライブラリの同期の反対の操作です。

    ストレージの管理 ・・・ サーバー側の記憶域メトリクスやごみ箱へのリンクを提供します。

    修復 ・・・クライアントとサーバー間で、大量の競合が発生した際に問題解決を実施する効率的な方法です。
    サーバーのファイルを全てクライアントに同期しますが、クライアントだけに存在する競合ファイルは、ローカル端末のアーカイブ フォルダー (未同期の変更内容フォルダー) にコピーされます。

    このメニューは 2014 年 8 月移行の修正プログラムが適用されていて、同期の問題が発生した際のみに表示されます。

     

    タイトル : OneDrive for Business または SharePoint サイト ライブラリをコンピューターと同期する
    アドレス :
    http://office.microsoft.com/ja-jp/support/HA102832401.aspx

    タイトル : OneDrive for Business の同期アプリを使って同期接続の問題を修復する
    アドレス :
    http://office.microsoft.com/ja-jp/sharepoint-help/HA104243474.aspx

    タイトル : OneDrive for Business 同期アプリの問題を解決する
    アドレス :
    http://office.microsoft.com/ja-jp/sharepoint-help/HA104047973.aspx


    5. もし、問題が発生したら

    同期の問題はある程度想定されており、そのための解決策が標準機能で提供されています。
    同期が完了しない (青・同期中アイコン) 場合は [今すぐ同期]、競合が多発する場合は [同期の問題を表示する] をクリックして、とりあえず対処してみます。これらの操作は低リスクです。

    ただ、それだけではどうしても解決しない場合は、下記の 2 つの方法を順次使用して対処を試みてください。

     

    1) [修復] メニューの実行

    同期の問題を自動解決するための方法が標準機能で提供されています。修復を実行すると、クライアントのファイルをすべてアーカイブ フォルダーに退避させ、サーバー側のファイルをすべてダウンロードします。
    その後、クライアント側のアーカイブ フォルダー内からサーバーと同一のファイルについては削除していくため、最終的にはサーバーに同期されていないクライアント側のファイルのみがアーカイブ (未同期の変更内容) フォルダーに残ります。アーカイブ フォルダーは %userprofile% フォルダー直下に存在します。

     

    フォルダー構成は下記のような構成になります。フォルダーの命名規則はバージョンによって多少異なります。

     

    先に後述する方法 2. であるドキュメント キャッシュ削除と再同期を実施すると、同期の問題のあったファイルがわからなくなります。これは、同期対象フォルダー設定が解消され、ファイルが同期されなくなるためアイコンが消失することに起因します。そのため、とにかく先に修復を実施し、同期されていないファイルだけをアーカイブ フォルダー内に残しておくことをお勧めします。

    2) ドキュメント キャッシュ削除と再同期
    これまで対処しても同期の問題が解決しなかった場合、ドキュメント キャッシュの整合性がとれなくなっている可能性が考えられます。

    下記のような手順にて、最後の手段としてローカル キャッシュを全て削除して、同期をやり直す方法があります。

    手順
    1. タスクトレイ アイコンを右クリックし、[終了] をクリックします。
    2. タスク マネージャを開き、プロセス一覧から MSOSYNC.EXE を強制終了します。
    3. 下記フォルダに保存されているファイルを全て削除します。

    %localappdata%\Microsoft\Office\15.0\OfficeFileCache
    %localappdata%\Microsoft\Office\Spw

    4. スタート メニューなどから、OneDrive for Business 同期クライアントを再度起動します。

    ただし、本対処を実施した場合、同期設定も削除されます。確実に対処できると思いますが、同期設定をはじめからやりなおす必要がある点については、あらかじめご認識ください。

     

    全てのファイルを再同期ということになると、数 GB もあるファイルを同期する場合には、同期できたとしても非常に時間がかかります。サービスの境界として記述があるか否かにかかわらず、万が一、トラブルが発生した時のことを想定して、同期しなくても良いファイルについては別ライブラリに移すなどし、対象のライブラリに配置するファイル量を少なくしておけば、こういった問題発生時の復旧時間などのリスクを最小化することができます。

     

    今回の投稿は以上になります。

  • 2013 形式ワークフローでリストアイテムの権限変更を行う方法について

    こんにちは、SharePoint サポートの森 健吾 (kenmori) です。

     

    今回の投稿では、SharePoint Online (または SharePoint Server 2013 On-Premises) において 2013 形式ワークフローで権限変更を行う方法についてご紹介します。

     

    導入 : 詳細に設定されたアクセス許可(FGP) を実現する方法

    SharePoint でアイテム作成時等にアイテムごとにアクセス許可を自動的に付与する方法を実現するためには、カスタマイズが必要となります。

    SharePoint On-Premises 製品で本機能を実現する場合は、迷わず Visual Studio を使用してファーム ソリューションでアイテム イベント レシーバーを開発し展開することが適切です。つまり、ItemAdded や ItemUpdated イベントにおいて SPListItem.BreakRoleInheritance(false) メソッドを呼び出し、SPListItem.RoleAssignments.Add() メソッドで必要なロール割り当てを指定する方法です。

    ただし、SharePoint Online では、ファーム ソリューションでの開発はできません。そこで、以下の代替案に行き着くことになりますが、どの選択肢も制約があります。


    代替案 1) サンドボックス ソリューションでイベント レシーバーを開発する。

      サンドボックス ソリューションは非推奨のカスタマイズ手法です。注意点としては、カスタムコードの実行処理や実行回数が多く、結果的にサイトのリソース クオーターを超えた場合、ペナルティのため該当サイトではサンドボックス ソリューションがアンロードを翌日まで使用できなくなることがある点にあります。このため、重要なビジネス ロジックをホストする点には懸念があります。


    代替案 2) Azure などのクラウド環境を調達し、リモート イベント レシーバーをホストさせる。

      リモート イベント レシーバーのためだけに、オンラインのクラウド環境を調達することは、コストの面からもビジネス的に厳しいと想定しています。


    代替案 3) 2010 形式ワークフロー アクションを使用する

      代理ステップの上でリストアイテムの権限を置換するなどのアクションを使用することが実装工数上最も現実的に見えます。権限の割り当てが多いときに、大量のアイテム作成・更新を行い、これらのアクションを実行するとパフォーマンス上問題を引き起こし、かなりの高確率でワークフローがエラー終了する現象が報告されています。

    タイトル : ワークフロー アクション クイック リファレンス (SharePoint 2010 ワークフロー プラットフォーム)
    アドレス : http://msdn.microsoft.com/ja-jp/library/office/jj822977%28v=office.15%29.aspx

    代替案 4) 2013 形式ワークフローを使用して HTTP Web サービスを呼び出して権限を変更する。

    そこで、今回代替案 4 である 2013 ワークフローを使用した権限変更の実施方法をお伝えする流れに至りました。2013 形式ワークフローには、権限変更に関するアクションは標準提供されていないため、手順は複雑になります。ここに記載された画面付きの手順をお役立ていただけますと幸いです。

    補足
    マイクロソフト見解としては、2010 よりも 2013 形式ワークフローを使用することを一般的には推奨しております。しかし、2010 形式ワークフロー (下位互換ワークフロー) が、今後使用できなくなるといった情報や方針は出されていません。一般的に 2010 形式ワークフローを使用すること自体には問題はありません。

    今回 2013 形式ワークフローを選択する理由は、2013 形式ワークフローは REST 呼び出しで BreakRoleInheritance(false) を使用できるという限定的な内容が焦点であり、それ以外に意図はありません。

    2010 形式ワークフローの弱点は、BreakRoleInheritance(true) を使用している点です。これは親であるリストなどに権限が 100 個登録されていた場合、あとで全て削除するにせよ一旦 100 個コピーする方法です。高性能なサーバー上で実現された SharePoint Online であっても、これを頻発すると大量のレコードの追加と削除が繰り返され、サイト内のパフォーマンス劣化が生じます。
    2010 形式ワークフローが、BreakRoleInheritance(true) を使用している理由は、リスト アイテムの権限を追加する、リスト アイテムの権限を削除する アクションなど、権限を差分で編集する機能が存在し、それらのアクションを含めた権限系の操作を行う外部メソッドがコードを共有している点にあります。

    なお、SharePoint On-Premises で 2013 形式ワークフローを使用する場合、障害復旧などのシナリオが複雑になる点については、あらかじめご理解ください。

    タイトル : Understanding SharePoint 2013 Workflow Backup
    アドレス : http://technet.microsoft.com/ja-jp/library/jj937239(v=office.15).aspx

     

    実践 : 2013 形式ワークフローで権限変更を行う方法について

    今回ご案内する手順は、アイテムのユーザー列 (例. user) に指定されたユーザーにフルコントロール権限を与える方法です。

    1. 事前準備

    1) "ワークフローでアプリの権限を使える" 機能の有効化

    以下の手順にてサイトの "ワークフローでアプリの権限を使える" 機能を有効にします。

    1-1) ブラウザにてサイトにアクセスします。

    1-2) [*] - [サイトの操作] - [サイトの設定] をクリックします。

    1-3) [サイト機能の管理] をクリックし、"ワークフローでアプリの権限を使える" 機能を有効にします。

     

    2. クライアント セクションの取得

     2-1) ブラウザにてサイトにアクセスします。
     2-2) [*] - [サイトの設定] - [サイト アプリの権限] をクリックします。

     

     

    2-3) ワークフロー アプリのアプリ ID 中のID の最後の "|" と "@" 記号の間の部分をコピーします。

     

    例 : アプリ ID = i:0i.t|ms.sp.ext|df119aab-5d1a-4067-b490-e95e6516a448@4837bbfb-2dd1-4579-8f94-8438f138f12f

    クライアント セクション : df119aab-5d1a-4067-b490-e95e6516a448

    3) アプリの権限設定
    以下の手順にて、対象となるサイトの appinv.aspx にてワークフロー アプリの権限として以下の XML を追加します。
     

    3-1) ブラウザにて以下にアクセスします。

     例) https://<サイト コレクションURL>/_layouts/15/appinv.aspx

    3-2) 2 で取得したクライアント セクション を入力して [参照] をクリックしてデータを照会した上で、アプリの権限要求 XML に以下を追加いたします。

     
    <AppPermissionRequests>
     <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl" />
    </AppPermissionRequests>


      3-3) [作成] をクリックし、ワークフロー アプリを信頼することを求められます。[信頼する] をクリックします。

     参考情報

      詳細につきましては、以下の弊社公開情報をご参考いただきますと幸いです。

      タイトル : SharePoint 2013 ワークフロー プラットフォームを使用した引き上げられた権限でのワークフローの作成
      アドレス : http://msdn.microsoft.com/ja-jp/library/office/jj822159(v=office.15).aspx

     

    2. SharePoint Designer 2013 で 2013 モードのワークフローを作成する

      1) SharePoint の管理者ユーザーで SPD 2013 を起動します。
      2) メニューバーより、[ファイル] - [サイト] - [サイトを開く] をクリックします。
      3) ダイアログが表示されますので、サイト名 (例 <https://tenant.sharepoint.com/sites/site) を入力して [開く] をクリックします。
     
    4) ナビゲーションより、[ワークフロー] をクリックし、リボン上の "リスト ワークフロー" - <<該当リスト>> をクリックします。
     
    5) "プラットフォームの種類 : SharePoint 2013 ワークフロー" の設定し、任意の名前でワークフローを作成します。

     

     6) ステージ 1 の "(入力するか、リボンの [挿入] グループを指定してください)" の下をクリックし、リボン上の [アプリ ステップ] を挿入します。

      

     

    ここから先は、ご要望の動作に合わせて、アプリステップの中に [辞書を作成] と [HTTP Web サービスを呼び出す] をクリックして配置していきます。画像でアクションの配置されている位置を確認ください。

     

     

    8) HTTP Web サービスを呼び出す際に使用する HTTP Request Header を辞書型で作成します。

    8-1) "アクション" - "辞書を作成" をクリックします。

    8-2) "この" をクリックし、[追加] をクリックし、以下の登録を実施します。

    名前 : Accept   種類 : 文字列  値 : application/json;odata=verbose

    名前 : Content-Type   種類 : 文字列  値 : application/json;odata=verbose

     

    8-3) "変数:辞書" - "新しい変数の作成" をクリックし、辞書型の変数 (例: RequestHeader) を作成します。

     

     9) HTTP Web サービスを呼び出して権限の継承を中止し、固有の権限を作成します。

    9-1) "http Web サービスを呼び出す" アクションを挿入します。

    9-2) 挿入したアクションを選択し、右クリック - [プロパティ] を選択し以下の設定を実施します。

     

      9-3) "RequestType" に、"HTTP POST" を指定します。
     
    9-4) "RequestHeaders" に、8-2) で作成した変数 (例: RequestHeader) を指定します。
     
    9-5) "ResponseContent" をクリックし、新しい変数をクリックして ResponseContent という辞書型の変数を作成します。

     

     

    9-6) "Address" にフォーカスした際に現れる "…" をクリックし、文字列ビルダーを呼び出してリクエスト先の URL を構成します。

    9-7) 下記の様に REST で BreakRoleInheritance メソッドを呼び出します。

    例)

    https://<sitecollection>/_api/web/lists/GetByTitle([%ワークフローコンテキスト:リスト名%])/items([%現在のアイテム:ID%])/breakroleinheritance(false)

     

    補足

    Web サービスのパラメーター部分 ([% %] で囲まれた箇所) は、上記図のように [参照の追加または変更] をクリックして、適宜パラメーターを埋め込みます。

     

    10) HTTP Web サービスを呼び出して、アイテムのユーザー列に指定されたユーザー列に権限を付加します。

    10-1) アドレス以外の指定は上記と全く同じです。

    10-1-1) "RequestType" に、"HTTP POST" を指定します。

    10-1-2) "RequestHeaders" に、8-2) で作成した変数 (例: RequestHeader) を指定します。

    10-1-3) "ResponseContent" をクリックし、新しい変数をクリックして ResponseContent という辞書型の変数を作成します。

    10-2) アドレス部分は下記の様に AddRoleAssignment メソッドを呼び出します。

    例)

    https://<sitecollection>/_api/web/lists/GetByTitle([%ワークフローコンテキスト:リスト名%])/items([%現在のアイテム:ID%])/roleassignments/addroleassignment(principalid=[%現在のアイテム:User%],roleDefId=1073741829)

     

     

    補足

    roleDefId パラメーターとして指定している 1073741829 は、フルコントロール権限です。

    ブラウザ上で、以下の URL にアクセスの上、ご要望のroleDefid (d:Id m:type) をご確認ください。

    https://<sitecollection>/_api/web/roledefinitions

     

    11) 最後に微調整を行います。

    ・エラー発生時の調査用に ResponseContent を履歴リストに出力し���す。

    ・リストビュー上でワークフローが完了したことを把握しやすくするため、完了ステージに一度遷移させ、ワークフローを終了させます。

     

      12) リボン メニューより[ワークフローの設定] をクリックして、開始オプションを設定します。


     13) ワークフローの発行を実施します。

     

    補足

    ワークフローで SharePoint の REST API を実施できるようになり、ワークフローで実現できることが SharePoint 2010 形式のワークフローより多くのことが実現可能となりました。
    なお、権限を昇格して実施するような処理に関してはアプリ ステップを利用する必要がございます。
    以下のサイトにも上記手順に関する記載がございますのでご参考にしていただければ幸いです。

    タイトル: ワークフロー アクション クイック リファレンス (SharePoint 2013 ワークフロー プラットフォーム)
    アドレス: http://msdn.microsoft.com/ja-jp/library/office/jj164026(v=office.15).aspx

    タイトル: SharePoint 2013 ワークフロー プラットフォームを使用した引き上げられた権限でのワークフローの作成
    アドレス: http://msdn.microsoft.com/ja-jp/library/office/jj822159(v=office.15).aspx

    タイトル: SharePoint 2013 REST サービスの概要
    アドレス: http://msdn.microsoft.com/ja-jp/library/office/fp142380(v=office.15).aspx

    タイトル: ワークフローで HTTP Web サービスを利用する
    アドレス: http://blogs.technet.com/b/sharepoint_support/archive/2014/08/15/http-web.aspx

    タイトル: SharePoint Designer 2013 の辞書アクションを理解する
    アドレス: http://msdn.microsoft.com/JA-JP/library/office/jj554504(v=office.15).aspx

  • PowerShell サンプル – アイテムの作成、取得、編集、削除

    こんにちは、SharePoint サポートの佐伯です。
    今回の投稿では、PowerShell を使用してアイテムの基本的な操作を実施する方法についてご紹介します。
    あまり PowerShell のご経験がない方にも分かりやすくするために、ここではシンプルなサンプルをご紹介していきます。目的の処理を実装する際にご参考になりましたら幸いです。
    実装の際は MSDN の資料も合わせてご参照ください。

    ■アイテムの作成

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します。

    $list = $web.Lists["<リスト名>"]

    #アイテムのコレクションを取得します。

    $items = $list.Items

    #アイテムを追加します。

    $item = $items.Add()

    #アイテムのタイトルに値を設します。

    $item["Title"] = "<>"

    #アイテムを更新します。

    $item.Update()














    ) アイテムを追加する

    $web = Get-SPWeb http://sharepoint/sites/team

    $list = $web.Lists["おしらせ"]

    $items = $list.Items

    $item = $items.Add()

    $item["Title"] = "おしらせリストを作成しました。"

    $item.Update()


    ■アイテムの取得

     

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します。

    $list = $web.Lists["<リスト名>"]

    #アイテムのコレクションを取得します。

    $items = $list.Items

    #アイテムを取得します。

    $item = $items.GetItemById(<アイテムの ID>)

    #アイテムの列の値を取得します。

    $item["<列のタイトルまたは内部名>"]












    ) アイテムのタイトルを取得する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["おしらせ"]
    $items = $list.Items
    $item = $items.GetItemById(1)
    $item["Title"]

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します。

    $list = $web.Lists["<リスト名>"]

    #アイテムのコレクションを取得します。

    $items = $list.Items

    #アイテムを取得します。

    $item = $items[<インデックス>]

    #アイテムの列の値を取得します。

    $item["<列のタイトルまたは内部名>"]











    ) アイテムのタイトルを取得する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["おしらせ"]
    $items = $list.Items
    $item = $items[0]
    $item["Title"]

    参考 : <列の内部名> を確認する方法は以下の投稿でご紹介しています。

    PowerShell サンプル – 列の作成、取得、編集、削除

    ■アイテムの編集

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します。

    $list = $web.Lists["<リスト名>"]

    #アイテムのコレクションを取得します。

    $items = $list.Items

    #アイテムを取得します。

    $item = $items.GetItemById(<アイテムの ID>)

    #アイテムの列に値を設定します。

    $item["<列のタイトルまたは内部名>"] = <変更後の値>

    #アイテムを更新します。

    $item.Update()














    ) はい/いいえ (チェック ボックス) 列の値を更新する
    $web = Get-SPWeb http://sharepoint/sites/team

    $list = $web.Lists["トレーニング管理"]

    $items = $list.Items

    $item = $items.GetItemById(1)

    $item["必須"] = $true

    $item.Update()

    参考 : <列の内部名> を確認する方法は以下の投稿でご紹介しています。
    PowerShell サンプル – 列の作成、取得、編集、削除

    ■アイテムの削除 

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します。

    $list = $web.Lists["<リスト名>"]

    #アイテムのコレクションを取得します。

    $items = $list.Items

    #アイテムを削除します。

    $items.DeleteItemById(<アイテムの ID>)









     

    ) アイテムを削除する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["おしらせ"]
    $items = $list.Items
    $items.DeleteItemById(1)

    - 補足

    目的の処理を実施した後は、SPWeb.Dispose メソッドを使用して SPWeb オブジェクトを閉じ、リソースを解放します。

    $web.Dispose()

     

    ) アイテムを追加し、タイトル、概要を設定します。
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["業務分類"]
    $items = $list.Items
    $item = $items.Add()
    $item["タイトル"] = "文書管理"
    $item["概要"] = "業務の効率化を目的とし、文書の保存・廃棄等、文書を適切に管理します。"
    $item.Update()
    $web.Dispose()

  • PowerShell サンプル – 列の作成、取得、編集、削除

    こんにちは、SharePoint サポートの佐伯です。
    今回の投稿では、PowerShell を使用して列の基本的な操作を実施する方法についてご紹介します。
    あまり PowerShell のご経験がない方にも分かりやすくするために、ここではシンプルなサンプルをご紹介していきます。目的の処理を実装する際にご参考になりましたら幸いです。
    実装の際は MSDN の資料も合わせてご参照ください。

    ■列の作成

    #サイトを取得します。

    $web = Get-SPWeb <Web サイ���の URL>

    #リストを取得します

    $list = $web.Lists["<リスト名>"]

    #列のコレクションを取得します。

    $fields = $list.Fields

    #列を追加します。

    $fields.Add("<列名>", <列の種類>, <必須列か否か>)











    ) 1 行テキスト列を追加する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ニュース"]
    $fields = $list.Fields
    $fields.Add("メモ", [Microsoft.SharePoint.SPFieldType]::Text, $false)

    ) 日付と時刻列を追加する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["会議資料"]
    $fields = $list.Fields
    $fields.Add("開催日", [Microsoft.SharePoint.SPFieldType]::DateTime, $true)

    参考 : その他の <列の種類> は下記の資料をご参照ください。
    SPFieldType enumeration
    http://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spfieldtype(v=office.15).aspx

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します

    $list = $web.Lists["<リスト名>"]

    #列のコレクションを取得します。

    $fields = $list.Fields

    #文字列のコレクションを作成します。

    $strings = New-Object System.Collections.Specialized.StringCollection

    $strings.Add("<選択肢1>")

    $strings.Add("<選択肢2>")

    $strings.Add("<選択肢3>")

    #列を追加します。

    $fields.Add("<列名>", <列の種類>, <必須列か否か>, <フィールド名の8文字制限>, $strings)
















    ) 選択肢列を追加する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ドキュメント"]
    $fields = $list.Fields
    $strings = New-Object System.Collections.Specialized.StringCollection
    $strings.Add("議事録")
    $strings.Add("社内通知")
    $strings.Add("調査書")
    $strings.Add("その他")
    $fields.Add("DocumentCategory", [Microsoft.SharePoint.SPFieldType]::Choice, $false, $false, $strings)

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します

    $list = $web.Lists["<リスト名>"]

    #列のコレクションを取得します。

    $fields = $list.Fields

    #参照先のリストの ID を取得します。

    $refListId = $web.Lists["<参照先のリスト名>"].ID

    #列を追加します。

    $fName = $fields.AddLookup("<列名>", $refListId, <必須列か否か>)

    #追加した列を取得します。

    $field = $list.Fields.GetField($fName)

    #参照する列を設定します。

    $field.LookupField = "<参照する列の内部名>"

    #列を更新します。

    $field.Update()



















    ) 参照列を追加する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["会議記録"]
    $fields = $list.Fields
    $refListId = $web.Lists["施設リスト"].ID
    $fName = $fields.AddLookup("施設", $refListId, $false)
    $field = $list.Fields.GetField($fName)
    $field.LookupField = "Title"
    $field.Update()


    ■列の取得

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します

    $list = $web.Lists["<リスト名>"]

    #列のコレクションを取得します。

    $fields = $list.Fields

    #列を取得します。

    $field = $fields.GetField("<列のタイトルまたは内部名>")

    #列のプロパティ値を取得します

    $field.<列のプロパティ>













    ) 列の内部名を取得する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ニュース"]
    $fields = $list.Fields
    $field = $fields.GetField("メモ")
    $field.InternalName

    参考 : その他の <列のプロパティ> は下記の資料をご参照ください。
    SPField properties
    http://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spfield_properties(v=office.15).aspx

    ) 列のプロパティ情報を *.txt ファイルに出力する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ニュース"]
    $fields = $list.Fields
    $field = $fields.GetField("メモ")
    $field >C:\news.txt


    ■列の編集

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します

    $list = $web.Lists["<リスト名>"]

    #列のコレクションを取得します。

    $fields = $list.Fields

    #列を取得します。

    $field = $fields.GetField("<列名または列の内部名>")

    #列のプロパティに値を設定します。

    $field.<列のプロパティ> = <変更後のプロパティ値>

    #列を更新します。

    $field.Update()















    ) 列のタイトルを変更する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ドキュメント"]
    $fields = $list.Fields
    $field = $fields.GetField("DocumentCategory")
    $field.Title= "文書のカテゴリ"
    $field.Update()

    参考 : その他の <列のプロパティ> は下記の資料をご参照ください。
    SPField properties
    http://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spfield_properties(v=office.15).aspx



    ■列の削除

    #サイトを取得します。

    $web = Get-SPWeb <Web サイトの URL>

    #リストを取得します

    $list = $web.Lists["<リスト名>"]

    #列のコレクションを取得します。

    $fields = $list.Fields

    #列を取得します。

    $field = $fields.GetField("<列のタイトルまたは内部名>")

    #列を削除します。

    $field.Delete()













    ) 列を削除する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ニュース"]
    $fields = $list.Fields
    $field = $fields.GetField("メモ")
    $field.Delete()

    -
    補足
    目的の処理を実施した後は、SPWeb.Dispose メソッドを使用して SPWeb オブジェクトを閉じ、リソースを解放します。

    $web.Dispose()

     


    ) 日付と時刻列を追加し、既定値を今日の日付に設定する
    $web = Get-SPWeb http://sharepoint/sites/team
    $list = $web.Lists["ニュース"]
    $fields = $list.Fields
    $fName = $fields.Add("投稿日", [Microsoft.SharePoint.SPFieldType]::DateTime, $false)
    $field = $list.Fields.GetField($fName)
    $field.DisplayFormat = [Microsoft.SharePoint.SPDateTimeFieldFormatType]::DateOnly
    $field.DefaultValue = "[today]"
    $field.Update()
    $web.Dispose()