/************************************数据类型***************************************/
/* Number(数值型),Boolean(布尔型),String(字符型),Date(日期型),Array(数组)
/* 注: 1, 数值型包括整型和浮点型
/* 2, 布尔型包括,T.和.F.
/* 3. 数组有一维数组和多位数组,数组里可以存在不同的数据类型
/* 不解:Empty()只返回True或False,不知道为什么手册上将Empty()归类于数据类型;
/************************************常用函数***************************************/
/* LimsTypeEx(v) --> 获取变量类型 v:一个值
/* Len(v) --> 获取数组或者字符串的长度 v:一个值
/* Empty(v) --> 判断v是否为空(NIL),返回true或false, v:一个值(可以不传入参数,Empty()返回true)
/* DoProc(procName,argsArray) --> 调用存储过程,procName:存储过程的名称,字符串 argsArray:传入存储过程的参数,数组
/* Today() --> 返回当天的时间,格式为:2015-10-17 0:00:00;
/* usrmes(v1,v2) --> 用于日志调试,在JScript中调用此脚本文件的时候会在Server Log中显示相关调试信息,v1:一个固定值,v2:用于被比较的值
/* Chr(13) --> 表示回车换行符;
/* Chr(39) --> 表示单引号;
/* Chr(59) --> 表示分号;
/* LimsString(v) --> 将其他类型转化为字符串,v:被转化为字符串的值;
/* ExecFunction(funcName,avgsArray) --> 执行一个函数,funcName:被执行的函数名,字符串,avgsArray:参数数组
/* BuildString(array) --> 将一个数组里的内容转化为字符串,与LimsString函数的区别:
LimsString将其他类型转化为字符串类型,内容不变,BuildString将数组的内容转化为字符串,
例如,LimsString({1,2,3})返回字符串类型的{1,2,3},而BuildString({1,2,3})返回字符串类型的1,2,3
/* SqlExecute(sqlStr) --> 执行一条SQL语句,sqlStr:SQL语句,字符串。返回值:如果是select语句,返回一个二维表,否则返回true或false
/* ExtractCol(arData,colNum) --> 提取一个结果集第colNum列所有数据的数组,arData:结果集,col:列数(从1开始)
/* GetRegion(regionName) --> 获取名为regionName的REGION内的代码,返回字符串类型
/* ExecUDF(script,avgsArray) --> 动态执行脚本script,avgsArray是参数列表,如果不需要传入参数,则avgsArray可以省略
/* :DECLARE关键字与:RETURN关键字;
/* 不解:手册上说VarType(a)会返回INT32,然而却报错了: Invalid built-in function: VarType ;
/* :DECLARE a;
/* a := 2;
/* :RETURN LimsTypeEx(a); /* NUMERIC
/* :RETURN VarType(a);
/* :PROCEDURE关键字, ENDPROC关键字, :IF关键字 , :ENDIF关键字, :WHILE关键字, :ENDWHILE关键字
/* Len() --> 获取数组或者字符串的长度
/* DoProc() --> 调用存储过程;
/* :RETURN DoProc("CompareArrays",{{1,2,3,4},{1,2,3,4}});
/* :RETURN DoProc("StringsAreDifferent",{"abbc","abbc"});
/* :PROCEDURE StringsAreDifferent;
/* :PARAMETERS s1,s2;
/* :IF s1 <> s2;
/* :RETURN "Strings are not equal";
/* :ENDIF;
/* :RETURN "Strings are equal";
/* :ENDPROC;
/* :PROCEDURE CompareArrays;
/* :PARAMETERS arr1,arr2;
/* :DECLARE len1,len2;
/* :DECLARE i;
/* len1 := Len(arr1);
/* len2 := Len(arr2);
/* :IF len1 <> len2;
/* :RETURN .F.;
/* :ENDIF;
/* i := 0;
/* :WHILE(i += 1) <= len1;
/* :IF arr1[i] != arr2[i];
/* :RETURN .F.;
/* :ENDIF;
/* :ENDWHILE;
/* :RETURN .T.;
/* :ENDPROC;
/* String字符串加减操作
/* +运算符代表字符串拼接;
/* -代表将第一个字符串内后面的空格去掉之后再和第二个字符串拼接;
/* 可以使用[]返回指定字符串下标的字符,从1开始,如"abc"[1]返回"a";
/* :DECLARE s;
/* s := "ab";
/* s := s + "c ";
/* s := s - "d";
/* :RETURN "|" + s + "|"; /* |abcd|;
/* :DECLARE d;
/* d := Today();
/* d := d + 10;
/* d := d - 3;
/* :RETURN d; /* 2015-10-17 0:00:00 ;
/* usrmes("TestNumericOperators", DoProc("TestNumericOperators") );
/* usrmes("TestStringOperators", DoProc("TestStringOperators") );
/* usrmes("TestDateOperators", DoProc("TestDateOperators") );
/* :PROCEDURE TestNumericOperators;
/* :DECLARE n;
/* n := 2;
/* n += 3;
/* n ^= 2;
/* n *= 3;
/* n /= 5;
/* n %= 4;
/* n -= 1;
/* :RETURN n;
/* :ENDPROC;
/* :PROCEDURE TestStringOperators;
/* :DECLARE s;
/* :DECLARE dummy;
/* s := "ab";
/* /* This will not work;
/* /*s += "c";
/* /* This will work;
/* dummy := s += "c ";
/* dummy := s -= "d";
/* :RETURN s;
/* :ENDPROC;
/* :PROCEDURE TestDateOperators;
/* :DECLARE d;
/* d := Today();
/* d += 3;
/* d -= 1;
/* :RETURN d;
/* :ENDPROC;
/* IIf(condition,result1,result2)相当于一个三目运算符,
/* 如果condition为真,返回result1的值,如果为假,返回result2的值;
/* :DECLARE a, b;
/* :DECLARE s1, s2;
/* a := 2;
/* b := 3;
/* /* Implemented in classic way ;
/* :IF a < b;
/* s1 := "a is less than b";
/* :ELSE;
/* s1 := "a is greater than b";
/* :ENDIF;
/* /* Implemented using IIf operator;
/* s2 := IIf(a < b, "a is less than b", "a is greater than b");
/* :RETURN s1 + Chr(13) + s2;
/*相当于switch分支语句;
/* :DECLARE a;
/* :DECLARE b;
/* a := 10;
/* b := 0;
/* :BEGINCASE;
/* :CASE a > 3;
/* b := 4;
/* :EXITCASE;
/* :CASE a > 7;
/* b := 7;
/* :EXITCASE;
/* :CASE a < 0;
/* b := -1;
/* :EXITCASE;
/* :OTHERWISE;
/* b := -2;
/* :EXITCASE;
/* :ENDCASE;
/* :RETURN b;
/*:LOOP相当于java中的continue,表示跳过本次循环,;
/*:DECLARE ar, s;
/*:DECLARE i, n;
/*s := "";
/*ar := {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
/*n := Len(ar);
/*i := 0;
/*:WHILE (i += 1) < n;
/* :IF i == 5;
/* :LOOP;
/* :ENDIF;
/*/* :IF i == 6;
/*/* :EXITLOOP;
/*/* :ENDIF;
/* s := s + "i=" + LimsString(i) + Chr(13);
/*:ENDWHILE;
/*:RETURN s;
/*:DECLARE strSql;
/*:DECLARE arData;
/*strSql := "SELECT * FROM CAOBT_USERS";
/*arData := SqlExecute(strSql);
/*arData := ExtractCol(arData, 1);
/*:RETURN arData;
/* :REGION/:ENDREGION 代码块;
/* :DECLARE a, b;
/* :DECLARE s;
/* a := "2";
/* b := "3";
/* /*s := GetRegion("ClientScriptTemplate", {"$a", "$b"}, {a, b} );
/* s := s + Chr(13) + GetRegion("SimpleClientScript");
/* :RETURN s;
/* :REGION ClientScriptTemplate;
/* var par1 = $a;
/* var par2 = $b;
/* var ret = form.ShowModalDialog( formAddress, [par1, par2] );
/* :ENDREGION;
/* :REGION SimpleClientScript;
/* var a = ret[0];
/* var b = ret[1];
/* lims.CallServer("Math.Add", [a, b]);
/* :ENDREGION;
/* Chr(59)是分号;
/*:DECLARE script;
/*script := "";
/*script := script + ":PARAMETERS x, y" + Chr(59) + Chr(13);
/*script := script + ":RETURN x + y" + Chr(59) + Chr(13);
/*:DECLARE sum;
/*sum := ExecUDF(script, {2, 3});
/*:RETURN sum;