flexDtoDefinitionMapのようにTypeScriptのDtoを作成したい

155 views
Skip to first unread message

jet

unread,
Mar 29, 2019, 1:18:27 AM3/29/19
to DBFluteユーザの集い
お世話になっております。
jetと申します。

以前、Flexで開発していたときに
クライアント側にテーブルと同じレイアウトのDtoを渡したいときに
flexDtoDefinitionMapという機能を使用してDtoを作成していました。

現在、環境が変わってSpring Framework+DbFlute+Angularという開発環境になっているのですが、
同じようにテーブルのレイアウトのDtoをTypeScriptで生成したいと考えています。

flexDtoDefinitionMapのように生成することは可能でしょうか。

一応、FlexDtoExtendedEntity.vmの内容を変更すれば対応可能と見ていますが、
拡張子がasのままになるのだろうと考えています。

使用しているDbFluteのバージョンは1.1.9です。

よろしくおねがいします。


kubo

unread,
Mar 31, 2019, 3:37:36 AM3/31/19
to DBFluteユーザの集い
jfluteです

jetさん、こんにちは

引き続き DBFlute ご利用ありがとうございます!

> 一応、FlexDtoExtendedEntity.vmの内容を変更すれば対応可能と見ていますが、
> 拡張子がasのままになるのだろうと考えています。

そうですね、そこを拡張するのが一番手っ取り早いとは思います。
拡張子はvmファイルで簡単に修正できますが、
自動生成後にシェルスクリプトなどで一括変換とかでもいいかと思います。

そのとき、DBFlute Engine を直接修正すると、
DBFluteアップグレードのときに気付かず上書きしてしまうかもしれないので、
拡張したテンプレートはあくまで DBFlute Clinet のフォルダのどこかに置いて、
(例えば、dbflute_xxxdb/templates とか)
manageのスクリプト内でつどつど上書きコピーするようにすると良いです。



ちなみに、FreeGenでもデータベースの情報が使えるので、
似たようなことができますが、こちらはあくまでDB情報は補足情報なので、
少しやりにくいかもしれません。ただ、DBFlute Client だけで閉じることはできます。

// MessagesAndDatabase.vm | dbflute-test-active-hangar
https://github.com/dbflute-test/dbflute-test-active-hangar/blob/master/dbflute_maihamadb/freegen/dbcollabo/MessagesAndDatabase.vm

kubo

unread,
Mar 31, 2019, 5:03:04 AM3/31/19
to DBFluteユーザの集い
jfluteです

FlexDtoを久しぶりに試してみたのですが...

1.1.x (Java8版) において、Java8対応されていないことがわかったので対応しました。
具体的には、java.time.LocalDate など Java8 の日付型に対応できていませんでした。

また、FlexDtoのクラスファイルの拡張子をdfpropで指定できるようにしました。
せっかくなので FlexDto を FlexibleDto 的な感じで、
テンプレートをいじって好きな言語のDtoを作れるようにと。

DBFlute-1.2.0-RC1 を公開しましたので、
TypeScriptのクラスを生成される場合はそちらをご利用ください。
https://github.com/dbflute/dbflute-core/releases/tag/dbflute-1.2.0-RC1


dbflute-test-active-hangarテストプロジェクトにて Example があります。
flexDtoDefinitionMap.dfprop を参考に。

// flexDtoDefinitionMap.dfprop | dbflute-test-active-hangar
https://github.com/dbflute-test/dbflute-test-active-hangar/blob/master/dbflute_maihamadb/dfprop/flexDtoDefinitionMap.dfprop

また、DBFlute Client に置いたテンプレートをmanage.shでコピーする処理も入っています。
こちらも参考にしてみてください。

// extplates/om/java/plugin/flexdto | dbflute-test-active-hangar
https://github.com/dbflute-test/dbflute-test-active-hangar/tree/master/dbflute_maihamadb/extplates/om/java/plugin/flexdto

// manage.sh | dbflute-test-active-hangar
https://github.com/dbflute-test/dbflute-test-active-hangar/blob/master/dbflute_maihamadb/manage.sh

echo"...Overriding DBFlute Engine templates for application customization"
cp -R ./extplates/om $DBFLUTE_HOME/templates


一方でお約束ですが、vmテンプレートで利用しているメソッドなどは、
($database や $table や $column などのオブジェクトのメソッドたち)
予告なくリファクタリングされる可能性は無きにしもあらずなので、
そのへんはご了承ください。
動かなくなったらgithubでDBFlute Engineの差分を確認してください。

jet

unread,
Apr 6, 2019, 12:25:10 PM4/6/19
to DBFluteユーザの集い
お世話になっております。
jetと申します。

わざわざご対応いただきありがとうございます。

TypeScriptのファイルがそのまま生成できるようになるのですね。

確認してみます。

jet

unread,
Apr 9, 2019, 12:58:03 AM4/9/19
to DBFluteユーザの集い
お世話になっております。
jet と申します。


dbflute-1.2.1-RC1を試してみたのですが、
ConditionBean内でビルドエラーが発生します。

BsConditionBean.vmを確認してみると
メソッドxenableSpecifyColumnRequiredWarningOnlyの呼び出しが追加されているようですが、
そのメソッドが定義されていないようです。

    // ===================================================================================
   
//                                                                         Constructor
   
//                                                                         ===========
   
public ${myClassName}() {
       
・・・ 省略
        xsetSpecifyColumnRequiredExceptDeterminer
(${glDBFluteConfig}.getInstance().getSpecifyColumnRequiredExceptDeterminer());
       
if (${glDBFluteConfig}.getInstance().isSpecifyColumnRequiredWarningOnly()) {
           
xenableSpecifyColumnRequiredWarningOnly();
       
}
       
・・・ 
省略 
    }

 

 
dfpropなどは特に修正していないのですが、バージョンアップに伴って
なにか修正する必要はありますでしょうか。

非常に初歩的な質問で恐縮ですが、ご確認のほどよろしくお願いいたします。

kubo

unread,
Apr 9, 2019, 2:06:56 AM4/9/19
to DBFluteユーザの集い
jfluteです

jetさん、こんにちは

DBFlute Runtime は 1.2.1-RC1 が適用されているでしょうか?
(例えば、pom.xmlは修正したけど、Maven取り込みしていないとか)

jet

unread,
Apr 14, 2019, 10:23:19 AM4/14/19
to DBFluteユーザの集い
お世話になっております。
jetと申します。

問題の原因はご指摘の通りDBFlute Runtimeのバージョンを
変更していないためでした。

お恥ずかしい限りです・・・・・

引き続き、DTOの生成を試してみます。

jet

unread,
May 12, 2019, 9:32:52 AM5/12/19
to DBFluteユーザの集い
お世話になっております。
jetと申します。

ご返事が遅くなり申し訳ございません。

1.2.1-RC1 の flexDtoDefinitionMapを使って
Typescript用のDTOを作成できました。

ご対応いただきありがとうございます。

kubo

unread,
May 12, 2019, 10:28:25 AM5/12/19
to DBFluteユーザの集い
jfluteです

> 1.2.1-RC1 の flexDtoDefinitionMapを使って
> Typescript用のDTOを作成できました。

おお、jetさん、良かったです。
連絡ありがとうございます。安心しました。

FlexDto は FlexibleDto ですね(^^。
Reply all
Reply to author
Forward
0 new messages