# 方法和属性
H5DW包括很多方法,开发人员通过调用方法操作数据窗口。
H5DW的方法和PowerBuilder数据窗口事件一致,熟悉PB的开发人员可以快速上手。
以下提到的DWBuffer
和DWItemStatus
定义如下,下面函数不再单独说明。可以H5DW的导出对象中获取,也可以自己定义。
export const DWBuffer = {
Primary:0,
Delete:1,
Filter:2
}
export const DWItemStatus = {
NotModified:0,
DataModified:1,
New:2,
NewModified:3
}
# 方法
# create
create方法根据数据窗口语法创建数据窗口对象。
参数名称 | 类型 | 说明 |
---|---|---|
syntax | string/object | 类型为string时,为pb数据窗口语法。类型为object时,为json对象 |
return | int | 成功返回1,失败返回-1 |
let syntax = dwstr //pb数据窗口语法,一般从服务端返回
let dw = new DataWindow('#datawindow');
dw.create(syntax);
# setTransObject
设置事务,浏览器前端的对象一般是实现retrieveDW
和updateDW
方法的对象,用于从服务端获取、保存数据。
参数名称 | 类型 | 说明 |
---|---|---|
dbo | object | 事务对象 |
let db = {
async retrieveDW(sql,...arg) {
//数据窗口retrieve时会调用,在客户端实际与服务器对接
console.log('请求Key:',sql,...arg);
let ret = await axios.post('/h5dw/retrieve',{key:sql,args:arg});
if (ret.status === 200) {
return ret.data.data;
} else {
return [];
}
},
async updateDW(key, data) {
let ret = await axios.post('/h5dw/update',{key,data});
if (ret.status === 200) {
return ret.data.code;
}
return 1;
},
};
dw.setTransObject(db);
# retrieve
从数据库中检索数据窗口控件或数据存储的行。客户端的datawindow因为要通过webapi从服务端检索数据,所以是异步函数,如果检索完成需要等待返回值,或者操作数据,需要使用await函数
参数名称 | 类型 | 说明 |
---|---|---|
args | Any | 如果包含参数,则参数值用于SQL SELECT语句的检索参数,用于数据窗口对象或子数据窗口(可选) |
返回值 | int | 成功返回显示的行数(即主缓冲区中的行数),失败返回-1 |
await dw.retrieve();
// 多个参数
await dw.retrieve(1,'name');
# update
更新数据库中的数据窗口或数据存储的更改。更新操作还可以在更新数据库之前对当前行和列调用AcceptText。客户端的datawindow因为要通过webapi从服务端更新数据,所以是异步函数,如果检索完成需要等待返回值,或者操作数据,需要使用await函数
参数名称 | 类型 | 说明 |
---|---|---|
accept | Boolean | 是否自动执行AcceptTextTRUE(默认)执行AcceptText。如果数据验证失败,则取消更新。FALSE不执行AcceptText。 |
resetflag | Boolean | 是否自动重置更新标志TRUE(默认)重置标志。FALSE不重置标志。 |
返回值 | int | 成功返回1,失败返回-1 |
const r = await dw.update();
console.log(r);
# setDataObject
设置数据窗口对象。如果对象为json则给值,如果是string类型则通过调用webapi从服务端获取,所以是异步函数,如果检索完成需要等待返回值,需要使用await函数。
参数名称 | 类型 | 说明 |
---|---|---|
value | String/Object | 数据窗口对象的名称或者json对象。当value参数为数据窗口名称时,通过实现dwGetDataObject从服务端获取数据窗口对象数据 |
// 示例中实现dwGetDataObject方法
window.dwGetDataObject = async (key) => {
let ret = await axios.get(`/h5dw/dataobject?key=` + key);
if (ret.status === 200) {
return ret.data.data.dataobject;
} else {
return null;
}
}
await dw1.setDataObject('d_test1');
# rowCount
获取当前数据窗口的行数。
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | int | 数据行数 |
dw.rowCount();
# setItem
给数据窗口赋值
参数名称 | 类型 | 说明 |
---|---|---|
row | int | 数据行数 |
column | String/Number/Object | 列名称/列号/json对象 |
value | String/Number | 数据值 |
返回值 | int | 成功返回1,失败返回-1 |
dw1.setItem(1,'name','Jake')
dw1.setItem(1,{'name':'Jake','sex':0})
# getItem
获取指定行和列的数据项的值
参数名称 | 类型 | 说明 |
---|---|---|
row | int | 数据行数 |
column | String/Number | 列名称/列号 |
返回值 | Object | 返回指定行和列的值,数据类型与列的数据类型一致,出错时返回空字符串("") |
dw1.getItem(1,'name')
# setItemStatus
修改行或行中列的修改状态
参数名称 | 类型 | 说明 |
---|---|---|
row | int | 数据行数 |
column | String/Number | 列名称/列号(若为0,则设置整行的状态) |
dwbuffer | DWBuffer | 包含该行的DataWindow缓冲区 |
status | DWItemStatus/int/String | 新的状态值(PowerBuilder中为DWItemStatus枚举数据类型,Web ActiveX中为整数,Web DataWindow中为字符串) |
返回值 | int/NULL | 成功返回1,失败返回-1;若任何参数值为NULL,则在返回NULL |
dw1.setItemStatus(1,'name',DWBuffer.Primary, DWItemStatus.DataModified);
# getItemStatus
获取行或列中的修改状态
参数名称 | 类型 | 说明 |
---|---|---|
row | int | 指定要获取状态的行 |
column | String/Number | 指定要获取状态的列。可以是列号或列名。指定0以获取整行的状态。 |
dwbuffer | DWBuffer | 包含行的DataWindow缓冲区 |
返回值 | Number/NULL | 返回dwItemStatus枚举数据类型。如果任何参数值为NULL,返回NULL。 |
const status = dw1.getItemStatus(1,'name',DWBuffer.Primary);
# insertRow
插入行
参数名称 | 类型 | 说明 |
---|---|---|
row | int | 指定要插入行之前的位置。要在末尾插入行,请指定0 |
返回值 | int | 成功返回添加的行号,失败返回-1 |
# deleteRow
删除行
参数名称 | 类型 | 说明 |
---|---|---|
row | int | 指定要删除的行。要删除当前行,请为row指定0 |
返回值 | int | 成功返回1,失败返回-1 |
# resetUpdate
重置更新标志并清空删除缓冲区
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | int | 成功返回1,失败返回-1 |
# reset
清空DataWindow控件或DataStore对象中的所有数据
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | int | 成功返回1,失败返回-1(通常不使用返回值) |
# setRow
设置DataWindow控件或DataStore对象的当前行
参数名称 | 类型 | 说明 |
---|---|---|
row | int | 指定要设置的行 |
返回值 | int | 成功返回当前行号,无当前行返回0,失败返回-1 |
# scrollToRow
滚动DataWindow控件到指定行
参数名称 | 类型 | 说明 |
---|---|---|
row | int | 指定要滚动的行。如果row为0,则滚动到第一行。如果row大于最后一行行号,则滚动到最后一行 |
返回值 | int | 成功返回滚动到的行号,失败返回-1 |
# scrollPriorRow
向上滚动DataWindow控件一行
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | int | 滚动完成后返回显示在DataWindow控件顶部的行号,如果尝试滚动到第一行之前则返回-1 |
# scrollNextRow
向下滚动DataWindow控件一行
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | int | 滚动完成后返回显示在DataWindow控件顶部的行号,如果尝试滚动到最后一行之后则返回-1 |
# getRow
获取DataWindow对象或报表中与某个带区关联的行号
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | int | 成功返回行号,无数据检索或添加返回0,失败返回-1 |
# currentRow
获取DataWindow控件或DataStore对象的当前行号(焦点行)
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | number | 成功返回当前行号,无当前行返回0 |
# selectRow
选择或取消选择DataWindow控件或DataStore中的行
参数名称 | 类型 | 说明 |
---|---|---|
row | int | 指定要选择或取消选择的行。指定0以选择或取消选择所有行 |
select | Boolean | 确定是否选择行(true为选择,false为取消选择) |
返回值 | int | 成功返回1,失败返回-1 |
# isSelected
判断DataWindow或DataStore中的行是否被选中
参数名称 | 类型 | 说明 |
---|---|---|
row | int | 指定要判断的行。指定0表示判断所有行。如果行号大于DataWindow中的行数或为0或负数,isSelected也返回false。 |
返回值 | Boolean | 如果DataWindow控件中的行被选中,则返回true;否则返回false。 |
# shareData
共享DataWindow控件(或DataStore)检索的数据
参数名称 | 类型 | 说明 |
---|---|---|
dwsecondary | DataStore | 与主DataWindow共享数据的次DataWindow。控件不共享格式,只共享数据,包括主缓冲区、删除缓冲区、过滤缓冲区和排序顺序中的数据。 |
返回值 | int | 成功返回1,失败返回-1。 |
# shareDataOff
关闭DataWindow控件或DataStore的数据缓冲区共享
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | int | 成功返回1,失败返回-1。 |
# rowsMove
移动DataWindow控件(或DataStore)中的行范围到另一个DataWindow控件(或DataStore)中,或在单个DataWindow控件(或DataStore)内从一个缓冲区移动到另一个缓冲区
参数名称 | 类型 | 说明 |
---|---|---|
startrow | int | 要移动的第一行的行号。 |
endrow | int | 要移动的最后一行的行号。 |
movebuffer | DWBuffer | 指定要移动行的DataWindow缓冲区的值(PowerBuilder中的枚举数据类型或Web ActiveX中的整数)。 |
targetdw | DataStore | 要将行移动到的DataWindow控件或DataStore的名称。可以是相同的DataWindow控件(或DataStore)或不同的DataWindow控件(或DataStore),但不能是子DataWindow。 |
beforerow | int | 要在其之前插入移动行的行号。要在最后一行之后插入,请使用大于现有行数的任何值。 |
targetbuffer | DWBuffer | 指定目标缓冲区的值(PowerBuilder中的枚举数据类型或Web ActiveX中的整数)。 |
返回值 | int | 成功返回1,失败返回-1。如果任何参数的值为NULL,在PowerBuilder和JavaScript中该方法返回NULL。 |
// 删除所有行,通过rowsMove移动到DWBuffer.Delete删除后,调用update会包括删除行,用rowsDiscard不会
dwMain.rowsMove(1,dwMain.rowCount(), DWBuffer.Primary, dwMain, 1, DWBuffer.Delete);
# rowsCopy
复制DataWindow控件(或DataStore对象)中的行范围到另一个DataWindow控件(或DataStore对象)中,或在单个DataWindow控件(或DataStore对象)内从一个缓冲区复制到另一个缓冲区
参数名称 | 类型 | 说明 |
---|---|---|
startrow | int | 要复制的第一行的行号。 |
endrow | int | 要复制的最后一行的行号。 |
copybuffer | DWBuffer | 指定要复制行的DataWindow缓冲区的值(PowerBuilder中的枚举数据类型或Web ActiveX中的整数)。 |
targetdw | DataStore | 要将行复制到的DataWindow控件或DataStore的名称。可以是相同的DataWindow控件(或DataStore)或不同的DataWindow控件(或DataStore)。 |
beforerow | int | 要在其之前插入复制行的行号。要在最后一行之后插入,请使用大于现有行数的任何值。 |
targetbuffer | DWBuffer | 指定目标DataWindow缓冲区的值(PowerBuilder中的枚举数据类型或Web ActiveX中的整数)。 |
返回值 | int | 成功返回1,失败返回-1。如果任何参数的值为NULL,在PowerBuilder和JavaScript中该方法返回NULL。 |
// 复制dw1所有行到dw2的最后
dw1.rowsCopy(1,dw1.rowCount(), DWBuffer.Primary, dw2, dw2.rowCount() + 1, DWBuffer.Primary);
# rowsDiscard
丢弃DataWindow控件中的行范围
参数名称 | 类型 | 说明 |
---|---|---|
startrow | int | 要丢弃的第一行的行号。 |
endrow | int | 要丢弃的最后一行的行号。 |
buffer | DWBuffer(可选,默认为DWBuffer.Primary) | 指定包含要丢弃行的DataWindow缓冲区的值(PowerBuilder中的枚举数据类型、Web ActiveX中的整数或Web DataWindow中的字符串)。 |
返回值 | int | 成功返回1,失败返回-1。 |
dwMain.rowsDiscard(1,dwMain.rowCount(), DWBuffer.Primary);
# setSort
设置数据窗口或数据存储的排序标准,排序在调用sort
函数后生效
参数名称 | 类型 | 说明 |
---|---|---|
format | String | 排序标准,包含列名或列号,列号前需加# |
返回值 | int | 成功返回1,失败返回-1 |
dw1.setSort("name A");
dw1.setSort("#1 D");
# sort
按数据窗口当前排序标准排序数据窗口或数据存储的行
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | int | 成功返回1,失败返回-1,若dwcontrol为NULL,则返回NULL |
dw1.setSort("name A")
dw1.sort();
# setFilter
设置数据窗口或数据存储的筛选标准
参数名称 | 类型 | 说明 |
---|---|---|
format | String | 布尔表达式,作为筛选标准,包含列名或列号,列号前需加# |
返回值 | int | 成功返回1,失败返回-1,若未分配DataWindow对象到DataWindow或DataStore,则返回-1,返回值通常不使用 |
dw1.setFilter("name = 'Jake'")
# filter
显示数据窗口中符合当前筛选标准的行,不符合筛选标准的行移至筛选缓冲区
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | int | 成功返回1,失败返回-1,返回值通常不使用 |
dw1.setFilter("name = 'Jake'")
dw1.filter();
# find
在数据窗口或数据存储中查找数据符合指定条件的下一行
参数名称 | 类型 | 说明 |
---|---|---|
expression | String | 布尔表达式,作为搜索标准,包含列名 |
start | int | 开始搜索的行位置 |
end | int | 结束搜索的行位置,若end小于start,则向后搜索 |
返回值 | int | 返回在搜索范围内符合搜索标准的第一行的行号,若未找到则返回0,若发生错误则返回以下负数值:-1表示一般错误,-5表示参数错误 |
dw1.find("name = 'Jake'", 1, dw1.rowCount())
# deletedCount
报告在数据库中标记为删除的行数
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | int | 返回从dwcontrol中删除但尚未在相关数据库表中更新的行数,若未删除行或所有已删除行已在数据库中更新,则返回0,若失败则返回-1 |
# filteredCount
报告因当前筛选标准而未在数据窗口中显示的行数
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | int | 返回dwcontrol中因不符合当前筛选标准而未显示的行数,若所有行均显示,则返回0,若发生错误则返回-1 |
# filterAll
为所有数据列设置筛选文本。显示符合当前筛选文本的数据窗口行。
参数名称 | 类型 | 说明 |
---|---|---|
text | String | 筛选文本 |
# modifiedCount
报告在DataWindow或DataStore中已修改但未更新的行数。
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | int | 返回主缓冲区中已修改的行数。如果没有行被修改或所有已修改的行都已在数据库表中更新,则返回0。如果发生错误,则返回-1。 |
# getChanges
检索对DataWindow或DataStore所做的更改,并将其作为blob返回。此方法主要用于分布式应用程序。
参数名称 | 类型 | 说明 |
---|---|---|
data | (参数未明确说明,通常为用于接收更改的对象或变量) | |
返回值 | int | 如果成功,返回DataWindow更改blob中的行数;如果失败,则返回以下值之一:-1表示内部错误。 |
# setChanges
将对GetChanges捕获的更改应用到DataWindow或DataStore。此方法主要用于分布式应用程序。
参数名称 | 类型 | 说明 |
---|---|---|
data | (参数未明确说明,通常为包含更改的blob) | |
返回值 | int | 返回以下值之一:1表示所有更改已应用;2表示部分更新成功,冲突的更改已被丢弃;-1表示方法失败;-2表示DataWindow更改blob的状态与DataWindow的状态之间存在冲突;-3表示列规范不匹配。 |
# describe
报告DataWindow对象及其内部控件的属性值。DataWindow中的每个列和图形控件都有一组属性。
参数名称 | 类型 | 说明 |
---|---|---|
propertylist | String | 一个字符串,其值为属性或Evaluate函数的空白分隔列表。 |
返回值 | String | 返回一个字符串,其中包含每个属性或Evaluate函数的值。每个项目中的值由换行符(~n或\n)分隔。如果属性列表包含无效项,Describe将为该项返回一个感叹号(!)并忽略属性列表的其余部分。如果属性没有值,Describe将返回一个问号(?)。 |
// 获取数据源的列数
dw1.describe('datawindow.column.count')
//获取名称为dt_t对象的文本
dw1.describe('dt_t.text')
# 属性值包括
- datawindow.column.count
- datawindow.color
- datawindow.readonly
- column.text
- column.tabsequence
- column.visible
- column.protect
- column.height
- column.dddw
- column.background
# modify
通过应用作为指令列表给出的规范来修改DataWindow对象。
参数名称 | 类型 | 说明 |
---|---|---|
modstring | String | 包含修改规范的字符串。有关适当格式的详细信息,请参阅PB用法。 |
返回值 | String | 如果成功,则返回空字符串("");如果失败,则返回错误消息。 |
// 修改名称为dt_t的文本为123
dw1.modify('dt_t.text="123"')
# evaluate
在DataWindow或DataStore中找到数据满足指定条件的下一行。
参数名称 | 类型 | 说明 |
---|---|---|
expression | String | 一个字符串表达式,可以包含列名或列号。支持运算符、math对象的数学表达式、支持字符串的函数、日期函数。 |
n | int | 行号。将使用此列的列值。 |
返回值 | String/Number | 返回表达式结果。 |
dw1.evaluate('if(name="Jake", 1, 0)', 1) //如果名称为Jake,返回1,否则返回0
dw1.evaluate('price * 2', 1) //如果第1行price数据为10,返回20
dw1.evalute('abs(-1)', 1) //取绝对值,返回1
dw1.evalute('ceil(1.2)', 1) //上取整,返回2
dw1.evaluate('pow(2, 3)', 1); //2的3次方,返回8
# setOption
设置DataWindow选项。
参数名称 | 类型 | 说明 |
---|---|---|
key | String/Object | 选项名称,当key字符串时,value其值为选项值。当Key为json对象时,不需要设置value |
value | String | 其值为选项值。 |
可设置选项
key | 类型 | 说明 |
---|---|---|
showFixedColHeader | Boolean | 是否显示固定列头,true为显示,false为不显示 |
showFixedRowHeader | Boolean | 是否显示固定行号,true为显示,false为不显示 |
showSelector | Boolean | 点击时是否显示选择框,true为显示,false为不显示 |
currentRowSelected | Boolean | 是否当前行被选中,true为选中,false为不选中 |
onlyShowCurrentRow | Boolean | 是否只显示当前行,true为只显示当前行,false为显示所有行,一般用于自由表格,只想看到当前行,如PB的FreeFrom格式 |
showHScrollBar | Boolean | 是否显示水平滚动条,true为显示,false为不显示 |
showVScrollBar | Boolean | 是否显示垂直滚动条,true为显示,false为不显示 |
dw1.setOption('showFixedColHeader', true)
dw1.setOption({'showFixedColHeader':true})
# setRedraw
设置DataWindow是否可以刷新
参数名称 | 类型 | 说明 |
---|---|---|
redraw | Boolean | true或false |
# design
改变设计模式
参数名称 | 类型 | 说明 |
---|---|---|
value | Boolean | true或false |
# isDesign
获取设计模式
参数名称 | 类型 | 说明 |
---|---|---|
返回值 | Boolean | 设计模式 |
发送DataWindow控件或DataStore对象的内容到打印机
参数名称 | 类型 | 说明 |
---|---|---|
options | Object | 打印选项 |
options参数如下
{
orientation:'landscape', // 'landscape' | 'portrait'
paperSize:'A4', // 'A3' | 'A4' | 'A5' | 'A5' | 'B4' | 'B5' | 'Custom'
paperUser:{
width:'210mm',
height:'297mm',
},
margin: {
left:'12mm',
right:'12mm',
top:'12mm',
bottom:'12mm',
},
range:'1-20', // 1,3,1-20
}
// 打印设置纸为A4,纵向打印
dw1.print({paperSize:'A4',orientation:'portrait'});
# 属性
# dataObject
设置或者获取数据窗口对象
// 这里retrieve属性是SQL语句,服务端DataStore这样使用,客户端设置为key,如test1,
// 服务端更新传入的test1进行检索
let value = {
processing:1,
table:{
retrieve:'select id,name,dt,price,des,num,bit from test1 order by id',
update:'test1',
updatewhere:2,
updatekeyinplace:true,
columns:[
{name:'id',dbname:'id',type:'long',key:yes,update:true}
{name:"name",dbname:'name',type:"string",update:true},
{name:"age",type:"long",update:true},
{name:"dt",type:"datetime",update:true},
{name:'sex',type:"long",values:[{value:1,text:'男'},{value:0,text:'女'}]}
]
}
}
ds1.dataObject = value;
# data
设置或获取数据窗口数据
dw1.data = [
{id:1, name:'张三',age:18,dt:'2018-01-01'},
{id:2, name:'李明',age:20,dt:'2018-01-01'},
];
console.log(dw1.data);
//注意这里获取到的data并不是和传入的data一样,而是加入了行状态,数据如下
/*
[
{status:0,data:{id:1, name:'张三',age:18,dt:'2018-01-01'}},
{status:0,data:{id:2, name:'李明',age:20,dt:'2018-01-01'}},
]
*/