Power AutomateでSharePointのニュース投稿の自動化を試みたけど『d=』とは一体何なのか？

# SharePointコネクタ

https://learn.microsoft.com/ja-jp/connectors/sharepoint/

トリガーは13、アクションは47と数多くの効率化が実施できる素晴らしいもの
※非推奨含む

:::note info
本記事は2023.11.25時点の情報です
:::

- ファイル
- ドキュメントライブラリ（フォルダー）
- ドキュメントセット
- リスト
- アイテムの権限設定
- チェックイン
- チェックアウト

あらゆる操作が自動化できる魅力的な機能です。

一方で **「サイトページ自動投稿」は、
`SharePoint に HTTP 要求を送信する`ではないと実施できません。**

Microsoft MVP
 - [Ota Hirofumi](https://twitter.com/hrfmjp) さん
 - [Miyake](https://twitter.com/MiTo60448639) さん


https://idea.tostring.jp/?p=6366

https://qiita.com/MiyakeMito/items/daac741625c9fc58686e

両名が非常に参考になるブログを挙げてくださっているので、
何とかページやニュースの自動投稿は出来そうです。

1. テンプレートを用意する（手動）
2. HTTP 要求で以下を実施
    1. テンプレートのコピー
    1. チェックアウト
    1. コピー後のファイルの編集
    1. 投稿

という流れです。

# ハイパーリンクの参照は、どのようにすればよいか

**『SharePoint上にファイルをアップロードしました！』**

という`通知としてのニュース投稿`の場合、最新のファイルのリンクも差し込む必要があります。
これはどうしたら実現できるか、今回の課題になります。

## `「SharePoint に HTTP 要求を送信する」`を解析してみる

まずは、紹介した両名のブログを読んでください。

読んでいる前提で記事を書き続けると、
`「SharePoint に HTTP 要求を送信する」アクション`で、
オブジェクト形式でSharePointのHTMLを直接POSTしています。。

- サンプルで作ったページ

HTTP要求のbody

```json:body
{
    "__metadata": {
        "type": "SP.Publishing.SitePage"
    },
    "LayoutWebpartsContent": "[{\"id\":\"cbe7b0a9-3504-44dd-a3a3-0e5cacd07788\",\"instanceId\":\"cbe7b0a9-3504-44dd-a3a3-0e5cacd07788\",\"title\":\"タイトル領域\",\"description\":\"タイトル領域の説明\",\"audiences\":[],\"serverProcessedContent\":{\"htmlStrings\":{},\"searchablePlainTexts\":{},\"imageSources\":{\"imageSource\":\"/_layouts/15/images/visualtemplatetitleimage.jpg\"},\"links\":{},\"customMetadata\":{\"imageSource\":{}}},\"dataVersion\":\"1.4\",\"properties\":{\"imageSourceType\":2,\"title\":\"News!! 2023.11.11\",\"textAlignment\":\"Left\",\"showPublishDate\":false,\"authors\":[{\"id\":\"i:0#.f|membership|mailaddress.onmicrosoft.com\",\"upn\":\"mailaddress.onmicrosoft.com\",\"email\":\"mailaddress.onmicrosoft.com\",\"name\":\"出戻り ガツオ\",\"role\":\"\"}],\"showTopicHeader\":false,\"authorByline\":[\"i:0#.f|membership|mailaddress.onmicrosoft.com\"],\"layoutType\":\"ColorBlock\",\"topicHeader\":\"タイトルの上のテキスト\",\"titlePlaceholder\":\"ニュース投稿に名前を付ける\",\"enableGradientEffect\":true,\"isDecorative\":true,\"hasTitleBeenCommitted\":true},\"containsDynamicDataSource\":false,\"reservedHeight\":450}]",
    "CanvasContent1": "[{\"controlType\":4,\"displayMode\":2,\"id\":\"6f9230af-2a98-4952-b205-9ede4f9ef548\",\"position\":{\"zoneIndex\":1,\"sectionIndex\":1,\"controlIndex\":1,\"sectionFactor\":8,\"layoutIndex\":1},\"emphasis\":{\"zoneEmphasis\":0,\"sectionEmphasis\":0,\"controlEmphasis\":0},\"editorType\":\"CKEditor\",\"addedFromPersistedData\":true,\"innerHTML\":\"<p>今日のニュースよ～</p><p>2023年11月11日をお知らせします。</p><p>今日のファイルを見てくれや。</p><p><a href=\\\"/:x:/r/sites/mysite/Shared%20Documents/qiita/dってなんやねん/sharepoint_news_templete.xlsx?d=w67e4bc7258c5449881c1a6aa63fd5d93&amp;csf=1&amp;web=1&amp;e=ObNGPT\\\">20231111_News.xlsx</a></p>\"},{\"controlType\":3,\"displayMode\":2,\"id\":\"73d07dde-3474-4545-badb-f28ba239e0e1\",\"position\":{\"zoneIndex\":1,\"sectionIndex\":2,\"controlIndex\":1,\"sectionFactor\":4,\"layoutIndex\":1},\"webPartId\":\"d1d91016-032f-456d-98a4-721247c305e8\",\"emphasis\":{},\"reservedHeight\":268,\"reservedWidth\":364,\"addedFromPersistedData\":true,\"webPartData\":{\"id\":\"d1d91016-032f-456d-98a4-721247c305e8\",\"instanceId\":\"73d07dde-3474-4545-badb-f28ba239e0e1\",\"title\":\"\\n      画像\\n    \",\"description\":\"\\n      ページに画像を表示します\\n    \",\"audiences\":[],\"serverProcessedContent\":{\"htmlStrings\":{},\"searchablePlainTexts\":{\"captionText\":\"ド級のテンプレート\"},\"imageSources\":{\"imageSource\":\"/_LAYOUTS/IMAGES/VISUALTEMPLATEIMAGE1.JPG\"},\"links\":{},\"customMetadata\":{\"imageSource\":{\"siteId\":\"\",\"webId\":\"\",\"listId\":\"\",\"uniqueId\":\"\",\"width\":4288,\"height\":2848}}},\"dataVersion\":\"1.11\",\"properties\":{\"imageSourceType\":2,\"altText\":\"\",\"overlayText\":\"\",\"siteId\":\"\",\"webId\":\"\",\"listId\":\"\",\"uniqueId\":\"\",\"imgWidth\":4288,\"imgHeight\":2848,\"fixAspectRatio\":false,\"alignment\":\"Center\",\"overlayTextStyles\":{\"textColor\":\"light\",\"isBold\":false,\"isItalic\":false,\"textBoxColor\":\"dark\",\"textBoxOpacity\":0.54,\"overlayColor\":\"light\",\"overlayTransparency\":0},\"isOverlayTextVisible\":true},\"containsDynamicDataSource\":false}},{\"controlType\":0,\"pageSettingsSlice\":{\"isDefaultDescription\":true,\"isDefaultThumbnail\":true,\"isSpellCheckEnabled\":true,\"globalRichTextStylingVersion\":0,\"rtePageSettings\":{\"contentVersion\":5},\"isEmailReady\":false}}]",
    "AuthorByline": [
        "i:0#.f|membership|mailaddress.onmicrosoft.com"
    ],
    "TopicHeader": "タイトルの上のテキスト",
    "BannerImageUrl": "/_layouts/15/images/visualtemplatetitleimage.jpg",
    "Title": "News!! 2023.11.11"
}
```

```html:hrefに注目
<a href=\\\"/:x:/r/sites/mysite/Shared%20Documents/qiita/dってなんやねん/sharepoint_news_templete.xlsx?d=w67e4bc7258c5449881c1a6aa63fd5d93&amp;csf=1&amp;web=1&amp;e=ObNGPT\\\">
```

`<href=>`の部分がリンクなのでしょう。

```
/:x:/r/sites/mysite/Shared%20Documents/qiita/dってなんやねん/sharepoint_news_templete.xlsx
```
上がファイルのパスなので、ここ変えれば参照できるのでは?という仮説で実施してみます。

## 検証のシナリオ

■ フロー全体図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/3e7c9481-8d11-d71b-7f4b-f19cd039d1ff.png)

■ フォルダ構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/7aeec960-86e1-9887-59ff-311270693e8c.png)

1. ファイルが作成されたとき
    - `ドキュメント/Power Automate`にファイルがアップロードされたとき
1. 本日の日付を変数に格納
    - yyyymmdd形式で取得
1. ファイル コンテンツを取得の取得
    - アップロードされたファイルコンテンツを取得し
1. ファイルの作成
    - `ドキュメント/Qiita`に`Qiitayyyymmdd.xlsx`という名前で保存
1. SharePointのページテンプレートをコピー
    - ファイル名は`yyyymmdd.aspx`
1. コピーしたページファイルのメタデータの取得
    - Idを取得して後続の編集を用意にします
1. ページをチェックアウト
1. **ページの編集**
1. ページの公開
1. ニュースへ昇格

テンプレートのサイトページのリンクは下記のファイルへのリンクが設定されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/235a4aa3-992e-eac2-28b8-1fd0e15c3faf.png)

|Param|Value
|---|---
|Path|ドキュメント/03その他ドキュメント/qiita/dってなんやねん
|File Name|sharepoint_news_templete.xlsx

もともとのファイルはわかりやすく、
**テンプレートです！！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/a5ce1ece-e9a4-5fed-1c8c-43558d099689.png)

というExcelファイルで試してみます。


編集後に確実に変わるファイルパスの部分だけ置き換えて検証してみましょう
```html:hrefに注目
<a href=\\\"/:x:/r/sites/mysite/[ ■■■ここだけ変えてみる■■■ ]?d=w67e4bc7258c5449881c1a6aa63fd5d93&amp;csf=1&amp;web=1&amp;e=ObNGPT\\\">
```

アップロードされるファイルはこちら！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/c54eacef-34f8-53d2-be9a-335ef9bac7fe.png)

上記が表示されれば成功！

### 検証

![タイトルなし 10.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/67ddd979-6578-5156-8394-7bef7a6d0796.gif)


**参照できない！！！**

ファイルパスを変更しただけでは、アップロードされたファイルが表示されません。


### 改めてHTMLに注目

```
<a href=\\\"/:x:/r/sites/mysite/Shared%20Documents/qiita/dってなんやねん/sharepoint_news_templete.xlsx?d=w67e4bc7258c5449881c1a6aa63fd5d93&amp;csf=1&amp;web=1&amp;e=ObNGPT\\\">20231111_News.xlsx</a>
```
hrefの中でも

|Param|内容の予測
|---|---
|`/:x:/r:`| SharePoint内のファイルパスであることが推察できます
|`?d=`| クエリパラメーターと思われます。ココが怪しいですね。documentのdっぽい。
|`&amp;`| よくわかりませんが、度々繰り返されるので、区切りを表すのでしょう。
|`csf=1`| クエリパラメーターと思われますが・・・（不明）
|`web=1`| クエリパラメーターと思われますが・・・（不明）
|`e=ObNGPT`| クエリパラメーターと思われますが・・・（不明）

調査をしてみても奥が深そうな予感です。

https://sharepoint.stackexchange.com/questions/269558/do-i-need-the-e-part-of-a-url-when-sharing-a-sharepoint-resource

### ファイルのプロパティの取得
さて、ファイルの詳細を取得するために、別のアクションを追加してみましょう。

`ファイルのプロパティの取得`で取得できそうな値がないか、調査してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/2b702966-fa52-c5d2-ad53-f257384ecca9.png)

どうやら`{Link}`で`d=`も含めた値で取得できそうですね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/c2cb9c8c-734d-67e2-c55b-2646f43dbd38.png)

ファイルの作成後に`プロパティ`を取得し、`変数`に`d`のパラメーター値を格納してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/4a41dac5-899a-ef85-0f98-141427b9b833.png)

```yaml:d=で分割した後の値を取得します
split(body('ファイルのプロパティの取得')?['{Link}'],'d=')[1]
```

`e=`の箇所は全くわからないので、この際思い切って削ってみますｗ
`&amp;e=ObNGPT`この部分ですね。

課題の`href`の値は

```html:href
<a href=\\\"/:x:/r/sites/--secret--/Shared%20Documents/Qiita/Qiita@{variables('yyyy㎜dd')}?d=@{variables('d')}&amp;csf=1&amp;web=1\\\">
```

としてみます。

■ 最終的な形

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/6a4a4e85-884d-0548-8817-34de72741aac.png)

## 果たして結果は！

![タイトルなし 10-1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/519cf649-af3a-b5bf-0da6-e045fc2e02cf.gif)

う、うまくいってしまった・・・。
成功です。

パラメーターの詳細がGPTを駆使してもわかりませんでしたが、何とか目的は達成できました！
SharePointの奥は深い・・・。

ですが自動化しがいがある領域で最近ハマってます！

皆様も良いPower Lifeを！
Good night!

:::note warn
お知らせ
`d`パラメーターはIDを示すことが推察されますので、
テンプレート元や本記事で利用したファイルは全て削除しております。
:::