我希望每次通过SQL更新或插入字段时都设置一个时间戳列。
我尝试使用SqlComputed属性,但是如果该字段最初为null,则在I%Open或%New和ObjectScript中的对象时设置字段会产生不必要的影响。我不希望在对象为%Save'd(或INSERT'ed / UPDATE'd)之前设置该值。
我该怎么做?
答案 0 :(得分:0)
如果属性是瞬态或计算的,那么每次检索到值时都会运行SQLComputed计算。如果属性不是,那么计算将在修改时运行并存储在数据库中,这就是您要查找的内容。
答案 1 :(得分:0)
您是否定义了SQLCompute On Change。根据您描述的情况,我认为您要将其定义为%% INSERT,%% UPDATE。
答案 2 :(得分:0)
我猜您可以从以下示例中获得线索。每当您尝试使用COS调用%Save()方法时,都会调用%OnBeforeSave。请注意,当您使用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
}
答案 3 :(得分:0)
如果您可以控制该类,则可以将属性更新为具有如下所示的InitialExpression:
Property CreateTimeStamp As %TimeStamp [ InitialExpression = {$ZDateTime($H,3)} ];