全局函数


  所谓全局函数是一组公共的函数,硕正的所有组件都拥有几乎完全一样的函数形式. 全局函数分如下几类:
  1.对话框函数
    1.1.非模式对话框函数
    1.2.模式对话框函数
  2.消息框函数
  3.下拉List管理函数
  4.Validations管理函数
  5.对表达式和计算函数的封装
  6.DOM函数
  7.其它函数


1.对话框函数

  全局函数中有二组对话框函数。通过调用对话框函数,您能够打开一个对话框。对话框是以 一个FreeForm 作为显示样式的,其内容完全自定义.
  硕正的对话框分为 模式对话框 和 非模式对话框 二种,模式对话框是Windows的标准对话框,当对话框出现时, 主线程是阻塞的,直到对话框关闭;而非模式对话框则是在控件的内部浮现出一个freeform,主线程不会阻塞.
  非模式对话框的好处,是在打开对话框时不影响其它Tab选项卡 - 用户仍能正常切换选项卡. 此外,由于线程不阻塞,对话框中的 freeform 的子控件的事件能触发到页面的OnEvent( )中,能实现与页面的交互,这一点非常有用.


1.1.非模式对话框函数

  非模式对话框是悬浮在组件中央的一个FreeForm,同时组件本身呈半透明、非活动状态.
  并不是所有组件都支持内嵌的非模式对话框的,如下组件是支持的(即支持本组函数):
    Treelist / Freeform / Freeform设计器 / Report / Tree / Chart.
  非模式对话框 和 它的容器(即组件本身)都会触发页面的OnEvent( )事件,为了相互区分,您应该在事件中调用 IsInnerDialogOpen( ) 这个函数来判断,这一点非常重要,具体请参见自有表头的演示页:“13.基于Freeform的对话框”、“15.辅助Treelist输入(2)”。
分类函数名用途
非模式对话框函数指定对话框的Freeform
指定对话框的参数
打开非模式对话框
关闭非模式对话框
非模式对话框是否正打开着

函数详解:

SetDialogFreeForm指定对话框的Freeform  
参数FreeForm的URL(相对或绝对),或者直接就是XML大串
返回值(无)


SetDialogPara指定对话框的参数
参数可选,可以是如下属性值(多个属性间以分号(;)分隔):
width / height - 宽度和高度,可以是百分比(如"80%",相对于组件的宽/高)、整数(绝对像素数),默认都是80%;
ExtWidth / ExtHeight - 扩展宽度/高度, 默认分别是20/14;
备注:扩展宽度/高度表示对话框右、下方预留的空白边界.
IdFocus(或FocusId) - 指定定位焦点,如果为空,则按freeform的TabOrder自动定位;
bgColor(或backColor) - 组件被遮罩的底色,默认是#C8C8C8;
alpha - 遮罩时组件画面的透明度, 0-255, 默认是70;
返回值(无)


OpenInnerDialog打开非模式对话框  
参数加载的数据的URL, 或直接就是XML/JSON大串,用于为FreeForm赋初值
返回值成功 - 返回对话框的freeform的句柄(一个整数串);
失败 - 空串, 原因通常为:freeform的XML模版不存在、或对话框已经打开着
备注由于函数返回了freeform的句柄,所以您可以以扩展函数的方式调用freeform的所有函数
备注关闭后,Freeform并未被销毁,您仍然可以使用这个返回的句柄,通过扩展函数存取freeform中的内容
示例//打开 freeform 弹窗, 并取得句柄
var h = AF.func("OpenInnerDialog", "");
//弹出的 freeform 中有选项卡、树列表, 要对其执行函数, 必须是如下这种扩展函数的形式
AF.func(h + "tab1.T.Load", "treelistdata/data60.tsv-ex.txt");


CloseInnerDialog关闭非模式对话框  
参数(无)
返回值成功 - 返回对话框的freeform的句柄(一个整数串);
失败 - 空串, 对话框本来就没有打开


IsInnerDialogOpen或"IsInnerDialogOpened",非模式对话框是否正打开着  
参数(无)
返回值1 / 0
备注该函数很重要,常用于在OnEvent( )事件中判断当前的消息发送者.





1.2.模式对话框函数

  模式对话框的FreeForm至少要有1个Button,但不支持菜单、下拉菜单按钮、分页器.
  模式对话框弹出后,如果用户按下其中的Button,对话框随即关闭,并返回Button按钮的ID。
  由于模式对话框是线程阻塞的,对话框中的控件的事件是无法被页面拦截的。模式对话框的函数分类说明如下:
分类函数名用途
模式对话框函数指定对话框的Freeform
指定对话框的标题等参数
打开模式对话框
取得刚关闭的对话框中的FreeForm的所有input的输入内容
取得刚关闭的对话框中的FreeForm的某个input的输入内容
取得刚关闭的对话框中的FreeForm中的所有ID

函数详解:

SetDialogFreeForm指定对话框的Freeform  
参数FreeForm的URL(相对或绝对),或者直接就是XML大串
返回值(无)
备注该Freeform中必须要有一个按钮控件,否则不起作用


SetDialogPara指定对话框的标题等参数  
参数可选,可以是如下属性值(多个属性间以分号(;)分隔):
title - 对话框窗口的标题
IdOk(或OkId) - 相当于“确认”的按钮的id, 点击后能自动执行Freeform的 Validate( ) 验证函数;
IdFocus(或FocusId) - 指定定位焦点,如果为空,则按freeform的TabOrder自动定位;
ExtWidth / ExtHeight - 扩展宽度/高度, 默认分别是20/14;
备注:扩展宽度/高度表示对话框右、下方预留的空白边界.
返回值(无)
示例AF.func("SetDialogPara", "title=警告; ExtWidth=20; ExtHeight=20");


OpenDialog打开模式对话框  
参数可选,加载的数据的URL, 或直接就是XML/JSON大串,用于为FreeForm赋初值
返回值鼠标点击Freeform中的Button按钮的ID
备注1.如果未弹出对话框,可能是Freeform的URL不正确、或Freeform中没有Button导致;
2.本函数执行时,线程进入阻塞状态,直到对话框关闭,本函数才返回.
示例AF.func("OpenDialog", "{price:20, date1:2010.12.20, checked:true}");


GetDialogValues取得刚关闭的对话框中的FreeForm的所有input的输入内容  
参数可选,可以为 XML / JSON, 默认是XML
返回值XML或JSON串
备注如果返回JSON串,可能是类似这样的:{"price":"20", "date1":"2010.12.20", "checked":"1"}


GetDialogValue取得刚关闭的对话框中的FreeForm的某个input的输入内容  
参数Input的ID
如果是串 @freeform, 表示取得该freeform的ID(在freeform的XML的 <Properties> 中定义的ID)
返回值该input的输入内容


GetDialogIDs取得刚关闭的对话框中的FreeForm中的所有ID
参数(无)
返回值以逗号分隔的所有ID






2.消息框函数

  消息框是指在组件中心位置呈现出的时尚的提示框、数据加载中的小对话,有了这批函数,您可以自己操控这些提示信息了. 函数主要有2个: MessageBoxFloat、MessagaePoint, 也可以简写为 MsgFloat、MsgPoint.
  消息框显示的文字,支持部分类似HTML的元素,使得文字内容可以较为灵活地呈现,例如代码:
var text = "<br>   今晚<font color=red>21:00</font>整,请第二工组到二号库房集合,一起将发往<b>通州、<br>宁波</b>的货物清点";
text += "完毕,第三工组请打扫货车,并检查核对货柜.<br>";
text += "                  <image>res/capu.png</image>  <i>谢谢!</i>";
AF.func("msgFloat", text + "\r\n hold=0;pos=browser;buttonText1=我请事假;buttonWidth1=120;buttonId1=1112;buttonText2=收到;buttonId2=1000;buttonWidth2=120");
//注: buttonId是给事件消息用的,因为消息框不是模式对话框,不阻塞主线程,点击按钮将触发 UserEvent 事件
  呈现的效果是:

  如下是树列表的 "12.事件" 示例,在 MouseMoveIn 事件中执行了 MessageBoxPoint函数:

  文字仅支持如下类似HTML的元素:
元素名规则元素名规则
b文字加粗 i文字倾斜
br换行,也可以用\\r\\n代替center文字(或图片)居中显示
font文字颜色和字体,例如<font face="Consolas,Courier New" color="#ff0000">21:00</font>
支持的属性: 仅 colorface 属性
image嵌入图片,如 <image>res/capu.png</image>, 也可以是一个 Base64 串
支持的属性: height, width, 用以指定显示尺寸

分类函数名用途
消息框函数弹出Supcan风格的能自动关闭的浮动提示框
弹出Supcan风格的能自动关闭的浮动提示框
弹出Supcan风格的指向某单元格的提示框(for Treelist、Report)
弹出Supcan风格的指向某输入框的提示框(for Freeform)
弹出Supcan风格的指向当前控件的提示框(for Edit、Upload等)
弹出Supcan风格的指向当前光标处的提示框
强制关闭提示框
显示含义为“加载中”的小动画
关闭含义为“加载中”的小动画

函数详解:

MessageBoxFloat(语法1)弹出Supcan风格的能自动关闭的浮动提示框,也可简写为MsgFloat  
参数1具体的文字串
参数2标题,可选,可含如下文字之一:Warn、Success、Fail、Error、Prompt(可以更长,包含即可,例如Successful、Warning均合法),默认是Prompt
参数3左侧小图标,可选,可含如下文字之一:Stop、Success、Question、Info(可以更长,包含即可,例如Successful、Information均合法),默认是Info
返回值(无)
备注参数2 和 参数3 次序可以颠倒
示例xml = xml.replace(/\r\n/g, "\\r\\n"); //把串中原有的回车符全部转换成\\r\\n
AF.func("MessageBoxFloat", xml + "\r\n Warning \r\n Information");


MessageBoxFloat(语法2)弹出Supcan风格的能自动关闭的浮动提示框,也可简写为MsgFloat  
参数1具体的文字串
参数2属性串,以分号(;)分隔,可以有如下"属性=值"对:
title - 标题,可含如下文字之一:Warn、Success、Fail、Error、Prompt(可以更长,包含即可,例如Successful、Warning均合法),默认是Prompt;
icon - 左侧小图标,可含如下文字之一:Stop、Success、Question、Info(可以更长,包含即可,例如Successful、Information均合法),默认是Info;
hold - 保留的时间(单位:秒),0表示永远显示,点击它才关闭. 它的默认值和icon有关(不是很精确):
  Success - 2.5秒;
  Info - 3.5秒;
  Question - 4.5秒;
  Stop - 永远显示;
pos - 位置, 如果是串"cursor",表示当前鼠标位置;否则, 可以是如下子串的组合(逗号分隔): supcan(相对于硕正控件), browser(相对于浏览器), screen(相对于显示器), center(中心对齐), left(左对齐), right(右对齐), top(上对齐), bottom(下对齐). 默认是"supcan, center";

  以及如下的位于底部的自定义按钮:
ButtonText - 按钮的文字;
ButtonWidth - 按钮的宽度,单位是像素,如果不定义宽度,系统将自动算出一个合适的.
ButtonId - 按钮的Id, 须为大于0的数字, 相当于功能号,用于消息通知。由于该消息框不是阻塞线程的对话框,所以点击按钮将触发名为 UserEvent 的事件,事件的 P1 参数就是该 Id 号。注:如果不定义Id, 将不触发 UserEvent 事件;
  此外,也支持同时安置多个按钮,写法是在上述属性后面加1、2..序号,请参考下面的例子。
返回值(无)
示例xml = xml.replace(/\r\n/g, "\\r\\n"); //把串中原有的回车符全部转换成\\r\\n
AF.func("MessageBoxFloat", xml + "\r\n title=Warning; icon=Information; hold=0; pos=screen,bottom,right");

//安置多个按钮
AF.func("MessageBoxFloat", "您确认要保存吗?\r\n title=Warning; ButtonText1=确认;ButtonText2=取消;ButtonId1=123");


MessageBoxPoint(用途1)用于Treelist、Report,弹出Supcan风格的能自动关闭的指向某单元格的浮动提示框,也可简写为MsgPoint
参数1行号
参数2列号,或列名(for Treelist)
参数3接下去的参数接续了和MessageBoxFloat一样的语法(除了不支持 "center"),请参考MessageBoxFloat
返回值(无)


MessageBoxPoint(用途2)用于Freeform,弹出Supcan风格的能自动关闭的指向某输入框的浮动提示框,也可简写为MsgPoint
参数1Freeform中的输入控件的ID号
参数2接下去的参数接续了和MessageBoxFloat一样的语法(除了不支持 "center"),请参考MessageBoxFloat
返回值(无)


MessageBoxPoint(用途3)用于Edit、Upload,弹出Supcan风格的能自动关闭的指向当前控件的浮动提示框,也可简写为MsgPoint
参数参数和MessageBoxFloat一样(除了不支持 "center"),请参考MessageBoxFloat
返回值(无)


MessageBoxPoint(用途4)用于Treelist、Freeform、Report、Edit、Upload,弹出Supcan风格的能自动关闭的指向当前光标的浮动提示框,也可简写为MsgPoint
参数固定的串 "Cursor"
参数参数和MessageBoxFloat一样(除了不支持 pos 属性),请参考MessageBoxFloat
返回值(无)
示例xml = xml.replace(/\r\n/g, "\\r\\n"); //把串中原有的回车符全部转换成\\r\\n
AF.func("MsgPoint", "Cursor \r\n" + xml + "\r\n title=Warning; icon=Information; hold=0");


CloseMessageBox强制关闭提示框, 也可以简写为CloseMsg
参数(无)
返回值(无)


OpenLoadMask显示含义为“加载中”的小动画()。用于js发送独立的Ajax请求时,让控件呈现"正在加载中"的动画效果
参数延迟的毫秒数,默认500,表示500毫秒后才显示这个动画.
返回值(无)
备注随后必需关闭动画,否则永远在动画中。关闭动画有2种途径:
1.调用下面的 CloseLoadMask 立即关闭;
2.调用Treelist、Freeform的Load( )函数后,动画会自动关闭的;


CloseLoadMask关闭含义为“加载中”的小动画
参数(无)
返回值(无)






3.下拉List管理函数

  全局函数中还有一组用于操控下拉List的函数,能单独存取List的内容。下拉List的句柄是通过GetHandle( )函数获取的.
分类函数名用途
下拉List函数往下拉List中添加 Key-Value 对
往下拉List中插入一个Key-value对
删除下拉List中某个Key
清除下拉List的全部内容
取得下拉List的记录总条数
根据Key从下拉List中查找Value
从下拉List中顺序取得Key
从下拉List中顺序取得value
更改下拉List中某个Key对应的value

函数详解:

DropList_Add往下拉List中添加 Key-Value 对
参数1下拉List的句柄 (注: 通过GetHandle( )函数获取)
参数2键(key)
参数3值(value)
返回值1 - 成功,空串 - 失败,失败的原因通常为Key已经存在


DropList_Insert往下拉List中插入一个Key-value对
参数1下拉List的句柄 (注: 通过GetHandle( )函数获取)
参数2位置的键(key),表示位于这个key插入
参数3键(key)
参数4值(value)
返回值1 - 成功,空串 - 失败,失败的原因通常为位置的键(Key)不存在、或新的Key已经存在


DropList_Delete删除下拉List中某个Key
参数1下拉List的句柄 (注: 通过GetHandle( )函数获取)
参数2键(key)
返回值1 - 成功,空串 - 失败,失败的原因通常为Key不存在


DropList_DeleteAll清除下拉List的全部内容
参数下拉List的句柄 (注: 通过GetHandle( )函数获取)
返回值(无)


DropList_GetItems取得下拉List的记录总条数
参数下拉List的句柄 (注: 通过GetHandle( )函数获取)
返回值数量


DropList_Find根据Key从下拉List中查找Value
参数1下拉List的句柄 (注: 通过GetHandle( )函数获取)
参数2键(key)
返回值值(Value)


DropList_GetKey从下拉List中顺序取得Key
参数1下拉List的句柄 (注: 通过GetHandle( )函数获取)
参数2顺序号,从0开始
参数3可选,true/false, 表示是否按照下拉中的显示顺序,默认false, 仅用于isSortByKey="true"的情形
返回值键(key)的内容


DropList_GetValue从下拉List中顺序取得value
参数1下拉List的句柄 (注: 通过GetHandle( )函数获取)
参数2顺序号,从0开始
参数3可选,true/false, 表示是否按照下拉中的显示顺序,默认false, 仅用于isSortByKey="true"的情形
返回值值(value)的内容


DropList_SetValue更改下拉List中某个Key对应的value
参数1下拉List的句柄 (注: 通过GetHandle( )函数获取)
参数2键(key)
参数3值(value)
返回值1 - 成功,空串 - 失败,失败的原因通常为键(Key)不存在






4.Validations管理函数

  本函数集用于单独管理 Treelist 或 Report 中的<Validations>.
分类函数名用途
Validation函数取得某id的Validation的内容
取得所有Validation的ID
更改或添加Validation
添加Validation
删除某id的Validation
删除所有Validation

函数详解:

Validation_Get取得某id的Validation的内容
参数1Validation的句柄
参数2Validation的id
返回值该Validation的JSon串


Validation_GetIds取得所有Validation的ID
参数Validation的句柄
返回值ID, 多个ID间以逗号分隔


Validation_Set更改或添加Validation
参数1Validation的句柄
参数2Validation的id,如果该id不存在,就添加
参数3该Validation的JSon串,或以分号分隔的"key=value"格式串
返回值(无)
示例var h = AF.func("GetHandle", "Validation"); //取得句柄
AF.func("Validation_Set", h+"DJ1 \r\n {'errorText':'价格不对', 'validation':'price>0'}");


Validation_Add添加Validation
参数1Validation的句柄
参数2Validation的JSon串,或以分号分隔的"key=value"格式串
返回值(无)


Validation_Delete删除某id的Validation
参数1Validation的句柄
参数2Validation的id
返回值(无)


Validation_DeleteAll删除所有Validation
参数Validation的句柄
返回值(无)





5.对表达式和计算函数的封装

5.1.对表达式的封装

  硕正内部有一表达式解析引擎,它能高效地处理报表、树列表组件的公式表达式,表达式的书写规则在“开发者指南 \ 公共内容” 中的 “表达式” 有专门的介绍,通过如下2个API函数,您也可以单独调用该功能.
分类函数名用途
表达式函数执行表达式
解析表达式

函数详解:

RunExp执行表达式
参数表达式串
返回值结果,如果执行有误,返回的是"[Err!]"
备注如果控件 (即 AF ) 是硕正报表,表达式功能更强大,支持和单元格的公式几乎一样的表达式(仅企业版)
示例var result = AF.func("runExp", "=15+3"); //返回18

//假如 AF 是硕正报表, 支持如下的表达式计算(仅企业版):
var ret = AF.func("runExp", "=A4 + if(D3==1, K4, K6) + myFunc(A1)"); //注: myFunc 是报表的自定义函数


ParseExp解析表达式
参数表达式串
返回值空串表示表达式正确,否则返回错误信息

5.2.对计算函数的封装

  “开发者指南 \ 公共内容” 中的 “计算函数” 一般单独用于硕正组件自身的表达式,但也可以用 AF.func( ) 单独调用,例如.
 //返回串 "壹万零壹佰贰拾叁元贰角肆分"
 var s = AF.func("RMB", "10123.24");
 
 //返回串 "10,123.20"
 var s = AF.func("formatNum", "10123.2 \r\n #,##0.00");
  Report报表中的数据源函数,象 "data"、"head"、"search" 这些取得单个数据的函数,可以通过本方法获取, 但是 "datarow"、"headrow" 这些函数就无法支持了。

执行 Report 报表的这些函数前, 通常还需要执行报表的 SetHoldDSData 函数.






6.DOM函数

  DOM(文档对象模型)是XML/JSON在内存中的OO结构模型,通过以下的DOM函数集,您可以较方便地解析、修改或生成XML串. 为了能理解函数及参数的作用,我们先对某些术语作一个解释、约定:
1.DOM句柄
  XML/JSON是一棵树,树的每一个节点(包括树杈、树叶)在内存中都是DOM类的对象实例,而每个对象实例都有一个唯一的指针地址的,我们就把这个指针地址称作“句柄”。
2.DOM父亲、子孙
  由于XML/JSON可以是任意级别的复杂树,所以每个DOM对象中,都有父亲、子孙的存储位置的。没有父亲的DOM对象就是根节点,没有儿子的DOM对象就是树叶。
3.DOM元素名、属性
  按常规的资料,都叫做元素,但我们这里稍加区分:
  这样,每个DOM对象都有一个元素名,同时也可以有多个属性,以及属性对应的值.
4.内存泄漏
  如果您创建了DOM对象,但没有销毁它,那么势必会造成该内存块始终被占用,这就是所谓的内存泄漏。除非如下文档中有特别的声明,否则您最终必须销毁该对象。
  子孙DOM对象是不需要你去销毁的,因为父对象在销毁自己的同时,它自己会去逐个销毁子孙对象的。
5.实例
  如下3个例子由浅入深,演示了部分DOM函数的功能,假如这是原始的XML:
<root>
 <product id='001'>MB</product>
</root>
  例一.简单的转换
 var xml="<root><product id='001'>MB</product></root>";
 var hRoot = AF.func("dom_new", xml);  //创建DOM对象
 alert(AF.func("dom_export", hRoot));  //export为 XML 串
 AF.func("dom_delete", hRoot);  //最后必须销毁


  例二.更改元素的内容
 var hRoot = AF.func("dom_new", xml);  //创建DOM对象
 var hProd = AF.func("dom_find", hRoot + "\r\n product");  //定位到 product 元素
 AF.func("dom_setProp", hProd + "\r\n id \r\n100000");  //修改属性
 AF.func("dom_setProp", hProd + "\r\n #text \r\nUser");  //修改text
 alert(AF.func("dom_export", hRoot));
 AF.func("dom_delete", hRoot);  //最后必须销毁


  例三.添加节点、删除节点:
 var hRoot = AF.func("dom_new", xml);  //创建DOM对象
 
 //插入一个新的对象
 var hNew = AF.func("dom_new", "");  //创建一个空的DOM元素
 AF.func("dom_setName", hNew + "\r\n customer");  //设定元素名
 AF.func("dom_setProp", hNew + "\r\n #text \r\nUser");  //设定text
 AF.func("dom_insertChild", hRoot + "\r\n -1 \r\n" + hNew);
 
 //删除 product 节点
 var hProd = AF.func("dom_find", hRoot + "\r\n product");
 AF.func("dom_Delete", hProd);
 
 //查看结果
 alert(AF.func("dom_export", hRoot));
 AF.func("dom_delete", hRoot);  //最后必须销毁根节点

分类函数名用途
DOM函数创建新的DOM对象
销毁某个DOM对象
克隆(即复制)DOM对象
判断某个句柄是否是DOM对象
取得DOM对象的完整的XML内容串(包含子孙)
取得本DOM节点的名称
更改本DOM节点的名称
取得DOM节点中某属性的值
更改本DOM节点某属性的值 (包括了增删改功能)
取得本DOM节点全部的属性名
取得某节点的父节点句柄
取得儿子的个数
取得n个儿子的句柄
判断某节点是否树叶
取得子孙中所有树叶的句柄
从子孙中查找某个元素名的节点句柄
插入一个儿子
插入一个儿子

函数详解:

DOM_new创建新的DOM对象
参数XML/JSON大串,或者是URL(相对或绝对),也可以是空串
返回值DOM对象的句柄,空串表示创建失败。失败原因有:不是有效的XML/JSON串,或者参数作为URL时,无法从该URL读取.
备注您最终必须通过 DOM_Delete 函数销毁这个句柄的,否则会导致内存泄漏.


DOM_Delete销毁某个DOM对象
参数DOM对象的句柄
返回值1/0 - 成功/失败,失败原因通常是参数不是有效的DOM对象句柄
备注1.DOM对象句柄通常是根节点句柄,但也支持是某个子节点的对象句柄;
2.如果该对象是某个子节点,那么它的父节点将会把它从子孙集合中移除,换句话说,利用本函数,您可以单独删除DOM树中的某一个节点;
3.销毁时,该DOM对象的所有子孙节点DOM对象也将随之销毁;


DOM_Clone克隆(即复制)DOM对象
参数DOM对象句柄
返回值新的DOM对象的句柄,空串表示参数无效
备注1.返回的DOM对象内容上和原对象一模一样,但是它没有父节点;
2.一般情况下,该句柄也是必须要销毁的,否则也会造成内存泄漏;


DOM_IsValid判断某个句柄是否是DOM对象
参数句柄
返回值1/0 - 是/否
备注如果DOM对象被销毁了,那么该句柄就无效了


DOM_Export取得DOM对象的完整的XML内容串(包含子孙)
参数DOM对象句柄
返回值XML串, 空串表示句柄无效


DOM_GetName取得本DOM节点的名称
参数DOM句柄
返回值
备注名称是指元素名,比如 <Properties height="3" ...> 这样的DOM对象,返回的是串"Properties"


DOM_SetName更改本DOM节点的名称
参数1DOM句柄
参数2名称
返回值1/0 - 成功/失败, 失败的原因通常为: DOM句柄不正确、或名称不符合规范


DOM_GetProp取得DOM节点中某属性的值
参数1DOM句柄
参数2属性名
返回值
备注XML元素自身的内容用 “#text”表示(请参考示例)
示例例如 <Properties height="3" >ABC</Properties> 这样的DOM对象:
AF.func("DOM_GetProp", handle + "\r\n height") 返回 3
AF.func("DOM_GetProp", handle + "\r\n #text") 返回 ABC


DOM_SetProp更改本DOM节点某属性的值 (包括了增删改功能)
参数1DOM句柄
参数2属性名
参数3值串
返回值1/0 - 成功/失败。 失败的原因通常为: DOM句柄不正确、或属性名不符合规范
备注1.XML元素自身的内容用 “#text”表示;
2.如果属性不存在,则自动增加这个属性;
3.如果值为空,表示删除这个属性;
4.请参考 DOM_GetProp 中的示例


DOM_GetPropNames取得本DOM节点全部的属性名
参数DOM句柄
返回值以逗号分隔的属性名
示例例如 <Properties height="3" width="4" /> 这样的DOM对象:
AF.func("DOM_GetPropNames", handle) 返回串 "height,width"


DOM_GetParent取得某节点的父节点句柄
参数DOM句柄
返回值父亲的DOM句柄,空串表示参数句柄无效


DOM_GetChildCount取得儿子的个数
参数DOM句柄
返回值数字


DOM_GetChild取得n个儿子的句柄
参数1DOM句柄
参数2数字,顺序号(从0开始计数)
返回值该儿子的DOM句柄,空串表示顺序号已经超出


DOM_IsLeaf判断某节点是否树叶
参数DOM句柄
返回值1/0/空串 - 是/否/无效的DOM句柄


DOM_GetLeafArray取得子孙中所有树叶的句柄
参数1DOM句柄
参数2可选,为 true/false,true - 从儿子、孙子、重孙辈...中查找; false - 仅在儿子辈中查找, 默认是 true
返回值以逗号分隔的句柄


DOM_Find从子孙中查找某个元素名的节点句柄
参数1DOM句柄
参数2要查找的元素名
参数3可选,为 true/false,true - 从儿子、孙子、重孙辈...中查找; false - 仅在儿子辈中查找, 默认是 true
返回值以逗号分隔的句柄


DOM_InsertChild(用法1)插入一个儿子
参数1DOM句柄
参数2位置,-1表示从末尾添加
参数3新加入的DOM句柄
返回值DOM的句柄,即和参数3完全一样的串,空串表示失败
备注1.如果新加入的DOM句柄是通过 DOM_New 函数生成的,那么你不必用DOM_Delete销毁它,因为它的生命周期已经被它的父亲控制了;
2.新加入的DOM句柄允许是现有的某个子孙的句柄(包括来自同一个祖先或其它祖先),相当于是该DOM对象转移位置(或者说是改变父亲)而已.


DOM_InsertChild(用法2)插入一个儿子
参数1DOM句柄
参数2位置,-1表示从末尾添加
参数3新插入的节点元素的元素名
参数4可选,新插入的元素自己的内容(即所谓 #text)
返回值新生儿的句柄,空串表示失败,失败原因通常为父句柄无效、元素名命名不符合规范






7.其它函数

分类函数名用途
常用函数取消执行某些事件
将XML串转换成JSon
设置多行编辑是否直接以回车换行
取得多行编辑是否直接以回车换行
在当前鼠标位置直接弹出一个自定义菜单
Post一个自定义消息
向外层Chrome页面Post一个自定义消息
声明异步执行下一个函数
强制让当前焦点窗口(如输入框)失去焦点
遮罩函数使控件呈现被遮罩的半透明效果
缓存函数清理某个Treelist/freeform的图片缓存
将串存入本地缓存
读取缓存内容
取得所有缓存内容的ID号
监听某些特殊事件
本地缓存目录实用程序
取得某个内存块中的内容
将串写入某个内存块
文件相关函数通过Post简单上传一个本地文件
文件下载
中断文件下载,仅用于异步下载
本地文件操作
打开文件或目录选择对话框
使用本地操作系统的关联的应用程序, 打开本地的某个文件
取得本地 Excel 文件中各个工作表的名称
硬件和操作系统函数取得网卡Mac地址
取得本机IP地址
取得客户端的计算机名
取得本机CPU核心数
取得本地已安装的所有打印机名
取得某打印机所支持的所有打印纸号
取得某打印机所支持的所有打印纸的详细参数
取得上次硕正报表、树列表打印所用的打印机名和份数
打开扫描仪, 开始扫描文件
取得已使用的全部字体资源
添加一种字体, 如果字体已经存在,则返回该字体的顺序号(fontIndex)
打开操作系统的字体对话框
打开操作系统的颜色对话框
系统和实用函数取得当前语言
切换语言
取得组件名
某组件是否已经下载
取得句柄的类型
取得当前的Cookie
设置Cookie串,用于当前插件对象后续的 http 请求
设置Http head的属性,用于当前插件对象后续的 http 请求
取得某个字符编码所对应的文字
取得当前屏幕截图
生成二维码图片(bmp格式)
阻塞当前线程(通常是主线程),让其等待若干时间

函数详解:

CancelEvent阻止事件继续执行
参数事件锁句柄, 仅 Chrome ppapi 需要,其它浏览器可以忽略该参数.
返回值(无)
备注1.只能用在 OnEvent 事件中, 并且需要对照事件说明文档, 因为并不是所有事件都能被阻止的;
2.通常用于某些 "Before..." 事件中. 以分页为例,如果你在 BeforePager 事件中执行了本函数,下一真正步的分页处理将被取消、不再执行;
3.通常是书写在事件返回语句前,即紧挨在 return 前;
4.在Chrome ppapi 开发中,本函数仅对被声明为锁定的事件(EnableEventLock)有效; 当执行 CancelEvent 函数后, 事件锁同时被释放, 不再需要执行 EventUnLock
示例function OnReady(id)
{
 AF.func("build", "../A/12.xml");
 AF.func("EnableEventLock", "DblClicked");  //声明鼠标双击事件需要加锁
}
function OnEvent(id, Event, p1, p2, p3, p4)
{
 if(Event == "DblClicked") {
  var handleEvent = AF.func("EventLock", Event); //锁
  if( ..条件, 略...) {
   AF.func("CancelEvent", handleEvent);
   return;
  }
  AF.func("EventUnlock", handleEvent);
 }
}


toJson将XML串转换成JSon  
参数1XML串
参数2可选,格式为 RecordSet=[?];JsonObj=[?];isWrapperName=[?];isKeepNodeName=[?], 其含义及可用值说明如下:
RecordSet - true 或 false, 默认是false. 如果是 true, 表示待转换的XML是平面结果集数据,转换后的JSON串是类似这种更简洁的格式:
  {"id":"k203", "price":"2230.12", "dept":"fin01"}
如果XML是多条记录,则JSON是数组:
  [
   {"id":"k203", "price":"2230.12", "dept":"fin01"},
   {"id":"s508", "price":"33.00", "dept":"fin02"}
  ]

isWrapperName - true 或 false, 表示是否以引号环绕对象名, 默认是 true. 如下是 true 时的样例:
  {"id":"k203", "price":"2230.12", "dept":"fin01"}
如下是 false 时的样例:
  {id:"k203", price:"2230.12", dept:"fin01"}

isKeepNodeName - true 或 false, 表示是否保持在转换过程中, 某些临时生成的诸如 jsonobject、tempiteminarray 的对象名, 默认是 true;

JsonObj - 逗号分隔的对象名, 表示指定对象名, 如果其值为空时, 输出是 "{ }", 而不是 "null";
返回值JSON串(注:如果参数1不是XML,则直接返回该参数)


SetMultiLineEnter在默认情况下,多行编辑(MultiLineEdit)是以Ctrl+Enter实现换行的。如果设为true,则直接回车就实现换行.
参数true/false, 默认false
返回值(无)
备注该函数是全局函数,一旦执行,进程内的多行编辑都将生效


GetMultiLineEnter取得多行编辑是否直接以回车换行
参数(无)
返回值1/0


Menu在当前鼠标位置直接弹出一个自定义菜单
参数菜单的XML/JSON/TXT串,其格式请参考Treelist的帮助文档“13.自定义菜单”.
返回值对应id号,0表示未选择,空串表示参数有误
备注*该函数不一定能正常运行,原因未明
示例var s = "id=BZ-4001; text=男帽; icon=treelist/buttons.zip#301.ico; detail=夏季时装\r\n";
s += "id=K4002; text=时髦头巾; icon=treelist/buttons.zip#302.ico; detail=优惠直销";
alert( AF.func("menu", s));


PostMessage以Post方式发送一个消息,相当于在消息队列的末尾添加,在页面的OnEvent( )事件中将能收到一个名为 "UserEvent" 的消息。
参数格式为 p1=?;p2=?;p3=?;p4=?, 也允许忽略
返回值(无)
示例function OnEvent(id, Event, p1, p2, p3, p4)
{
 if(Event == 'LooseFocus') {
  if(p1=='0' && p2=='price')
   AF.func('PostMessage', 'p1=kk');
 }
 else if(Event == "UserEvent" && p1=="kk") {
  AF.func("SelectCell", "0 \r\n price");
 }
}


PostMessageToChrome用于 ppapi 的内嵌 IE页面, 向外部的 Chrome 容器页面发送一个消息,Chrome页面的OnEvent( )事件中将能收到一个名为 "UserEvent" 的消息。  
参数格式为 p1=?;p2=?;p3=?;p4=?, 也允许忽略
返回值(无)


DeclareAsynch声明异步执行下一个函数(通常是会弹出模式对话框的函数、用于解决 Firefox 浏览器线程阻塞问题)  
参数格式为 p1=?;p2=?;p3=?, 也允许忽略。如果忽略(即参数为空、不定义p1,p2,p3), 那么下一个函数执行后,将不触发 UserEvent 事件
返回值(无)
备注1.函数使用详解请参考 使用指南 \ 10.不同浏览器的一些差别 \ 10.4 线程阻塞问题;
2.注意:参数只有 p1, p2, p3, 不包括 p4, 因为 p4 是异步函数的返回值;
3.本函数仅对下一个函数生效,即寿命是一次性的;
4.本函数的作用范围是整个进程、全局有效,“下一个函数” 不管是硕正哪个组件、哪个页面,都将被安置到新线程异步执行;


Blur强制让当前焦点窗口(如输入框)失去焦点
参数(无)
返回值(无)
备注常用于非 IE 环境, 例如 Chrome 浏览器, 由于其输入框不是从 Windows 标准类继承, 所以它取得焦点后无法让硕正组件失去焦点, 只能执行本函数强制让硕正组件失去焦点


GrayWindow使控件呈现被遮罩的半透明效果,用于实现网页模式对话框,可参考Treelist的演示页  
参数1是否遮罩, true - 遮罩,控件被Disable并呈半透明的灰色; false - 解除遮罩
参数2可选,有二种语法:
语法1: 数字, 灰度值, 0 到 255,默认200, 数值越大越明亮.
语法2: backColor=[?];alpha=[?];isGrayImage=[?] 的串, 原理是在某个底色的基础上, 把界面半透明地绘制上去. backColor是底色, 默认值是#C8C8C8; alpha是界面的透明度, 0 到 255, 默认值是 70; isGrayImage 表示是否把界面转成灰度, 默认值是 true
返回值(无)
示例AF.func("GrayWindow", "true \r\n 240"); //语法1
AF.func("GrayWindow", "true \r\n backColor=#440044;alpha=80"); //语法2
AF.func("GrayWindow", "true \r\n backColor=0;alpha=255;isGrayImage=false"); //让控件处于遮罩状态, 但外观看上去未改变
AF.func("GrayWindow", ""); //解除遮罩
备注Chrome 纯 ppapi 模式下, 遮罩时插件窗口将隐去, 很好地解决了插件遮挡页面其它元素的问题


ClearImageCache清理某个Treelist/freeform的图片缓存,以便在下次Build或Load时能及时刷新图片
参数Treelist或Freeform的句柄
返回值(无)
备注1.句柄是通过GetHandle( )函数获取的;
2.Treelist 或 Freeform 有自己的图片缓存,独立于浏览器的缓存;


SaveCache将串存入本地缓存,缓存的内容在全局有效、且和页面无关(即所有页面均能访问到)  
参数1ID, 可以是任意串
参数2内容串,如果是空串,则表示从缓存中移除该ID的内容
参数3可选,格式为Persist=[?];TimeOut=[?D/H/M/S], 其中Persist用于指定保存到何处,格式如下:
1.Persist = Memory, 默认,表示将内容缓存于内存中,当浏览器进程关闭后内容将遗失.
2.Persist = File, 将内容保存在本地文件(在BC目录下的 cache.data 文件).
TimeOut表示如果超过一段时间无访问,将自动删除该缓存,格式如下:
TimeOut = ?D/?H/?M/?S - 时间间隔,n天/n小时/n分钟/n秒(D/H/M/S分别表示天数、小时、分钟、秒).
返回值(无)
备注1.该缓存是硕正套件自己维护的缓存,与浏览器缓存无关;
2.如果是本地文件,它位于 BC 目录下;
示例AF.func("SaveCache", "My.Key1 \r\n MyContent1"); //保存到内存
AF.func("SaveCache", "My.Key1 \r\n MyContent1 \r\n Persist=File"); //保存到文件,永久有效
AF.func("SaveCache", "My.Key1 \r\n MyContent1 \r\n TimeOut=3M"); //保存到内存,有效期为3分钟
AF.func("SaveCache", "My.Key1"); //清除ID为 "My.Key1" 的缓存


ReadCache读取缓存内容  
参数ID, 注:ID是大小写敏感的
返回值内容串
备注1.该缓存是硕正套件自己维护的缓存,与浏览器缓存无关;
2.通常和前面的 SaveCache 关联使用;


GetCacheIDs取得所有缓存内容的ID号
参数(无)
返回值ID串,以逗号分隔
备注1.该缓存是硕正套件自己维护的缓存,与浏览器缓存无关;
2.通常和前面的 SaveCache、ReadCache 关联使用;


ListenEvent监听某些特殊事件
参数必须为串“CacheSaved”
返回值(无)
备注1.用于监听前面的 SaveCache 动作, 一旦 SaveCache 函数被执行,将触发 CacheSaved 事件,不管内容是否被更新;
2.可以是跨页面、跨选项卡触发
示例...
AF1.func("ListenEvent", "CacheSaved"); //AF监听 CacheSave 函数
...
AF2.func("SaveCache", "My.Key1 \r\n MyContent1"); //AF2 执行了 SaveCache 函数, 将触发事件
...
function OnEvent(id, Event, p1, p2, p3, p4)
{
  if(id == "AF1" && Event == "CacheSaved") alert(p1);
}


CacheDirUtility本地缓存目录实用程序
参数格式为 Dir=[?]; isCreateTempFile=[?]; Ext=[?]; KeepMB=[?]; DeleteEarlierFile=[?],含义如下:
 Dir - 本地用于缓存的目录名,如果为空,则表示 BC 目录下的 Temp 目录 (服务器版则指向后端的临时目录);
 isCreateTempFile - true/false, true 表示在目录中创建一个唯一的文件, 并返回文件名;
   Ext - 该文件的后缀, 默认是"tmp";
   Pre - 该文件的前缀, 默认为空;
 DeleteEarlierFile - 删除该目录下 n 小时(或分)前的文件, h/m分别表示时/分, 例如 DeleteEarlierFile=3h 表示删除3个小时前的文件; 如果为空,表示不执行该功能;
 KeepMB - 数字,单位是兆比, 删除该目录下最早的文件, 使文件总尺寸不超过 n 兆比; 如果为空,表示不执行该功能;
返回值如果 isCreateTempFile 为true, 则返回全文件名
备注"@"开头的文件是不会被删除的,也不计入KeepMB的尺寸


GetDataString取得某个内存块中的内容
参数内存块的句柄
返回值内容串
备注1.通常用于 DataReach 事件;
2.在大多数情况下, 句柄的生命周期是十分短暂的, 访问无效句柄会导致异常


SetDataString将串写入某个内存块
参数1内存块的句柄
参数2要写入的串
返回值(无)
备注1.通常用于 DataReach 事件;
2.在大多数情况下, 句柄的生命周期是十分短暂的, 访问无效句柄会导致异常


HttpPostLocalFile通过Post简单上传一个本地文件
参数1Http的URL, 可以是绝对或相对URL, 如果是相对URL,是相对于页面URL的
参数2本地全文件名
参数3可选参数,格式为 mode=[?];compress=[?];isEcho=[?],含义为:
 mode - synch/asynch, 同步/异步上传,默认是同步;
 compress - 是否对数据进行zip压缩, none/zip/autozip, 不压缩/压缩/根据压缩后数据包尺寸变化自动选择,默认是none, 即不压缩;
 isEcho - true/false, 是否提示上传成功或失败,默认是true;
返回值0 - 表示有错误,例如本地文件不存在、http传输错误; 否则,在同步上传时返回服务器返回的串、异步上传时返回1
备注1.发起的Request中, Http Body 将是该文件的二进制内容;
2.如果是异步上传,上传完成后能触发名为 “Upload”的事件;
3.本函数只能上传较小的文件,因为是一次性将文件读入内存的,所以文件尺寸受制于客户端内存的大小,上传大文件请用硕正的 upload 组件或 Freeform 中的 upload 控件;
示例AF.func("HttpPostLocalFile", "http://localhost/hlp.aspx?name=my.mp3 \r\n d:\\my.mp3 \r\n mode=asynch");


Download文件下载
参数1URL,支持Http、Ftp
参数2可选,格式为 isOpenDialog=[true/false]; isEcho=[true/false]; toDir=[?]; toFile=[?]; toString=[?]; Ext=[?]; uid=[?]; pwd=[?], 含义为:
 isOpenDialog - 是否打开选择本地文件或目录的对话框,有如下可选项, 默认是true:;
    true(或file) - 打开文件选择对话框;
    dir - 打开目录选择对话框;
    false - 不打开对话框;
    备注:如果选择“dir”,那么必须指定“toFile”文件名参数,文件名可以是不含路径的纯文件名;
 Ext - 在对话框中允许选择的文件后缀,若有多个后缀则以逗号分隔,仅用于 isOpenDialog=true 时;
 toDir - 指定本地目录(绝对路径),如果路径不存在能自动创建,默认是空;
 toFile - 指定本地文件(如果isOpenDialog=dir, 可以是不含路径的文件名,否则必须是绝对路径),如果路径不存在能自动创建,默认是空,如果设定了toFile,通常就不需要设定toDir;
 isAutoResume - 是否支持自动断点续传(仅支持 http), 默认是 true;
 uid - 登录的用户名;
 pwd - 用户口令;
 zip - Expand / ExpandAndDelete / 空串。Expand表示如果下载的文件是用Zip压缩的,则完成下载后自动解压; ExpandAndDelete表示解压后删除zip文件; 为空表示不做解压处理。默认是空串;
 toString 或 isToString - true/false,默认是false。当为 true 时,表示 http(或ftp) 返回的内容肯定是字符串,并将直接返回该串,而不再将内容保存到文件。此时不需要设定isOpenDialog、toDir、toFile等文件参数了。请参见下面的示例.
 toBufferObj 或 isToBufferObj - true/false,默认是false。当为 true 时,返回的内容二进制被包含在硕正的缓存对象中,函数返回该对象的地址的串。该函数不太常用,在硕正套件C/S版中有例子.
 isEcho - 下载后是否浮现一个提示,失败则浮现错误信息,默认是true;
 mode - synch/asynch, 同步/异步下载,默认是同步;
 isShowProgress - true/false, 是否显示进度条,仅用于异步,默认是false;
 cover - 当本地有同名文件时, overwrite/rename/nocover - 直接覆盖/文件自动改名/不覆盖, 仅用于isOpenDialog=false时, 默认是overwrite;
 offset - 数字,单位为字节,从 offset 字节开始下载、写入 (本参数用途不大);
返回值返回的是本地全文件名,如果是空串则表示失败、或者对话框中选择了“取消”;
如果 isToString=true,则返回的是内容串;
如果是zip解压的,则返回zip包中第一个文件在该目录的全文件名;
如果 mode=asynch(异步下载),返回的是一个纯数字的任务ID号,用于 Download 事件,如果是空串表示对话框中选择了“取消”。
备注1.如果是异步下载,在下载结束时将触发 Download 事件,并且在下载过程中会以1秒左右的间隔不停地发送 Download 事件,报告当前的下载进度、网速,详细请参见组件的"Download"事件文档.
2.断点续传只能用于下载文件, 如果 toString = true 或 toBufferObj = true, 断点续传失效
示例//下载一个mp3文件,下载前会打开目的文件对话框
AF.func("download", "ftp://192.168.1.2:21/mymusic.mp3");
//下载到指定文件,但仍会打开目的文件对话框
AF.func("download", "http://localhost/hlp.htm \r\n toFile=d:\\my.htm; ext=htm,html,txt");
//直接取得文本串
var xml = AF.func("download", "http://localhost/text.xml \r\n toString=true");


CancelDownload中断文件下载,仅用于异步下载
参数1ID号,即 Download 函数的返回值
参数2为 DeleteFile / KeepFile。DeleteFile - 删除已下载到本地的这个不完整的文件; KeepFile - 保留这个文件。默认是DeleteFile。
返回值如果参数2为 DeleteFile , 则返回空串;如果参数2为 KeepFile,则返回本地文件名、文件总长度、已下载的文件长度,3者之间以回车符分隔


FileUtility本地文件操作
参数1操作串,可以为:
 isExists - 文件是否存在, 返回1/0;
 GetByteGetBytes - 返回文件长度(单位: 字节);
 GetKB - 返回文件长度(单位: KB);
 GetMB - 返回文件长度(单位: MB);
 GetCTime - 返回文件创建日期;
 GetMTime - 返回文件最后修改日期;
 delete - 删除文件, 返回1/0;
 GetFilenames / GetPathnames - 取得某个子目录下的某些文件名/含路径的全文件名;
 GetMD5 - 取得某个文件的 MD5 串, 32字长, 例如 e3b167a17d48c2eeb84cb1b1b98e233d, 空串表示文件不存在或无法访问;
参数2如果参数1是GetFilenames / GetPathnames, 本参数是路径的通配符,比如 "d:\docs\*.jpg" ;
否则, 应该是全文件名
返回值根据参数1而定, 如果参数1是GetFilenames / GetPathnames, 返回的是以回车分隔的文件名/全文件名
示例//返回回车分隔的文件名
var s = AF.func("FileUtility", "GetPathnames \r\n d:\\docs\\*.jpg");


FileDialog打开文件或目录选择对话框
参数操作串,可以为:
 isOpen - 用途, true/false - 用于打开文件/用于保存文件, 默认是true;
 isDir - true/fale - 目录选择对话框 / 文件选择对话框,默认是 false;
如果 isDir = true, 还可以有如下选项
 Title - 自定义对话框的标题;
 Dir - 初始选择、展开的目录;
 Root - 目录树的根节点, 可以是 "Desktop" 或 "Driver", 默认是 "Desktop" ;
如果 isDir = false, 则可以有如下选项:
 FileType - 能打开的文件类型(后缀),多种类型之间以逗号分隔, 例如串 "jpg,bmp,*", 默认是 "*";
 FileName - 初始选择的文件名;
返回值全文件名
示例var s = AF.func("FileDialog", "isDir=true; Title=请选择目录:");


ShellExecute使用本地操作系统的关联的应用程序, 打开本地的某个文件
参数全文件名
返回值1/0 - 成功/失败
备注如下 5 种后缀的文件是无法打开的: exe、bat、com、msi、reg
示例AF.func("ShellExecute", "d:\\photo.jpg");


GetExcelSheetName取得本地 Excel 文件中各个工作表的名称
参数本地 Excel 文件的全文件名
返回值工作表名称, 多个名称之间以回车符分隔
备注支持 xls, xlsx 文件格式


GetMac取得网卡Mac地址
参数(无)
返回值串(如:"1c-6f-65-d6-b8-d1")


GetIP取得本机IP地址
参数(无)
返回值串(如:"192.168.1.1")


GetComputerName取得客户端的计算机名
参数(无)
返回值


GetNumberOfProcessors取得本机CPU逻辑核心数
参数(无)
返回值数字,假如您的电脑是双核四线程,则返回值是4


GetPrinters取得本地已安装的所有打印机名
参数(无)
返回值以逗号分隔的打印机名,其中的第一个是默认打印机


GetPrinterPapers取得某打印机所支持的所有打印纸号
参数打印机名
返回值以逗号分隔的打印纸号,其中第一个为该打印机默认的打印纸。各种打印纸号所对应的打印纸名称及尺寸请参见“附录4:打印纸对照表”


GetPrinterPapersInfo取得某打印机所支持的所有打印纸的详细参数
参数打印机名
返回值返回类似如下的 json 数组, width 和 height分别表示纸张的宽度和高度, 单位是1/10毫米:
[{ "name": "A4",
   "number": 9,
   "width": 2100,
   "height": 2970
},
{ "name": "信纸",
   "number": 1,
   "width": 2159,
   "height": 2794
},
{ "name": "Tabloid",
   "number": 3,
   "width": 2794,
   "height": 4318
}]


GetLastPrintInfo取得上次硕正报表、树列表实际打印所采用的打印机名和打印份数
参数(无)
返回值JSON串,例如: {"Printer":"HP LaserJet P1007", "Copies": 2}, 如果为空串,表示浏览器进程开启以来尚未打印过


Twain打开支持 Twain 接口的扫描仪, 用于执行文件扫描操作
参数格式为 Type=[?];Dir=[?];precision=[?], 说明如下
Type - 指定扫描获取的图片文件的格式, 可以为 BMP、JPG、PNG、TIF、PDF、PDFBook, 默认是 BMP. 注: 并不是所有扫描仪都支持 JPG, PNG, 但 BMP 都支持;
   PDF 和 PDFBook 和扫描仪硬件无关, 是由硕正实现的, 所谓 "PDFBook" 是指将本次扫描的多个图片输出到一个 PDF 文件中.
Dir - 指定扫描获取的文件存放目录, 默认在硕正临时目录下 (Users\UserName\BC\Temp);
Precision - 指定 jpg 文件的精度, 1 到 100, 默认是 85. 注: PDF 和 PDFBook 也是封装了 jpg 的, 所以也适用;
返回值数字, 含义如下: 1-扫描仪打开成功, 3-Dir参数不正确或目录无法创建, 4-未发现本机连接有扫描仪, 5-系统的扫描管理功能开启失败, 6-操作系统缺少Twain的程序文件
备注在执行完扫描后, 将名为触发 "Device" 的事件, 请参考开发文档 “事件”


GetFonts取得已使用的全部字体资源
参数(无)
返回值XML串
备注1.仅用于 Treelist、Freeform、Report;
2. 对于Report,每个工作表都有自己独立的字体资源,本函数仅针对当前工作表
示例var s=AF.func("getFonts", "");
s = AF.func("toJson", s + "\r\n RecordSet");
alert(s);
/*返回的是类似如下这样的串:
[
{'faceName':'Verdana', 'height':'-12', 'weight':'400', 'pitchAndFamily':'34', 'quality':'1', 'outPrecision':'3', 'clipPrecision':'2'},
{'faceName':'SimSun', 'charSet':'134', 'height':'-12', 'weight':'400'}
]
*/


AddFont添加一种字体, 如果字体已经存在,则返回该字体的顺序号(fontIndex)
参数该字体的xml或json串
返回值字体顺序号,返回 -1 表示失败
备注1.仅用于 Treelist、Freeform、Report;
2. 对于Report,每个工作表都有自己独立的字体资源,本函数仅针对当前工作表
示例var s=AF.func("addFont", "{'faceName':'宋体', 'height':'-12', 'weight':'400'}");


OpenSysFontDialog打开操作系统的字体对话框
参数用于在对话框初始显示的字体, xml或json串, 如果参数为空, 对话框显示为操作系统默认字体
返回值字体的XML串,空串表示点击了 "取消"
示例
var s=AF.func("openSysFontDialog", "{'faceName':'宋体', 'height':'-12', 'weight':'400', 'Color':'red'}");
if(s != '') alert( AF.func("tojson", s + "\r\n recordSet") );


OpenSysColorDialog打开操作系统的颜色对话框
参数对话框的初始颜色, 可以是 "#FF0000" 或 "Red" 这种串, 参数为空则默认为黑色
返回值字体串,空串表示点击了 "取消"


GetLanguage取得当前语言
参数(无)
返回值936 - 中文简体,1252 - 英文,950 - 中文繁体


SetLanguage切换语言  
参数936 - 中文简体,1252 - 英文,950 - 中文繁体
返回值(无)


GetCtlName取得组件名
参数(无)
返回值组件名,如treelist、freeform


IsComponentInstalled某组件是否已经下载
参数组件bin包名,如BCV1、LuxForm
返回值true/false


GetHandleType取得句柄的类型
参数句柄
返回值串,可能为treelist、list、freeform、worksheet、validation、dom或空串
备注句柄是通过GetHandle( )函数获取的


GetCookie取得当前的Cookie
参数(无)
返回值Cookie串
备注是指 dynaload.js 中创建控件时赋予的 Cookie 串,或通过 SetCookie 函数指定的 Cookie 串


SetCookie设置Cookie串,用于当前插件对象后续的 http 请求
参数
返回值(无)


SetHttpHeadProp设置Http head的属性,用于当前插件对象后续的 http 请求
参数1属性名
参数2内容串, 空串表示删除该属性
返回值(无)
备注1.属性通常是指自定义属性,例如 tokenId;
2.本函数是全局(进程)有效的,一旦设置,今后所有 http 请求都将包含此属性;
3.如果要设置多个属性,须多次调用本函数


GetChar取得某个字符编码所对应的文字
参数字符的ASC码,如果是中文,则为utf-16的编码
返回值(无)
示例var chr = AF.func("GetChar", "20013"); //返回“中”
var chr = AF.func("GetChar", "97"); //返回“a”


ScreenShot取得当前屏幕截图
参数可选的串,格式为return=[?]; range=[?]; type=[?];precision=[?];isgray=[?];blackwhit=[?];threshold=[?], 其含义如下:
 return - base64/filename, 返回 Base64大串/返回文件名,默认是Base64;
 range - browser/screen/control, 仅截取浏览器界面/截取整个屏幕/仅截取当前控件部分,默认是browser;
 type - jpg/gif/bmp/png/tif, 图片格式,默认是jpg;
 precision - 0到100的数值,仅用于jpg, 含义为jpg的清晰度,数字越大越清晰,默认是75;
 isGray - true/false, 灰度/彩色,默认是false;
 BlackWhite - true/false, 黑白/彩色,默认是false;
 threshold - 1到100之间, 仅用于黑白,数字越小图像越白,默认是70;
返回值根据参数,返回文件名或Base64串
示例var chr = AF.func("screenshot", "return=base64;isgray=true;precision=60");


QR生成二维码图片(bmp格式)
参数1需要被编码的字符串
参数2可选的串,格式为Level=[?]; maxSize=[?]; isBase64=[?];filename=[?], 其含义如下:
 Level - 纠错等级,0到3的整数, 分别表示 7%、15%、25%、35%的纠错率,纠错率越高,扫描过程越不易出现差错,默认是0;
 maxSize - 期望生成的图片的大小,单位是像素,通常是编码串越长,所需的尺寸也必须越大。最小值是25,默认是300;
   如下2个参数决定如何返回结果(不能同时使用):
 filename - 本地文件名,用于保存 bmp 格式的图片;
 isBase64 - 将生成的 bmp 二进制转码成 BASE64 串,并返回该串;
返回值根据参数返回, 如果指定了 filename,返回 1/0 - 成功/失败;如果 isBase64=true, 则返回 BASE64 串
示例var str = AF.func("QR", "http://www.supcan.cn \r\n isBase64=true");


Sleep阻塞当前线程(通常是主线程),让其等待若干时间
参数毫秒数
返回值(无)