SharePointとPowerPlatformでQAシステムを作ろう1
シェアポイントのカスタムリストとPowerPlatformを使って段階的にQAシステムを作っていきます。
こんな状況に置かれている両方の人が便利なようにしていきます。
◆左側(ユーザー側)
- ユーザーは複数いる
- ユーザーは複数の分野に聞きたいことがある
- 質問をしてくる経路はメールやチャットなどで、キーボード入力に抵抗はない。(電話はしない)
- 質問に添付ファイルをつけたい時もある
- FAQ的なものがあれば見る
- 関係者にもQAやりとりをCCしたい時もある
- 回答はTeamsかメールでほしい(通知がほしい)
◆右側(サポート側)
- 複数の分野のサポートをしているチームがいる
- 各チームに回答者は複数いる(担当分野ごとに複数名)
- 回答者はサポート専任ではないので自分の担当分野の質問が来たら通知してほしい(メールかチャットで)
- 質問状況(質問の来た件数や未解決数)についてグラフなど視覚化したい
- 操作法の回答に画像を入れたい時もある
- FAQ的にやりとりを公開して省力化したい
- 完了してるものとそうでないものがわかるようにしたい
- 更新時刻と更新者の全履歴はそれほど大事ではない
◆質問の内容
- 何往復かするような複雑なものもあれば、単純なものもある
---------
上記の要件を満たすには・・
メールのやり取りと、メールのフォルダ分け(サーバー側にフォルダ分けして、サポート側全員でそこにアクセス)でカバーできるものもあります。
ただFAQ的に公開とか、グラフ化はあまりメールが得意とするところではない。
転記やDB化がめんどうなんですよね、、
なのでsharepointリストで質問を受け回答をすると同時に公開するを基本として、更新時に通知を実装する形を模索していきます。
ということで以降はまた次回!
PowerAutomateで最初に知っておけばよかったこと
Microsoft Power Automate、フロー作成数が増えてくると、ある程度は思うように作れるようになってきました。最初にこれを聞いておけば・・!!と思うことがでてきました。これから使い始める方、ぜひ見てほしい。
なお、Windows環境で、PowerAutomate Desktopではなく、クラウド版(旧flow)の話になります。
テンプレートをちょこっと変えるだけのレベルから一歩進もうとすると、知っておきたかった内容です。
エラー状態だと保存できません
これはすぐ気づかれると思うんですよね、でも書いておきます。
時間がない、とりあえず保存!エラー。Undoで戻そうとしてもUndoなんてないし、Ctrl+Zもききません。そういうものなので、こまめに保存をおすすめします。
コネクタとアクションの検索(よく使うものは覚えておきましょう)
フローの作成を始めた、さあ「+新しいステップ」を作るぞ!!
でこの画面。
おおよそ何ができているか知っていないと、探しにくい、というかそもそもあるのかないのか、、でやたら時間がかかります。
表示されているアイコンも「コントロール」「Excel」あたりの7個だけで焦ります。
解決:「コネクタとアクションを検索する」検索ボックスを活用しましょう。
こちらで自分がよく入力している例
- 「SharePoint」SharePointリストからのアイテム検索や、アイテム更新、アイテム作成の時に。
- 「Teams」Teamsへの投稿を新たに作ったり、Teamsの投稿情報を取得したりなど。
- 「Office」Office 365のユーザー検索、ユーザー情報取得など。また、Office365 Outlookのメール送信アクションを見つけるときに。Office365 GroupsのHTTP要求を送信もたまに。
- 「変数」変数の初期化(定義のことです)や、変数の値を書き換えるときに。
- 「データ操作」ちょっとした動作確認時に、「作成」が便利。
環境や使い道によって異なるとは思いますが、どうやれば自分のよく使うアクションにたどり着けるのかは覚えておくのが吉です。
下手に「作成」とか「送信」といったキーワードで検索すると、恐ろしい数がヒットしますので注意。
もっと見る 押しましょう
上記画面右下に、しれっと表示されている 「もっと見る」 。ほしいアクションなどが隠れていることもよくありますので、見つからないときは使いましょう。
変数は、最初に定義
条件分岐や、ForEachアクションの中で変数を新しく定義(初期化)することはできません。最上位のみで使用できますというエラーがでますので。
トリガーされたすぐ次くらいのところで定義するとよいと思います。
「変数」→「変数を初期化」です。
変数名はわかりやすくしましょう。型を間違えないように。
上記画面の右上の 「・・・」で、名前の変更 で「変数Titleを初期化」などを書いておくと、後から変数名や、型(種類)を変えるときに探し回る手間が減りますね。クリックして開けばわかるので、やらなくてもいいですけど。
アクションの順番(位置)を変えるには
なかなかうまくいかないときがあるのですが、ドラッグアンドドロップで、プラスマークが出た瞬間に手を放す感じです。
動的なコンテンツの数式を見る・コピーする
動的なコンテンツの追加自体は、まあ結構素直にできると思うんです。ただ、その文字列をSplitしたい!とか、UATからJSTに加工したい!など、利用したい時がめんどくさい。
昔は、マウスをホバーして、必死に手で書き写してたんですが・・
大変でした。
素直に全部選択して(この例だと指アイコン、郵便番号、×を全部選択)右クリックコピー、あるいは、Ctrl+C で、
@{triggerBody()['location']['address']['postalCode']}
って入ってきます。
例えばこれをSplitしたいなら、先頭のアットマークと中かっこをはずせば再利用可能。
Split(triggerBody()['location']['address']['postalCode'],'-')
これは早く知りたかった。
#@をはずしてああしてこうしてなど処理が多いとか、数式が長くなる時は、自分はSakuraエディタなどに一度貼り付けて、いろいろ編集してからPowerAutomateに貼り付けてます。
数式の更新時には「更新」を押す
リターンを押して満足してしまうことがちょくちょくあるので、式を編集したら「更新」ボタンをお忘れなく。
とはいえ、なんだかうまく更新が保存されていないこともあるような気がするんですよね。更新のあと、一応マウスホバーで見たほうが安全。
条件分岐がうまくいかないときのデバック
条件分岐がうまく動作しないとき、PowerAutomateの「テスト」結果を見るだと、「はい」「いいえ」のどちらに分岐したかわかるだけなんですよね、、見にくい。
例えば 郵便番号が000-0000に一致しているかの分岐を組んでいるのに、なぜか いいえにしか行ってない、おかしいぞ、みたいなとき。
一時的に値がどう評価されているか(値に何が入っているか)見たい時などは、条件アクションに入る前に、データ操作 → 作成 で値をチェックすると「テスト」したときに結果が見えやすいです。デバッグが終わったら消しましょう。
デバッグのためにアクションを一時的に止めたい
Teams通知のアクションをOFFにしておきたい、みたいなときには、2種類方法があります。
その1)静的な結果(プレビュー)を使う
アクション単位で制御したい時にはこの方法です。「・・・」メニューから静的な結果を選んで、
トグルボタンを青くして、完了ボタン。
これにより、このアクションだけがスキップされます。黄色いフラスコマークが目印です。
2)途中から実行を全部止めたい。
長いフローを組んでいて、最初の部分の動作だけチェックしたい、みたいなときです。
「コントロール」→「終了」 アクションを入れておけば、その後ろは実行されません。
フロー作成後のアクション名変更には要注意
変数なら後続のアクションからアクセスするときに
variables('Title') などでアクセスしていると思うので大丈夫なのですが、
Apply to each アクションなどではまりがちな話です。
Apply to eachは、配列の要素ごとになにかを実行するときに使うのですが、各要素へのアクセスに
items(''Apply_to_each)
でアクセスしています。
ループをわかりやすくしたいなーと、上記のApply to eachアクションの「・・・」をクリックして名前を変更すると、ループ内の動作がことごとくエラーになるので、気を付けましょう。(自動的に変えてくれません)
オブジェクト内の要素へのアクセス
例えばSharePointのとあるリストのアイテム(項目)を取得した後、フィールドにアクセスしたいとします。
「SharePoint」→「複数の項目の取得」とかで要素をとってくることはできた。「answer」フィールドの文字列を取得したい。このレベルであれば、動的なコンテンツの追加 でうまく候補がでてきますが、複雑なケースだと自力で
outputs('項目の取得')?[body/answer]
のような式を書くことになるでしょう。
配列が返ってくると想定して、そのひとつめにアクセスするなら
outputs('項目の取得')[0]
のように記載するでしょうが、配列がNullの場合は上記ケースはエラーになって完全ストップしてしまいます。
返りがNullの時にエラーを防ぐためには、
outputs('項目の取得')?[0]
ハテナをいれましょう。
存在するかわからない要素へのアクセス時も同様で、
outputs('項目の取得')?['mail_list']
ハテナつき。これで大丈夫。
※Hiroさんのページにとてもお世話になりました。ありがとうございました。
参考になれば幸いです。
SharePointのリストで曜日を表示する
SharePointのリストは簡単に作れて便利ですね。
PowerAutomateでもよく活用していますが・・・日付型の表示が気に食わないとか、曜日をどうやって表示するのかというところで模索してみたので、メモです。
「テストタイトル」というタイトルでリストを作り、「日付」という名前で日付と時刻型の列を追加しました。
その後、最初のレコード(行)として今日の日付を「日付」列に設定したレコードを作ってみました。
ではここから、やりたいこと(兼目次)は
です。
1)日付の表示を 年/月/日 に
日付 列の横の下矢印メニューから、この列の書式設定をクリックします。
なお、以下でもいけるのかなと思ったら、うまくいかず、月日年になってしまいました。自分の環境のロケールの設定がよくないのかもしれません。しかし調べがつかず・・いいから年月日!なら上のgetYearなどをごりごり書いたほうが確実かと思いました。
{
"elmType": "div",
"txtContent": "=toLocaleString(@currentField)"
}
なお、JSONを入力した後プレビューボタンですぐに確認できるので、いろいろ試してみてください。
利用可能な関数はこちら( 演算子 )の項あたりにあります。TEXT関数は使えません。
これで日付 列の表示を 年/月/日 に変更できました。
2)曜日を表示したい
先ほどの日付列をもとに、曜日表示用の列を別途作る方法で紹介します。
画面の右上、歯車マークで、リストの設定をクリックします。
列の作成 をクリック。
列の作成で、列名 は 曜日 、集計値 型で数式を指定した列を追加します。
数式に入っているのはこんな文字列です。
=TEXT(WEEKDAY([日付]),"ddd")
※2022/5/21追記 TEXT([日付],"ddd")でも曜日表示できるとのこと。ほげさんありがとうございます。
右下に OK ボタンがありますので押して保存します。
なおこちらも使える関数リストはこちら。
リストに戻ると・・・
曜日列が追加されました!
なお、先ほどの数式を
=TEXT(WEEKDAY([日付]),"ddddd")
に変更すると、 Sunday と省略なしで表示してくれます。
悲しいお知らせとしては・・・ExcelのTEXT関数では、日本語の曜日表示(月火水 )が
=TEXT(A1,"yyyy/MM/dd aaa")
みたいに「aaa」とか「aaaaa」でできますよね。
SharePointではaaa も aaaaa も使えませんでした。
※代わりと言っては何ですが、こちらの数式にはIFを使うことも可能なので、
=IF(WEEKDAY([日付])=1,"日曜",IF(WEEKDAY([日付])=2,”月曜"・・・
といった数式を1から7まで全部書けば日本語表示もできます。スマートさには欠けますが。。
感想
案外トリッキーで調べにくかったです。同じような箇所なのに使える関数が違ったりするの、つらい。マニュアルも、文字列フォーマットの説明とか少ないですし。
参考になれば幸いです。
Microsoft PowerPlatformの基礎資格、PL-900取得の道のり
PowerAutomateを自社内でちょこちょこ活用しています。
PowerAutomateを使って、受信したメール本文内容からOutlookカレンダーへの登録(前編) - 拾って落とすエンジニア活動ログ
最近はPowerBIにも手をのばしていて、さらにPowerAppも使ってみたい。
というところで、こんなにPowerシリーズ使っているのだから、資格とってみた、の話です。
- 資格のパス的な話
- PL-900の受験までの道のり① 無料で受験しよう
- PL-900の受験までの道のり② 学習を進める
- リモート受験の環境準備
- 試験
- 感想
- ちょっと寄り道:英語サイトURLを日本語サイトURLに変換したい
資格のパス的な話
PowerPlatformで最も基礎となるのが、こちらです。試験で言うとPL-900。
本記事は上記PL-900の話です。
このあとのレベルアップコースはこちらの資料が詳しいですが
https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4ITXR
データアナリストDA-100、コンサルPL-200、
AppMakerPL-100、デベロッパPL-400 に分岐します。
AppMakerとデベロッパの違いは、MSサイトでざっと見た限り、
- AppMaker/PL-100 ⇒ PowerPlatform(Dataverseも)作り込み専門家
- デベロッパ/PL-400 ⇒ PowerPlatformも前提知識だが、DevOpsとかUXも範囲に入ってくる、ザ・開発
に見えました。
その上位にエキスパート(ソリューションアーキテクト)としてPL-600もあります。こいつはPL-200または、PL-400のいずれかの合格が前提です。
PL-100の立場は一体・・
PL-900の受験までの道のり① 無料で受験しよう
まず、Virtual Training Dayに参加して、無料受験できる権利をいただきました。ありがとうマイクロソフトさん。定期的に開催されていて、Azureが多いですが、PowerPlatformもあります。
参加して数日すると、メールが送られてきます。
ポータルで「Check Eligibility」すると受験料が0円になるという話でしたが、自分の場合MSアカウントは個人アドレス、VirtualTraning参加は会社アドレス、といった事情もあり、なかなかうまくいかず半泣きになりました。
んで、MSのトレーニングのサポートさんに助けてもらいました。
サポートのおかげでなんとか無料で試験予約できましたよ。
Edgeを使うとかキャッシュクリアとか、相当時間使いましたね、、困っている方いっぱいいるのは上記サイトでもわかるので、昔みたいにバウチャーコードがもらえる形が嬉しいなぁ。
PL-900の受験までの道のり② 学習を進める
TrainingDayでも基本的なことは教えてもらえますが、ここを一通りクリア。
実際にPowerシリーズを触っていると、とても理解がすすむのでおすすめ。業務でやろうとしていたことも理解の助けになりました。
他にはUdemyのコース。本当に助かりました。英語だけど。
AUG Updated | 195+ques to build confidence | Ace PL 900 in first attempt | Detailed explanations |Read reviews b4 buying
Udemyって、普通のeラーニングコース(動画)しかないでしょって思いこんでいたのですが、そんなことはなかった。
上記コースの中に、5個模擬試験(それぞれ約40問)があります。
多少問題の重複もありますが全部で200問くらいってことですね。
本番さながらにタイマーもあり、約40問解いたら、合格・不合格表示、問題ごとの正誤の表示に、解説もあります。
これを1周とちょっと。
この問題の解説には、参照するべきMSのDOCサイトURLがあるので非常によいです。単に○×だけじゃよくわからないですからね。
リモート受験の環境準備
テストセンターに出かけるのではなく、OnVUEリモート受験してみました。(申し込みの時に選択)
上記の条件があります。試験申し込みサイトに詳しく書いてあるのでご参照を。
事前にテストツールを走らせて、マイク、スピーカー、テスト、ネットワーク速度が基準を満たしているか確認できます。
試験の30分前にログインして、自分の顔写真や部屋の写真、本人確認書類の写真を送ってしばし待つと、担当の方と日本語チャットで、部屋の様子の確認を行います。(Webカメラで部屋中写すなど)
リビングで受験したのですが、テレビを完全に布で覆えと言われたのはビックリしました、、あと壁の絵もはずしてと言われたのですが、無理だと相談したら絵を背に向けるように座る位置を変更せよと。
余裕をもって準備しましょう。あと、360度見られちゃうので恥ずかしいものは隠しておきましょう。
試験
テストの内容は言えませんが、MSのラーニングコースの知識チェックで見たような設問もいくつかあったようには思います・・知識チェックだけだと数が少ないので、Udemyやっててよかった。
英語切り替えボタンがあり、日本語で表示されている設問を英語に切り替えたりもできるのは便利でした。
感想
終わって提出すると即「合格 おめでとうございます」と表示されてほっとしました。
700点で合格のところ、800点ちょっと(分野ごとの正答率グラフもすぐに出る)でした。
前日夜もUdemyで不合格を連発していたので、間違った問題を見返すなど、追い込みがきいてよかったです、、、勉強しないと落ちます。間違いない。
体系的に知識が身につくのでよかったです。VirtualAgentとか、これまで触っていない機能も案外使えそう!など、気づきもありました。
ちょっと寄り道:英語サイトURLを日本語サイトURLに変換したい
Udemyのテスト解説には、MSのDOCのURLが掲載されているんですが、英語の講座なので、DOCのURLも英語サイトのURLです。
こんな感じ↓(本家はリンクではなく、平テキストです)
https://docs.microsoft.com/en-us/learn/modules/introduction-common-data-service/2-overview
※上記に対応する日本語サイトは以下。en-usをja-jpに変える(さすがMSさん)。
https://docs.microsoft.com/ja-jp/learn/modules/introduction-common-data-service/2-overview
で、Udemyの解説ページを見て、このDOC見ようかなと思ったら・・
- 英語サイトURLコピー
- ブラウザに貼って英語サイト見る
- よくわからなかったら、URLを編集して日本語サイトに見に行く
このひと手間が、めんどくさい・・・・
こういうのは、javascriptで解決!
以下のHTMLをコピペして index.html という名前で保存すると便利なので、ぜひどうぞ。
<!DOCTYPE html>
<html>
<head>
<title>enURL 2 jpURL</title>
<script>
function inputChange(){
let mytext = document.getElementById('mytext').value;
window.open(mytext.replace('en-us','ja-jp'));
}
</script>
</head><body>
<div style="margin:15px">
<H2>en-usのURLを貼るとja-jpサイトを開きます</H2>
<form action="" onsubmit="inputChange()">
<input type ="text" id="mytext" style="width:80%">
<input type="submit" value="Go!">
</form>
<div>
</body>
</html>
上記をメモ帳などに貼って index.html というファイル名で保存したら、ダブルクリックしてブラウザで開いてください。
以下表示されますので、、あとはわかりますよね・・?
us-enのURLをテキストボックスに貼り付けてGo!ボタンで、別タブでja-jpサイトが開きます。
いやー、早くやっときゃよかったよコレ。
以上、参考になれば幸いです。
PowerAutomateを使って、受信したメール本文内容からOutlookカレンダーへの登録(後編)
こんにちわ。
前回の記事の続きです。
※前回作りかけていたフローを見直しました。以下が正になります。
前半部分は、前回説明した通り、メール受信し、本文を一行ずつ分解する準備パートでした。
変数の定義をする部分でもあります。(分岐した後では変数の定義ができなかったので)
後半の 設定
後半では、「条件」を使って分岐します。
まずは「・」で始まっているか ⇒ Yesなら、時刻文字列を取得、フラグをtrueに
フラグがtrueか⇒trueなら、タイトル文字列を取得、フラグをfalseにしてスケジュールを登録
スケジュール登録には、Office365 Outlook のイベントの作成(V4)を使います。
このイベントの作成が、開始日付、時刻の指定に
2021-06-29T10:00:000
という形式の文字列を使う必要がありますので、以下の数式を使いました。
開始時刻
PowerAutomateを使って、受信したメール本文内容からOutlookカレンダーへの登録(前編)
会社で採用されているグループウェアでスケジュールを管理しているのですが、スケジュールを見るのがひと手間かかるんですよね。
スマホのOutlookアプリで見れればいいのに、2分前にアラームもならせればいいのに、、と考えまして、以下の仕様で動作させるようにしました。
※2分前というのは、Zoom接続にかかる時間です。5分前だと油断して他のことしていて大抵遅れる。1分前だとZoom会議室のパスワードがわからんなどで間に合わないことがある。というわけで自分的にはベストな時間!
動作仕様の概要
・グループウェアから毎朝、当日のスケジュールメールを送信する。(ここはグループウェア側の機能です)
・outlookでメールを受信する。
・メールの受信をトリガーにPowerAutomateでメール本文を読み取り、2分前にアラームを鳴らす形でOutlookカレンダーに登録する。
PowerAutomate側の設定
まずはPowerAutomateの画面を開きます。
#URLにflow(旧名称)って残ってるのですね・・・
作成から、
自動化したクラウドフローを選択します。
フローのトリガーは、 メニューから、
「新しいメールが届いたとき(V3)」です。
グループウェアのメールの条件だけにひっかかるように設定します。
某グループウェアだと、Fromが自分のメールアドレス、件名が「〇〇さんのスケジュール 」といったメールが届きますので、詳細オプションを開いて条件に指定します。
要注意なのはフォルダーです。自分からのメールは自動でフォルダ振り分けしている場合は、一番上のフォルダーの指定を変えてください。
次は読み込んだメールの本文を一行ずつ見ていきます。
こちらで紹介されていた方法を使いました。(改行で区切るためにこんな手段をとらねばならないとは・・・別サイトではHTMLをテキストに変換する関数などを駆使して1行で実装している例もみましたが、出力形式によってはうまく動作しないようだったので、確実に動作しそうなこちら)
上記で文字列を配列に分割しましたので、Apply to Eachループの中で一行ずつ内容を見れるようになります。次は各行の内容から
・開始時刻
・終了時刻
・タイトル
を取得します。
※ここはグループウェアの仕様にかなり依存しますが、
「・hh:mm - hh:mm」
上記で開始時間と終了時間が表示され、その次の行に
「打ち合わせタイトル」
という形で1日分のスケジュールがまとめて送られてくる仕様だということで続けます。
・9:00 - 9:05
朝会@Zoom
・10:00 - 11:00
XXプロジェクトキックオフ
みたいな本文イメージです。
Apply to eachループで1行ずつ見て、「次の行の文字列を取得する」ができればすぐなのですが、現時点やり方に到達できなかったため、以下のやり方をします。
変数として、「開始・終了時刻を取得した次の行=タイトルを取得するべき状態にいるのか、そうではないのか」フラグを持つ。
各行で
行頭が「・」 ⇒ 開始時刻、終了時刻を取得し、上記フラグをtrueにする
上記フラグがtrueである⇒タイトルを取得する & フラグをfalseに戻す
という流れで取得した開始時刻、終了時刻、タイトルをもとに、 あとはOutlookへの登録です。
ここまでは動作の概略を説明しました。次の記事で後半の詳細な設定を説明します。
初級ソフトウェア品質技術者、勉強してみた所感
いよいよ時間がだいぶ経過してしまいましたが、合格していました。初級ソフトウェア品質技術者!
合否発表はまずweb(別に連絡が来るわけではないので、ちょくちょくサイトを見に行ってました)で、合格していればその後郵送で連絡が来ます。正答率くらいは教えてもらえます。
偉そうにまとめたりしていたので合格して安心したというのが本音でした(笑
マークシートだけど発表まで時間がかかるのでお急ぎの方は気をつけてください。
学んだことを部署で共有しましたが、開発部署ではないこともあり、ソフトウェア品質規格ISO/IEC25010の、製品品質モデルと利用時の品質モデルはチェック観点の漏れ防止に良さそうですよ、といった共有になってしまいました。組織のミッションによりますね。
ともあれ、自分が開発メンバと話すときになんの知識もなくヤバい感があるのを払拭したいという目的は達成できました。ので良かったとしよう。
ただ、、
曲がりなりにアジャイルとかスクラムの真似っこをしているので、それに近い話の方が新しく見えてウケたかもしれないなというのは後からの反省。
以前の投稿で紹介していたGoogleのテストの書籍
であったり、アジャイル品質保証のための役割あるいは職種としてのQEの記事を最近見かけたのですが、自動化の話も強いし自分には具体的で面白かったです。
ソフトウェア品質技術者のバイブル?であるSQUBOKもバージョンが上がり、アジャイル対応が記載されたそうですので、少し近づいているかもしれません。
追記、SQuBOKの新しいバージョンに沿って資格の受験シラバスが更新されるのは2021年11月の試験からだそうです。
参考になれば幸いです。