yamamoWorks

.NET技術を中心に気まぐれに更新していきます

Flowのreplace関数で改行を置換する

突然ですがMicrosoft FlowのTipsです。

うちの組織のTeamsはTwitterコネクタが無効になっているのですがIncoming Webhookは使えるので、Flowでツイートを拾ってWebhookでTeamsに投げるという事をしています。
その際、改行を含むツイートがTeamsの表示で改行にならない現象があったのでFlowで改行を<br />に置換してやれば楽勝…と思いきや少しハマったので記事にしておきます。

はじめに

まずは普通にフローを組んでみます。 f:id:yamamoWorks:20181220004319p:plain

Twitterでこのように投稿すると...
f:id:yamamoWorks:20181220005625p:plain

Teamsでこのように表示されます。
f:id:yamamoWorks:20181220005320p:plain

フローの実行履歴を見てみるとツイートの改行は\nで飛んでくるのが分かったので f:id:yamamoWorks:20181220005925p:plain

replace関数で\n<br />に置換してみます。
replace(triggerBody()?['TweetText'],'\n','<br />')
f:id:yamamoWorks:20181220013244p:plain

しかし、これでは望んだ結果が得られませんでした。
実行結果でHTTPでPOSTした内容を見てみると... \nのままです。
何故かreplace関数では\nを認識してくれません。 f:id:yamamoWorks:20181220013831p:plain

解決策

この問題は、uriComponentで\n%0Aに変換してから<br />である%3Cbr%20%2F%3Eに置換してuriComponentToStringでもとに戻せば解決できます。

uriComponentToString(replace(uriComponent(triggerBody()?['TweetText']),'%0A','%3Cbr%20%2F%3E'))

f:id:yamamoWorks:20181220014820p:plain

めでたしめでたし。