flowon failure請求 v1examples/invoice/invoice.ja.flow · dandori doc
注文の品を支払期日まで押さえ、支払われたら出荷し、支払われなければ戻す
flowon failure| 行 | 呼び出し | 呼ぶもの | リトライ | タイムアウト | 失敗したとき | 呼び出しのあとの案件 |
|---|---|---|---|---|---|---|
| 56 | 押さえ ← 引き当てる(…) | book 在庫.引当.hold・starts 在庫.引当 | — | — | 在庫切れ → 57 行目timeout・failure → on failure | 押さえ: held |
| 58 | 期限 = 支払条件.支払日(…) | 支払条件.cal の日付 支払日 | 1 秒後と 2 秒後の 2 回(failure) | — | timeout・failure → on failure | — |
| 60 | 入金 = 支払を確かめる(…) | GET https://payments.example.com/orders/{注文}/payment・idempotent | 10 秒おきに 2 回(failure・timeout) | — | timeout・failure → on failure | — |
| 63 | 押さえ ← 出荷する(…) | book 在庫.引当.post・sends post | — | — | expired → 64 行目timeout・failure → on failure | 押さえ: posted |
| 67 | 押さえ ← 戻す(…) | book 在庫.引当.void・sends void | — | — | expired → 68 行目already_posted・timeout・failure → on failure | 押さえ: voided |
| 75 | 押さえ ← 戻す(…) | book 在庫.引当.void・sends void | — | — | expired → 76 行目already_posted → 77 行目timeout・failure → 78 行目 | 押さえ: voided |
| 行 | 終わり方 | 押さえ |
|---|---|---|
| 57 | succeed 結果 = 在庫切れ, 期日 = none | 始まっていない |
| 64 | succeed 結果 = 未払い, 期日 = 期限.day | expired |
| 65 | succeed 結果 = 出荷済, 期日 = 期限.day | posted |
| 69 | succeed 結果 = 未払い, 期日 = 期限.day | voided・expired |
| 78 | fail 戻せない "注文のために押さえた品を戻せませんでした" leaving 押さえ | そのまま引き渡す: held・posted・voided・expired |
| 78 | on failure が最後まで走り、ワークフローは元のエラーで失敗する | 始まっていないか、posted・voided・expired |
ステップを選ぶと、そこについて検査で分かったことが出ます。左のシナリオを選ぶと、その実行が通るところが光ります。ステップの横の数は、その実行が通った回数です。
請求 v1注文の品を支払期日まで押さえ、支払われたら出荷し、支払われなければ戻す
受注: 注文結果: 終わり方・期日: date?examples/invoice/invoice.ja.flow押さえ ← 引き当てる(…) 56 行目56 押さえ <- 引き当てる(注文: 受注.id, sku: 受注.sku, 数: 受注.数) 57 on 在庫切れ => succeed 結果 = 在庫切れ, 期日 = none
押さえ: 始まっていないbook 在庫.引当.hold・starts 在庫.引当在庫切れ → 57 行目timeout・failure → on failure押さえ: held29 # 帳簿が注文のために品を押さえる。押さえるのは chobo のクライアントで、拒否されると、帳簿が付けた 30 # 理由で返ってくる。 31 task 引き当てる(注文: string, sku: string, 数: int) -> 在庫.引当 32 book 在庫.引当.hold 33 starts 在庫.引当 34 errors 在庫切れ
succeed 結果 = 在庫切れ, 期日 = none 57 行目 57 on 在庫切れ => succeed 結果 = 在庫切れ, 期日 = none
押さえ: 始まっていない押さえ: 始まっていない期限 = 支払条件.支払日(…) 58 行目 58 let 期限 = 支払条件.支払日(受領日: now)
押さえ: held支払条件.cal の日付 支払日timeout・failure → on failure7 use dates 支払条件 from "dates/支払条件.cal" 8 lambda "arn:aws:lambda:ap-northeast-1:123456789012:function:payment-terms"
wait until 期限.at 59 行目 59 wait until 期限.at
押さえ: held入金 = 支払を確かめる(…) 60 行目 60 let 入金 = 支払を確かめる(注文: 受注.id, 期日: 期限.day)
押さえ: heldGET https://payments.example.com/orders/{注文}/payment・idempotenttimeout・failure → on failure46 task 支払を確かめる(注文: string, 期日: date) -> 支払 47 http GET "https://payments.example.com/orders/{注文}/payment" 48 connection "arn:aws:events:ap-northeast-1:123456789012:connection/payments/1a2b3c" 49 retry 2 times every 10 seconds 50 idempotent
match 入金.済み 61 行目61 match 入金.済み 62 true => 66 false =>
押さえ: held押さえ ← 出荷する(…) 63 行目63 押さえ <- 出荷する(注文: 受注.id, sku: 受注.sku) 64 on expired => succeed 結果 = 未払い, 期日 = 期限.day
押さえ: heldbook 在庫.引当.post・sends postexpired → 64 行目timeout・failure → on failure押さえ: posted36 task 出荷する(注文: string, sku: string) -> 在庫.引当 37 book 在庫.引当.post 38 sends post 39 errors expired
succeed 結果 = 未払い, 期日 = 期限.day 64 行目 64 on expired => succeed 結果 = 未払い, 期日 = 期限.day
押さえ: expired押さえ: expiredsucceed 結果 = 出荷済, 期日 = 期限.day 65 行目 65 succeed 結果 = 出荷済, 期日 = 期限.day
押さえ: posted押さえ: posted押さえ ← 戻す(…) 67 行目67 押さえ <- 戻す(注文: 受注.id, sku: 受注.sku) 68 on expired => pass
押さえ: heldbook 在庫.引当.void・sends voidexpired → 68 行目already_posted・timeout・failure → on failure押さえ: voided41 task 戻す(注文: string, sku: string) -> 在庫.引当 42 book 在庫.引当.void 43 sends void 44 errors expired, already_posted
succeed 結果 = 未払い, 期日 = 期限.day 69 行目 69 succeed 結果 = 未払い, 期日 = 期限.day
押さえ: voided・expired押さえ: voided・expired終わり(成功)flow が最後まで走り、ワークフローは成功します。
on failure 71 行目呼び出しが失敗し、そのエラーをその場で処理しないときに走ります。最後まで走ると、ワークフローはそのエラーで失敗します。56・58・60・63・67 行目の呼び出しから、ここに来ます。
match 押さえ.state 72 行目72 match 押さえ.state 73 none => pass 74 held =>
押さえ: 始まっていないか、held・posted・voided・expired押さえ ← 戻す(…) 75 行目75 押さえ <- 戻す(注文: 受注.id, sku: 受注.sku) 76 on expired => pass 77 on already_posted => pass 78 on failure => fail 戻せない "注文のために押さえた品を戻せませんでした" leaving 押さえ
押さえ: held・posted・voided・expiredbook 在庫.引当.void・sends voidexpired → 76 行目already_posted → 77 行目timeout・failure → 78 行目押さえ: voided41 task 戻す(注文: string, sku: string) -> 在庫.引当 42 book 在庫.引当.void 43 sends void 44 errors expired, already_posted
fail 戻せない 78 行目 78 on failure => fail 戻せない "注文のために押さえた品を戻せませんでした" leaving 押さえ
押さえ: held・posted・voided・expired押さえ: そのまま引き渡す: held・posted・voided・expired同じエラーで失敗するon failure が最後まで走り、ワークフローは元のエラーで失敗します。
押さえ: 始まっていないか、posted・voided・expired押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) okmatch 入金.済み → true押さえ ← 出荷する(…) oksucceed 結果 = 出荷済, 期日 = 期限.day押さえ ← 引き当てる(…) 在庫切れ → on 在庫切れsucceed 結果 = 在庫切れ, 期日 = none押さえ ← 引き当てる(…) failure → ここでは処理しないon failurematch 押さえ.state → none押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) failure failure failure → ここでは処理しないon failurematch 押さえ.state → held押さえ ← 戻す(…) ok押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) failure failure failure → ここでは処理しないon failurematch 押さえ.state → held押さえ ← 戻す(…) expired → on expired押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) ok押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) failure failure failure → ここでは処理しないon failurematch 押さえ.state → held押さえ ← 戻す(…) expired → on expired押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) failure okmatch 入金.済み → false押さえ ← 戻す(…) oksucceed 結果 = 未払い, 期日 = 期限.day押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) ok押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) okmatch 入金.済み → false押さえ ← 戻す(…) expired → on expiredsucceed 結果 = 未払い, 期日 = 期限.day押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) okmatch 入金.済み → true押さえ ← 出荷する(…) expired → on expiredsucceed 結果 = 未払い, 期日 = 期限.day押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) okmatch 入金.済み → true押さえ ← 出荷する(…) expired → on expiredsucceed 結果 = 未払い, 期日 = 期限.day押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) okmatch 入金.済み → true押さえ ← 出荷する(…) failure → ここでは処理しないon failurematch 押さえ.state → held押さえ ← 戻す(…) already_posted → on already_posted押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) okmatch 入金.済み → true押さえ ← 出荷する(…) oksucceed 結果 = 出荷済, 期日 = 期限.day押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) failure failure failure → ここでは処理しないon failurematch 押さえ.state → held押さえ ← 戻す(…) failure → on failurefail 戻せない押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) failure failure failure → ここでは処理しないon failurematch 押さえ.state → held押さえ ← 戻す(…) ok押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) failure okmatch 入金.済み → false押さえ ← 戻す(…) expired → on expiredsucceed 結果 = 未払い, 期日 = 期限.day押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) failure okmatch 入金.済み → false押さえ ← 戻す(…) failure → ここでは処理しないon failurematch 押さえ.state → held押さえ ← 戻す(…) ok押さえ ← 引き当てる(…) ok期限 = 支払条件.支払日(…) okwait until 期限.at入金 = 支払を確かめる(…) failure okmatch 入金.済み → false押さえ ← 戻す(…) oksucceed 結果 = 未払い, 期日 = 期限.day