1

述語を使用Betweenして、現在の日時と日時の範囲を比較しようとしています。

アセンブリを参照し、アセンブリ内のクラス内mscorlibで使用して DateTimeNow を取得します。この現在の日時を範囲と比較するのに問題があります。get_Now()DateTime

私の状態は次のようなものです:

  • DateTimeNow は 2012-08-03 07:00:00 と 2012-08-04 07:00:00 の間です

  • 私の地域の DateTimeNow は、2012-08-03 16:33:20この瞬間のためのものです。私が指定した範囲の間にあるはずです。しかし、うまくいかないようです。に置き換えるDateTimeNow2012-08-03 16:33:20動作します。

何らかの理由でDateTimeNow動作しないようです。誰でも何か考えがありますか?

4

2 に答える 2

2

.net mscorlib アセンブリで Get_Date() 関数を使用していることがわかりました。マシンのレジストリを変更する必要があります。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\BusinessRules\3.0\StaticSupport (DWORD)、値 1 を指定

詳細:

http://blogs.msdn.com/b/richardbpi/archive/2005/11/14/492489.aspx

http://kinnaribhute.blogspot.co.nz/2008/04/some-interesting-stuff-about-biztalk.html

これが実稼働サーバーにどのように影響するかはわかりません。実稼働サーバー環境が複数のノードでクラスター化されていない場合、サーバーを再起動するために停止します。

于 2012-08-05T23:47:22.400 に答える
0

エンジンでファクトを論理的にモデル化する方法と、.NET コードでオブジェクトをモデル化する方法の間にはインピーダンスの不一致があり、この影響の 1 つは、静的メソッドの呼び出しの問題です。Xiao Han の説明に従って StaticSupport フラグを設定すると、エンジンはその動作を変更し、静的メソッドを組み込み関数または述語であるかのように扱います。ただし、デフォルトでは、エンジンは静的メソッドをファクトの動作として扱います。物理的には、ファクトはエンジンの作業メモリ内のオブジェクトであり、メソッドを使用する前に各ファクトをエンジンにアサートする必要があります。したがって、DateTime で静的な Now プロパティ ゲッターを呼び出すには、まず DateTime オブジェクトをエンジンにアサートする必要があります。もちろん、DateTime は値型 (構造体) ですが、それで問題ありません。ルール セットを実行すると、オブジェクトとして単一のファクトをアサートするか、オブジェクト配列としてファクトのコレクションをアサートします。.NET は、この方法で渡された DateTime を自動的にボックス化 (内部的にオブジェクトとしてラップ) します。

そのオブジェクトの型で静的メソッド (または、この場合は、もちろん、実際にはメソッドであるプロパティ ゲッター) を呼び出すために、エンジンにオブジェクトをアサートする必要があるのは気が狂っているように思えます。デフォルトで静的メソッドをビルトインとして扱うようにエンジンを構築した方がよかったのかもしれません。しかし、そうではありませんでした。さらに、Microsoft が StaticSupport フラグを個々のルール セットまたは個々のルールのレベルで実装していれば、はるかに優れていたでしょう。このようにレジストリに実装する (マシン レベル) か、代わりに .config ファイル (アプリケーション レベル; use ) で構成すると、実際の問題が発生する可能性があります。国旗。

Static Support は「2」に設定することもできます。この場合、パラメーターなしで静的メソッドを呼び出した場合、または定数値のみを指定して呼び出した場合、条件の述語として、または別の関数の引数として呼び出した場合、エンジンは静的メソッドを評価します。メンバーを 1 回だけ呼び出し、結果をキャッシュします。

于 2012-11-09T00:19:20.307 に答える