-
事件说明:
表头参照前 | 设置参照前过滤条件、不满足某个条件时放弃参照操作 |
变量 | 功能 | 说明 |
sendor | filter | 设置参照过滤条件 |
bassignment | 设置参照后是否立即赋值(默认为true) | |
bmultselect | 设置是否允许多选 | |
parameters | 存储过程数据源参数 @参数名=参数值,@参数名=参数值 | |
fieldLabel | 获取当前控件标签文本 | |
getValue() | 获取当前控件的值 | |
cancel | true/false | 设置是否放弃后续操作,默认false |
表头参照后 | 获取返回数据集 |
变量 | 功能 | 说明 |
sendor | fieldLabel | 获取当前控件标签文本 |
getValue() | 获取当前控件的值 | |
records | get(“字段名”) | 获取返回记录集的字段值 |
表体参照前 | 设置参照前过滤条件、不满足某个条件时放弃参照操作 |
变量 | 功能 | 说明 |
sendor | reffield | 获取参照单元格字段名称 |
filter | 设置参照过滤条件 | |
bassignment | 设置参照后是否立即赋值(默认为true) | |
bmultselect | 设置是否允许多选 | |
parameters | 存储过程数据源参数 @参数名=参数值,@参数名=参数值 | |
getValue() | 获取当前单元格的值 | |
cancel | true/false | 设置是否放弃后续操作,默认false |
表体参照后 | 获取返回数据集 | |
变量 | 功能 | 说明 |
sendor | tablename | 参照单元格所属表体表名 |
records | records[行号].get(“字段名”) | 循环获取返回记录集的字段值 |
说明:参照数据源类型为存储过程时不能选择非关联字段(因为没有视图可以关联查询数据),必须在参照后事件里写脚本赋值
单击单元格 | 1、获取单元格相关值:sendor.field 字段名 sendor.value 当前值 sendor.rowIdx 行索引 sendor.colIdx 列索引 sendor.column.text 列标题 |
2、控制单元格的可编辑状态,符合某条件时不可编辑return false;即可实现 |
双击选择行 | 获取双击行记录集和鼠标所在单元格值(表单操作) | ||
tablename | 表体表名 用来判断双击的表体表名 | ||
record | 双击行记录集,record.get(“字段名”)可以获取各字段值 | ||
fieldname | 光标所在单元格字段名 | fieldtext | 光标所在单元格列标题 |
fieldvalue | 光标所在单元格字段值/也可以用record.get(fieldname)获取 | ||
rowindex | 双击行索引 | colindex | 双击列索引 |
示例代码 | if(fieldname ==”存货编码”){ var cinvcode= fieldvalue; //存货编码赋值给变量 /*js代码获取或更新数据、打开查询窗体等操作*/ } |
双击选择行 | 查询数据记录(数据列表操作) |
LoadMode | 数据列表模式:嵌入表单、数据列表 |
示例代码 | try { if(LoadMode=="list") { //数据列表模式代码 OpenFunction(0,"FormSaleOut", {BillID:currecord.get("iid")}); } else{ //嵌入表单模式代码 var top = window.parent; //获取单据IID top.HeadID =currecord.get("iid"); //单据非编辑状态时查询数据 if (!top.bEdit) { top.QueryData(); } } } catch(err){ alert(err.message); } |
列绑定事件 | 用于数据列表单元格渲染 | |
变量 | 功能 | 说明 |
cellmeta | cellmeta.column.format 所属列显示格式 | |
cellmeta.column.dataIndex 所属列字段名 | ||
cellmeta.tdCls 所属单元格样式(CSS) | ||
cellmeta.column.datatype 所属列数据类型 | ||
record | 所属行数据集 | |
value | 单元格原值 | |
rowIndex | 所属行索引 | |
columnIndex | 所属列索引 | |
如果只对格式进行设置,不需要显示返回值。如果改变了值,需要显示返回值 return 新值 |
- 方法说明
GetHeadID | 获取表头最大ID(常用于推单场景) | |
参数 | tableName | 表头表名 |
返回值 | 表头最大ID |
GetSelection | 获取数据列表选中记录数组,循环数组取得字段值 | |
参数 | sourceName | 数据列表数据源名 |
返回值 | records | 选中记录数组 |
示例代码 | var records = GetSelection(“列表数据源名”); for (var i = 0; i < records.length; i++) { alert(records[i].get("字段名")); } |
GetModifiedRecords | 获取表体或数据列表已更新行记录 | |
参数 | sourceName | 表体表名或数据列表数据源名 |
返回值 | records | 表体或数据列表已更新行记录 |
示例代码 | var records = GetModifiedRecords (“表体表名/列表数据源名”); for (var i = 0; i < records.length; i++) { alert(records[i].get("字段名")); } |
GetRemovedRecords | 获取数据列表已删除行记录或者表单表体已删除行记录 | |
参数 | sourceName | 表体表名或数据列表数据源名 |
返回值 | records | 数据列表已删除行记录或者表单表体已删除行记录 |
示例代码 | var records = GetModifiedRecords (“表体表名/列表数据源名”); for (var i = 0; i < records.length; i++) { alert(records[i].get("字段名")); } |
GetBodyRecord | 获得表体指定行记录 | |
参数 | tableName | 表体表名 |
rowIndex | 行号 | |
返回值 | 表体记录集(传递-1时获取所有记录) | |
示例代码 | var records=GetBodyRecord("表体表名",-1); for(var i=0;i<records.length; i++){ alert(records[i].get(“字段名”)); } |
GetBodyRcordCount | 获得表体行数(数据列表行数) | |
参数 | tableName | 表体表名(列表数据源名) |
返回值 | 表体行数(数据列表行数) | |
示例代码 |
DelBodyRow | 删除表体行 | |
参数 | tableName | 表体表名 |
rowIndex | <0时删除选中行 >=0时删除指定行 | |
示例代码 |
AddBodyRow | 新增表体行 | |
参数 | tableName | 表体表名 |
示例代码 |
InsertBodyRow | 插入表体行 | |
参数 | tableName | 表体表名 |
rowIndex | <0时 当前行上面插入一行 >=0时指定行上面插入一行 | |
示例代码 |
ClearBodyRow | 清空表体行 | |
参数 | tableName | 表体表名 |
示例代码 |
LoadListData | 刷新数据列表 | |
参数 | 无 | |
示例代码 |
GetDataBySql | 异步执行SQL语句获取后台数据 | |
参数 | 字段字符串 | 逗号分隔的需要返回的字段名 |
Sql 语句 | 执行获取数据的SQL语句 | |
示例代码 | GetDataBySql("字段1,字段2,字段n..."," select 字段1,字段2,字段n... from 表 where 条件 ",function(records){ for(var i=0;i<records.length;i++){ var 字段1值= records[i].get("字段1"); var 字段2值= records[i].get("字段2"); var 字段n值= records[i].get("字段n"); } }); |
GetDataBySqlSync | 同步执行SQL语句获取后台数据 | |
参数 | 字段字符串 | 逗号分隔的需要返回的字段名 |
Sql 语句 | 执行获取数据的SQL语句 | |
示例代码 | GetDataBySqlSync ("字段1,字段2,字段n..."," select 字段1,字段2,字段n... from 表 where 条件 ",function(records){ for(var i=0;i<records.length;i++){ var 字段1值= records[i].get("字段1"); var 字段2值= records[i].get("字段2"); var 字段n值= records[i].get("字段n"); }}); |
SetHeadReadOnly | 设置表头字段只读 | |
参数 | fieldName | 字段名数组(设置全部字段时传空字符串) |
bReadOnly | true/false 是否只读 | |
bAll | true/false 是否设置全部字段 | |
示例代码 | if(条件判断){ SetHeadReadOnly([“字段名1”, “字段名2”], true, true); } |
SetBodyDisable | 设置表体无效/有效 | |
参数 | tableName | 表体表名数组(设置全部表体时传空字符串) |
bDisable | true 无效 false 有效 | |
bAll | true/false 是否设置全部表体 | |
示例代码 | if(条件判断){ SetBodyDisable ([“表名1”, “表名2”], true, true); } |
SetHeadVisible | 设置表头字段显示/隐藏 | |
参数 | fieldName | 字段名数组(设置全部字段时传空字符串) |
bVisible | true/false 是否显示 | |
bAll | true/false 是否设置全部字段(分组内无组件时自动隐藏) | |
示例代码 | if(条件判断){ SetHeadVisible ([“字段名1”, “字段名2”], true, true); } |
SetBodyVisible | 设置表体显示/隐藏 | |
参数 | tableName | 表体表名数组(设置全部表体时传空字符串) |
bVisible | true/false 是否显示 | |
bAll | true/false 是否设置全部表体 | |
示例代码 | if(条件判断){ SetBodyVisible ([“表名1”, “表名2”], true, true); } |
SetBodyFiledVisible | 设置表体字段显示/隐藏 | |
参数 | tableName | 表体表名(字符串) |
filedNames | 字段名数组 | |
bVisible | true/false 是否显示 | |
示例代码 | if(条件判断){ SetBodyFiledVisible (“表名”, [“字段名1”,“字段名2”], true);} |
SetColumnTitle | 设置表体列标题文本 | |
参数 | tableName | 表体表名 |
cFieldName | 字段名 | |
value | 标题值 | |
示例代码 | ||
SetColumnReadOnly | 设置表体列只读 | |
参数 | tableName | 表体表名 |
cFieldName | 字段名 | |
readOnly | 是否只读 true/false | |
示例代码 |
SetButtonDisable | 设置工具栏按钮无效/有效 | |
参数 | btnID | 按钮标识数组(设置全部工具栏按钮时传空字符串) |
bDisable | true 无效 false 有效 | |
bAll | true/false 是否设置全部工具栏按钮 |
SetButtonVisible | 设置工具栏按钮显示/隐藏 | |
参数 | btnID | 按钮标识数组(设置全部工具栏按钮时传空字符串) |
bVisible | true/false是否显示 | |
bAll | true/false 是否设置全部工具栏按钮 | |
示例代码 | if(条件判断){ SetButtonVisible ([“按钮标识1”, “按钮标识2”], true, true); } |
PrintVouchs | 批量打印单据 | |
参数 | cFormNo | 单据/列表编号 |
HeadIDs | 单据表头ID串,用逗号隔开 | |
示例代码 | var HeadIDs=""; var records = GetSelection("列表数据源名"); for (var i = 0; i < records.length; i++) { HeadIDs+=records[i].get("iid")+","; } if(HeadIDs.length>0){ HeadIDs=HeadIDs.substring(0,HeadIDs.length-1);
//批量打印单据 PrintVouchs("单据/列表编号", HeadIDs); } |
SetBodyRowBackColor | 设置表体行背景颜色 | |
参数 | tableName | 表体表名 |
rowIndex | 行索引 | |
color | 颜色名称(red、yellow、green、gray、blue、orange等) | |
示例代码 | if(条件判断){ //设置第一行红色背景 SetBodyRowBackColor(“表体表名”,0,”red”); } |
SetGridDataSource | 设置Grid数据源头 | |
参数 | gridName | Grid名称 |
strSql | Sql语句或存储过程 | |
示例代码 |
SetFocus | 设置字段焦点 | |
参数 | cFieldName | 表单字段名 |
示例代码 |
DeleteVouch | 批量删除单据 | |
参数 | sendor | 删除按钮句柄,无按钮调用时可以传NULL |
FormNo | 表单编号 | |
HeadIDs | 删除单据ID串 | |
callback | 删除后回调函数 | |
示例代码 | var HeadIDs=""; var records=GetSelection(SourceName); for(var i=0;i<records.length;i++){ HeadIDs+=records[i].get("iid")+","; } if(HeadIDs.length>0){ HeadIDs=HeadIDs.substring(0,HeadIDs.length-1); DeleteVouch(this,"SaleOut",HeadIDs,function(){ //删除后刷新数据列表 LoadListData(); }); } |
ExamineVouch | 批量审核单据 | |
参数 | sendor | 审核按钮句柄,无按钮调用时可以传NULL |
FormNo | 表单编号 | |
HeadIDs | 审核单据ID串 | |
callback | 审核后回调函数 | |
示例代码 | var HeadIDs=""; var records=GetSelection(SourceName); for(var i=0;i<records.length;i++){ HeadIDs+=records[i].get("iid")+","; } if(HeadIDs.length>0){ HeadIDs=HeadIDs.substring(0,HeadIDs.length-1); ExamineVouch(this,"SaleOut",HeadIDs,function(){ //审核后刷新数据列表 LoadListData(); }); } |
UnExamineVouch | 批量弃审单据 | |
参数 | sendor | 弃审按钮句柄,无按钮调用时可以传NULL |
FormNo | 表单编号 | |
HeadIDs | 弃审单据ID串 | |
callback | 弃审后回调函数 | |
示例代码 | var HeadIDs=""; var records=GetSelection(SourceName); for(var i=0;i<records.length;i++){ HeadIDs+=records[i].get("iid")+","; } if(HeadIDs.length>0){ HeadIDs=HeadIDs.substring(0,HeadIDs.length-1); UnExamineVouch(this,"SaleOut",HeadIDs,function(){ //弃审后刷新数据列表 LoadListData(); }); } |
ImportBody | 导入表体 | |
参数 | iMode | 0-覆盖 1-追加 |
bAssignment | True 平台自动处理 false 手动代码处理 | |
自动处理说明 |
| |
手动处理主代码 | /*关键对象说明: 1、workbook为导入后的Excel workbook对象 2、worksheet Excel工作表对象 3、rows 工作表数据(数组)对象 4、row 工作表内的一行数据(数组)对象 5、colNames 列名(数组)对象 */ if(workbook!=null){ var sheetcount=0; var colNames; var colName = "",sheetname=""; var worksheet,csv, row, rows;
//获取sheet数量 sheetcount = workbook.SheetNames.length;
//循环sheet,写入数据 for (var i = 0; i < sheetcount; i++) { //将Sheet内容转换成CSV sheetname = workbook.SheetNames[i]; worksheet = workbook.Sheets[sheetname]; csv = XLSX.utils.sheet_to_csv(worksheet); rows = csv.split('\n'); rows.pop(); // 去掉最后的空行 //获取列名数组(CSV文件的第一行为列名) colNames = rows[0].split(','); //从第二行循环读取CSV文件内容 for (j = 1; j < rows.length; j++) { row = rows[j].split(','); //获取到一行数据 //循环列名赋值 for (col = 0; col < colNames.length; col++) { colName = colNames[col];
} } } } |
SetBodyRowNo | 整理表体行号 | |
参数: | tableName | 表体表名 |
说明: | 适用于表体行变化时的行号整理。例如:表头参照对表体赋值后 |
reflect | DLL函数调用 | |
参数 | assName | 程序集名称 |
clsName | 类名称 | |
funName | 方法名称 | |
param | 方法参数名称 | |
callback | 回调函数 | |
说明 | reflect("VouchInterface", "VouchInterface", "ReflectTest", "aaa,bbb", function(result){ alert(result); }); |
reflect_obj | DLL函数调用(支持传递json字符串,需先编码) | |
参数 | assName | 程序集名称 |
clsName | 类名称 | |
funName | 方法名称 | |
param | 方法参数{Param1:json1,Param2: json2,......ParamN: jsonN} | |
callback | 回调函数 | |
说明 | var bodyJson = BodyParseJSON(表体表名/数据列表数据源名); reflect_obj("VouchInterface","VouchInterface","ReflectTest",{Param1:encodeURIComponent(bodyJson),Param2:"bbb"}, function(result){ alert(result); }); 注意:json格式的参数,必须用encodeURIComponent函数编码 |
TreeGrid节点选择事件公共处理函数例子(通过重写这两个方法来完成所需的业务处理逻辑) |
//递归设置子节点选中状态 function SetChildNodeChecked(node,checked) { //此处可以根据条件设置选择状态 if(node.get(MappingField('corgno')).length>=6) { node.set('checked', checked); }
var childNodes = node.childNodes; for (var i = 0; i < childNodes.length; i++) { SetChildNodeChecked(childNodes[i],checked); } } |
//TreeGrid节点选择事件处理 function TreeCheckChange(node, checked, eOpts) { var childNodes = node.childNodes; for (var i = 0; i < childNodes.length; i++) { SetChildNodeChecked(childNodes[i],checked); } } |
-
全局变量
- 登录信息
LoginInfo[0].属性名,属性定义如下:
DepCode: 部门编码 DepName: 部门名称 LoginDate: 登录日期 OrgNo: 组织编号 OrgName:组织名称 PositionCode: 职位编码 PositionName: 职位名称 RoleNo:角色编号 RoleName: 角色名称
ServerDate: 服务器当前日期 UserCode: 用户编码 UserName: 用户姓名
表体信息
curbodyname 当前表体表名
currecord; 当前行记录集
currowindex 当前行索引
curcolindex 当前列索引(不常用,可用字段名代替)
curbodyfield 当前列字段名
消息提醒
SuccessfulMsg 操作成功消息提醒(004)
FailedMsg 操作失败消息提醒(005)
ConfirmMsg 确认操作消息提醒(006)
AllowNullMsg 必填字段消息提醒(007)
NoBodyData 请输入表体数据(009)
NoDelSysemSet 不能删除系统默认配置(010)
系统默认值
@@year 系统当前日期年份
@@month 系统当前日期月份
@@day 系统当前日期天
@@curDate 系统当前日期
@@loginYear 系统登陆日期年份
@@loginMonth 系统登陆日期月份
@@loginDate 系统登录日期
@@loginUserCode 用户编码
@@loginUserName 用户名称
@@companyCode 组织编码
@@companyName 组织名称
@@depID 部门ID
@@cdepCode 部门编码
@@cdepName 部门名称
@@positionCode 职位编码
@@positionName 职位名称
-
U8数据接口
- 销售管理
- 销售订单
SaveSaleOrder | 新增/修改销售订单 | |
参数 | cDSCode | 数据源编号 |
cHeadFilter | 表头数据源过滤条件 | |
cBodyFilter | 表体数据源过滤条件 | |
cAccID | U8账套号 | |
bAdd | 0-新增 1-修改 | |
示例代码 | ||
返回值 | 成功:U8单据表头ID 失败:空字符串 |
AuditSaleOrder | 审核/弃审销售订单 | |
参数 | cDSCode | 数据源编号 |
cHeadFilter | 表头数据源过滤条件 | |
cAccID | U8账套号 | |
bVerify | true-审核 false-弃审 | |
示例代码 | ||
返回值 |
-
打印/报表设计
-
- 配置说明
配置说明 | 表单 | 数据列表 | 报表 |
模板数量 | 多个 | 单个 | 单个 |
输出样式 | 模板 | 模板 | 模板 |
输出格式 | PDF、Excel、Word、PPT、CSV | PDF、Excel、Word、PPT、CSV | PDF、Excel、Word、PPT、CSV |
- 按钮定义
分类 | 按钮名 | 描述 |
打印 | print_browser | 浏览器打印 |
print_pdf | PDF打印 | |
刷新 | refresh | 刷新 |
输出 | export_pdf | 输出PDF |
export_excel2007 | 输出Excel | |
export_word2007 | 输出Word | |
export_csv | 输出CSV |
- 参数定义
分类 | 参数 | 参数说明 | 代码 |
表单单条打印 | HeadIDs | 表头记录ID | BPM平台零代码 |
表单批量打印 | HeadIDs | 表头记录ID串( | BPM平台零代码 |
数据列表打印 | Filter | 数据列表过滤条件 | BPM平台零代码 |
-
U9数据接口
-
事件处理注意事项:
- 表头参照对表体赋值时,需自行处理以下两点
- 表体有默认值时需要代码赋值
- 表体有行号字段时,需要调用SetBodyRowNo(tableName)方法整理行号
-
SQL 处理注意事项:
存储过程内抛出异常 RAISERROR ('错误消息',15, 1)
存储过程内抛出异常并返回 RAISERROR ('错误消息',15, 1) return
-
单点登录
var formData = new FormData();
formData.append('userno', 'kdq');
formData.append('secret', '123');
var xhr = new XMLHttpRequest();
xhr.open('POST', 'Authentication/GetToken.aspx') ;
xhr.send(formData);
xhr.onreadystatechange = function(){
if( xhr.readyState == 4 && xhr.status == 200 ) {
alert( xhr.responseText);
}
};
十、手写板公共函数
//加一个签字按钮,事件代码如下(用来打开签字窗口):
$.ajax({
type: "get",
url: "http://127.0.0.1:29999/HWPenSign/HWInitialize",
data: {
"nLogo":"签字",
"nPenwidth":"2",
"nOrgX":"100",
"nOrgY":"200",
"width":"500",
"height":"300",
},
dataType: "jsonp",
success: function(data){
if(data.msgID == 0){
intval = setInterval(SaveCroppedImg, 3000);
}else{
alert(data.message);
}
},
error : function(){
alert("打开签字窗口失败!");
}
});
//获取并上传签名图片
function SaveCroppedImg(){
var fileUrl="";
$.ajax({
type: "get",
url: "http://127.0.0.1:29999/HWPenSign/HWGetSign",
data: {
"nImageType": "3",
"nImageWidth": "500",
"nImageHeight": "300"
},
dataType: "jsonp",
success: function (data) {
if (data.msgID == 0) {
clearInterval(intval);
var base64Img=data.message;
var blobInfo=base64toBlob(base64Img);
//同步上传文件
var xhr, formData;
xhr = new XMLHttpRequest();
xhr.withCredentials = false;
xhr.open('POST', '../Handers/CommonHandler.ashx?action=UpLoadImage_Sign',false);
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200 ) {
var json=JSON.parse(xhr.responseText);
if (!json || typeof json.location !== 'string') {
alert('Invalid JSON: ' + xhr.responseText);
return;
}
else{
fileUrl=json.location;
}
}
}
formData = new FormData();
formData.append("file",blobInfo,"sign.png");
xhr.send(formData);
SetHeadValue("cSignaturePic",fileUrl);
} else if (data.msgID == -10) {
//没有点击设备的确定按钮,没有获取笔记的Base64
} else if(data.msgID == -15) {
//签字窗口没有笔迹,并且关闭了签字窗口
clearInterval(intval);
}
else{
}
},
error: function () {
console.log("sign error \n");
}
});
}