[Seasar-user:15139] Re: 【DBFlute】共通カラム機能を利用したコード生成について質問

kubo [E-MAIL ADDRESS DELETED]
2008年 7月 24日 (木) 11:38:41 JST


久保(jflute)です。

> 再度、修正して確認しましたところ、ばっちり生成されました。

よかったです。

> この追加でかなり簡易に利用できるようになりましたので、助かります。
>
> いろいろありがとうございました。

いえいえ、こちらこそ、ありがとうございます。
ユーザの方の声が重要ですので。(要件定義になりますので)

2008/7/24 柴切 卓 <[E-MAIL ADDRESS DELETED]>:
>
> 柴切です。
>
> 久保さん、大変失礼いたしました。
>
> 私のほうの設定ミスで、確かに空白が入っていました。
>
> 再度、修正して確認しましたところ、ばっちり生成されました。
>
> この追加でかなり簡易に利用できるようになりましたので、助かります。
>
> いろいろありがとうございました。
>
> また質問させていただく事もあるかと思います、その際はよろしくお願いします。
>
>
> kubo さんは書きました:
>> 久保(jflute)です。
>>
>>
>>> ; reg_staff_id = $$AccessContext $$.GetAccessValueOnThread("RegStaffId")
>>>
>>
>> メール上なので何か間違いかもしれませんが、
>> こちら、「$$AccessContext $$」の「Context」の後に
>> 半角空白が入っているようです。
>> もし、実際の設定の方にも空白が入っていたら修正してみて下さい。
>>
>> また、GetAccessValueOnThread()の戻り値はObject型ですので、
>> ダウンキャストが必要です。
>>
>> ; reg_staff_id = (int)$$AccessContext$$.GetAccessValueOnThread("RegStaffId")
>>
>> 2008/7/24 柴切 卓 <[E-MAIL ADDRESS DELETED]>:
>>
>>> 柴切です。
>>>
>>> dbflute_0.7.7を落として、追加機能を使ってみました。
>>>
>>> map:{
>>> ; commonColumnMap = map:{
>>> ; reg_staff_id=NUMERIC
>>> }
>>> ; beforeInsertMap = map:{
>>> ; reg_staff_id = 1
>>> }
>>> ; beforeUpdateMap = map:{
>>> ; reg_staff_id = $$AccessContext $$.GetAccessValueOnThread("RegStaffId")
>>> }
>>> }
>>>
>>> このように設定して、C#コードを生成すると
>>>
>>> AbstructBehaviorWritable.cs内
>>>
>>> protected virtual void SetupCommonColumnOfUpdateIfNeeds(Entity
>>> targetEntity) {
>>> if (!IsEntityDefinedCommonColumn(targetEntity)) {
>>> return;
>>> }
>>> EntityDefinedCommonColumn entity = (EntityDefinedCommonColumn)targetEntity;
>>> if (!entity.CanCommonColumnAutoSetup()) {
>>> return;
>>> }
>>> if (_log.IsDebugEnabled) {
>>> _log.Debug("...Filtering entity of UPDATE about the column columns of "
>>> + this.TableDbName);
>>> }
>>>
>>> $AccessContext $$.GetAccessValueOnThread("RegStaffId")
>>> }
>>>
>>> こんな感じで、まだうまく生成できていないようです。
>>>
>>> 設定の仕方が間違っていたらすみません。
>>>
>>> 確認していただければと思います。
>>>
>>> よろしくお願いします。
>>>
>>> kubo さんは書きました:
>>>
>>>> 久保(jflute)です。
>>>>
>>>> http://dbflute.sandbox.seasar.org/download/dbflute/dbflute-0.7.7.zip
>>>> にて、AccessContextに汎用的な値を格納できるプロパティを
>>>> 追加しました。Map(Dictionary)形式で、キー値で自由に値を格納できます。
>>>>
>>>> またわからないことがあったら聞いて下さい。
>>>> 今後もよろしくお願いします。
>>>>
>>>> 2008/7/23 柴切 卓 <[E-MAIL ADDRESS DELETED]>:
>>>>
>>>>
>>>>> 柴切です。
>>>>>
>>>>> 共通カラム機能について、だいぶわかってきました!
>>>>>
>>>>> 丁寧に回答いただき、とても助かりました。
>>>>>
>>>>> ありがとうございました。
>>>>>
>>>>>
>>>>> kubo さんは書きました:
>>>>>
>>>>>
>>>>>> 久保(jflute)です。
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> このあたりのAccessContextの定義は自分で記述しなければならないのでしょうか?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> AccessContextはある意味「値を運ぶための箱」
>>>>>> なわけですが、汎用的な入れ物しか用意していません。
>>>>>>
>>>>>>     protected String accessUser;
>>>>>>     protected String accessProcess;
>>>>>>     protected java.util.Date accessDate;
>>>>>>     protected java.sql.Timestamp accessTimestamp;
>>>>>>
>>>>>> 名前が付いていますが、制約はありません。
>>>>>> ただの箱だと思って下さい。
>>>>>>
>>>>>> 上記の合致しない独自のカラムに関しては、
>>>>>> AccessContextと同等のクラスをプロジェクトで
>>>>>> 独自に作成して下さい。(コピーして書き換える感じでOKです)
>>>>>> 要は、スレッドローカルで値を運べれば良いので、
>>>>>> 必ずAccessContextを使わなければならないというわけでは
>>>>>> ありません。AccessContextはあくまで汎用実装となります。
>>>>>>
>>>>>> その場合dfpropには
>>>>>>
>>>>>> ; ABCFlag= DokujiProject.DokujiContext.GetABCFlagOnThread()
>>>>>>
>>>>>> という感じで、フルネームで書きます。
>>>>>>
>>>>>>
>>>>>> #
>>>>>> # ただ、汎用的に使える領域を用意しても良いかもしれませんね。
>>>>>> # ; ABCFlag= $$AccessContext $$.GetValueOnThread("ABCFlag")
>>>>>> # みたいな感じで。。。
>>>>>> #
>>>>>>
>>>>>>
>>>>>> 2008/7/23 柴切 卓 <[E-MAIL ADDRESS DELETED]>:
>>>>>>
>>>>>>
>>>>>>
>>>>>>> 柴切です。
>>>>>>>
>>>>>>> 久保さん、返信ありがとうございます。
>>>>>>>
>>>>>>> 参考ページを踏まえて、
>>>>>>>
>>>>>>> map:{
>>>>>>> ; commonColumnMap = map:{
>>>>>>> ; ABCFlag=CHAR
>>>>>>> }
>>>>>>> ; beforeInsertMap = map:{
>>>>>>> ; ABCFlag= "A"
>>>>>>> }
>>>>>>> ; beforeUpdateMap = map:{
>>>>>>> ; ABCFlag= $$AccessContext$$.GetABCFlagOnThread()
>>>>>>> }
>>>>>>> }
>>>>>>>
>>>>>>> こんな感じでcommonColumnMap.dfpropファイルを設定してコード生成するのかと
>>>>>>> 思いました。
>>>>>>>
>>>>>>> 実際生成してみると、AccessContextクラスには
>>>>>>>
>>>>>>> 「String? AccessABCFlagプロパティ」 や 「String? GetABCFlagOnThread()
>>>>>>> メソッド」
>>>>>>>
>>>>>>> は定義されていませんでした。
>>>>>>>
>>>>>>> このあたりのAccessContextの定義は自分で記述しなければならないのでしょうか?
>>>>>>>
>>>>>>> 使い方が間違っているかもしれませんが、それを含めてアドバイスいただければ
>>>>>>> と思います。
>>>>>>>
>>>>>>> よろしくお願いします。
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> kubo さんは書きました:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> 久保(jflute)です。
>>>>>>>>
>>>>>>>> <A>であれば、
>>>>>>>>
>>>>>>>> http://dbflute.sandbox.seasar.org/contents/setup/commoncolumn.html
>>>>>>>>>>>>>>>> 「2. AccessContext(ThreadLocal)に値を格納」
>>>>>>>> を参考に
>>>>>>>> リクエスト開始時にAccessContextに判断した
>>>>>>>> 値を格納すればOKです。
>>>>>>>>
>>>>>>>> 2008/7/23 柴切 卓 <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> 柴切です。
>>>>>>>>>
>>>>>>>>> 久保さん、返信ありがとうございます。
>>>>>>>>>
>>>>>>>>> 私が質問した(1)(2)ともに、下記の<A>のような動作を行いたいと思って
>>>>>>>>> います。
>>>>>>>>>
>>>>>>>>> AccessContextを利用する場合、(1)や(2)を格納する変数が必要ですが、
>>>>>>>>> それを自動で生成することは可能でしょうか?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> kubo さんは書きました:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> 久保(jfute)です。
>>>>>>>>>>
>>>>>>>>>> 柴切さん、こんばんわ
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> Update時は 'B' or 'C'
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> この「B」なのか「C」なのかは、
>>>>>>>>>> 何で決定するのでしょうか?
>>>>>>>>>>
>>>>>>>>>> <A>
>>>>>>>>>> もし、WEB上のリクエスト時に決定するのであれば、
>>>>>>>>>> AccessContextに値を格納するタイミングで「B」or「C」を
>>>>>>>>>> 決定して格納すれば良いと思います。
>>>>>>>>>>
>>>>>>>>>> <B>
>>>>>>>>>> もし、指定されたEntityの別の値で決定するのであれば、
>>>>>>>>>> ちょっと強引ですが、commonColumnMap.dfpropにて
>>>>>>>>>> 以下のように記述できます。
>>>>>>>>>>
>>>>>>>>>> XXX_FLG = $entity.isLogicalDeleteFlgFalse() ? entity.setXxx('b') :
>>>>>>>>>> entity.setXxx('c')$$Semicolon$$
>>>>>>>>>>
>>>>>>>>>> ※ isLogicalDeleteFlgFalse()は区分値メソッド(or Extendedに作成した独自メソッド)
>>>>>>>>>>
>>>>>>>>>> 2008/7/22 柴切 卓 <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> 柴切と申します。
>>>>>>>>>>>
>>>>>>>>>>> お世話になります。
>>>>>>>>>>>
>>>>>>>>>>> DBflute 共通カラム機能を利用したコード生成について質問があり、メール致
>>>>>>>>>>> しました。
>>>>>>>>>>>
>>>>>>>>>>> ドキュメントを読んでみましたが、以下の2つのUpdate動作を自動生成で実現す
>>>>>>>>>>> る方法が導きだせませんでした。
>>>>>>>>>>>
>>>>>>>>>>> (1)Char型の共通カラムに
>>>>>>>>>>>
>>>>>>>>>>> Insert時は 'A'
>>>>>>>>>>> Update時は 'B' or 'C'
>>>>>>>>>>>
>>>>>>>>>>> (2)int型の共通カラムに
>>>>>>>>>>>
>>>>>>>>>>> Insert時は 0
>>>>>>>>>>> Update時は 1 or 2
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> リアルタイムな値などと同じで、自由に値を格納したいのだから
>>>>>>>>>>> 「AccessContextを利用するんだな!」 とは思うのですがそこから止まってし
>>>>>>>>>>> まいました。
>>>>>>>>>>>
>>>>>>>>>>> 理解不足の面もあるかと思いますが、是非実現方法のアドバイス等いただけたら
>>>>>>>>>>> と思っております。
>>>>>>>>>>>
>>>>>>>>>>> よろしくお願いいたします。
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Seasar-user mailing list
>>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Seasar-user mailing list
>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Seasar-user mailing list
>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Seasar-user mailing list
>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Seasar-user mailing list
>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> _______________________________________________
>>>>>> Seasar-user mailing list
>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>>> Seasar-user mailing list
>>>>> [E-MAIL ADDRESS DELETED]
>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>
>>>>>
>>>>>
>>>> _______________________________________________
>>>> Seasar-user mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>
>>>>
>>>>
>>>>
>>> _______________________________________________
>>> Seasar-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>
>>>
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
>>
>>
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内