OutSystemsエンジニアの猛勉強ブログ

初心者OutSystemsエンジニアのブログです(ぺこり)。

OutSystems戦記第3話「VSアルゴリズム編・完結」

このエントリーではアルゴリズムとの戦いを終結させます。
どんなアルゴリズムができあがるのか?
知りたいと思うので(知りたくねーよ!とか言わないようにw)、完成品を最初に貼っておきます。
作るのは2つです。

 

1.在庫変動アルゴリズム(User Action)

f:id:neomatsudaira:20160303154421p:plain

このアルゴリズムは、在庫から商品を出荷したときに、自動的に在庫の数を減らすアルゴリズムです。User Action内で作るものなので、何度でも呼び出し可能です。
通常、呼び出すときには呪文を唱えるため、魔法みたいなものですね。

ピンク色で囲んだところは「戻り値」のコードです。
ここで戻り値「True」を取得することで、Saveボタンのアルゴリズム内で警告メッセージを出力する分岐へと進むことができます。

 

2.Saveボタンを押したときのアルゴリズム

f:id:neomatsudaira:20160303155051p:plain

こっちはSaveボタンを押したときのアルゴリズムです。
一番上、Startの次のオレンジ色の丸が呼び出しプログラムのUser Actionです。あのオレンジ色のなかに「在庫変動アルゴリズム」のすべてが格納されています。
小林が呪文を唱え、呼び出したのです!

その下ひし形がIF文で分岐です。戻り値Trueを取得していた場合は右へ進みます。そこで警告メッセージを表示させ(Assign)、プログラムを終了させます。
Falseだった場合は下に進み、在庫のデータを正常に保存してくれます。

 

さて。前回の続きから、やっていきます!

f:id:neomatsudaira:20160303155619p:plain

この字幕はおっしゃるとおりで、これでは業務用アプリケーションとして使用することは難しいです。実用化できないです。

 

よって、在庫がマイナス値になる場合はプログラムを発動させず、警告メッセージを表示させるよう戻り値を設計する必要が出てくる。まずは戻り値の箱だけ作っておく。この箱はかなり下の方で使われることになる。

f:id:neomatsudaira:20160303155941p:plain

戻り値の名前は「NotEnoughStock」とする。
読めない名前にするなー!と言いたい。変数の型は「Boolean」にする。在庫がマイナス値になったときには真(True)を渡して正常に処理されないようにするのですが、使うのはまだ先です。

 

次にIF文の設計をする!
もはや初心者ではないような気がする。

f:id:neomatsudaira:20160303160528p:plain

 

IF文に条件式を入力していく

f:id:neomatsudaira:20160303160706p:plain

条件式は

 OrderItem.Quantity <= GetProductById.List.Current.Product.QuantityInStock

これを日本語訳すると超簡単になる。
なので日本語化していきます。ふふふっ。

 

  OrderItem.Quantity・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・購入する商品の数量が

  <=・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・少ないか等しければ

  GetProductById.List.Current.Product.QuantityInStock・・・・在庫量より

 

この条件式は日本語の文脈上、真ん中を最後につなげます。
そうすると「購入する商品の数量が在庫量より少ないか等しければ」その数量分、商品を注文できます。となります。

そりゃそうです。
在庫量より多く商品を注文することはできないです。
そしたら、またマイナス値になっちゃいます。

 

だからマイナス値になるのを防ぐために、 このIF文が必要になります。
やっぱり、アルゴリズムは楽しい!
そして、在庫量がマイナス値の場合(False)のアルゴリズムも書いていきます。

f:id:neomatsudaira:20160303161615p:plain

IF文の条件式がFalseのときは右へいきます。
そしてAssignで戻り値を取得します。
 

なんか

f:id:neomatsudaira:20160303161747p:plain

英語ばっかなのに、素で読めるようになってしまった小林です。
字幕を日本語訳すると「戻り値の真偽値が」という意味です。

 

Assignの説明

f:id:neomatsudaira:20160303161935p:plain

つまり、Assign内でやることは、上のほうで作ったNotEnoughStockにTrueをセットさせることです。そして、Endプログラムへと進み、戻り値TrueをSaveボタンの内部プログラムへと持ち帰るのです。

 

こう!

f:id:neomatsudaira:20160303162145p:plain

上のEndが在庫がマイナス値の場合。
下のEndが正常な注文の時。上のときは警告文を表示させるため、NotEnoughStockにTrueをセットさせ、それをSaveアルゴリズムへと持ち帰ることになる。

 

動画の説明はこんな感じ!

f:id:neomatsudaira:20160303162416p:plain

注文の結果を確認して、その取引が成功したかどうかを確認する必要があると動画は説明してる。

 

エンジニアはここまで内部のプログラムを書き込んでいるということです。すごい緻密さです。戻り値にセットしたTrueをIFで検証して、条件分岐のコードを執筆します。

f:id:neomatsudaira:20160304091918p:plain

(Saveボタン内のアルゴリズムに条件分岐を書き込んでいる小林の開発画面)

上から2番目のオレンジ色の丸のなかに在庫変動アルゴリズムのすべてが格納されている。その一個下のひし形がIF文。
コードはこちら

  AddOrderItem.NotEnoughStock

意味は、戻り値を持ってきましたか?です。
戻り値を持ってきた場合ひし形の右へと進み、警告文を表示させます。持ってこなかった場合には、IF文の下に進み、注文が無事に行われ、注文一覧画面へと遷移されます。

 

右側、警告文の説明はこれ

f:id:neomatsudaira:20160303163926p:plain

在庫以上の商品数を注文した輩には警告文をセットするのです。

 

f:id:neomatsudaira:20160303165817p:plain

検証コード(Valid)にFalseを打ち込み警告文を発生させる。警告メッセージには「在庫が切れました」と書いた小林の開発画面。

 

ValidにFalseを打ち込むと警告になるため、メッセージを表示できる。
最後にEndプログラムを書いてSaveボタンアルゴリズムの完成!

f:id:neomatsudaira:20160303170022p:plain

アルゴリズム編が全部終わった。
次はお待ちかね(誰も待ってねーよ!とか言わないようにw。落ち込むから)の完成アプリの実験です。画像数があまりに増えてしまったため、次のエントリーで完成アプリをみていきます。

かなり丁寧に書いたのだけど、それでもちょっと適切な説明ができなくて、この記事、推敲にとても時間が掛かりました。上から2番目のオレンジ色の丸のなかに「在庫変動アルゴリズム」が全部入っているのですが、それの説明が雑になってしまったことに申し訳なさを感じています。

 

(トレーニングは続く)