1

我想自定义ORM的更新功能。默认情况下,ORM 会加载需要更新的对象,进行更新,然后保存该对象。我想在满足某个条件时更新记录。

例如 :

在此处输入图像描述

我想将付款方式从信用卡更新为现金。在更新记录之前,我想检查我是否已经有现金支付模式。如果存在,那么我不需要更新记录,否则更新记录。

对于上面的检查,我使用了这个 SQL:

SELECT COUNT(*) 
FROM hr_lookup_paymentmode 
WHERE PaymentMode = 'cash' 
  AND modeid <> '10'   

等效 HQL:

/**
    * @hint Determines total number of results with same value of search for update purposes.
    */
remote numeric function searchUpdateCount(string q,numeric modeid ) output="false" {

var hqlString = "";
var whereClause = "";
var params = {};
hqlString = hqlString & "SELECT count(*) ";
hqlString = hqlString & "FROM hr_lookup_paymentmode";
if (len(arguments.q) gt 0)
{
    whereClause  = ListAppend(whereClause, " PaymentMode = '#arguments.q#'", "|");
    whereClause  = ListAppend(whereClause, "modeid <> '#arguments.modeid#'", "|");
    whereClause = Replace(whereClause, "|", " AND ", "all");

}


if (len(whereClause) gt 0){
    hqlString = hqlString & " WHERE " & whereClause;
}
return ormExecuteQuery(hqlString, false, params)[1];
}

参数q = 'cash'modeid = 10。如果找到的计数大于 0 表示记录已经存在,否则进行更新。

请帮我应用这个逻辑。

4

1 回答 1

4

您可以使用 ORM 事件处理程序 - 全局定义或在特定 ORM 对象中定义。以下是有关事件处理程序的一些信息,但基本上您将在 ORM 对象中执行以下操作:

function preUpdate( obj, data ){
   {do stuff here }
}

在此示例obj中是您尝试保存的 ORM 实体,data它是一个包含来自 ORM 实体的旧数据的结构。您只需将逻辑添加到函数的主体。

于 2013-08-13T12:19:11.307 回答