こんにちは、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("<列の内部名>")
#クエリを設定します。
$query = '<CAML 文字列>'
#表示するアイテム数を設定します。
$rowLimit = <アイテム数>
#指定のアイテム数に制限して表示するかページングを行うかを設定します。
$paged = <True または False>
#ビューを既定のビューにするかを設定します。
$defaultView = <True または False>
#ビューを追加します。
例) タイトル順にアイテムを表示するビューを追加する$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)■ビューの取得
#ビューを取得します。
$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■ビューの編集
#ビューのプロパティに値を設定します。
$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■ビューの削除
#削除するビューの 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 = 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()
こんにちは 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 もあるファイルを同期する場合には、同期できたとしても非常に時間��かかります。サービスの境界として記述があるか否かにかかわらず、万が一、トラブルが発生した時のことを想定して、同期しなくても良いファイルについては別ライブラリに移すなどし、対象のライブラリに配置するファイル量を少なくしておけば、こういった問題発生時の復旧時間などのリスクを最小化することができます。
今回の投稿は以上になります。
こんにちは、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
こんにちは、SharePoint サポートの佐伯です。今回の投稿では、PowerShell を使用してアイテムの基本的な操作を実施する方法についてご紹介します。あまり PowerShell のご経験がない方にも分かりやすくするために、ここではシンプルなサンプルをご紹介していきます。目的の処理を実装する際にご参考になりましたら幸いです。実装の際は MSDN の資料も合わせてご参照ください。
■アイテムの作成
#アイテムのコレクションを取得します。
$items = $list.Items
#アイテムを追加します。
$item = $items.Add()
#アイテムのタイトルに値を設定します。
$item["Title"] = "<値>"
#アイテムを更新します。
例) アイテムを追加する
$web = Get-SPWeb http://sharepoint/sites/team
$list = $web.Lists["おしらせ"]
$item["Title"] = "おしらせリストを作成しました。"
$item.Update()■アイテムの取得
#アイテムを取得します。
$item = $items.GetItemById(<アイテムの ID>)
#アイテムの列の値を取得します。
例) アイテムのタイトルを取得する$web = Get-SPWeb http://sharepoint/sites/team$list = $web.Lists["おしらせ"]$items = $list.Items$item = $items.GetItemById(1)$item["Title"]
$item = $items[<インデックス>]
$item["<列のタイトルまたは内部名>"]
例) アイテムのタイトルを取得する$web = Get-SPWeb http://sharepoint/sites/team$list = $web.Lists["おしらせ"]$items = $list.Items$item = $items[0]$item["Title"]
参考 : <列の内部名> を確認する方法は以下の投稿でご紹介しています。
PowerShell サンプル – 列の作成、取得、編集、削除
■アイテムの編集
#アイテムの列に値を設定します。
$item["<列のタイトルまたは内部名>"] = <変更後の値>
例) はい/いいえ (チェック ボックス) 列の値を更新する$web = Get-SPWeb http://sharepoint/sites/team
$list = $web.Lists["トレーニング管理"]
$item = $items.GetItemById(1)
$item["必須"] = $true
$item.Update()
参考 : <列の内部名> を確認する方法は以下の投稿でご紹介しています。PowerShell サンプル – 列の作成、取得、編集、削除
■アイテムの削除
#アイテムを削除します。
$items.DeleteItemById(<アイテムの ID>)
例) アイテムを削除する$web = Get-SPWeb http://sharepoint/sites/team$list = $web.Lists["おしらせ"]$items = $list.Items$items.DeleteItemById(1)- 補足
目的の処理を実施した後は、SPWeb.Dispose メソッドを使用して SPWeb オブジェクトを閉じ、リソースを解放します。
例) アイテムを追加し、タイトル、概要を設定します。$web = Get-SPWeb http://sharepoint/sites/team$list = $web.Lists["業務分類"]$items = $list.Items$item = $items.Add()$item["タイトル"] = "文書管理"$item["概要"] = "業務の効率化を目的とし、文書の保存・廃棄等、文書を適切に管理します。"$item.Update()$web.Dispose()
こんにちは、SharePoint サポートの佐伯です。今回の投稿では、PowerShell を使用して列の基本的な操作を実施する方法についてご紹介します。あまり PowerShell のご経験がない方にも分かりやすくするために、ここではシンプルなサンプルをご紹介していきます。目的の処理を実装する際にご参考になりましたら幸いです。実装の際は MSDN の資料も合わせてご参照ください。
■列の作成
#リストを取得します
#列のコレクションを取得します。
$fields = $list.Fields
#列を追加します。
例) 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 enumerationhttp://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spfieldtype(v=office.15).aspx
#文字列のコレ���ションを作成します。
$strings = New-Object System.Collections.Specialized.StringCollection
$strings.Add("<選択肢1>")
$strings.Add("<選択肢2>")
$strings.Add("<選択肢3>")
例) 選択肢列を追加する$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)
#参照先のリストの 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()■列の取得
#列を取得します。
$field = $fields.GetField("<列のタイトルまたは内部名>")
#列のプロパティ値を取得します
例) 列の内部名を取得する$web = Get-SPWeb http://sharepoint/sites/team$list = $web.Lists["ニュース"]$fields = $list.Fields$field = $fields.GetField("メモ")$field.InternalName参考 : その他の <列のプロパティ> は下記の資料をご参照ください。SPField propertieshttp://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■列の編集
$field = $fields.GetField("<列名または列の内部名>")
#列のプロパティに値を設定します。
$field.<列のプロパティ> = <変更後のプロパティ値>
例) 列のタイトルを変更する$web = Get-SPWeb http://sharepoint/sites/team$list = $web.Lists["ドキュメント"]$fields = $list.Fields$field = $fields.GetField("DocumentCategory")$field.Title= "文書のカテゴリ"$field.Update()参考 : その他の <列のプロパティ> は下記の資料をご参照ください。SPField propertieshttp://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spfield_properties(v=office.15).aspx■列の削除
#列を削除します。
例) 列を削除する$web = Get-SPWeb http://sharepoint/sites/team$list = $web.Lists["ニュース"]$fields = $list.Fields$field = $fields.GetField("メモ")$field.Delete()- 補足目的の処理を実施した後は、SPWeb.Dispose メソッドを使用して SPWeb オブジェクトを閉じ、リソースを解放します。
例) 日付と時刻列を追加し、既定値を今日の日付に設定する $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()
こんにちは、SharePoint サポートの大関です。
先日ご案内させていただきました、以下の記事に記載の問題が、今月公開された累積的な更新プログラムで修正されたことをご案内いたします。
=============現象について=============
記事タイトル:通知メール本文に取り消し線が入る現象について
URL :http://blogs.technet.com/b/sharepoint_support/archive/2014/08/13/3635914.aspx
※なお、今回は SharePoint 2010 のみの修正となります。 SharePoint 2013 の 2014 年 12 月の累積的な更新プログラムに、本事象への修正は含まれておりませんので、ご注意ください。
また本現象は、以下にご案内いたします累積的な更新プログラムを適用後、修正された通知メールの設定内容をファームに適用するためのコマンドを実施いただく必要がありますので、ご注意ください。
===================対象の更新プログラム===================
タイトル: December 9, 2014 Cumulative Update for SharePoint Server 2010 package
URL : http://support.microsoft.com/KB/2899583
===================通知設定変更の反映===================
累積的な更新プログラム適用後、以下のコマンドを実行して、変更された通知メールの設定内容をファームに反映します。
コマンドの性質上、サイト コレクションの URL を指定する必要がありますが、任意のサイト コレクションを 1 度指定してコマンドを実施いただければ、ファーム全体に変更内容は反映されます。
1) 任意の SharePoint サーバーに、管理者アカウントでログインし、コマンド プロンプトを起動します。
2) 以下のコマンドを実行し、ディレクトリを移動します。
cd C:\Program Files\Common Files\Microsoft Shared\web server extensions\14\BIN
3) 以下のコマンドを実行します。
stsadm -o updatealerttemplates -url <任意のサイト コレクション>
例) stsadm -o updatealerttemplates -url http://sp2010
4) コマンドが正常に完了したら、通知メール本文に取り消し線が入る現象が解消されているか、ご確認下さい。
<参考情報>
タイトル:Updatealerttemplates: Stsadm 操作 (Office SharePoint Server)
アドレス:http://technet.microsoft.com/ja-jp/library/dd278299(v=office.12).aspx
SharePoint 2013 の修正は現在おって対応しております。
ご不便をおかけしておりますが、SharePoint 2013 ユーザーの皆様、今しばらくお待ちくださいませ。
SharePoint 2013 の修正が実施され次第、また改めて更新させていただきます。
今回の投稿では、SharePoint Online で2010 形式ワークフローを使用して運用してエラー発生した際に、エラー発生しているアイテムの一覧を取得し、メール通知するサンプル コードをご案内します。 以前の投稿である On-Premises 版のサンプル コードは過去のブログ (下記) をご参考にしてください。
タイトル : 内部エラー (WinWF Internal Error) 発生を想定したSharePoint ワークフローをデザインする アドレス : http://blogs.technet.com/b/sharepoint_support/archive/2012/11/27/a-sharepoint.aspx
クラウド上の高スペック マシンにホストされた SharePoint Online でも、On-premises 同様、様々な事情によりワークフローでエラーが発生することはあります。他のあらゆるシステム同様、ワークフローでもエラーが発生することを 100% 防ぐことはできません。
ワークフローは一部の処理でリトライ機能をもつものの、一般的にはエラーが発生した際にはエラー発生という状態を表示し、特に処理を行うことはありません。そのため、エラーが発生する時に、どういったアクションをとるかは引き続き運用側に委ねられています。 特に重要なビジネス ロジックを含むワークフローにおきましては、エラー発生した際に即座に対処をとりたい場合も多いでしょう。
On-Premises 版のサンプルでは自動的に再起動する処理までを実装しておりました。ところが、SharePoint Online では、サーバー上で動作させる SSOM (Server Side Object Model) を使用することができず、代わりにリモート実行のライブラリである CSOM (Client Side Object Model) で同じ動作を実装する方法を検討する必要がありました。
検討の結果、SSOM の SPListItem.Workflows プロパティに相当する処理が CSOM 側にないことを確認しました。ワークフロー インスタンスを取得してワークフローを自動終了させることができないため、代わりに通知するという方法を選択しております。
補足 2013 形式ワークフローでは、ワークフローに関する幅広い API を使用することができ、ワークフローの再起動も可能と想定されます。しかしながら、代理ステップで利用できたアクションなど (権限変更等) を "HttpWeb サービスを呼び出す" アクションを利用して作成する必要があるため、一般ユーザーでの利用が難しい等、機能的な制約により 2010 形式ワークフローを選択せざるを得ないことも否定できません。
ワークフロー設計における注意事項は On-premises で記載した内容と同じですので、今回はサンプル プログラムのみ、下記に記載させていただきます。今後の運用にお役立ていただけますと幸いです。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using SP = Microsoft.SharePoint.Client;
namespace NotifyFailedWorkflow{ class Program { static void Main(string[] args) { string siteUrl = "https://tenant.sharepoint.com/sites/workflow"; // サイトの URL を指定します。 string listTitle = "WorkflowList"; // リスト名を指定します。 string username = "tenantadmin@tenant.onmicrosoft.com"; // ユーザー ID を指定します。 string pwd = "password"; // パスワードを指定します。 string emailfrom = "tenantadmin @tenant.onmicrosoft.com"; // メール送信元を指定します。 string[] emailto = {"tenantadmin@tenant.onmicrosoft.com", "siteadmin@tenant.onmicrosoft.com"}; // メール送信先 (複数指定可) を指定します。
try { SP.ClientContext context = new SP.ClientContext(siteUrl); System.Security.SecureString secpas = new System.Security.SecureString(); foreach (char c in pwd.ToCharArray()) { secpas.AppendChar(c); }
SP.SharePointOnlineCredentials userCredentials = new SP.SharePointOnlineCredentials(username, secpas); context.Credentials = userCredentials;
SP.Web web = context.Web; SP.List list = web.Lists.GetByTitle(listTitle); context.Load(web); context.Load(list.DefaultView); context.Load(list.Fields); context.ExecuteQuery();
StringBuilder sb = new StringBuilder();
foreach (SP.Field field in list.Fields) { // ワークフ���ー状態列を列挙します。 if (field.TypeAsString == "WorkflowStatus") { // 取得したワークフロー状態列がエラー発生 (3) の値のアイテムを取得します。(下記表を参照ください。) SP.CamlQuery query = new SP.CamlQuery(); query.ViewXml = string.Format("<View><Query><Where><Contains><FieldRef Name='{0}'/><Value Type='Text'>{1}</Value></Contains></Where></Query></View>", field.InternalName, 3);
SP.ListItemCollection listitems = list.GetItems(query); context.Load(listitems); context.ExecuteQuery();
if (listitems.Count > 0) { sb.AppendLine(string.Format("<BR><BR>リスト <a href='{0}{1}'>{2}</a> の下記アイテムでワークフロー ({3}) のエラーが発生しています。<BR><BR>ID\tTitle<BR>", web.Url.Substring(0, web.Url.IndexOf("/", "https://".Length)), list.DefaultView.ServerRelativeUrl, listTitle, field.InternalName));
foreach (SP.ListItem item in listitems) { sb.Append(item.Id.ToString()); sb.Append("\t"); sb.Append(item["Title"].ToString()); sb.Append("<BR>"); } } } }
if (sb.Length > 0) { SP.Utilities.EmailProperties prop = new SP.Utilities.EmailProperties(); List<string> ToList = new List<string>(); ToList.AddRange(emailto); prop.To = ToList; prop.From = emailfrom; prop.Subject = string.Format("ワークフロー エラー発生 : {0}", listTitle); prop.Body = sb.ToString(); SP.Utilities.Utility.SendEmail(context, prop); context.ExecuteQuery(); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); //Console.Read(); } } }}
送信メールのイメージ
本サンプル コードで送信されるメールのイメージは下記の通りです。
前提事項
開発環境および実行環境においては、下記 SharePoint Online Client Components SDK をインストールしておくことが前提事項となります。
タイトル : SharePoint Online Client Components SDKアドレス : http://www.microsoft.com/en-us/download/details.aspx?id=42038
補足以前の投稿にも記載した通りとなりますが、ワークフローの状態列の値は下記をご参照ください。
今回の投稿は以上となります。
こんにちは、SharePoint サポート チームです。
以前に比べ、Hyper-V の環境にて SharePoint Server を導入、及び運用していただいているお客様からのお問い合わせを多くいただいております。
今回の投稿では、SharePoint Server 2010 および SharePoint Server 2013 における仮想化対応状況についてご紹介します。
以下に Hyper-V の各テクノロジー サポート状況をまとめましたのでご参考ください。
(※ 1)
下記の条件を満たす状態で取得されている場合にのみサポート対象となります。
- SharePoint Server がファームに未加入
- 端末がシャットダウンしている
[参考情報]
タイトル : 仮想マシン ガイダンス (SharePoint Server 2010)アドレス : http://technet.microsoft.com/ja-jp/library/ff621103(v=office.14).aspx
タイトル : SharePoint 2013 仮想マシンと Hyper-V 環境にベスト プラクティスの構成を使用する アドレス : http://technet.microsoft.com/ja-jp/library/ff621103.aspx
今回の投稿では、SharePoint Server オンプレミス製品において、カスタマイズを含むバックアップの方法について、SharePoint のソリューション開発を実施されたことのない運用管理者に理解できるレベルを目指して概要をご説明します。
公式サイトの情報について
下記 Technet 記事は、基本的に様々なカスタマイズ ソリューションに合わせて全体を網羅する形で記載があります。
タイトル : SharePoint 2013 でカスタマイズをバックアップする アドレス : http://technet.microsoft.com/ja-jp/library/ee748642(v=office.15).aspx
タイトル : SharePoint 2013 でのバックアップと復元を計画する アドレス : http://technet.microsoft.com/ja-jp/library/cc261687(v=office.15).aspx
基本的に上記の通りです。SharePoint のソリューション開発者にとっては開発用語が理解でき、わかりやすい内容だと思います。ただし管理者はこれらの用語が理解しづらく、自身の環境がどの条件にあるのかわかりにくいかもしれません。本投稿では理解するために必要な知識を補足しようと考えています。
本投稿は、細かなポイントを列挙するよりも、上記バックアップに関連する資料を読み解くために、最初に理解しておきたいポイントを明確します。SharePoint のバ���クアップ・復元を理解する上での最初の足掛かりにしていただけますと幸いです。
SharePoint のバックアップが含むデータについて
SharePoint には様々なバックアップ方法がありますが、基本的にファーム、データベース、サイトコレクション単位のバックアップにおいても採取できる情報は、データベース内の情報のみです。
例えば、SharePoint の通常の Web フロント エンド サーバーの動作を想像してみましょう。データベース内に含まれたコンテンツを Web フロント エンド サーバー上に含まれたスキーマ情報やロジックで変換し、HTML データなどをブラウザーに返します。
上図を見て、データだけがバックアップ・復元された状況を想像してみましょう。
SharePoint 標準のモジュールは、インストーラーによってすべてのファイルが構成されているため、別サーバーに移行する際においても問題にはなりません。
ただし、カスタマイズ ソリューションをインストールしてない場合はどうなるでしょうか。カスタマイズ機能で生成されたデータは Web フロント エンド サーバーに配置されていないため、読み取れなくなってしまいます。クライアント PC でのイメージとしては、Excel をインストールしていないので、xlsx ファイルが読めなくなってしまったような状況になります。
具体的なソリューションの例
もう少し、深く理解したい人のために、具体的な例を挙げます。下記にごく一般的で最少構成の Web パーツ ソリューションの例を記載します。
Web パーツをインストールすると、すべての Web フロント エンド サーバーに以下のファイルが配置されます。Web フロント エンド サーバーに配置されたこれらの物理ファイルはバックアップには含まれません。
1) feature.xml, element.xml といった機能の定義ファイル 2) 実装コードがコンパイルされて組み込まれた DLL 3) Web パーツを安全なコントロールと認識させるために web.config への SafeControl 要素追加 4) Web パーツをページに追加できるよう Web パーツ ギャラリーにアップロードするための *.webpart ファイル
下記、実際にこの Web パーツを使用した際に注目ください。下記 2 つの情報は、サイト内のデータに直接記載されているので、バックアップ内に含まれます。
1) サイトやサイト コレクションでWeb パーツ機能を有効化すると、サイト内の Web パーツ ギャラリーに *.webpart ファイルが追加されます。 2) ページの編集を実施して Web パーツをページに追加すると、ページ上に Web パーツを追加しているという情報がコンテンツ DB 内 WebParts テーブルに記録されます。
つまり、Web パーツ機能を有効化し使用しているというデータがあるにもかかわらず、Web パーツを表示するためのプログラムが Web フロント エンド サーバー上にないため、正常に動作しなくなるという状況が発生します。
(補足) 本筋の話とはそれますが、Web パーツ機能を有効化した際に *.webpart ファイルが Web パーツ ギャラリーに保存されます。ただし、逆に Web パーツ機能を無効化しても、*.webpart ファイルは削除されません。
SharePoint の機能は、サイトコンテンツを削除するという動作については慎重となる実装となります。そのため、もう使用していないはずの Web パーツがヘルスアナライザー上でエラーを出しているような状況に遭遇することもあります。
この場合、もう使用していないということがわかった時点で、Web パーツ ギャラリーから *.webpart ファイルを削除していただく形で構いませんし、残しておいても特に警告が通知されるだけで使用上特に害はありません。
バックアップの復元方法
上記の通り、カスタム ソリューションを含むファームをバックアップしても、カスタマイズ モジュールやスキーマ定義を使用して生成されたデータのみしかバックアップされません。そのため、ファームを超えたバックアップ・復元を実施する場合は、これらのカスタマイズを移行先にインストールする作業を併せて実施する必要があります。
復元手順概要
1. SharePoint サーバーのインストール 2. バックアップ データの復元 (*) 3. カスタム ソリューションのインストール (*)
例えば、ファーム内のカスタマイズがソリューション パッケージのみで構成されている場合は、ソリューション パッケージをインストールしてデータを復元すれば作業は終わりです。
ただし、Technet の記事が複雑になっている理由は、ほとんどの運用シナリオにおいて、このようなカスタマイズ一覧や導入手順が統一管理されていないことと、ソリューション パッケージをインストールするだけにとどまらないことに起因します。 その結果、どんなソリューションがインストールされているかをその場で情報収集して確認し、Technet に記載された情報を確認しながら、膨大な移行計画を立てていく必要が生じてしまいます。
このような状況に備えるため、日頃からファーム上にどのようなカスタマイズを実装しているかについて、カスタマイズ一覧と導入手順を統一管理しておくことで、突然生じる移行シナリオに備えておく必要があります。
SharePoint Server 2013 からは、ファーム ソリューションをバックアップし、別環境に復元できるようになっています。併せてご参考にしてください。
Backup-SPFarm -backupmethod full -directory C:\TEMP\ -item "farm\solutions"
(* 補足) 復元手順 2. 3. において、バックアップ データの復元とソリューションのインストール作業の順序は、どちらでも問題ありません。前もって計画的にカスタマイズをすべてインストールしてからデータを復元しても構いませんし、一度復元してから足らないカスタマイズをインストールしていっても構いません。
バックアップ データの復元時にカスタマイズがインストールされているか否かはチェックされません。あくまで実行時にチェックがかかり、インストールが不足している機能を使用した際にはエラーとなり、診断ログに記録されます。
追加情報 ファームを超えたバックアップ・復元に類似したシナリオとして、ファーム内におけるサーバーの障害復旧やサーバーの増設などがあります。この場合、構成ウィザードを実行してファームに参加した時点で、ソリューション パッケージが自動的にソリューションを展開しますので、再度インストール展開を実施する必要はありません。 ただし、手動でサーバーごとに物理ファイルに対するカスタマイズを実施している場合は、この後手動でカスタマイズを適用していただく必要があります。
認識しておきたい点
重要な点として、カスタマイズの内容は、カスタマイズに従事または展開を実施した当事者しか完全にはわからないということを認識しておく必要があります。例えば、カスタマイズに関する技術に精通した人は、大まかな実装と展開方法を推測することはできます。しかし、実際の利用者の特別な要件をカバーした場合や、開発者のスキル レベルなどによっては、通常想定される方法とは異なる実装になっている場合もあります。
このような独自の状況が生じることを想定し、カスタマイズを計画する際には、実現までの開発工数を考慮するだけではなく、保守時に生じる移行などの複雑化や修正プログラムの影響テスト、製品のメジャーバージョン アップグレード時の再テストなどのリスクをあらかじめ想定しておくことが重要です。
特筆すべきカスタマイズの種類
下記に特筆すべきカスタマイズについて記載します。
ソリューション パッケージ 通常、ソリューション パッケージは、何も特別な考慮は必要とせず、単純に展開するだけです。しかしながら、利用者の特別な要件を満たす場合や、開発者のスキルなどで、ソリューションを適切に展開するよう実装されておらず、一部の展開操作を手動で行う必要があるものも考えられます。こういった場合を考慮して、必ず導入手順書 (単純に展開するだけというメモだけでも OK) は抑えておくようにしてください。
サイトコンテンツのカスタマイズ SharePoint Designer で実施したページのカスタマイズ、表示テンプレートのカスタマイズはコンテンツ DB に格納されるため多くの場合バックアップに含まれます。ただし、特に移行時に URL など条件が変わった場合は、実装内容に合わせて動作確認を実施することをお勧めします。
InfoPath フォーム テンプレート InfoPath の場合も同様にテストしてください。特に URL が変わった場合は発行先やデータ接続などを新しい URL に変更したうえで再発行してください。 既存のフォーム (*.xml) はフォーム ライブラリの詳細設定画面より [ドキュメントへの再リンク] を実施して、再度関連付け直します。
ワークフロー SharePoint Designer で作成した 2010 形式ワークフローや実行中のワークフロー インスタンスの情報もバックアップに含まれます。
2013 形式ワークフローは外部のサービスであるワークフロー マネージャのデータベースに格納されるため SharePoint のバックアップには含まれません。ワークフロー マネージャという製品をバックアップする方法もありますがかなりの労力を必要とするため現実的ではありません。既存インスタンスをあきらめて、再利用可能なワークフロー テンプレートをサイトに再適用する方法が現実的と思われます。
物理ファイル カスタマイズ (非推奨) LAYOUTS (_layouts) や ISAPI (_vti_bin) 内のファイル、IIS 仮装ディレクトリ内に手動配置したファイルなど、サーバー上に展開されたファイルを直接更新したり、新規追加するような変更を加えた場合は、バックアップには含まれません。これらのファイルに対して手動でカスタマイズを再適用してください。
Web.config web.config を直接編集したカスタマイズについてですが、Technet に記載されている通り上書きでも構いませんが、もし web.config に Machine ID の記載があり、別のサーバーからバックアップを復元している場合は、サーバーの違いを認識できなくなり、不都合が生じます。この値を元の値から変更しないよう注意する必要があります。つまり、ファイルを上書きするよりも、カスタマイズを再適用する方が、多くの場合無難ということになります。 理想は、ソリューション パッケージの FeatureActivated イベントなどで下記 API を使用した設定変更にとどめたいところです。しかし、httpRuntime の executionTimeout 値をページごとに変更するなど、細かい変更点を全てプログラム化しておくことは開発及びテスト工数を考慮しても、難しい側面があります。
タイトル : SPWebConfigModification class アドレス : http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification(v=office.15).aspx
注意事項
ファイル システム バックアップは、カスタマイズ ファイルに限定して使用すること
バックアップ・復元のシナリオがあまりにも複雑なので、Web フロント エンド サーバーの GAC やシステム ファイル等をまるごとバックアップして復元することも考えやすいと思います。
しかし、一度でも SharePoint が構成ウィザードを実行して構成されれば、インストール ファイル以外の様々なファイルが生成され、これらは実行環境によって異なるキャッシュなどのファイルが生成されることになります。そのため、ファイル システム バックアップなどで、異なるサーバーで生成されたファイルなどを全部復元すると、移行時に不可解な現象が大量に発生するこ���が予想されますので絶対にやめてください。
Technet に記載されている通り、SharePoint を一度でも構成した環境でファイルシステム バックアップを使用する場合は手動でカスタマイズした一部の物理ファイルのみにとどめるべきです。
上記情報をご参考にしていただけますと幸いです。今回の投稿は以上になります。
こんにちは、SharePoint サポートの森村です。 Project Online の PWA (Project Web App) 関連 Web パーツをサイトのページに追加した場合に、条件によっては追加した Web パーツの表示が崩れる現象が発生する場合があります。 今回の投稿では、その現象への対処方法についてご案内いたします。(なお、Project Server 2013 では本現象は発生しません。)
Project Online をご利用いただいている場合、PWA 関連の Web パーツを SharePoint Online 上のサイトのページに追加することが可能となります。 ここで、Project Web App ではない Web パーツ (グリッドでの編集機能を保持するもの) が配置されている既存のページがあると仮定します。 このページを編集して、Project Web App の Web パーツを追加で配置した場合に本現象が発生します。
現時点で判明している詳細な発生条件は下記となります。
・前提条件
下記のカテゴリが [アプリ] の Web パーツがページ内に既に存在している ([アプリ] の内容を表示する Web パーツ)
・発生条件
ページの編集を実施して、下記のカテゴリが [Project Web App] の Web パーツを追加する
例えば、PWA サイト上でプロジェクトを発行時に作成されるプロジェクト サイトのページの場合、前提条件のうち [ドキュメント ライブラリ] のWebパーツが存在している状態となりますため、[詳細] 等の Project Web App の Web パーツを追加することで現象が発生します。
プロジェクト サイトのページに Project Web App の [詳細] Web パーツを追加した場合の表示
原因について
========
Web パーツをページに追加した際、必要なスタイル シート等を計算し、表示を行っておりますが、 上記の条件の場合、グリッドを表示するのに必要なスタイル シートが読み込まれないため、表示が崩れる現象が発生します。
この動作について対処方法をご案内します。
対処方法 : グリッドのスタイル シート情報を追加する
スクリプト エディター Web パーツを使用し、ページ内に本来追加されるべきスタイル シート情報をページ内に加えることで、表示が正常に行われます。
手順
====
この作業の後に、グリッドを使用する Project Web App の Web パーツ追加を行った場合は、Web パーツの表示が正常に行われます。
対処方法実施後の Web パーツの表示
いかがでしたか。
今回の投稿は以上です。
今回の投稿では、SharePoint Online または SharePoint 2013 サイト上のページからJSOM (JavaScript オブジェクト モデル) を使用し、リストアイテムを CRUD (Create, Read, Update, Delete) 操作する方法についてサンプルを記載します。
前回の REST に関する投稿で記載した通りですが、SharePoint のクライアント サイド API は、下記のような用途で使い分けされます。
CSOM
.NET ベースのクライアント サイド アプリケーションおよびプロバイダー ホスト型アプリ
JSOM
SharePoint サイト上のページから同じサイトのサイト コンテンツへのアクセス
REST (JavaScript)
SharePoint ホスト アプリのアプリ サイトからホスト サイトへのアクセス (ただし RequestExecutor を使用) (サンプル)
REST (コード)
.NET 以外のクライアント サイド アプリケーション およびプロバイダー ホスト型アプリ
今回のようなJSOM で自サイトに対してアクセスするサンプルを使用する機会は多いのですが、今すぐ動かすことができる形式で記載します。
実装しているサンプルプログラムの画面 UI と動作は、前回の REST (JavaScript) の投稿と全く同じです。プログラミングの記述形式だけが異なりますので比較しながらご参照ください。
タイトル : SharePoint REST サービスを使用したアイテムの CRUD 方法
アドレス : http://blogs.technet.com/b/sharepoint_support/archive/2014/11/08/sharepoint-rest-crud.aspx
事前準備
1. SharePoint のサイトのページ ライブラリ内にページを作成します。
2. スクリプト エディタ Web パーツを貼り付けます。
3. [Web パーツの編集]をクリックし、[スニペットの編集] をクリックします。
4. 表示されるテキスト内に下記のスクリプトを貼り付けます。
<script type="text/javascript" src="/SiteAssets/jquery-1.11.1.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.runtime.debug.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.debug.js"></script>
<script langauge="JavaScript">
<!--
var weburl = "https://tenant.sharepoint.com";
var listTitle = "customlist01";
var context;
var items;
$(document).ready(function () {
context = new SP.ClientContext(weburl);
GetListItems();
});
function GetListItems() {
items = context.get_web().get_lists().getByTitle(listTitle).getItems('');
context.load(items);
context.executeQueryAsync(renderData, onFail);
}
function QueryListItems() {
var title = $("#title").val();
if (title == "")
{
return;
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml("<View><Query><Where><Eq><FieldRef Name='Title'/><Value Type='Text'>" + title + "</Value></Eq></Where></Query></View>");
items = context.get_web().get_lists().getByTitle(listTitle).getItems(camlQuery);
function renderData(data)
var itemCollection = items.getEnumerator();
var strres = "";
// get the checkbox group
while (itemCollection.moveNext()) {
var item = itemCollection.get_current();
strres += "<tr onclick=\"setItemDate(" + item.get_id() + ", '" + item.get_item('Title') + "')\">";
strres += "<td>";
strres += item.get_id();
strres += "</td><td>";
strres += item.get_item('Title');
strres += "</td></tr>";
if (strres == "")
strres += "<tr><td>(Empty)</td></tr>";
strres = "<b>" + "Items on " + listTitle + "</b>"
+ "<br><br><table><tr><th>ID</th><th>Title</th></tr>"
+ strres + "</table>";
$("#P1").html(strres);
function onFail(sender, args) {
alert('Error:' + args.get_message());
function AddListItem() {
var listitemCreationInfo = new SP.ListItemCreationInformation();
var oitem = context.get_web().get_lists().getByTitle(listTitle).addItem(listitemCreationInfo);
oitem.set_item('Title', title);
oitem.update();
context.load(oitem);
context.executeQueryAsync(GetListItems, onFail);
function UpdateListItem() {
var id = $("#itemid").val();
var oitem = context.get_web().get_lists().getByTitle(listTitle).getItemById(id);
function DelListItem(){
var id = $("#itemid").val()
oitem.deleteObject();
function setItemDate(itemid, title)
$("#title").val(title);
$("#itemid").val(itemid);
-->
</script>
<div id="P1"></div>
<br>
<table><tr>
<td>itemid :</td><td><input type="text" id="itemid"></td>
</tr><tr>
<td>title : </td><td><input type="text" id="title"></td>
</tr>
</table>
<input type="button" onclick="QueryListItems()" value="Query">
<input type="button" onclick="AddListItem()" value="Add">
<input type="button" onclick="UpdateListItem()" value="Update">
<input type="button" onclick="DelListItem()" value="Delete">
5. サンプル内にて、緑字で記載した jQuery ライブラリの位置、サイトの URL、リストのタイトルなどを調整します。
(補足 : jQuery ライブラリのパスを指定するにあたっては、http://jquery.com/download/ からダウンロードし、同サイトのリソース ライブラリなどに保存しておき、保存したパスを取得します。)
6. ページの保存を実施します。
上記操作を実施することで、リストアイテムを表示、追加、更新、削除できる最小限のサンプル Web パーツが完成しました。
下記に本投稿に関連する参考情報を記載いたします。
タイトル : [方法] SharePoint 2013 の JavaScript ライブラリ コードを使用して基本的な操作を完了する アドレス : http://msdn.microsoft.com/ja-jp/library/office/jj163201(v=office.15).aspx
こんにちは、SharePoint サポートの森村です。 今回の投稿では、Project Server 2013 および Project Online の PWA (Project Web App) サイト上でグリッドの列ヘッダーの表示幅が狭く、列ヘッダー内の文字がすべて表示されない現象への対処方法についてご案内いたします。
PWA サイト上にはプロジェクト センター等、多数のグリッドを使用するページが存在します。 現時点の製品の動作として、下記 2 点のページにてグリッドの列ヘッダーの表示幅が狭く、また列の幅を変更することはできないため、文字がすべて表示されない現象が発生することを確認しています。
項目 1) リソース計画のページ (プロジェクトセンターから個々のプロジェクトを選択後に、[プロジェクト] タブから [リソース計画] をクリック)
項目 2) ポートフォリオ分析のリソース分析の要件の詳細ページ (リソース分析のページにて、[分析] タブ内の [要件の詳細] をクリック)
それぞれについて対処方法をご案内します。
項目 1) リソース計画のページ内の文字サイズ スタイルを変更する方法 (スクリプト エディタ Web パーツの使用)
スクリプト エディター Web パーツにてページ内のスタイル情報を上書きし、列ヘッダーの文字サイズを変更することで現象の回避を行います。こちらの方法は「リソース計画のページ」にて使用可能です。
本方法を実施した場合、リソース計画のページ内の日付情報以外の列ヘッダー部分 ([リソース名] 等) の文字サイズは変更されますが、リソース計画のページ以外には影響を与えません。 このため、ポートフォリオ分析の機能を使用していない場合は、こちらの対処方法のみをご利用いただくことをお勧めします。
手順 ====
<style type="text/css">
.ms-grid-col-header-normal
font-size:11px;
.ms-grid-col-header-normal-hover
.ms-grid-col-header-part-selected
.ms-grid-col-header-part-selected-hover
.ms-grid-col-header-all-selected
.ms-grid-col-header-all-selected-hover
</style>
対処方法実施後のリソース計画ページの表示
項目 2) PWA サイト全体のグリッドのヘッダー内の文字サイズ スタイルを変更する方法
上記のスクリプト エディター Web パーツを使用する方法は、ポートフォリオ分析のリソース分析ページには使用できません。ポートフォリオ分析のリソース分析ページの対処方法としては、スタイル ライブラリ内のスタイルシート情報を編集し、PWA サイト内のグリッドに表示される列ヘッダー内の文字サイズを変更することで、リソース分析のページの列ヘッダー内の文字がすべて表示される動作となります。
このため、本方法を実施した場合、併せて「リソース分析のページ」の現象も解消しますが、その他、PWA サイト内のプロジェクト センター等、グリッドを使用するページすべてにて、列ヘッダー内の文字サイズが変更されます。
対処方法実施後のリソース分析ページの表示
なお、本方法実施の場合、プロジェクト センター等のグリッドに表示される列ヘッダー内の文字サイズが変更されますが、「スクリプト エディター Web パーツを使用し、グリッドのヘッダー内の文字サイズ スタイルを変更する方法」の方法をプロジェクト センター等に適用することで、手間はかかりますがその他のページへの影響を防ぐことが可能です。
プロジェクトセンター等の場合は列ヘッダー内の文字サイズは 13px となっているため、例えば下記のスタイル情報をスクリプト エディター Web パーツに登録することで、以前と同じ表示となることをご確認いただくことが可能です。
<style type="text/css"> .ms-grid-col-header-normal { font-size:13px; } .ms-grid-col-header-normal-hover { font-size:13px; } .ms-grid-col-header-part-selected { font-size:13px; } .ms-grid-col-header-part-selected-hover { font-size:13px; } .ms-grid-col-header-all-selected { font-size:13px; } .ms-grid-col-header-all-selected-hover { font-size:13px; } </style>
(2014/12/22追記)
関連サポート技術情報が公開されましたので、ご案内させていただきます。
タイトル : Project Server 2013 の PWA サイト上にて、日付が表示されるセルの幅が狭く、日付が正しく表示されない現象が発生する
URL : http://support.microsoft.com/kb/3025500
こんにちは、SharePoint サポートの佐伯です。今回の投稿では、PowerShell を使用してリストの基本的な操作を実施する方法についてご紹介します。あまり PowerShell のご経験がない方にも分かりやすくするために、ここではシンプルなサンプルをご紹介していきます。目的の処理を実装する際にご参考になりましたら幸いです。実装の際は MSDN の資料も合わせてご参照ください。
■リストの作成
例) お知らせリストを作成する$web = Get-SPWeb http://sharepoint/sites/team$lists = $web.Lists$lists.Add("News", "お知らせ用のリスト", [Microsoft.SharePoint.SPListTemplateType]::Announcements)例) ドキュメント ライブラリを作成する$web = Get-SPWeb http://sharepoint/sites/team$lists = $web.Lists$lists.Add("会議資料", "会議資料管理用のライブラリ", [Microsoft.SharePoint.SPListTemplateType]::DocumentLibrary)参考 : その他の <リスト定義の種類> は下記の資料をご参照ください。SPListTemplateType enumerationなお、上記のサンプルでは、引数が (String, String, SPListTemplateType) の SPListCollection.Add メソッドを使用しています。その他の引数リストの異なるメソッドについては、下記の資料をご参照ください。SPListCollection.Add method■リストの取得
例) リストの GUID を取得する$web = Get-SPWeb http://sharepoint/sites/team$list = $web.GetList("/Lists/news")$list.ID
例) リストの GUID を取得する$web = Get-SPWeb http://sharepoint/sites/team$list = $web.Lists["News"]$list.ID参考 : その他の <リストのプロパティ> は下記の資料をご参照ください。SPList properties例) リストのプロパティ情報を *.txt ファイルに出力する$web = Get-SPWeb http://sharepoint/sites/team$list = $web.Lists["News"]$list >C:\news.txt■リストの編集
例) リストの表示名を変更する$web = Get-SPWeb http://sharepoint/sites/team$list = $web.Lists["News"]$list.Title= "ニュース"$list.Update()例) リスト��非表示にする$web = Get-SPWeb http://sharepoint/sites/team$list = $web.Lists["バックアップ管理用リスト"]$list.Hidden = $true$list.Update()参考 : その他の <リストのプロパティ> は下記の資料をご参照ください。SPList properties■リストの削除
例) リストを削除する$web = Get-SPWeb http://sharepoint/sites/team$list = $web.Lists["ニュース"]$list.Delete()- 補足目的の処理を実施した後は、SPWeb.Dispose メソッドを使用して SPWeb オブジェクトを閉じ、リソースを解放します。
例) カスタム リストを作成し、フォルダの作成を有効にする$web = Get-SPWeb http://sharepoint/sites/team$lists = $web.Lists$listGuid = $lists.Add("テスト用リスト", "テスト用に作成しました。", [Microsoft.SharePoint.SPListTemplateType]::GenericList)$list = $lists.GetList($listGuid, $false)$list.EnableFolderCreation= $true$list.Update()$web.Dispose()
こんにちは、SharePoint サポートの佐伯です。今回の投稿では、個人用サイトのマスター ページの編集についてとりあげます。個人用サイトの既定のマスター ページによって描画されている箇所は、簡単にまとめると以下になります。個人用サイトのマスター ページを編集することで、例えば以下のようにサイトの表示を変更することができます。マスター ページを編集してユーザーの個人用サイトの表示を変更したいとのお問い合わせをよくいただきますので、カスタマイズを行う上で参考にしていただきたい情報を以下に記載します。まずは、こちらの投稿で個人用サイトのアーキテクチャについてご確認ください。そちらに記載されているように、個人用サイトは 2 つのサイト コレクション (ホスト サイト コレクション、個別のサイト コレクション) で構成されています。この内容をふまえてお伝えしておきたいことは、SharePoint 既定の機能では、すべてのユーザーの個人用サイトのマスター ページに、同じ編集を一括で実施することはできないという点です。この内容について説明のため、ホスト サイト コレクションのマスター ページを編集してみましょう。編集後、ホスト サイト コレクション内のページに編集内容が反映されますが、ユーザー個別のサイト コレクションのマスター ページは変わりませんので、表示も既定の状態のままとなります。すべての個別のサイト コレクションのマスター ページにも同様の変更を反映させるには、それぞれのサイトで編集を実施する必要があります。Saeki の個別のサイト コレクションのマスター ページを同様に編集すると、以下のようになります。さらに、Mori の個別のサイト コレクションのマスター ページにも同様の編集を行います。このように、個別のサイト コレクションはユーザーごとに存在するので、マスター ページの編集によって、すべてのユーザーで同じ表示を実現するには、ユーザーの数だけ作業が必要となります。(SharePoint Designer で編集する場合は、以下のようにサイトを指定して開き、該当のマスター ページを編集します)そうなりますと、各サイトのマスター ページに編集を実施するのは大変です。さらに、今後運用を行っていくにあたり、変更が行われる度に大量のサイトに対して作業が必要となるのは負担が大きいと予想されます。なお、Visual Studio を使用してソリューションを開発するという方法も考えられますが、難易度は高いものになります。個別のサイト コレクションは各ユーザーが管理者となっており、サイトやライブラリを作成することができます。また、ページの編集やマスター ページの編集も可能で、ユーザー自身で表示を変更することができます。個別のサイト コレクションの管理は各ユーザーに任せて個人用サイトを有効に使ってもらい、共通して表示させたい内容については、すべてのユーザーがアクセスするホスト サイト コレクションの方に反映させるという運用がシンプルです。以上の点をふまえて、実施するカスタマイズ内容をご検討いただけますと幸いです。今回の投稿は以上です。
今回の投稿では、SharePoint Online または SharePoint 2013 サイト上のページから REST API を使用し、リストアイテムを CRUD (Create, Read, Update, Delete) 操作する方法についてサンプルを記載します。
今回紹介する方法は、SharePoint の REST サービスを理解する上で非常に重要であり、SharePoint アプリなどを作っていく前に一度経験しておいた方が良い内容です。ただし、今回ご案内するサンプルは、実際に使用するシナリオが限定されます。
SharePoint のクライアント サイド API は、下記のような用途で使用されます。
REST (JavaScript) SharePoint ホスト アプリのアプリ サイトからホスト サイトへのアクセス (ただし RequestExecutor を使用)
今回のような REST (JavaScript) の自サイトに対してアクセスするサンプルを使用する機会は非常に少ないと思います。このシナリオでは JSOM が多くの場合使用されますが、もちろん代わりに REST を使用することはできます。MSDN などの公開情報も実運用シナリオで使用するシナリオを公開しているためサンプルが少ないようですが、ここに備忘録として記載しておきます。特に .NET 以外の開発環境で使用する際などにお役立ていただけますと幸いです。
2014/11/15 更新 JSOM を使用したサンプルも公開しました。下記と比較しながらご参考にしてください。
タイトル : SharePoint JSOM を使用したアイテムの CRUD 方法アドレス : http://blogs.technet.com/b/sharepoint_support/archive/2014/11/15/sharepoint-jsom-crud.aspx
var listTitle = "customlist01"
$.ajax({
url: weburl + "/_api/Web/Lists/GetByTitle('" + listTitle + "')/Items",
type: "GET",
headers: {
"accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
"x-requestforceauthentication": true
},
success: this.renderData,
error: function (xhr) { alert(xhr.status + ": " + xhr.statusText) }
function QueryListItems() { var title = $("#title").val(); if (title == "") { GetListItems(); return; }
$.ajax({ url: weburl + "/_api/Web/Lists/GetByTitle('" + listTitle + "')/Items?$filter=Title%20eq%20'" + encodeURIComponent(title) + "'", type: "GET", headers: { "accept": "application/json;odata=verbose", "Content-Type": "application/json;odata=verbose", "x-requestforceauthentication": true }, success: this.renderData, error: function (xhr) { alert(xhr.status + ": " + xhr.statusText) } });}
for (i = 0; i < data.d.results.length ; i++)
strres += "<tr onclick=\"setItemDate(" + data.d.results[i].Id + ", '" + data.d.results[i].Title + "')\">";
strres += data.d.results[i].Id;
strres += data.d.results[i].Title;
var myDigest = null;
function runWithFormDigest(fn){
if (myDigest == null)
url: weburl + "/_api/contextinfo",
type: "POST",
contentType: "application/x-www-url-encoded",
dataType: "json",
contentLength: 0,
beforeSend: function (xhr) { xhr.withCredentials = true; },
success: function (data) {
if (data.d) {
myDigest = data.d.GetContextWebInformation.FormDigestValue;
fn();
else
runWithFormDigest(function(){
$.support.cors = true;
data: JSON.stringify({ '__metadata': { 'type': 'SP.ListItem' }, 'Title': title }),
"x-requestforceauthentication": true,
"X-RequestDigest": myDigest
success: function (xhr) { GetListItems() },
url: weburl + "/_api/Web/Lists/GetByTitle('" + listTitle + "')/Items(" + id + ")",
"X-HTTP-Method":"MERGE",
"X-RequestDigest": myDigest,
"IF-MATCH": "*"
"X-HTTP-Method":"DELETE",
タイトル : SharePoint 2013 REST サービスの概要
アドレス : http://msdn.microsoft.com/ja-jp/library/office/fp142380(v=office.15).aspx
こんにちは、SharePoint サポートの森 健吾 (kenmori) です。今回の投稿では、SharePoint のドキュメント パーサーについてご説明します。
ドキュメント パーサーとは
ドキュメント パーサーは標準で有効化された、ファイル内に持つプロパティ情報と、SharePoint のアイテムが持つフィールド情報を同期しようとする仕組みです。
私たちは何気なくドキュメントをアップロードしていますが、SharePoint サイトにファイルをアップロードし、プロパティの編集画面を経ると、前後でファイルのバイナリを比較すると細かな差異が確認できることに気づきます。これは、ファイルのアップロード後にプロパティの編集画面で、コンテンツ タイプを選択したり列情報を書き込んだりすると、ファイル 内部にドキュメント ライブラリのスキーマに合わせてプロパティ データが格納されることに起因します。
主に、データの同期の方向性に応じて、2 つの用語がありますので、以下に記載します。
1. 昇格 ドキュメント (バイナリ) の持つプロパティ情報をアイテムのフィールド (メタデータ) にコピーします。 2. 降格アイテムのフィールド (メタデータ) をドキュメント内のプロパティ (バイナリ) にコピーします。
基本動作として、ファイルをアップロードした時に 1. 昇格、アイテムのプロパティを書き換えた際に 2. 降格が発生します。
ただし、それ以外にも変則的な条件で動作する例として、リストの列定義などのスキーマ情報が変更された後で、ファイルが最初にダウンロードされたときなどにも整合性を保とうとして同期処理が動きます。
同期する対象の列は、SharePoint 側に存在する列のみです。SharePoint のコンテンツ タイプまたはライブラリの列に存在しない列情報は同期されません。ドキュメント パーサーはライブラリ側に列を自動で作成することはしません。
SharePoint は、メタデータとしてデータを保持した方が、アプリケーションとして連携しやすいことは容易に想像できます。リストビューからの絞り込みやソート、ワークフロー、管理プロパティを使用した検索など、毎回ファイルのバイナリ データを読み取って処理を実施する場合、このレベルでの汎用的なドキュメント管理ソリューションの実現は不可能だと想像できます。
なお、このドキュメント パーサーを使用したアイデア ソリューションは、過去に本ブログにも投稿がありますので、ご紹介します。
タイトル : Excel 2013 セルと SharePoint ドキュメント ライブラリ列の連携方法 アドレス : http://blogs.technet.com/b/sharepoint_support/archive/2014/06/27/excel-2013-sharepoint.aspx
また、ドキュメント パーサーは、ドキュメント内にあるハイパーリンクを代替アクセス マッピングを使用して調整するなど、他にも様々な動作を実施しています。
ドキュメント パーサーが登録されているファイルの種類
SharePoint は、ドキュメント パーサーを前提の機能として様々な仕組みを実装しています。ドキュメント パーサーは拡張子ごとに専用のドキュメント パーサー (COM オブジェクト) が登録されています。
上記は拡張・取り外し可能なドキュメント パーサー (SPWebService.PluggableParsers) の一覧です。
以下に標準でドキュメント パーサーが登録されている拡張子を列挙します。
・Office ファイル (97-2003 形式, OpenXML 形式) ・*.css, *.js ・*.html, *.mthml ・*.xml, *.udcx (InfoPath など) ・*.dwp, *.webpart, *.stp, *.wsp (ギャラリーに保存するファイル) ・画像ファイル ・*.xfp・その他
下記に、製品に組み込まれている特筆すべきパーサーを記載します。
XML ファイルInfoPath XML がドキュメント パーサーに依存して XML データ内のフィールドとアイテム列を連携していることは想像できた方も多いと思います。 ただし、SharePoint は XML ファイルのアップロード時に、さらに該当ファイルが InfoPath で生成した XML ファイルであるかどうかを確認し、InfoPath であると判断できる場合はアイテムの ProgId をアイテムの列に登録することも実施しています。XML はアプリケーションごとに様々な定義があるため、定義ごとにファイルを開くことのできるアプリケーションは多数存在します。この処理が動作しなければ、エクスプローラが担っているように、ドキュメント ライブラリがファイルの内容から、XML ファイルを開くアプリケーションを区別できません。この処理が実行されなければ、ドキュメント ライブラリに表示されるファイルのアイコンも標準のものになってしまいます。
その他、ドキュメント パーサーを効果的に利用している機能として、フォーム ライブラリのドキュメントへの再リンク機能があり、ドキュメント パーサーを使用し、TemplateUrl 列に *.xsn ファイルへの URL を一括で書き込むことで、*.xml ファイルの本文にある *.xsn ファイルへのパスを間接的に更新できるよう実装されています。
STP, WSP, WEBPART, UDCX ファイル意外だと思われる拡張子として、SharePoint がシステム上使用するリスト テンプレート ファイル (*.stp), サイト テンプレートおよびサンドボックス ソリューション (*.wsp), Web パーツ ファイル (*.webpart)、データ接続ファイル (*.udcx) などがあります。
実はドキュメント パーサーが、それぞれリスト テンプレート ギャラリー、ソリューション ギャラリー、Web パーツ ギャラリー、データ接続ライブラリにアップロードした際に、これらのファイルからメタデータを各ギャラリーの列に登録しています。この値が書き込まれないとただのファイルとしてライブラリに格納されているだけとなり、リスト、サイト、ソリューション、Web パーツ、データ接続ファイルを使用できない結果となります。
その他サード パーティのドキュメント ビューアを開発している開発者が、SharePoint 上でのドキュメント管理機能を実装したい場合、カスタム ドキュメント パーサーを開発することもできます。
この開発は On-Premises のみです。詳細な開発手法は割愛しますが、開発方法としてはISPDocumentParser インターフェイスを継承した COM コンポーネントを登録し、SharePoint Server 2010 以降ではSPWebService.PluggableParsers に定義を登録します。SharePoint 2007 の時には docparse.xml に定義を記載します。
ドキュメント パーサーの ON/OFF についてPowerShell を使用して、サイト単位でドキュメント パーサーを無効にすることは可能です。この設定変更を実施する目的としては、アイテム・フォルダに対するプロパティの変更、承認・却下などの操作によりエラーが発生した場合や、ファイルの内容が意図せず書き換わってしまった際に切り分けや一時回避策として使用する際に有効となります。
もちろん、ドキュメント パーサーを使用せず、純粋にドキュメントをドキュメント ライブラリ上でアップロードされたままのファイルを格納したいというご要件の場合にも有効となるでしょう。
(注意) SharePoint Online では、本設定を変更することはできません。
1) サイト単位ですべてのパーサーを OFF にする方法
SharePoint 管理シェルを起動して、以下のコマンドを実行します。
$web = Get-SPWeb http://sharepoint/sites/siteA/subsiteB
$web.ParserEnabled = $false
$web.Update()
ただし、ドキュメント パーサーは多くの機能の前提条件になります。影響範囲を考慮するにあたっては、ドキュメント パーサーが同期するファイルの種類は、前項に記載した通り多岐に渡ることを念頭に置く必要があります。
特に、SharePoint サイト管理に重要なギャラリー等が使用できなくなることを考慮すると、サイトコレクションの様々な機能が集中するトップ サイトでの無効化は避けたいところです。
例えば、ドキュメントをストアすることを目的としたドキュメント ライブラリのみを持つサブ サイトなどであれば、比較的このような設定変更は影響を抑えられると考えられます。
2) ファーム全体で特定の拡張子に対するパーサーを OFF にする方法
$webservice = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$webservice.PluggableParsers.Remove("docx")
$webservice.Update()
適用範囲がファーム全体になります。SharePoint が使用するギャラリー等への影響を防ぐことができますが、ファーム全体で OFF にするということが適切かを事前に確認する必要があります。
まとめ
ドキュメント パーサーの動作を把握したり、設定変更を試みる場面はトラブルシューティングに限られると思います。しかしながら、必要となった場合には本投稿をご活用くださいますようお願いいたします。最後に本投稿を作成するのに参照したページを下記に記載します。
タイトル :ドキュメント プロパティの昇格と降格 アドレス : http://msdn.microsoft.com/ja-jp/library/aa543341(v=office.14).aspx
タイトル : カスタム ドキュメント パーサー アドレス : http://msdn.microsoft.com/ja-jp/library/aa544149(v=office.14).aspx
タイトル :ドキュメント情報パネルとドキュメント プロパティ アドレス : http://msdn.microsoft.com/ja-jp/library/bb447589(v=office.14).aspx
タイトル :ドキュメント プロパティとコンテンツ タイプ アドレス : http://msdn.microsoft.com/ja-jp/library/bb447539(v=office.14).aspx
こんにちは、SharePoint サポートの佐伯です。今回の投稿では、コントロール表示テンプレートを編集して、絞り込み Web パーツのデザインを変更する方法についてご紹介します。絞り込み Web パーツ全体の表示はコントロール表示テンプレートによって制御されています。そのため、絞り込み Web パーツの全体的なレイアウトやデザインを変更したい場合は、コントロール表示テンプレートを編集します。以下に例をあげて説明していきますので、ご参考にしていただけますと幸いです。例) 絞り込み Web パーツに枠線を表示する絞り込み Web パーツの右側に枠線が表示されるよう表示テンプレートを作成しましょう。一からファイルを作成するよりも、既定の表示テンプレートをコピーして編集する方が簡単です。下記に手順をご紹介します。1. [サイトの設定] – [Web デザイナー ギャラリー] – [マスター ページ] をクリックし、マスター ページ ギャラリーを開きます。2. [Display Templates]、[Filters] の順にフォルダを展開し Control_Refinement.html ファイルをダウンロードします。3. ダウンロードした Control_Refinement.html ファイルのファイル名を変更します。Control_Refinement_Border.html とします。4. Control_Refinement_Border.html ファイルを開き、<body> タグの直後にある <div> の id に、この *.html ファイルのファイル名を記述します。<body> <div id="Control_Refinement_Border">5. <title> には表示テンプレートのタイトルを記述します。<title>絞り込み(枠線付き)</title>6. 右側に枠線を表示するため、以下のようにスタイルを追加します。(変更前)<div class="ms-ref-ctrl" id="Refinement" name="Control">(変更後)<div class="ms-ref-ctrl" id="Refinement" name="Control" style="border-right:1px solid #cccccc;">5. Control_Refinement_Border.html ファイルを保存します。これでコントロール表示テンプレートの編集は完了です。- 表示テンプレート ファイルのアップロードと適用1. 作成した Control_Refinement_Border.html ファイルをマスター ページ ギャラリーの [Display Templates] – [Filters] フォルダにアップロードします。2. アップロード後のプロパティの編集画面で正しく設定が反映されていることを確認し、保存します。3. 絞り込み Web パーツを配置したページを開き、ページ右上の [ページの編集] をクリックします。4. 絞り込み Web パーツの [Web パーツの編集] をクリックします。5. [コントロール] 項目で、今回作成したコントロール表示テンプレートを選択します。6. Web パーツを保存し、ページを保存します。以上で、コントロール表示テンプレートの設定は完了です。上記では簡単なサンプルをご紹介しましたが、その他にも背景色を変えたり、絞り込み条件を横並びの表示に変更したりと、表示テンプレートを編集することで、絞り込み Web パーツ全体の表示を変更することができます。今回の投稿は以上です。検索のカスタマイズや設定に関する過去の投稿は以下の通りです。SharePoint 2013 検索結果 Web パーツの下部にあるリンクの表示/非表示を切り替えるSharePoint 2013 検索ページに絞込み条件を追加するSharePoint 2013 検索ナビゲーションでバーティカル検索を実現するSharePoint 2013 フィルター表示テンプレートをカスタマイズして絞り込み条件数を表示するSharePoint 2013 絞り込み Web パーツの表示を制御する表示テンプレートSharePoint 2013 表示テンプレートを編集して検索結果アイテムをグリッド テーブルで表示するSharePoint 2013 検索結果が何件目または何ページ目のアイテムであるかを表示するSharePoint 2013 検索結果のホバー パネルにカスタムのアクションを追加するSharePoint 2013 コントロール表示テンプレートを使用して検索結果アイテムの一覧表示のデザインを変更するSharePoint 2013 クエリ テキストを編集してドキュメントを対象とした検索を行うSharePoint 2013 検索ボックスの初期値を変更するSharePoint 2013 検索結果のファイルをクライアント アプリケーションで開くSharePoint 2013 検索結果で検索語句を強調するカスタマイズSharePoint 2013 コンテンツ検索 Web パーツでカスタムの管理プロパティを表示するSharePoint 2013 お知らせアイテムを新着順に表示するコンテンツ検索 Web パーツを作成するSharePoint 2013 サイトの表示言語に合わせて検索結果にプロパティ名を表示するSharePoint 2013 検索結果のホバー パネルをカスタマイズするSharePoint 2013 すべての検索結果の種類に共通する表示をカスタマイズするSharePoint 2013 アイテム表示テンプレートを使用して検索結果の表示をカスタマイズするSharePoint 2013 検索結果の表示を制御する表示テンプレート
今回の投稿では、SharePoint Online または SharePoint Server 2013 のページをフレーム内で表示すると "このコンテンツはフレーム内に表示できません。" とエラー発生する現象について原因と対処策をご説明します。SharePoint Online や複数 On Premises など、様々な環境間でのハイブリッド運用シナリオが増えてきており、特に下記のようなシナリオで IFRAME を使用することが一般的となっています。
・ページ作成者が他ファームやテナントの Web パーツを表示する。・アプリケーション開発者が、クロスドメイン制約をクリアするため JavaScript プログラミングでフレーム間通信 (window.postMessage) を実装する。
このような状況において、突然本投稿のような現象に遭遇することは多いと思います。この投稿が問題解決の手掛かりにしていただけますと幸いです。
発生現象 SharePoint Online または SharePoint Server 2013 では、フレームからページが呼び出された際に、親ウインドウ (呼び出し元) ページの URL が同じドメイン内でない場合は、フレーム内にページを表示することをブロックする動作となりました。 SharePoint 標準 Web パーツである ページ ビューア Web パーツを使用した場合でも、この動作の例外にはならず、別ファーム (または別テナント) にあるページを表示することはできません。
HTML
<html> <iframe src="https://tenant.sharepoint.com/DocLib1/test.aspx" width="100%" height="100%"></iframe> </html>
画面
上記画面のように "このコンテンツはフレーム内に表示できません。" というエラーが表示されます。
動作変更の経緯
このフレーム内のコンテンツを非表示に制御する仕組みは RFC 7034 においても規定され、クリック ジャッキングと呼ばれる攻撃に対処するために導入されました。
タイトル : HTTP Header Field X-Frame-Options アドレス : http://tools.ietf.org/html/rfc7034
この規格によるブラウザーのセキュリティ強化を使用し、SharePoint Server は、HTTP 応答ヘッダーに X-FRAME-OPTIONS として SAMEORIGIN を指定することで、親フレームと URL のドメイン部分が異なる場合は、ブラウザーのフレーム内にコンテンツを表示させないよう制御します。 応答ヘッダーについては、ネットワーク パケットや Fiddler トレースを使用することで、下記の様に確認が可能です。
HTTP/1.1 200 OKCache-Control: private, max-age=0Content-Type: text/html; charset=utf-8Expires: Fri, 10 Oct 2014 15:02:23 GMTLast-Modified: Sat, 25 Oct 2014 15:02:23 GMTServer: Microsoft-IIS/7.5X-SharePointHealthScore: 0X-AspNet-Version: 4.0.30319SPRequestGuid: 14a0c59c-a022-1000-988b-5dfbe61b59a8request-id: 14a0c59c-a022-1000-988b-5dfbe61b59a8X-FRAME-OPTIONS: SAMEORIGINSPRequestDuration: 432SPIisLatency: 0
上記赤字で記載されている X-FRAME-OPTIONS 応答ヘッダーはブラウザーが、ページをフレーム内に表示するか制御するための設定を持つことができます。SharePoint が利用している主な設定値は下記ですが、応答ヘッダーが省略された場合にはすべて許可となります。
DENY 完全に禁止する SAMEORIGIN アドレスのドメイン名が同じ場合のみ許可します
SharePoint Online の認証画面などでは DENY が使用されています。その他のページは SAMEORIGIN が使用されます。 SAMEORIGIN が指定された場合、https://tenant.sharepoint.com 内のページをフレーム内に表示する場合は、標準では https://tenant.sharepoint.com 内のページ コンテンツからのみに限定される動作となります。
X-FRAME-OPTIONS は近年追加されたセキュリティに対する比較的新しい機能となります。最新のブラウザーは、ほとんどが X-FRAME-OPTIONS 応答ヘッダーに対応しています。Internet Explorer については IE8 から対応しています。
タイトル : Internet Explorer 8 の新機能 アドレス : http://msdn.microsoft.com/ja-jp/library/cc288472(v=vs.85).aspx#%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3%e3%81%8a%e3%82%88%e3%81%b3%e3%83%97%e3%83%a9%e3%82%a4%e3%83%90%e3%82%b7%e3%83%bc
補足 : クリックジャッキング ユーザーに気づかれないように、一般的には以下のようにページ上に透過処理させたページを重ねることで、ユーザーを騙して他のページを操作させる攻撃手法です。 ユーザーがインターネット上で色々なサービスにログインしたまま様々なページを閲覧していると、ユーザーのクリック操作が意図しない別ページ上のクリックと判断されてしまい損害を受ける状況が想定されます。このような攻撃からユーザーを守るために、サービスを提供する立場としては、できる限り X-FRAME-OPTIONS ヘッダーなどを指定し、ページのフレームによる用途を限定することが必要になります。
対処策
別ドメイン ページのフレームからアクセスを許可するページを作成する場合、AllowFraming コントロールを使用します。AllowFraming コントロールはフレーム専用のページのみに使用してください。絶対にマスタページなどで使用しないでください。
タイトル : AllowFraming class アドレス : http://msdn.microsoft.com/en-us/library/office/microsoft.sharepoint.webpartpages.allowframing(v=office.15).aspx
手順1. SharePoint Designer でページを開きます。 2. ページヘッダーに Microsoft.SharePoint.WebPartPages 名前空間に対する参照がない場合は下記を追加します。 <%@ Register tagprefix="WebPartPages" namespace="Microsoft.SharePoint.WebPartPages" assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
3. ページ内に AllowFraming コントロールを追記します。 <WebPartPages:AllowFraming runat="server"/>
4. 下記のように追記したら、上書き保存します。
- 補足 ・マスタ ページを参照した Web パーツ ページなどで実施する場合は、いずれかの PlaceHolder タグの子要素として AllowFraming コントロールを記載します。 ・SPD による保存のタイミングで、WebPartId 属性などが付加されることがありますが、特に気にする必要はありません。
5. この対処を実施後、冒頭に紹介した IFRAME ページから呼び出します。
IFRAME 内に SharePoint Online 上に保存されたページが表示できました。
補足AllowFraming は、SharePoint のページ ランタイム上で X-FRAME-OPTIONS: SAMEORIGIN 応答ヘッダーを返す動作を除外できます。下記のいずれかを満たすことが、SharePoint のページ ランタイムによる X-FRAME-OPTIONS 応答ヘッダーを返す除外条件です
・ページが 2013 モードにビジュアル アップグレードされている ・HTTP 要求ハッシュ内に AllowFraming コントロールが生成する特殊なキーを含んでいない。
ただし、ビジュアル アップグレードについては前バージョンから使用していることが前提でありアップグレードしないことは推奨されません。
注意事項 ページ作成者は、本対処策によりページ単位でクリック ジャッキング対策を無効にすることを考慮し、悪意のある第三者のページから、ユーザー データが改ざんされないように注意する必要があります。 そのため、下記の点については十分注意したページにすることをお勧めします。
・フレーム内にコンテンツを表示するページであれば、読み取り専用のビューとして作成する。 ・クロスドメイン アクセスのためのデータ取得および更新ページであれば、window.postMessage メソッドを使用して処理要求を受信し、結果を返すのみに限定する。 ユーザーがクリックできる形で、デバッグ用などの無用なコントロールを配置しない。
つまり、画面操作でデータ更新する動作が存在しないページについては、クリック ジャッキングによる攻撃の対象にはなりません。
なお、AllowFraming はあくまでクリックジャッキング対策であるフレーム内に別ドメインのページを表示するかどうかの制御のみに影響します。 ページ単位でこの設定を解除して、フレーム内にページを表示するようにできても、クロスサイト スクリプティング対策 (異なるドメインのフレームには JavaScript で DOM アクセスできない制御) には影響しませんのでご安心ください。
こんにちは、SharePoint サポートの佐伯です。検索結果の表示は表示テンプレートと呼ばれるテンプレートで制御されていますが、サイト コレクションの機能 発行インフラストラクチャが非アクティブの場合の表示テンプレートの編集について、この投稿で補足します。表示テンプレートはマスター ページ ギャラリーに格納されています。既に存在している表示テンプレートを編集したい場合は、目的のファイルをダウンロードして編集し、上書きアップロードします。新しく表示テンプレートを作成する場合は、既定の表示テンプレートをコピーして作成する方法が簡単です。発行インフラストラクチャがアクティブの場合は、表示テンプレートは以下のように *.html ファイルと *.js ファイルが存在します。発行インフラストラクチャが非アクティブの場合は、表示テンプレートは以下のように *.js ファイルのみが存在します。どちらの場合も検索結果に反映されるのは *.js ファイルに記述された内容です。発行インフラストラクチャがアクティブの場合は *.html ファイルと *.js ファイルは関連付けられており、*.html ファイルを編集してアップロードすると、*.js ファイルに変更内容が反映されます。表示テンプレートに加えたい変更を *.html ファイルで編集すると、通常の html ファイルと同様に HTML や JavaScript、CSS を記述して編集できるので便利です。発行インフラストラクチャが非アクティブの場合は、*.js ファイルのみになりますので、既存のものを変更する場合は *js ファイルをダウンロード、編集、上書きアップロードし、新しく作成する場合は既存の *.js ファイルをコピーして新たに *.js ファイルを作成する方法があります。編集内容にはよりますが、*.js ファイルを編集するよりも、上述のように *.html ファイルを編集する方が簡単です。そのため、発行インフラストラクチャが非アクティブの環境で表示テンプレートを追加/変更する際は、発行インフラストラクチャがアクティブのサイトで *.html ファイルを作成し、このファイルのアップロード時にあわせて作成される *.js ファイルを取得します。この *.js ファイルを発行インフラストラクチャが非アクティブであるサイトにアップロードする方法をおすすめします。※表示テンプレートの *.html ファイルの編集方法やサンプルについては、過去の投稿で詳しく説明していますのでご参照ください。
<<*.js ファイルをアップロードする際の注意点>>マスター ページ ギャラリーに *.js ファイルをアップロードした後は、プロパティの編集画面が表示されます。ここを適切に設定しないと、目的の表示テンプレートと正しく認識されず、[Web パーツの編集] で表示テンプレートが選択できませんので、ご注意ください。コンテンツ タイプは表示テンプレート コードにします。その他の項目は要件に合わせて設定してください。今回の投稿は以上です。
こんにちは、SharePoint サポートの森 健吾 (kenmori) です。今回の投稿では、SharePoint Online を使用するにあたり PowerShell を使用するまでの準備と実践方法について下記にまとめさせていただきます。SharePoint Online に対し PowerShell コマンドレットを使用する方法は、いくつかの方法があります。下記に概要を記載します。
概要
事前準備 Windows PowerShell 3.0 について
方法 1. SharePoint Online 管理シェルを使用する 2. SharePoint Online SDK を使用する
SharePoint Online テナントに対してグローバル管理者の権限を所有し、用意された管理タスクを実行する場合、方法 1. を使用するのが工数も少なく効率的です。 ただし、管理運用上でのニーズを満たすためには、現実的にほとんどの場合方法 2. を使用せざるを得ないものと思われます。方法 2. はサイトコレクション管理者や一般ユーザーでも使用可能な方法です。
SharePoint On-Premises で使用する SharePoint 管理シェルと大きく異なる点は、これらのコマンドはサーバーにリモート接続して処理を呼び出す形式のクライアント サイドで実行されるスクリプトであるという点です。
タイトル : SharePoint Online 管理シェルの概要 アドレス : http://technet.microsoft.com/ja-jp/library/fp161388(v=office.15).aspx
事前準備 : Windows PowerShell 3.0 について
Windows 7 以前の PC で使用する場合は、前提条件を満たすため Windows Management Framework 3.0 から Windows PowerShell 3.0 をインストールします。
タイトル : Windows Management Framework 3.0 アドレス : http://www.microsoft.com/en-us/download/details.aspx?id=34595
現在のバージョンを確認するためには、PowerShell を起動し $PSVersionTable コマンドを実行します。画面上に表示される PSVersion と CLRVersion を確認しましょう。
Windows 7 以前の PC においては、既定では SharePoint Online に対する PowerShell 実行の前提となる PowerShell バージョン (PSVersion) 3.0 および .NET Framework のCLR バージョン (CLRVersion) が4.0 以上という前提条件を満たしません。前提条件を満たさないことを確認した場合のみ、Windows PowerShell 3.0 をインストールします。
旧バージョン SharePoint On-Premises 環境と併用での注意
SharePoint On-Premises とのハイブリッド環境構築において、.NET Framework 3.5 (Major Version は 2.0) ベースで動作するSharePoint Server 2010 以前の On-Premises 環境に Windows Management Framework 3.0 をインストールしたくなると思います。 しかし、SharePoint On-Premises のオブジェクト モデルは、自身が想定したランタイム バージョンのメジャーバージョンでないとエラーを発生させる動作となります。SharePoint Server 2010 のオブジェクト モデルは、ランタイム バージョンが 2 (2.0, 3.0, 3.5) でないとエラー発生させますので動作しません。 そのため、PowerShell 3.0 を導入した場合、SharePoint Online へのスクリプトが使えるようになる反面、SharePoint On-Premises 側の管理シェルが逆に動作しなくなります。PowerShell の構成ファイルに supportedRuntime 要素を記載してサイドバイサイド実行させることができますが、構成が複雑となりますためあまりお勧めしません。
タイトル : <supportedRuntime> 要素アドレス : http://msdn.microsoft.com/ja-jp/library/w4atty68(v=vs.110).aspx
以下より、実際に PowerShell を使用して、SharePoint Online に対してコマンドを実行していきます。
方法 1. SharePoint Online Management Shell
1) 下記からダウンロードして、コマンドレットをインストールします。
タイトル : SharePoint Online Management Shell アドレス : http://www.microsoft.com/en-us/download/details.aspx?id=35588
2014/11/26 更新SharePoint Online Management Shell (x86 版) は問題があったため、現在提供されておりません。ダウンロード可能になるまで、いましばらくお待ちください。
2) Connect-SPOService を実行して、管理サイトに接続します。
グローバル管理者権限のあるユーザー名とパスワードを指定します。
3) 接続後、コマンドを実行します。
PS> Get-SPOSite
下記に様々な用途ごとに使用できる SPO コマンドレットのリファレンスを紹介しますので、ご参考にしてください。
タイトル : SharePoint Online リファレンス用の Windows PowerShell アドレス : http://technet.microsoft.com/ja-jp/library/fp161397(v=office.15).aspx
方法 2. SharePoint Online Client Component SDK
1) 下記サイトからSDK をダウンロードします。
タイトル : SharePoint Online Client Components SDK アドレス : http://www.microsoft.com/en-us/download/details.aspx?id=42038
2) *.ps1 ファイルを実行する場合は、下記のように PowerShell の実行ポリシーを変更しておきます。(SDK を使用する場合、ほとんどはスクリプトを作りこむことになるため、必須の手順となります。)
PS>Set-ExecutionPolicy RemoteSigned
タイトル : Set-ExecutionPolicy コマンドレットの使用 アドレス : http://technet.microsoft.com/ja-jp/library/ee176961.aspx
3) SharePoint Online SDK が公開しているアセンブリを参照し、オブジェクトを操作してスクリプトを実装します。
PowerShell サンプル *.ps1
param (
$siteUrl # 引数としてサイトの URL を受け取ります。
)
# 必要なアセンブリをロードします [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
# SPO に接続します $context = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
#ユーザー名入力を促します。 Write-Host "Please input user name : " $username = read-host
# パスワード入力を促します。 Write-Host "Please input password : " $password = read-host -assecurestring
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password) $context.Credentials = $credentials
# リストの一覧を取得し、タイトルを列挙します。 $lists = $context.Web.Lists $context.Load($lists) $context.ExecuteQuery() $lists | select Title
PowerShell コマンドは、開発環境も不要で、運用上の処理を自動化する上で非常に便利です。 これからも当ブログでは PowerShell コマンドのサンプルなどは紹介していく予定ですので、ご参考にしていただけますと幸いです。 今回の投稿は以上になります。
こんにちは、SharePoint サポートの森 健吾 (kenmori) です。今回の投稿では、InfoPath Web ブラウザー フォームを SharePoint Online で使用する際における制限事項について、検討段階であらかじめ認識できるよう下記にまとめさせていただきます。
InfoPath ブラウザー フォームは On-Premise 環境を前提に開発が進められ、開発経験がなくてもフォーム テンプレートを直感的かつ効率的に作成できる点で多大な人気を集めた製品です。ただし、クラウドが前提になった場合、その技術的な特性上、インターネット経由のデータ アクセスや、テナント形式による共通のサーバー リソースの使用制限、ファーム レベルの設定変更不可など、環境面の相違により様々な制限があります。
今回の投稿では、一般的に SharePoint Online において、InfoPath ブラウザー フォームを採用するにあたり、あらかじめどのような点を注意すべきかについて記載します。
制限事項 1. 完全信頼フォームは使用できません。
SharePoint Online では、カスタムのファーム ソリューション (完全信頼ソリューション) を展開することができません。ファーム ソリューションを導入すれば、ファーム上のあらゆるデータにアクセスできるだけでなく、すべての種類のコードをサーバー上で実行することが可能です。
このような仕組みを許可した場合、複数の顧客がテナントと呼ばれる区画を使用するサーバーに共存するモデルにおいて、セキュリティを維持することは不可能です。
InfoPath フォームを完全信頼フォームとして発行した場合、内部的にはソリューション パッケージに変換され、ファームソリューションとして展開されます。この技術的な機構に起因し、SharePoint Online では管理者承認用フォーム テンプレートを使用できません。
上記画面のように InfoPath 側で管理者承認用フォーム テンプレートとして発行操作できても、SharePoint Online には、その発行によって生成されたフォーム テンプレートをアップロードできる場所がありません。
制限事項 2. データ接続 (Web サービス接続) について
Web サービスに対するデータ接続については、現実的に匿名認証で公開された Web サービスに限定されます。
SharePoint Online からインターネット経由でデータアクセスを実施する場合、異なる場所のネットワークに接続することが前提となりますため、Web アプリケーションの認証方式として、匿名認証、フォーム認証、フェデレーション認証などが前提となります。
しかしながら、InfoPath フォームのデータ接続時の偽装は Windows 認証か SQL 認証しか対応しておりません。InfoPath はアプリとして公開されていませんので、OAuth を使用した一時アクセス許可を得ることもできません。結果的に、InfoPath ブラウザー フォームのデータ接続は SharePoint Online においては実質上匿名認証でホストされたサービスに対してしか使用できません。
また、制限事項 1. にも記載した通り、完全信頼フォームを使用できないため、Visual Studio Tools for Application (VSTA) で実装されたコード ビハインドから認証情報を付与してデータ接続することもできません。
タイトル : ユニバーサル データ接続 v2.0 リファレンスおよびスキーマ アドレス : http://msdn.microsoft.com/ja-jp/library/office/ms772017(v=office.14).aspx
制限事項 3. セッション状態のサイズの上限
SharePoint Online 上で InfoPath ブラウザー フォーム上であまり大きなデータを扱うことはできません。
InfoPath ブラウザー フォームは、各ユーザー セッションごとにフォームに関連するすべてのデータ (入力データ、データ接続で取得したデータなど) をセッション状態の上に管理します。
セッション状態は、ユーザー (Cookie で識別) ごとに利用できるサーバー側のデータ領域です。SharePoint 製品ではステートサービスという構成によりデータベース上 (SQL Server モード) でセッション データを管理します。
タイトル : State Service を管理する (SharePoint Server 2010) アドレス : http://technet.microsoft.com/ja-jp/library/ee704548(v=office.14).aspx
タイトル : ASP.NET セッション状態の概要 アドレス : http://msdn.microsoft.com/ja-jp/library/ms178581(v=vs.100).aspx
On-Premises では、InfoPath Forms Services の構成画面において、ユーザー セッションごとの最大サイズを調整することが可能です。しかし、SharePoint Online では、この値はファーム全体に影響する値ですので、変更することは不可能です。
(図. On-Premise - InfoPath Forms Services の構成における “ユーザーセッション” 設定項目)
具体的に、SharePoint Online 上で以下のようなフォームを作成する場合、セッション状態のサイズ上限を超えないか、予め十分な注意が必要となります。
・フォーム上で添付ファイルなどを扱う場合 ・数千件以上のデータを外部データ接続する場合
タイトル : InfoPath Forms Services を構成する (SharePoint Server 2010) アドレス : http://technet.microsoft.com/ja-jp/library/cc262263(v=office.14).aspx
制限事項 4. サンドボックスソリューション(VSTA コード付きフォーム) のリソース使用制限について
InfoPath ブラウザー フォームでは、VSTA のコードを埋め込むことが可能です。 VSTA コードを一行でも埋め込んだ場合、フォーム テンプレート全体がサンドボックス ソリューション上で動作するアプリケーションに変換されて動作します。
サンドボックス ソリューションの大きな制限としては、以下があります。
サンドボックスの主な制約事項 ・サーバーに対して使用できるリソースの制限があります。 ・部分信頼 (制限されたコード アクセス セキュリティ下) で処理が動作します。
特にリソースの制限は、運用に移行後に発生した場合、深刻な状況となります。サンドボックス ソリューションのリソース使用率制限を超えた場合、最初はユーザー セッションが強制終了されて処理がエラーとなります。 ただし、これが蓄積して日ごとの閾値を超えた場合、翌日まで該当ソリューションを一切使用できません。これは、実務に大きな影響を与えることが想定されます。
タイトル : SharePoint 2010 のサンドボックス ソリューションのリソース使用率制限 アドレス : http://msdn.microsoft.com/ja-jp/library/office/gg615462(v=office.14).aspx
タイトル : SharePoint Online で「サイト コレクションがサーバー リソース クォータを超えました」または「リソースが不足しています」というメッセージが表示される アドレス : http://support.microsoft.com/kb/2536051/ja
SharePoint Online は、自身が管理していないカスタム ソリューションがサーバーの著しいリソース使用を防ぐために、このように制限された機構でのみカスタム ソリューションをサーバーサイドで実行させることを許可しています。
SharePoint Online でサンドボックス ソリューションを使用することができますが、基本的には現在非推奨なカスタマイズ方法となります。リソース制限付の制約上で業務アプリケーションとして使用することはリスクが伴いますので、サンドボックス ソリューションや VSTA 付のフォーム テンプレートは、徐々に SharePoint アプリに切り替えていくことをお勧めします。
InfoPath ブラウザー フォームは、サーバー サイドで自由度の高いソリューションを提供するというテクノロジーの特性上、SharePoint Onlineにおいては様々な制約が生じます。 事前に上記制約について認識し、要件定義等にお役立ていただけますと幸いです。
なお、クライアント フォームについては、今回紹介したような制限事項は該当しないものもあります。フォーム テンプレートを作りこんだ後に制限事項に気づいた際には、緊急の代替案としてもご検討ください。
クライアント フォームに切り替えるには、名前を付けて保存にて Filler フォーム テンプレートを選択して保存した後、再発行します。
こんにちは、SharePoint サポートの佐伯です。今回の投稿では、SharePoint 2013 の個人用サイトについてとりあげたいと思います。- 個人用サイトとは個人用サイトは組織内のユーザー向けのサイトです。以下の画像はユーザーのプロファイル ページになります。個人用サイトのカスタマイズに関するお問い合わせをよくいただきますので、この投稿では、個人用サイトをカスタマイズする上で知っておきたい「個人用サイトのアーキテクチャ」について説明していきます。個人用サイトのアーキテクチャについて個人用サイトは使用するユーザーからは単一のサイトに見えますが、個人用サイトのホスト サイト コレクション、個別のサイト コレクションの 2 つのサイト コレクションで構成されています。以降の説明のため、以下の 4 ユーザーを用意しました。(1) 個人用サイトのホスト サイト コレクション個人用サイトのホスト サイト コレクションは、すべてのユーザーのニュースフィードやプロファイル ページを表示する特別なサイト コレクションです。各ユーザーが自分のニュースフィード ページ (例 http://sharepoint/my/default.aspx) にアクセスすると、ユーザーそれぞれで以下のような情報が表示されます。(2) 個別のサイト コレクション個人用サイトの個別のサイト コレクションは、ユーザーごとに作成されるサイト コレクションです。ユーザーはこのサイト コレクションに新しくサイトを作成したり、リストを追加することができます。個別のサイト コレクションで表示されるページは、既定で用意されているものでは、マイ タスク ページやサイトのフォロー ページ等があります。以下は個人用サイト作成の際に既定で作成されるブログ サイト (例 http://sharepoint/my/personal/<username>/Blog) です。このように、ホスト サイト コレクションと個別のサイト コレクションは別々のサイト コレクションであり、URL も異なります。次に、個人用サイトの URL について見ていきましょう。個人用サイトの URL について個人用サイト内のあるページが「個人用サイトのホスト サイト コレクション内のページ」か「個別のサイト コレクション内のページ」であるかは、URL を見て確認する方法があります。以下の手順をご確認ください。- 手順1. サーバーの全体管理サイトにアクセスします。2. [アプリケーション構成の管理] – [サービス アプリケーションの管理] をクリックします。3. サービス アプリケーションの一覧から User Profile Service Application をクリックします。4. [個人用サイトの設定] セクション内の [個人用サイトのセットアップ] をクリックし、[個人用サイトの設定] ページに移動します。以下の画面が表示されます。5. 以下の設定を確認します。< ホスト サイト コレクションの URL >[個人用サイトのホストの場所] に設定されているパスが個人用サイトのホスト サイト コレクションのパスになります。この設定では、http://sharepoint/my となります。< 個別のサイト コレクションの URL >[個人用サイトの場所] と [サイトの名前付け形式] の設定をもとにして、ユーザー個別のサイト コレクションを作成する際に使用されるパスが決まります。この設定では、http://<個人用サイトのホスト Web アプリケーションのパス>/<個人用サイトの管理パス>/username/ となります。ユーザーが sampleuser01 であれば http://sharepoint/my/personal/sampleuser01 となります。補足 : マルチ ドメイン シナリオにおいて、同一ユーザー名による個別サイト コレクション URL の重複を防ぐため、サイトの名前付け形式では /domain_username/ の形式を生成する別の選択肢を選ぶこともできます。例) 個人用サイトに既定で用意されているプロファイル ページ http://sharepoint/my/person.aspx はホスト サイト コレクションに存在するページであり、マイ タスク ページ http://sharepoint/my/personal/sampleuser01/AllTasks.aspx はユーザー sampleuser01 の個別のサイト コレクションに存在するページです。まとめ上記の情報を参考に、カスタマイズを行いたいページがどのサイト コレクションに存在するかを確認し、要件に合わせて該当ページを編集してください。なお、全ユーザーに対して、個別のサイト コレクションに同じページを追加したり、ページの編集を一括で適用する既定の機能はありません。これは個別のサイト コレクションはそれぞれ独立したサイト コレクションであるためです。すべてのユーザーに共通して表示させたい情報がある場合は、例えば、ホスト サイト コレクション内のページを編集する等、1 つのページで管理されることをおすすめします。このように、個人用サイトのアーキテクチャを理解しておくと、個人用サイトのカスタマイズがスムーズになります。個人用サイトのアーキテクチャについては、以下の TechNet 記事にも記述されてますのでご参照ください。参考) SharePoint Server 2013 で個人用サイトを計画する今回の投稿は以上です。
こんにちは、SharePoint サポートの佐伯です。今回はよくご質問いただく、検索結果の下部に表示されるリンクの表示/非表示を切り替える方法についてご紹介します。これらの表示/非表示の切り替えは簡単です。検索結果 Web パーツの設定を変更します。リンクの表示/非表示の設定1. 検索結果 Web パーツを配置したページを開きます。2. [歯車] – [ページの編集] をクリックします。3. 検索結果 Web パーツの [Web パーツの編集] をクリックします。4. Web パーツのツール ウィンドウで表示するリンクにチェックを入れ、非表示にするリンクのチェックを外します。通知リンクは [通知リンクの表示] のチェック、ユーザー設定リンクは [ユーザー設定リンクを表示する] のチェック、高度な検索リンクは [高度な検索リンクを表示する] のチェックをそれぞれオン/オフにすることで表示/非表示を切り替えます。5. Web パーツを保存し、ページを保存します。補足) チームサイトの既定の検索結果ページは http://xxxx/_layouts/OSSSearchResults.aspx となりますが、このページは SharePoint 2013 のインストールディレクトリ (既定では C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15) 内に存在し、ファーム内で共有されるため、[ページの編集] を実施することができません。この点についてはご注意ください。今回の投稿は以上です。検索のカスタマイズや設定に関する過去の投稿は以下をご覧ください。SharePoint 2013 検索ページに絞込み条件を追加するSharePoint 2013 検索ナビゲーションでバーティカル検索を実現するSharePoint 2013 フィルター表示テンプレートをカスタマイズして絞り込み条件数を表示するSharePoint 2013 絞り込み Web パーツの表示を制御する表示テンプレートSharePoint 2013 表示テンプレートを編集して検索結果アイテムをグリッド テーブルで表示するSharePoint 2013 検索結果が何件目または何ページ目のアイテムであるかを表示するSharePoint 2013 検索結果のホバー パネルにカスタムのアクションを追加するSharePoint 2013 コントロール表示テンプレートを使用して検索結果アイテムの一覧表示のデザインを変更するSharePoint 2013 クエリ テキストを編集してドキュメントを対象とした検索を行うSharePoint 2013 検索ボックスの初期値を変更するSharePoint 2013 検索結果のファイルをクライアント アプリケーションで開くSharePoint 2013 検索結果で検索語句を強調するカスタマイズSharePoint 2013 コンテンツ検索 Web パーツでカスタムの管理プロパティを表示するSharePoint 2013 お知らせアイテムを新着順に表示するコンテンツ検索 Web パーツを作成するSharePoint 2013 サイトの表示言語に合わせて検索結果にプロパティ名を表示するSharePoint 2013 検索結果のホバー パネルをカスタマイズするSharePoint 2013 すべての検索結果の種類に共通する表示をカスタマイズするSharePoint 2013 アイテム表示テンプレートを使用して検索結果の表示をカスタマイズするSharePoint 2013 検索結果の表示を制御する表示テンプレート
こんにちは、SharePoint サポートの佐伯です。今回の投稿では、検索��果をフィルターする絞り込み条件を追加する方法をご紹介します。上の画像で表示されているような「検索結果の種類」や「作成者」などの条件から対象の値を選択することで、検索結果を絞り込んでいくことができます。これらの条件は絞り込み Web パーツを編集して、追加または削除を行います。絞り込み条件を追加または削除する方法管理プロパティを使用して絞り込み条件を追加または削除する方法について説明していきます。1. 基本検索センター サイトやエンタープライズ検索センター サイトなどの検索ページにアクセスし、[歯車] – [ページの編集] をクリックします。2. 絞り込み Web パーツの [Web パーツの編集] をクリックします。3. [この Web パーツで絞り込み条件を選択] を選択し、[絞り込み条件の選択] をクリックします。4. 表示する絞り込み条件を編集します。絞り込み条件を追加する場合「作成日 (Created)」 を追加してみましょう。使用できる絞り込み条件から管理プロパティ Created を選択し、[追加] をクリックします。選択した絞り込み条件の Created を選択した状態で、赤枠内の構成を行います。絞り込み条件を削除する場合「検索結果の種類 (FileType)」 を削除してみましょう。使用できる絞り込み条件から管理プロパティ FileType を選択し、[削除] をクリックします。補足 : 絞り込み条件の表示順を変更したい場合は、選択した絞り込み条件内の対象の管理プロパティを選択し、[上へ移動] または [下へ移動] をクリックして順番を変更します。7. [OK] をクリックし、Web パーツ、ページを保存します。例) ファイルの拡張子の条件を追加する検索の使用例をあげて、絞り込み条件を追加してみましょう。ドキュメントを対象としたコンテンツを取得する以下のような検索ページを用意しました。目的のドキュメントにたどり着きやすいように、絞り込み条件としてファイルの拡張子を追加してみましょう。参考) 上記のような検索ページの作成については、以下の記事をご参考にしていただけますと幸いです。SharePoint 2013 検索ナビゲーションでバーティカル検索を実現するSharePoint 2013 クエリ テキストを編集してドキュメントを対象とした検索を行うそれではさっそく始めましょう。以下は参考例となりますので、ご要件に合わせて変更してください。- 手順1. ドキュメントの検索ページにアクセスし、[歯車] – [ページの編集] をクリックします。2. 絞込み Web パーツの [Web パーツの編集] をクリックします。3. [この Web パーツで絞り込み条件を選択] を選択し、[絞り込み条件の選択] をクリックします。4. 使用できる絞り込み条件から管理プロパティ FileExtension を選択し、[追加] をクリックします。5. 選択した絞り込み条件で FileExtension を選択し、[上へ移動] をクリックして一番上に移動します。6. 表示名、表示テンプレート、並べ替え、並べ替え順、絞り込み条件値の最大値を設定します。7. [OK] をクリックし、Web パーツ、ページを保存します。すべての編集が完了したら、ファイルのチェックイン、メジャー パージョンの発行を行います。以上で完了です。ファイルの拡張子が絞り込み条件として表示されました!条件の中から xlsx を選択して適用すると、このように検索結果が絞り込まれます。いかがでしたか。今回の投稿は以上です。検索のカスタマイズや設定に関するこれまでの投稿は下記の通りです。SharePoint 2013 検索ナビゲーションでバーティカル検索を実現するSharePoint 2013 フィルター表示テンプレートをカスタマイズして絞り込み条件数を表示するSharePoint 2013 絞り込み Web パーツの表示を制御する表示テンプレートSharePoint 2013 表示テンプレートを編集して検索結果アイテムをグリッド テーブルで表示するSharePoint 2013 検索結果が何件目または何ページ目のアイテムであるかを表示するSharePoint 2013 検索結果のホバー パネルにカスタムのアクションを追加するSharePoint 2013 コントロール表示テンプレートを使用して検索結果アイテムの一覧表示のデザインを変更するSharePoint 2013 クエリ テキストを編集してドキュメントを対象とした検索を行うSharePoint 2013 検索ボックスの初期値を変更するSharePoint 2013 検索結果のファイルをクライアント アプリケーションで開くSharePoint 2013 検索結果で検索語句を強調するカスタマイズSharePoint 2013 コンテンツ検索 Web パーツでカスタムの管理プロパティを表示するSharePoint 2013 お知らせアイテムを新着順に表示するコンテンツ検索 Web パーツを作成するSharePoint 2013 サイトの表示言語に合わせて検索結果にプロパティ名を表示するSharePoint 2013 検索結果のホバー パネルをカスタマイズするSharePoint 2013 すべての検索結果の種類に共通する表示をカスタマイズするSharePoint 2013 アイテム表示テンプレートを使用して検索結果の表示をカスタマイズするSharePoint 2013 検索結果の表示を制御する表示テンプレート
こんにちは。SharePoint サポート チームの成田です。今回は SharePoint Server 2010 において出力される以下のようなイベント ID 6127 の警告ログについて記事を書きたいと思います。----- ログの名前: Application ソース: FIMSynchronizationService イベント ID: 6127 タスクのカテゴリ: 管理エージェントの実行プロファイル レベル: 警告 キーワード: クラシック 説明: 管理エージェント "MOSS-7307708d-f88a-4455-9bbf-945c7c545f83" がステップの種類に差分インポート (Delta Import) または差分 同期 (Delta Synchronization) を使用して実行プロファイル "MOSS_DELTASYNC_2f86800e-b9a0-48aa-8368-d70d6de51fa4" を完了しました。最後の完全な同期 (Full Synchronization) が 行われてから、同期規則の構成が変更されています。
ユーザー操作 更新された規則が確実にすべてのオブジェクトに適用されるようにするには、ステップ の種類に完全な同期 (Full Synchronization) を使用して、実行を完了する必要があります。 -----上記のイベント ログは、プロファイル同期処理に関連する何らかの情報が変更されたため、同期の整合性を確保するために完全同期が必要であることを示しています。例として、以下の操作が実施された場合には、1 回以上完全同期を行うまで増分同期を行うたびに前述のイベント ログが出力され続けます。- マップされたプロパティが変更された- ディレクトリ サービスと同期する目的で接続が使用するコンテナーを変更した- フィルターを変更、または追加した- 同期対象の外部コンテンツ タイプが変更された- 接続を追加、または削除した上記のように、プロファイル関連の設定を明確に変更している場合はイベント ログが出力された原因について思い当たると思いますが、上記のような操作を実施していないにも関わらず該当のイベント ログが出力される場合があります。そのような時は、以下のような操作が実施されている可能性がないかをご確認ください。- User Profile Service Application のバックアップ (共有サービスやファームのバックアップを含む)- User Profile Synchronization Service の再起動User Profile Service Application のバックアップを行うと内部的に User Profile Synchronization Service が再起動されるため、実質 User Profile Synchronization Service が再起動されると該当のイベント ログが出力されるということになります。プロファイル同期関連の構成を変更した場合は、AD やプロファイル データベースなどのデータ ソースと、同期データベース間の整合性を確保するために、変更後の初回は完全同期をご実施ください。しかしながら、User Profile Synchronization Service の再起動後については、プロファイル関連の構成は実際には更新されていないため完全同期を実施していない場合であっても問題なく同期を実施でき、イベント ログを無視することができます。User Profile Synchronization Service の再起動しか実施していない場合はイベント ID 6127 の警告は無視することができますが、該当のイベント ログが User Profile Synchronization Service の再起動によって発生したのか、プロファイル同期関連の何らかの構成変更によって発生したのかを特定する方法がありません。そのため、イベント ログが出力された場合は、念のため以下のいずれかの手順でプロファイルの完全同期を実施しておくことをお勧めします。完全同期の実施手順===================1. 手動で完全同期を実施する2. コマンドで完全同期を実施する1. 手動で完全同期を実施する---------------------------1) [サーバーの全体管理] にアクセスします。2) [サービス アプリケーションの管理] をクリックします。3) "UserProfile Service アプリケーション名" をクリックします。4) [同期] セクション内 [プロファイルの同期の開始] をクリックします。5) [完全同期の開始] を有効にし [OK] をクリックします。2. コマンドで完全同期を実施する ------------------------------- 以下のメソッドを利用してプロファイル同期を実施します。
UserProfileConfigManager.StartSynchronization Method (Boolean) http://msdn.microsoft.com/en-us/library/ee586065(v=office.14).aspx ※引数に $true を設定することで完全同期を実施できます。($false を指定すると増分同期が実施されます)例として、以下の内容で保存した、拡張子 ps1 ファイルを実行することでプロファイルの完全同期が可能です。 作成した ps1 ファイルをキックするジョブを SharePoint サーバーのタスク スケジューラーなどで実行することでプロファイル完全同期をスケジュールできます。 ---------- Add-PSSnapin Microsoft.SharePoint.PowerShell $siteurl = "http://sharepoint/sites/mysitehost"$site = New-Object Microsoft.SharePoint.SPSite($siteurl); $serviceContext = [Microsoft.SharePoint.SPServiceContext]::GetContext($site); $configManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileConfigManager($serviceContext); $configManager.StartSynchronization($true); ---------- ※上記の "http://sharepoint/sites/mysitehost" は実際の個人用サイトのサイト コレクションの URL に置き換えてください。いかがでしたでしょうか。上記の現象については私たちサポートにも時々お問い合わせがあるため、今回ブログにて共有させて頂きました。SharePoint サーバーのイベント ログにイベント ID 6127 が出力されている場合にはご参考くださいますと幸いです。