Table Scripting
This sample shows you how to check if the field has been changed from one value to another
function UpdateRecord()
{
if (Values("case_AssignedUserId")+""=="undefined")
return; //bad update from crm..or field not changed
var CaseRec=CRM.CreateQueryObj("SELECT * FROM Cases WITH (NOLOCK) WHERE " + WhereClause);
CaseRec.SelectSQL();
if (CaseRec("case_assigneduserid")!=Values("Case_AssignedUserId"))
{
ErrorStr="field value has changed from "+CaseRec("case_assigneduserid") +" to "+Values("Case_AssignedUserId");
}
}
Altering CRM dates in Table level scripts
var mydate = new Date();
mydate.setDate(mydate.getDate() +7);
Values("comp_customerstartdate") = mydate.getVarDate();
Comparing previous values (in cases where you might want to run some code only when a field value has changed)
Within the UpdateRecord method stub you would first query the current record using
var crec=CRM.FindRecord("agreement",WhereClause);
You would then compare values as in
if (crec("comp_name")!=Values("comp_name"))...
For date fields you have to create a Date object
var c_comp_renewaldate = new Date(crec("comp_renewaldate"));
var v_comp_renewaldate = new Date(Values("comp_renewaldate"));
and then call the getDate() method of the Date object to do the comparison. You cannot compare the date objects as it will never match
if (c_comp_renewaldate.getDate() != v_comp_renewaldate.getDate())...
Useful learning tool if your trying to work out when each of the TLS functions are called.
// Table level script will log all events to the SQL logs
function log(message, error) {try{CRM.CreateQueryObj('/* '+((error)?message:message+' */')).SelectSql();}catch(e){}}
function InsertRecord() { log("InsertRecord called",1); }
function PostInsertRecord() { log("PostInsertRecord called",1); }
function UpdateRecord() { log("UpdateRecord called. WHERECLAUSE=" + WHERECLAUSE,1); }
function DeleteRecord() { log("DeleteRecord called. WHERECLAUSE=" + WHERECLAUSE,1); }