7月 262017
 

リストをテンプレート化していたものを別サイトに展開しました。しかし、参照列を含んでいることを忘れていて、参照列が選択できなくなってしまいました…

GUI からは参照元リストを変換できないようなので、列の SchemaXml を眺めていたら変更できそうだったので試してみました。

SchemaXml を眺め方はこちら

参照列の SchemaXml を確認

試しにリストを作って、別リストの「作成日時」を利用して参照列作ってみました。
http://1bed.saloon.jp/wp-content/uploads/2017/07/lookup01-300x195.png

その SchemaXml がこちらです。

この中に 36 文字の英数字とハイフンでできた文字列を {} で囲っている GUID が 3 つあります。

  • List=”{f5bb4f52-e0a7-4c25-abab-a3d261fde470}”
    参照元リストのリスト ID

  • ID=”{55843724-0221-4ae3-ad18-414edd209754}”
    列固有の ID

  • SourceID=”{aca9e366-bd2b-4060-bd63-342e18395df7}”
    この列が存在しているリストのリスト ID

参照している列の内部名 ShowField="Created" を合わせて、List 属性の値を書き換えればどうにかなるのでは?と思い試してました。

SchemaXml の List 属性を PowerShell で書き換える

下記状態と仮定してサンプルコードを載せます

  • ユーザー
    miyamiya@example.com
  • SharePoint Online の URL
    https://.sharepoint.com/sites/example
  • 参照列のあるリスト名
    参照列持ってるぜリスト
  • 参照列の内部名
    LookupDate
  • 参照元のリスト名
    私を見てリスト

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

ここからが本命のコード。

実際にはもうちょっと綺麗なスクリプトにしてますが(言い訳気味)

考察

一応手元では動いていますが、これでいいのか?という疑問と、しくじったら取り返しのつかないことになりそうなので、参考にする奇特な方がいましたらバックアップを取って自己責任でお願いします
_(:3」∠)_

6月 242017
 

意外と使い勝手が良さそうなのがこの方法だと思う。

画像ファイルを1つ選択選択させる

CSV ファイルを選択する

こういうパターンあるかな?と思う。
普段はタスクスケジューラーでキックしているけど、失敗したら手動で動かすとか。

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 のデーターが見えない

参考

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 で保存するだけを行ってみました。

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

参考