[Seasar-user:15138] Re: 【DBFlute】共通カラム機能を利用したコード生成について質問
柴切 卓
[E-MAIL ADDRESS DELETED]
2008年 7月 24日 (木) 10:59:44 JST
柴切です。
久保さん、大変失礼いたしました。
私のほうの設定ミスで、確かに空白が入っていました。
再度、修正して確認しましたところ、ばっちり生成されました。
この追加でかなり簡易に利用できるようになりましたので、助かります。
いろいろありがとうございました。
また質問させていただく事もあるかと思います、その際はよろしくお願いします。
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 メーリングリストの案内