みやみや

6月 212017
 

PowerShell CSOM(Client SharePoint Object Model) を使った備忘録

SharePoint Online へのログイン

リスト情報の取得

URL を直接指定

リストタイトルを指定

リスト ID を指定

5月 282017
 

しぇあぽいんとさんと仲良くなるために、Windows では一番慣れている PowerShell を使って SharePoint Online へアクセスしてカスタムリストを作成してみたメモ。

CSOM (クライアント側オブジェクト モデル) を使って、カスタムリストを作成してみます。

環境

  • Windows 10 Pro
  • PowerShell 5.1

事前準備

SharePoint Online 用の SDK がインストールされていない時はインストールします。

SharePoint Online へのログイン

ユーザーが miyamiya@example.com、SharePoint Online の URL を https://<tenant>.sharepoint.com/sites/example と仮定したサンプルコード。

ここまではいつものおまじない的なコード。
ログインして SharePoint Client Context のインスタンスを作成しています。

作成するリストのプロパティを指定

ここでは、作成時にカスタムリストを指定し、Web アドレスを https://<tenant>.sharepoint.com/sites/example/Lists/newList とすることとします。

最初に $listInfo として ListCreationInformation クラスのインスタンスを作成します。

次に TemplateType の 100 はカスタムリストを指定しています。

ブラウザで操作した時でいうと赤枠のところです。

Title は半角で設定します。日本語のタイトルは別で指定しますので、ここでは URL として使いたい名前を指定します。

デフォルトで作成される Lists 下にリストを作成したくないのなら、 Url プロパティでディレクトリを指定することも可能です。

リストの作成

最初にコンテキストに ListCreationInformation を追加して、返り値の SPList を $list に格納します。

次に Title で新しく作るリストのタイトルを日本語で指定しています。

最後に SPList を Update して、コンテキストを ExecuteQuery で反映させます。

考察

これで日本語タイトルを使うカスタムリストの作成で、一番単純な作成は完了です。

SourceID を指定しないと OpenXML SDK を使ってなんやかんやする時に問題が起きるよ!という話も見ましたが、ちょっと状況が想像できなかったので頭の片隅に置いておくことにします…

次の記事では、その他の設定を PowerShell からやってみます。

参考

5月 152017
 

体調も悪いので、リスト情報を CSV で出力してみようかと思い立ってサクッと

サンプルコード

18 行目まではほぼおまじない。

27 行目で「Hidden ではなく、且つ、EntityTypeName に List という文字が入っているものにしています。
32 行目も含めてですが、ちゃんとするなら「List で終わっている」とやったほうがよさそうです。

41 行目で Export-Csv を使って出力しています。

考察

32 行目が本当にこれでいいのかが不明です。
リスト毎に RootFolder を Load して ServerRelativeUrl から割り出すのが正解な気がしています。

データー一括変更の元データーや、一括変更前後の確認などにこういうの使うだろうなー

5月 062017
 

先日、SharePoint のビューにかけるフィルターで動的値を使えることを知りました。

[Me] と [Today] を使うことで、アクセスしたユーザーとアクセスした日をフィルターとして使えます。

こちらを使って、ノンプラミングで簡単な掲示板を作ってみようと思いました
※ノンプラミングは無理でした _(:3」∠)_

やりたい事(仕様)

  • タイトル、本文、添付ファイルに加えて、掲載期間を指定できる
  • 他人の作ったデーターは掲載期間外の時に閲覧不可
  • 自分の作ったデーターは掲載期間外でも閲覧可能

環境

  • サーバー環境
    • SharePoint Online
  • クライアント環境
    • Windows 10 Pro
    • PowerShell 5.1

用意したリスト

リスト名は 掲示板 にしました。

リストの作成方法は詳しく書きませんが、列の内部名を半角英数字で付けるために、下記表の「列の内部名」で一旦登録して、その後に「列名」に変更しています。

列の内部名 列名 種類 必須
body 本文 複数行テキスト
publish_date 公開日時 日付と時刻
limit_date 掲載期限 日付と時刻
  • 公開日時(publish_date)

  • 掲載期限(limit_date)

フィルターを作成する

フィルターは既存である「すべてのアイテム」を修正しました。

  • 表示
    1. タイトル
    2. 登録者
    3. 公開日時
    4. 掲載期限
  • 並び替え
    1. 公開日時、降順
    2. 掲載期限、昇順
  • フィルター

このフィルターで次を実現している(つもり)です。

(掲載期限 is null and 公開日時 <= 今日) or (掲載日時 >= 今日) or (登録者 = カレントユーザー)

[Today] の落とし穴

SharePoint をやっている人だと常識なのでしょうが、[Today] は日付しか比較してくれません。[Now] とかは用意されていないようです。なんてイケてないんですか… しぇあぽいんとさんツンツンしすぎですね。

このままだと、公開日時 2017/05/06 12:00 とした記事が 2017/05/06 になったら見れてしまいます! いや、いいんですが折角作ったのに悲しい。

そこでぐぐってみると、SharePoint Designer で CAML Query を変更している記事が多いので、そちらを倣って… SharePoint Designer は嫌いなので PowerShell でやることにしました。

[Today] を時間を見るように設定する

PowerShell を起動して下記を実行します

18 行目まではほぼおまじないです。

21 行目で既存のビュー「すべてのアイテム」を取ってきて、26 行目で IncludeTimeValue="True" を付け加えて時間も加える設定をしています。

結果

  • 登録者 2017/05/06 12:01 過ぎ

    登録者は全部データが見えている

  • 別ユーザー 2017/05/06 11:55

    別ユーザーからは 公開日時 ≦ 現在 ≦ 掲載期限 のデーターが見えてる
    #公開期限 12:00 のデーター(パターン2 とパターン6)が見える

  • 別ユーザー 2017/05/06 12:01 過ぎ

    別ユーザーからは 公開日時 ≦ 現在 ≦ 掲載期限 のデーターが見えてる
    #パターン2 とパターン6 のデーターが見えない

参考

5月 022017
 

SharePoint で次のパターンを想定して、その時のリスト ID とリストアイテム ID を取得する事を考える

  • ページで Web パーツ内のカスタムリストでリストアイテムを選択している時

  • カスタムリストのリストビューでアイテムを選択している時

  • カスタムリストのリストアイテムを表示している時

どの画面にいるか判定

ページの Web パーツかどうかの判定を行います。利用するのは _spPageContextInfo.pageItemId を使い、ページ以外では -1 になりました。

カスタムリストのリストビューかリストアイテムかの判定は、_spPageContextInfo.viewId があるか無いかで判断しても良さそうでしたが、私の好みとしてリストアイテム ID の取得方法が違うことで判定しました。

コード例

手続きで書くとこのようになります。

考察

上記のコードを 1 つのメソッドにして自分で使ってみることにします。

参考

4月 232017
 

作成したリストに追加した列情報を JSCOM (JavaScript Client Object Model) で取得するサンプル。

get_schemaXml で取得した情報である程度判る気がする。

4月 162017
 

しぇあぽいんとさんと仲良くなるために、まずは Windows では一番慣れている PowerShell を使って SharePoint Online へアクセスしてみたメモ。

CSOM (クライアント側オブジェクト モデル) を使って、リスト一覧を取得してみます。

環境

  • Windows 10 Pro
  • PowerShell 5.1

事前準備

SharePoint Online 用の SDK がインストールされていない時はインストールします。

サンプルコード

ユーザーが miyamiya@example.com、SharePoint Online の URL が https://<tenant>.sharepoint.com/sites/example と仮定してサンプルコード書く。

考察

一旦 Load で予約して、ExecuteQuery で実際に取得するのが慣れるのに時間がかかりそう。

参考

4月 162017
 

しぇあぽいんとさんと仲良くなるために、まずは Windows では一番慣れている PowerShell を使って SharePoint Online へアクセスしてみたメモ。

環境

  • Windows 10 Pro
  • PowerShell 5.1

事前準備

SharePoint Online 用の SDK をインストールします。

サンプルコード

ユーザーが miyamiya@example.com、SharePoint Online の URL が https://<tenant>.sharepoint.com/sites/example/SitePages/Home.aspx と仮定してサンプルコード書く。

考察

REST API を叩いて JSON を返すサンプルを参考にしましたが、別に REST API を叩きたいわけではなかったので、とりあえずアクセスした画面を HTML で保存するだけを行ってみました。

恐らくユーザー名とパスワードを使うのはあまり良くないのだろうけど、一般ユーザーではこの方法しかないんじゃないかな?と思っています。

参考