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 行目を変更してもう一度実行します。

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

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 から割り出すのが正解な気がしています。

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