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

kubo [E-MAIL ADDRESS DELETED]
2008年 7月 24日 (木) 10:47:12 JST


久保(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 メーリングリストの案内