1

SQL 経由でフィールドが更新または挿入されるたびに、タイムスタンプ列を設定したいと考えています。

SqlComputed プロパティを使用してみましたが、フィールドが最初に null の場合、%Open または %New と ObjectScript でオブジェクトを設定するときに、フィールドを設定するという望ましくない副作用があります。オブジェクトが %Save (または INSERT/UPDATE) されるまで値を設定したくありません。

これどうやってするの?

4

4 に答える 4

0

次の例からヒントを得ることができると思います。%OnBeforeSave は、COS を使用して %Save() メソッドを呼び出そうとするたびに呼び出されます。ただし、SQL tho を使用して 'insert' または 'update' を使用する場合、このメソッドは呼び出されないことに注意してください。

Property LastModified As %Date;
Property RegDate As %Date;
/// 
/// This callback method is invoked by the <METHOD>%Save</METHOD> method to 
/// provide notification that the object is being saved. It is called before 
/// any data is written to disk.
/// 
/// <P><VAR>insert</VAR> will be set to 1 if this object is being saved for the first time.
/// 
/// <P>If this method returns an error then the call to <METHOD>%Save</METHOD> will fail.
Method %OnBeforeSave(insert As %Boolean) As %Status [ Private ]
{

    if insert s ..RegDate=$h
    s ..LastModified = $h
    quit $$$OK
}
于 2012-08-29T00:52:23.967 に答える
0

クラスを制御できる場合は、プロパティを更新して、以下のように InitialExpression を持つことができます。

Property CreateTimeStamp As %TimeStamp [ InitialExpression = {$ZDateTime($H,3)} ];
于 2015-11-26T11:57:28.963 に答える
0

プロパティが一時的または計算された場合、値が取得されるたびに SQLComputed 計算が実行されます。プロパティがどちらでもない場合、計算は変更時に実行され、探しているデータベースに保存されます。

于 2012-08-28T21:42:14.747 に答える
0

SQLCompute On Change を定義しましたか。説明したケースに基づいて、%%INSERT、%%UPDATE として定義したいと思います。

于 2012-08-28T21:45:52.357 に答える