RPAエンジニアの雑記

RPA(Blue Prism)について色々記載してます。

(BluePrism)ポケモン図鑑を作る ~Part10 画像URLの作成とプロセス完成編~

おむおむです。
有給休暇取得なうです。
結局会社のSlackもメールも確認してるんだけどね☆

さて、前回はSlack Skillを使用して
Slackにメッセージを送信しました。
newgraduate19-rpa.hatenablog.com

今回は、タイトルの通り
ポケモンの画像のURLを作成して、
そのほか細かいエラーハンドリングなんかをテキトーに実装して
本処理を行うプロセスを完成させようと思います!
f:id:newgraduate19:20200703114231p:plain

作成するURLの確認

さて、まずは作成するURLってなんだったっけ?
というところを再度確認していきます。

詳しい内容については、Part2の記事内でご説明した通りです。
newgraduate19-rpa.hatenablog.com

つまり、https://raw.githubusercontent.com/fanzeyi/pokemon.json/master/images/{ID}.pngのように
画像URLの文字列を作成する処理を実装しよう!
というのが今回のテーマです。

0パディングする

え?そんなの計算ステージとかで
テキトーに文字列結合すればいいんじゃないの?
と思うじゃないですかぁ?

甘い!
甘すぎる!


(埼玉県ネタ、実際は上品で優しい甘さです☆) f:id:newgraduate19:20200703115928j:plain
www.jumangoku.co.jp

URLの中で使用されているIDは、
3桁になるように0パディングされているのです!

というわけで、パディング処理を追加します。

パディングを行うには、
Utility - Strings」の「Pad Left」を使用します。

入力パラメータについては以下の通り。

Input String: パディングされる文字列。
Target Width: 何文字までパディングするか。
Padding Character: パディングする文字。

今回の場合は↓のような感じ。

Input String: [ID]
Target Width: 3
Padding Character: "0"

ちなみに、データアイテム[ID]数値型であるため、
素直に右ペインからドラッグアンドドロップしようとすると
テキスト型のところに数値型持ってくんじゃねえよ!と怒られます。
ぴえん。

回避するには、直接キーボードで[ID]と打ち込むか、
もしくは電卓アイコンをクリックして表示される
式の選択(式エディター)でドラッグアンドドロップすると
エラーを出さずに指定することができます。
f:id:newgraduate19:20200703120854p:plain

なお、出力パラメータにはちゃんとテキスト型を指定しないと
せっかくパディングした0がサプレスされるので注意です。

ちょちょいとエラーハンドリング追加

ここまでで作成した送信用テキストと画像URLを指定して
Slack Skillを配置すれば、実処理は終了です。
f:id:newgraduate19:20200703161239p:plain

あとは、エラーハンドリングを少しだけ追加しましょう。

SQL Server操作編で、指定された名前のポケモンがDB上にいなければ
IDに0を返すということを利用して、
0だった場合Business Exceptionを出すよう変更しました。
newgraduate19-rpa.hatenablog.com
こいつを復元ステージでキャッチして、
Business Exceptionの場合と、
SQL Server側のエラー(そもそも接続できないなど)とで
処理を分けるようにします。

SQL Server側のエラーは「Internal(内部)」となるので、
どうやら例外タイプで分けるとよさそうです。

例外タイプは、Blue Prism側で用意されている
例外関数「ExceptionType()」を使うと取得できます。

こいつを使って、判断ステージ内で
ExceptionType()="Business Exception"とすることで、
例外タイプがBusiness Exceptionかそうでないか
分岐を作成することが可能です。
f:id:newgraduate19:20200703164240p:plain

あとは計算ステージで送信メッセージを
いい感じに編集してあげればOKです。
f:id:newgraduate19:20200703162412p:plain

そのほかのアクション(Web API側)のものは、
例えばPoke APIを提供しているサーバが停止する
ネットワークの不調でリクエストに失敗するなどが
主に発生すると考えられます(めったにないとは思いますが)。

この辺は、出力パラメータとして
デフォルトで用意されている
HTTP Status Codeで分けよう、と思ったのですが、、、

あえてIDを不正なものにして404エラー出してみると
f:id:newgraduate19:20200703163705p:plain

f:id:newgraduate19:20200703163900p:plain

いやInternalエラーかいな。。。
正常終了してHTTPステータス吐いてくれや。。。
(Ideas Portalに上げようかな)

まあこの辺はしょうがないので、
Web API処理で発生したエラーはすべてキャッチして、
例外の詳細をSlackに投げてあげます。

例外の詳細は、先ほどと同様に
例外関数の「ExceptionDetail()」を使用することで取得できます。

こいつを使って送信メッセージを更新します。
f:id:newgraduate19:20200703164628p:plain

最終的にはこんな感じのフローになります。
f:id:newgraduate19:20200703165125p:plain

動かしてみよう

まずは正常系ポケモンピカチュウを指定します。
f:id:newgraduate19:20200704125504g:plain

ぃやったぜぇぇぇ!
いやー、やはり思った通りに動いてくれると嬉しいですね。

続いて不正なポケモン名を指定した場合です。
f:id:newgraduate19:20200704130233g:plain
いい感じやーん。

最後に、Web API機能でエラーが発生した場合。
f:id:newgraduate19:20200703174819g:plain
f:id:newgraduate19:20200703173227j:plain

ふう、長い道のりでした。

まとめ

・例外関数、めちゃ便利☆
・プロセステンプレートでも多様されてるから要チェック!
・Slack側で問題が発生した場合のエラー処理?
 そんなの知ったことか!これはただのおもちゃだ!

でかい風呂につかりたい。。。
お風呂カフェ行きたいな。
ofurocafe-utatane.com