LoginSignup
4
4

【Power Automate】SharePoint ListsをMicrosoft Graph REST APIを介して作成する

Posted at

SharePoint コネクタで出来ること

非常に多くのアクションが、SharePoint コネクタで実行することができます。
一方でリストを作成するとなると、SharePoint に HTTP要求を送信するアクションで対処する領域のようです。

リストを作成に焦点をあてて、アクションを見ていきたいと思います。

Excelから次の段階へ進めるSharePoint Lists

あらためてDX推進を担うにあたり、SharePoint Listsの強みは常々感じます。
Microsoft 365の強み、APIでサービスの間をつなげるという意味でも、
SharePoint Listsは、最も身近で優秀なパートナーです。

GPT的な文章ですが、自分による作成文章です

理由は、共同作業向けのテーブルであり、コンフリクトを防ぐことができたりデータ型や入力規則を定義できるというメリットが挙げられます。

復元も気軽にできたりと万々歳🙌

自由度が高い分、Excelが好まれることも重々理解しておりますが、まずは今Excelで担っているタスクを、SharePoint Listsに置き換えてみるだけでも、業務のシーンは大きく変わるのではないでしょうか。

そんなSharePoint Listsですが、リストそのものを作成するために、結構なクリックを個人的には 要すると感じています。

そんなにリストをパカパカ作るな!という助言はあると思いますが、準備が手間です。

  • データ型の設定
  • 内部名・表示名を意識した設定
  • コピペでサクっと準備できない

こういったことが、私は! ムムム🧐と感じることが多いです。

ExcelやCSVからサクっと作る手段もありますが、
内部名・表示名を意識した設定が上手く反映されなかったりと、ムムム🧐と感じてしまいます。

SharePoint Online 管理シェルを使うことができれば、サクっといけそうですが、一般の従業員にそんなものは使わせていただけることは、まずないでしょう。

Power Automateで解決してみよう!

そんなこんなで、Power Automateを使って、この問題を解決してみます。

Graph APIを使ってみましょう。

SharePoint REST APIでやっているパターンは、ほかにも書いている人がいるのでやめておきました。

新しいリストを作成する 方法

Microsoft learnに記載がありますね。

これをPower Automateで実行すると、下記のようになります。

image.png

項目 設定値
サイトのアドレス 対象のSharePointサイト
方法 POST
URI _api/v2.1/sites/root/lists
ボディ
{
  "displayName": "Books",
  "columns": [
    {
      "name": "Author",
      "text": { }
    },
    {
      "name": "PageCount",
      "number": { }
    }
  ],
  "list": {
    "template": "genericList"
  }
}

learnと異なっているのは、nameプロパティがdisplayNameになっていることです。
nameのままだとエラーになります。

learnの例を見ると、URIは

URI
/sites/{site-id}/lists

となっていますが、特定の子に位置するサイトではないため、rootで指定しています。

URI
_api/v2.1/sites/root/lists

site-idを調べる方法は、

SiteId
https://<tenant-name>.sharepoint.com/sites/<site-name>/_api/site/id

image.png

SharePointサイトのアドレスの末尾に/_api/site/idを添えて、GET要求を送信すれば取得できます。
こんな感じでd.Idとしてsite-idが表示されます。

さて、リストの作成に話を戻すと、下記のようにリストがサクっと作られることがわかります。

image.png

今回送信した要求のうち

{
  "list": {
    "template": "genericList"
  }
}

こちらの"template": "genericList"は、タイトル列のみが含まれる空白のリストに該当します。

image.png

使ってみるとわかりますが、タイトル列が入力必須になっていることが、少しムムム🧐ポイントです。

とはいえ、1秒で出来るのは嬉しい✨

以下に、画像の情報を文字起こしし、対応するJSONプロパティを表にまとめました。

列の情報の種類と対応するJSON

今回紹介するのは、検証できた下記の種類!

列の種類 JSON
1行テキスト "text": {}
複数行テキスト "text": {"allowMultipleLines": true}
選択肢(メニューから選択) "choice": {"choices": []}
数値(1、1.0、100) "number": {}
通貨($, ¥, €) "currency": {}
日付と時刻 "dateTime": {}
参照(このサイトにある既存の情報) "lookup": {}
はい/いいえ(チェック ボックス) "boolean": {}
ユーザーまたはグループ "personOrGroup": {}
ハイパーリンクまたは画像 "hyperlinkOrPicture": {}
集計値(他の列を基にした計算結果) "calculated": {}

改めてみると列の種類が多い!
設定値まで含めると、範囲が膨大になるため、基本的な記法に限定して書きます!

■ 基本的な列の構成は、下記のようになります。

1行テキストの例
{
  "name": "内部名",
  "displayName": "表示名",
  "text": {}
}

name内部名displayName表示名です。
別々に指定できるのが、ほんっとうに嬉しい!✨

列ごとのJSONの例

1行テキスト

こちらで作成してみると

1行テキスト
{
    "name": "InternalTextFieldName",
    "displayName": "表示名だよ",
    "text": {}
}

良い感じに・・・👀✨

image.png

内部名も反映されている🙌

image.png

複数行テキスト

textallowMultipleLinestrueにすることで設定できます。

複数行テキスト
{
    "name": "InternalTextFieldName",
    "displayName": "表示名だよ",
    "text": {
        "allowMultipleLines": true
    }
}

image.png

選択肢(メニューから選択)

選択肢はchoice.choicesから配列で選択肢を指定します。

選択肢
{
  "name": "ChoiceField",
  "displayName": "選択肢項目",
  "choice": {
    "choices": ["1", "いち", "わん"]
  }
}

image.png

数値(1、1.0、100)

数値は、シンプルにnumberを指定すればOK!

数値
{
    "name": "NumberColumn",
    "displayName": "数字",
    "number": {}
}

image.png

通貨($, ¥, €)

数値通貨は別もの💰

通貨
{
  "name": "CurrencyColumn",
  "displayName": "通貨型",
  "currency": {}
}

image.png

日付と時刻

dateTimeで指定すると、時間を含めるにチェックが入った状態で作成されます。

日付と時刻
{
  "name": "DateTimeFieldColumn",
  "displayName": "日時",
  "dateTime": {}
}

image.png

dateTimeに`"format": "dateOnly"を設定すると、日付のみになります。

日付のみ
{
    "name": "DateFieldColumn",
    "displayName": "日付",
    "dateTime": {
        "format": "dateOnly"
    }
}

image.png

はい/いいえ(チェック ボックス)

はい/いいえBooleanで設定できます。

{
  "name": "Boolean",
  "displayName": "はい、いいえ",
  "boolean": {}
}

image.png

ユーザーまたはグループ

personOrGroupは、デフォルトでグループの選択を許可

{
  "name": "PersonGroup",
  "displayName": "人やグループ",
  "personOrGroup": {}
}

image.png

ハイパーリンクまたは画像

ハイパーリンクは、そのまんま

ハイパーリンク
{
    "name": "HyperlinkField",
    "displayName": "ハイパーリンク",
    "hyperlinkOrPicture": {}
}

image.png

集計値(他の列を基にした計算結果)

集計列も作れてしまう!

集計値
{
    "columns": [
        {
            "name": "Column1",
            "displayName": "Column1",
            "number": {}
        },
        {
            "name": "Column2",
            "displayName": "Column2",
            "number": {}
        },
        {
            "name": "SUM",
            "displayName": "足し算",
            "calculated": {
                "formula": "=([Column1]+[Column2])"
            }
        }
    ]
}

image.png

image.png

おわりに

非常に大変な実験でした・・・。
_api/v2.1/sites/root/lists でチャレンジした結果、かなり労力がかかりました。
列の詳細設定など深堀できるところは、まだまだあるので、今後もアップデートしていきたいと思います!

温かい目で見守ってください🐟✨

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4