かつおの「もっと教えてくれや!」
#8_設定で駄目ならプラグイン!?
おっす! かつおです。
春になりましたね。
花粉症持ちの人には厳しい季節ではありますが、いろんな場所にお出かけして、新しい発見をしたいですね。
ってなわけで、今回も始まります。
![中島](/framework/column/images23/tmb/nakajima.webp)
ふぐ本さん。おはようございます~
先週は盛り上がりましたね。ご馳走様でした
今日も軽く行きましょうか!
![かつお](/framework/column/images23/tmb/katsuo.webp)
おう、おはようさん。悪いが今日はやめとくわ
![中島](/framework/column/images23/tmb/nakajima.webp)
えーなんでですか……ってふぐ本さん顔が真っ黒になってますよ!
この前パーティーしすぎたせいで、ついに肝臓が!?
![かつお](/framework/column/images23/tmb/katsuo.webp)
ちゃうちゃう、旅行に行ってきてん
結婚10周年でハワイやー。ほら見てみぃ
![中島](/framework/column/images23/tmb/nakajima.webp)
Tシャツが透けて背中にALOHAの文字が!!
カッコいいっ。けどさすがにこれは派手すぎじゃないですか
![かつお](/framework/column/images23/tmb/katsuo.webp)
がはは、冗談や冗談。自慢したかったんや。トイレで着替えてくるわ
![かつお](/framework/column/images23/tmb/katsuo.webp)
さてさて中島くん。おれはな、この旅行で色々考えとってん
![中島](/framework/column/images23/tmb/nakajima.webp)
何をですか
![かつお](/framework/column/images23/tmb/katsuo.webp)
今回の飛行機のチケット、ネットから予約したんやけどな。こんなシステムおれにも作れるんやろかってな。
でも、考えれば考えるほど問題がでてくるんや
![中島](/framework/column/images23/tmb/nakajima.webp)
うーん。予約システムって複雑ですからねぇ。例えばどんな問題でしょうか
![かつお](/framework/column/images23/tmb/katsuo.webp)
飛行機のチケットって単純に席数だけ売り切るわけやないやん? 実際には統計をとって、実際の席数よりも多めにチケット売らなあかんやろ
![中島](/framework/column/images23/tmb/nakajima.webp)
へぇーあれって意図的だったんですね
さすがふぐ本さん、出張いっぱい行ってるだけあって詳しいですね
![かつお](/framework/column/images23/tmb/katsuo.webp)
でもな、今のロジックの設定だけで作ろうとするとガバガバになってまうねん。何人もボコボコにして引きずり下ろすことになってしまうわ
![中島](/framework/column/images23/tmb/nakajima.webp)
フグモッド航空恐ろしいですね……
確かにそういう業務独自の複雑な処理はロジックでは実現できないことがありますね。そういう場合は、
プラグイン
で処理を実装です
![かつお](/framework/column/images23/tmb/katsuo.webp)
プラグイン……ちゃんと覚えとるぞ。講習でやったやつやろ。 Eclipse 使って Java で作るやつな。Javaなら得意やったから全部覚えとるわ
![中島](/framework/column/images23/tmb/nakajima.webp)
そうです。今回のようなオプションやロジック等の設定では解決できない
業務独自の処理
はプラグインを実装して対応します
プラグインにも何種類かありますが、よく使うのは、プログラムに対して設定する
パターンプラグイン
ですね
![いろんなプラグイン](/framework/column/images23/setting-or-plugin/ka8-1.webp)
![かつお](/framework/column/images23/tmb/katsuo.webp)
ちなみに、業務独自って言っとるけど、どこまでが設定でできて、どこからがプラグインの実装が必要かどうやって判断したらええんや。そのあたりよく分からんわ
![中島](/framework/column/images23/tmb/nakajima.webp)
うーん。そこは難しいところですね。明確な基準はなくて、適した設定があるか無いかですね
ちなみにぼくはこんな感じで探して判断しています
![プラグイン実装までの流れ](/framework/column/images23/setting-or-plugin/ka8-2a.webp)
![かつお](/framework/column/images23/tmb/katsuo.webp)
テーブルオプションの設定欄とか、アクションの選択候補は分かるけど、
Javadocの
OPT_
から始まるとか、
CONF_
から始まるってなんやねんこれ
![中島](/framework/column/images23/tmb/nakajima.webp)
楽々Framework3での オプション や SeiConfigパラメータ って、Javadocで定数として定義されているんですよ。オプションは OPT_オプション名 で、SeiConfigパラメータは CONF_パラメータ名 で定義されています。なので、Javadocの索引から O で始まるものや、 C で始まるもので絞って見ると確認できます
![Javadocの索引で検索](/framework/column/images23/setting-or-plugin/ka8-3.webp)
![中島](/framework/column/images23/tmb/nakajima.webp)
この例ですと、top.document.titleというオプションでブラウザのタイトルを変更できることが分かります。
最初のOPT_やCONF_を省いて、_(アンダーバー)を.(ドット)に変更したもの
がオプション名、パラメータ名になります
ちなみに、テーブルオプションやアクションもJavadocに説明があります。『RakStudioを使おう!
~ロジックでユーザビリティをあげろ!~』でやった通り、こちらは設定欄の『?』マークをクリックすると開けましたね
![かつお](/framework/column/images23/tmb/katsuo.webp)
全部逆引き辞書でヒットしたら便利やのにな
Javadoc多すぎて見るの辛いわぁ
![中島](/framework/column/images23/tmb/nakajima.webp)
確かにヒットしないことも多いですね。そんな時は、 楽々FrameworkII の方の逆引き辞書も使ってみていいかもです。順次移行中ではあるんですが、やっぱり歴史が長い楽々FrameworkIIの方が件数多いですからね
![かつお](/framework/column/images23/tmb/katsuo.webp)
今回の場合は、飛行機のチケットがキャンセルされる可能性を統計を使って計算して、 購入処理をチェックしたり 画面上に表示する データの条件を加工 したりするわけやけど……さすがにこれはロジックもオプションもないな
![かつお](/framework/column/images23/tmb/katsuo.webp)
やからプラグインで組むんやろうけど、購入時に計算してチェックや、条件の加工、うーん……
あかん! 分からんぞ!
講習だけじゃ分からんやろこれ!!!
![中島](/framework/column/images23/tmb/nakajima.webp)
あわわ、ふぐ本さん、落ち着いてください。一気に難しいのは無理かもしれませんが、徐々に考えていけばいけますよ
![かつお](/framework/column/images23/tmb/katsuo.webp)
ふーふー、すまんのつい興奮してしもたわ。こういう場合はどうしたらいいんや、教えてくれや
![中島](/framework/column/images23/tmb/nakajima.webp)
じゃぁまず、復習からいきましょう
作ったプラグインはプログラムやDDにセットすると、各タイミング毎に対応するメソッドが呼び出されるようになります。このメソッド内で行いたい処理を実装しておけば、任意のタイミングで独自の処理を実行できるようになるわけですね
![一連の処理の流れ](/framework/column/images23/setting-or-plugin/ka8-4.webp)
![かつお](/framework/column/images23/tmb/katsuo.webp)
この各タイミング毎に対応するメソッドってどれ見たら分かるねん
![中島](/framework/column/images23/tmb/nakajima.webp)
呼び出しているメソッドは、パターンによって自動でセットされている「プラグイン
~ 呼出」
のロジックから確認することもできますが、以下の
Javadoc
を見る方が網羅されていていいと思います
楽々Framework3 Javadoc
jp.co.sei.is.lib21.pms.ptn
インタフェース iPtnPlugin
![かつお](/framework/column/images23/tmb/katsuo.webp)
サンプルもあってこのJavadocは分かりやすいな。
練習がてら一回作ってみるか
……この右下のチェックボックスは何選んだらいいんや
![Javadocの流れ](/framework/column/images23/setting-or-plugin/ka8-5.webp)
![中島](/framework/column/images23/tmb/nakajima.webp)
ここはプラグインのソースファイルにテンプレートとして出力したいメソッドの種類を選択します。例えば、新規登録時に呼び出されるメソッドのテンプレートを出しておきたい場合は、新規登録関連の欄に
チェックを入れるとメソッドが定義された状態でソースが生成されます
![かつお](/framework/column/images23/tmb/katsuo.webp)
ほーん。なんやよう分らんから全部にチェック入れとこ
![中島](/framework/column/images23/tmb/nakajima.webp)
ええ……
![かつお](/framework/column/images23/tmb/katsuo.webp)
なんやこれ、えらい大量にメソッド出てきたけど、ちゃんと コメント 入っててこれも分かりやすいやないか。気に入ったで
![コメント付きでメソッドの書き出し](/framework/column/images23/setting-or-plugin/ka8-6.webp)
![中島](/framework/column/images23/tmb/nakajima.webp)
これで分かりやすいならどっちでもいいけですけど。
使わないメソッドは今後のソースの見やすさや、無駄な呼び出し処理を削減するため消しておいてくださいね
![かつお](/framework/column/images23/tmb/katsuo.webp)
これ見るとなんかイメージがつかめてきたぞ。購入前(登録前)のチェックは checkInsert メソッドに実装して、データ取ってくる条件の加工は setSql メソッドに実装したらええんやな
![中島](/framework/column/images23/tmb/nakajima.webp)
その通りです! あとはその中でどんな処理をするかですよね。まずは
checkInsert
の方を考えると、DBの統計値データを参照して、入力値をチェックしてエラーメッセージを出すとかでしょうか
実際にはもっと複雑でしょうが、とりあえず、これらやりたいことを細分化すると、逆引き辞書でも見つかります
楽々Framework3 逆引き辞書
-
逆引-00107
プラグインでSELECT文の取得結果を先頭行から順に処理する方法 -
逆引-00213
プラグインにて入力値のエラーチェックをする方法 -
逆引-00264
パターンプラグインでエラーメッセージを設定する方法
![中島](/framework/column/images23/tmb/nakajima.webp)
また、setSqlメソッドでは、検索条件を追加したりすると考えると、こんな逆引き辞書がありました
楽々Framework3 逆引き辞書
-
逆引-00028
プラグインにて検索条件を追加する方法
![かつお](/framework/column/images23/tmb/katsuo.webp)
意外といけそうな気がしてきたぞ。でも、どう探しても逆引き辞書が見つからん時があるんやけど、そん時はどうしたらええねん
![中島](/framework/column/images23/tmb/nakajima.webp)
うーん、そんな時は、逆引き辞書で検索するなら、「回答」欄に対しプラグインの
メソッド名
や引数の
クラス名
で検索をかけるのもいい方法かと思います。それでもなければ、メソッドの引数のクラスをJavadocで確認して、操作の仕方を調べていくしかないですね
今回のsetSqlメソッドの例だと、PmsSqlクラスとかですね
楽々Framework3 Javadoc
jp.co.sei.is.lib21.pms
クラス PmsSql
![かつお](/framework/column/images23/tmb/katsuo.webp)
まぁ、なんとなくイメージは掴めたわ。プログラミングっちゅうのはそんなもんやし、しゃあないの。小さなことからこつこつとやな!!
![中島](/framework/column/images23/tmb/nakajima.webp)
そうですね。千里の道も一歩からと言いますから
![かつお](/framework/column/images23/tmb/katsuo.webp)
そうやな。でもおれやったら千里の道も一歩でゴールしたるわ!
っということで、また一歩立派なエンジニアに近づいたふぐ本さん。
そんなふぐ本さんを独自実装の恐怖が襲う!
次回、「かつお、デバッグってどうやんねん」をお送りします。
※タイトル及び内容は予告なく変更される場合があります。あらかじめご了承ください。