みやみや

11月 052017
 

SharePoint で選択肢列と参照列を PowerShell で付け替える(3/3)

前回の続きです
下記手順の 3 番目、参照列の作成を行います

  1. 選択肢列の値を使い、参照列元のリストを作成する
  2. 手順 1 で作成したリストを使い、参照列を作成する
  3. 選択肢列の値を参照列に移行
  4. 選択肢列の削除

環境

前回で移行するリストはこのようになっています最初に作っていた

  • リスト名: 選択肢列と参照列を付け替える
    列名 内部列名 種類
    目的地 Title 1 行テキスト
    乗り物 vehicle 選択肢 車 , バイク , 自転車 , 船 , 飛行機
    おやつ snack 選択肢(複数選択可能) ポテトチップス , アポロ , じゃがりこ , チップスター , ハイレモン , かっぱえびせん
    乗り物 relVehicle 参照列 「乗り物マスタ」リストのアイテム
    おやつ relSnack 参照列(複数選択可能) 「おやつマスタ」リストのアイテム

1. 選択肢列の値を使い、参照列元のリストを作成する

こちらは済です

2. 「選択肢列と参照列を付け替える」に参照列を作成

こちらは済です

3. 選択肢列の値を参照列に移行

大雑把に手順を書くと次の感じ

  1. 既存データの取得
  2. 選択肢列と同じ値の参照列データを作成
  3. 更新者と更新日を変わらないようにする
  4. 更新
11月 022017
 

前回の続きです
下記手順の 2 番目、参照列の作成を行います。

  1. 選択肢列の値を使い、参照列元のリストを作成する
  2. 手順 1 で作成したリストを使い、参照列を作成する
  3. 選択肢列の値を参照列に移行
  4. 選択肢列の削除

環境

このリストは最初に作っていた

  • リスト名: 選択肢列と参照列を付け替える
    列名 内部列名 種類
    目的地 Title 1 行テキスト
    乗り物 vehicle 選択肢 車 , バイク , 自転車 , 船 , 飛行機
    おやつ snack 選択肢(複数選択可能) ポテトチップス , アポロ , じゃがりこ , チップスター , ハイレモン , かっぱえびせん

 

このリストを前回作った

  • 選択肢列から作成される参照元リスト(マスタリスト)
    列名 生成されるリスト名 リストのタイトル
    乗り物 乗り物マスタ vehicleMst
    おやつ おやつマスタ snackMst

 

今回はこの列を作成する

  • リスト「選択肢列と参照列を付け替える」に追加される参照列名
    列名 内部列名 参照リスト名
    乗り物 relVehicle 乗り物マスタ
    おやつ relSnack おやつマスタ

1. 選択肢列の値を使い、参照列元のリストを作成する

こちらは済です

2. 「選択肢列と参照列を付け替える」に参照列を作成

手順的には、この辺りを注意して参照列を作りました

  1. 列定義 XML を作成
    既存の選択肢列を取得し、複数選択が許可されていたら Type を LookupMulti にして、 Mult を TRUE にする

  2. 参照列の追加
    内部列名を強制するように、AddFieldInternalNameHint を付ける

つぎはデーターの移行だなー
楽しみだなー

11月 012017
 

選択肢列を参照列に入れ替える時にはどうするのか?
それは我々に永遠の課題である(嘘

当初は選択肢列で作っていたが、運用していくとマスタ化したくなり、参照列に変更したいということがあるのではないでしょうか。
但し、参照列にするとアイテムを残し続けないといけないカルマを背負うため、上手く先を見越さないと「xxxxx (使用禁止)」とか「xxxx (yyyy.mm.dd まで使用)」とかいう超絶ダサいマスタになっていき、未来永劫、裏でコソコソ言われるので気をつけましょう(言い過ぎ
 #参照列にフィルタリングする方法があれば教えてください… orz

さて、選択肢列を参照列に置き換える時は、恐らく次の手順な感じになると思う

  1. 選択肢列の値を使い、参照列元のリストを作成する
  2. 手順 1 で作成したリストを使い、参照列を作成する
  3. 選択肢列の値を参照列に移行
  4. 選択肢列の削除
    #実際は非表示列にして、動作確認後に削除するというのが良いかと思う

上記手順の 1 ~ 3 を PowerShell でやってみようと思う

今回は「1. 選択肢列の値を使い、参照列元のリストを作成する」を行う

環境

SharePoint Online に次のリスト準備

  • リスト名: 選択肢列と参照列を付け替える
    列名 内部列名 種類
    目的地 Title 1 行テキスト
    乗り物 vehicle 選択肢 車 , バイク , 自転車 , 船 , 飛行機
    おやつ snack 選択肢(複数選択可能) ポテトチップス , アポロ , じゃがりこ , チップスター , ハイレモン , かっぱえびせん

 

  • 選択肢列から作成される参照元リスト(マスタリスト)
    列名 生成されるリスト名 リストのタイトル
    乗り物 乗り物マスタ vehicleMst
    おやつ おやつマスタ snackMst

1. 選択肢列の値を使い、参照列元のリストを作成する

マスタリストの作成は以前に詳しく紹介しているのでそちらを参考にしてください。

マスタデータの作成では、リストの列情報にある選択肢列の値の分データを作成、更新予約を行い、最後に一気に ExecuteQuery で更新しています。

あとは、もう一つの選択肢列「おやつ」を使って「おやつマスタ」リストを作成するために、上記のコードの 21 ~ 26 行目を変更してもう一度実行します。

実際に使うコードの時は、外部ファイルから次のようなオブジェクトを作成できるようにして、繰り返し処理を加えても良いとは思う。

8月 202017
 

赤色の PC がずっと欲しかったけど、数年待っても希望な感じのものがどのメーカーからもでないので、hp の HP Spectre x360 13-ac000 を購入。

HP Spectre x360 製品詳細

持て余すだろうハイスペックで 3 年保証つけても 18 万円とか hp さんやるね! できればこれの真紅のモデルが欲しいです!
ただ、唯一気に入らないところは、キーボードが微妙… なんやこの Home とか End の位置は…

  • CPU : Corei7 7500U
  • Mem : 16Gbyte
  • SSD : 512Mbyte

開封後 3 秒ぐらいデュアルブートにするか悩んだが、速攻 Windows は消して Fedora 26 をクリーンインストール。

インストールは何も問題ないが、気をつけるのは次の 2 点。

  1. 起動時に F10 を押して BIOS を起動、セキュアブートを Disable にする
  2. Fedora のインストーラー(USB メモリ等)をつなげて起動、起動時に F9 を押して Boot Manager を立ち上げ、インストールメディアを選択
    ※これ判らなくて嵌った

USB Type-C の給電しながら外部ディスプレイ端子を使いたくてこちらを購入

他にもカッコイイのあったけど、色が PC と近いのが気に入った

今のところ普通に使えている

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月 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 ファイルを選択する

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