みやみや

6月 262017
 

1 つの XML 要素から属性値を取得する正規表現

6月 252017
 

約 3 ヶ月開発してて気がついたんだけど、SP.ScriptHelpers に Null や Undfined、Empty を判定するメソッドが生えていた。

  • SP.ScriptHelpers.isNullOrEmptyString();
  • SP.ScriptHelpers.isNullOrUndefined();
  • SP.ScriptHelpers.isNullOrUndefinedOrEmpty();
  • SP.ScriptHelpers.isUndefined();

今まで自作の関数読んでたよ…
人はこうやって大人になっていくんだね(白目

コード読んだから何やってるか判るけど、とりあえず動作確認表を作ってみた。
ついでに JavaScript での判定も表にした。

検証環境

  • SharePoint Online (2017/06/27 実施)
  • Windows 10 Pro 64bit
  • IE11, FF, Chrome

SP.ScriptHelpres での判定について

検証コードは雑に書くとこんな感じ。

No. conditions null ‘null’ undefined ‘undefined’ false ‘false’ 0 ‘0’
1 isNullOrEmptyString(v) true false true false false false true false false
2 isNullOrUndefined(v) true false true false false false false false false
3 isNullOrUndefinedOrEmpty(v) true false true false false false true false false
4 isUndefined(v) false false true false false false false false false

ちゃんと予定通りの動きをしてくれている(まぁコード見れば当たり前ですが)。

JavaScript での判定について

ついでに JavaScript での判定も表にした。

No. conditions null ‘null’ undefined ‘undefined’ false ‘false’ 0 ‘0’
1 v == null true false true false false false false false false
2 v === null true false false false false false false false false
3 v == “null” false true false false false false false false false
4 v === “null” false true false false false false false false false
5 v == undefined true false true false false false false false false
6 v === undefined false false true false false false false false false
7 v == “undefined” false false false true false false false false false
8 v === “undefined” false false false true false false false false false
9 typeof v == undefined false false false false false false false false false
10 typeof v === undefined false false false false false false false false false
11 typeof v == “undefined” false false true false false false false false false
12 typeof v === “undefined” false false true false false false false false false
13 v == false false false false false true false true true true
14 v === false false false false false true false false false false
15 v == “false” false false false false false true false false false
16 v === “false” false false false false false true false false false
17 v == “” false false false false true false true true false
18 v === “” false false false false false false true false false
19 v == 0 false false false false true false true true true
20 v === 0 false false false false false false false true false
21 v == “0” false false false false true false false true true
22 v === “0” false false false false false false false false true

やはり、型までチェックしないと危ないことが判ります。

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月 232017
 

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

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