Salesforce 認定 MuleSoft デベロッパー 無料問題 8 / 10 ・ 分野9: イベントのルーティング
次の Choice ルーターに、payload.priority が "HIGH" のイベントが入る。2つ目の when の式は、このイベントで評価すると MULE:EXPRESSION のエラーになる(前の処理が vars.quota に想定外の形の値を入れている)。 <choice> <when expression="#[payload.priority == 'HIGH']"><set-variable variableName="lane" value="EXPRESS"/></when> <when expression="#[vars.quota.remaining < 10]"><set-variable variableName="lane" value="LIMITED"/></when> <otherwise><set-variable variableName="lane" value="STANDARD"/></otherwise> </choice> Choice のところで何が起きるか。
- lane は STANDARD。評価に失敗する when があると、Choice は既定のルートに回す
- lane は EXPRESS。1つ目が true なので、2つ目の式は評価されずエラーも起きない
- MULE:EXPRESSION のエラー。Choice はルートを選ぶ前に when の式をすべて評価する
- MULE:EXPRESSION のエラー。1つ目のルートを実行したあと、2つ目の式も評価される
正解と解説を見る
正解: B
正解の理由
公式の説明では、Choice ルーターで実行されるルートは1つだけで、最初に true になった式のルートが実行され、残りの式は確かめられない(the others are not checked)。この問いでは1つ目の priority == 'HIGH' が true になった時点でルートが決まり、2つ目の式には評価が届かない。評価されない式は失敗のしようがないので、MULE:EXPRESSION のエラーは起きず、lane には EXPRESS が入って Choice の後ろへ進む。2つ目の式がエラーになるのは、1つ目が false で、評価がその式まで進んだイベントのときである。
違う選択肢
「MULE:EXPRESSION のエラー。Choice はルートを選ぶ前に when の式をすべて評価する」… Choice は when の式をまとめて先に評価しない。上から順に評価し、true になったところでルートを決めるので、2つ目の式に評価が届かない。
「MULE:EXPRESSION のエラー。1つ目のルートを実行したあと、2つ目の式も評価される」… ルートが決まったあとに残りの式を確かめることはない。公式に、残りの式は確かめられない(not checked)と書かれている。1つ目のルートを実行したら、Choice の後ろの処理へ進む。
「lane は STANDARD。評価に失敗する when があると、Choice は既定のルートに回す」… 既定のルート(otherwise)が実行されるのは、どの式も true にならなかったときである。この問いでは1つ目が true なので、2つ目の式の中身にかかわらず既定には回らない。
押さえどころ
イベントによっては失敗しうる式や、評価に手間のかかる式は、下の when に置くと、上の when が true のイベントでは評価されずに済む。when の並びは、どのルートを優先するかだけでなく、どの式が評価されるかも決める。