1

每次通过 SQL 更新或插入字段时,我都想设置一个时间戳列。

我尝试使用 SqlComputed 属性,但是如果该字段最初为空,那么当我在 ObjectScript 中使用 %Open 或 %New 和对象时,设置该字段会产生不良影响。我不希望在对象是 %Save'd(或 INSERT'ed/UPDATE'd)之前设置该值。

我怎样才能做到这一点?

4

4 回答 4

0

您是否定义了 SQLCompute On Change。根据您描述的情况,我认为您想将其定义为 %%INSERT,%%UPDATE。

于 2012-08-28T21:45:52.357 回答
0

如果属性是瞬态的或计算的,则每次检索该值时都会运行 SQLComputed 计算。如果属性都不是,那么计算将在修改后运行并存储在数据库中,这就是您要查找的内容。

于 2012-08-28T21:42:14.747 回答
0

我想你可以从下面的例子中得到一个线索。每当您尝试使用 COS 调用 %Save() 方法时,都会调用 %OnBeforeSave。请注意,当您使用 SQL 使用“插入”或“更新”时,不会调用此方法。

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 回答