2.函数

Supcan FreeForm的函数是通过插件/加载项的 func( string funcname, string paras ) 函数间接调用的，Supcan FreeForm组件的可用funcname及用途说明如下:

分类 | 函数名 | 用途
--- | --- | ---
基本 | Build | 根据XML描述文件创建Freeform
Load(含义1) | 加载数据
BindAsMaster | 共享Treelist加载的XML/JSON数据
GetProp | 取得属性
SetProp | 更改属性
GetHandle | 取得Freeform或其它内部对象的句柄
Recover | 将数据恢复到输入前的初始状态
GetObjectId | 取得第n个对象(Object)的ID
GetObjectIds | 取得全部或部分对象(Object)的ID
AddObject | 动态创建Object
DeleteObject | 动态删除Object
Object | GetObjectType | 取得某对象的类型
GetObjectProp(用途1) | 取得某对象的属性
SetObjectProp(用途1) | 更改某对象的属性
tableLayout | GetObjectProp(用途2) | 取得某TableLayout中某行(TR)、某列(Col)的属性
SetObjectProp(用途2) | 更改某TableLayout中某行(TR)、某列(Col)的属性
下拉资源 | AddDroplist | 增加下拉字典资源
SetDroplistProp | 更改下拉内容属性
Input控件 | GetValue | 取得某Input控件的值
SetValue | 置某Input控件的值
GetText | 取得某控件的显示的串
SetText | 置某控件的显示文字
SetValueText | 同时设定value-text键值对
SelectCell | 切换焦点
下拉List 的Input控件 | GetDroplistIndex | 取得某下拉List的当前选中行顺序号
SetDroplistIndex | 选中下拉List中的某行
下拉Treelist 的Input控件 | Refresh(用途1) | 刷新某下拉Input控件的Treelist
Load(含义2) | 为某下拉Input控件的Treelist加载数据
Filter | 过滤某下拉Input控件的Treelist
BuildTreelist | 重新创建某下拉Input控件的Treelist
CloseDropdown | 关闭正处在弹出状态的下拉
Upload(文件上传) 的Input控件 | SetFiles | 限制上传文件个数
SetFileTypes | 限制文件类型
SetFileMaxKb | 限制单个文件长度
SetPictureMaxSize | 限制图片文件尺寸
GetFiles | 取得文件个数
GetFilename | 取得文件名
GetFileType | 取得文件的扩展名
GetFileSize | 取得文件的长度
GetPictureWidth | 取得图片文件的宽度
GetPictureHeight | 取得图片文件的高度
GetFileBase64 | 取得文件的Base64串, 用于页面自行上传
fptUpload | Ftp方式上传文件
httpUpload | 以Http PUT方式上传文件
httpPost | 以Http POST方式将文件内容发给服务器
CancelUpload | 中断上传，仅用于以Http POST方式上传、并且是分块、异步的场合的
GetHttpPostResponse | 取得上次执行HttpPost后的服务器返回串
AddFile | 增加一个本地文件
OpenFileDialog | 打开文件选择对话框，相当于模拟点击右侧小按钮
Empty | 清空选中的文件, 以便再次使用
Toolbar (工具条) | BindMenu | 绑定工具条和菜单资源
动态菜单按钮 的Input控件 | PopupMenu | 弹出下拉菜单，用于动态菜单按钮
菜单(Menus)资源 | SetMenu | 重构某菜单
DeleteMenuItem | 删除某菜单中的某个菜单项
GetMenuItemProp | 取得某菜单中的某个菜单项的属性
SetMenuItemProp | 更改某菜单中的某个菜单项的属性
分页器(Pager) | BindPager | 分页器和Treelist(或报表数据源)绑定
GetPages | 取得总页数
GetCurrentPage | 取得当前页
GotoPage | 切换当前页
Refresh(用途2) | 刷新Treelist
TimerRoundPage | 启动内部定时器，自动滚动跳转到下一页
选项卡(Tab) | GetTabCount | 获得选项卡中页签数量
GetTabIds | 获得选项卡中各页签的Id，逗号分隔
SetCurSel | 切换选项卡当前页签
GetCurSel | 获得选项卡中当前页签的顺序号
GetCurSelId | 获得选项卡中当前页签的Id
DeleteTab | 删除选项卡中的某个页签
InsertTab | 插入新页签
GetObjectProp(用途3) | 取得选项卡中某页签的属性
SetObjectProp(用途3) | 更改选项卡中某页签的属性
提交 | Validate | 验证
GetChangedXML | 取得用于提交的XML串
GetChanged | 判断是否被修改过
ResetChanged | 合并修改内容
SetAsNewRow | 强制设置新增、修改的标识
IsNewRow | 是否新增行
图片流(ImageFlow)控件 | Locate | 将中心位置定位到某幅图
Scroll | 发送一个滚动消息
GetImages | 取得图片数
GetImageProp | 取得某个图片的属性值(包括自定义属性)
GetImagePropById | 按Id取得某个图片的属性值(包括自定义属性)
其它 | AddPath | 动态创建Path
Export | 取得XML格式的数据
AddHotKey | 增设快捷键

函数详解:

Build | 根据XML描述文件创建Freeform |
参数 | XML所在的URL(相对或绝对)，或者直接就是XML大串
返回值 | 1 - 成功; 空串 - 失败(将自动弹出失败页面)

Load(含义1) | 加载数据 |
参数1 | XML/JSON数据的URL(相对或绝对)、或XML/JSON大串、或类似"prop1=value1; prop2=value2; ..."的属性串
参数2 | 可选，格式为：asNewRow=[true/false];useLast=[true/false];method=[?], 其含义分别为： asNewRow (或asNew): 默认false。 如果为true，表示加载后仍作为新增的行，并且当加载到的数据条项少于XML描述文件的条项数时，用defaultValue初始数据; useLast: 当加载到的数据条项少于XML描述文件的条项数时，是否用上次输入中遗留的数值, 如果是false则全部清空，默认false; method - http的发送方法，为Get / PostEncodeURI / Post，默认是Get. 如果为PostEncodeURI，则自动将URL中问号(?)后面的部分移到http body中，并对文字作EncodeURI转码处理； 如果是Post，则不作转码处理.
返回值 | 1 - 成功; 空串 - 失败(将自动弹出失败页面)
示例 | AF.func("load", "{id:kk203, price:203.22, prov: 501}");　 //JSON串 AF.func("load", url + "\r\n asNewRow=true; useLast=true");　 //使用了参数2

BindAsMaster | 共享Treelist加载的XML/JSON数据 |
参数1 | Treelist的句柄
参数2 | 需分享的XML节点名
返回值 | (无)

GetProp | 取得 XML文档中的 Properties 和 Properties \ BackGround 中的属性的值 |
参数 | 属性名, 包括Properties中的自定义属性
返回值 | 属性的值

SetProp | 更改 XML文档中的 Properties 和 Properties \ BackGround 中的属性的值 |
参数1 | 属性名, 包括Properties中的自定义属性
参数2 | 属性的值
返回值 | (无)

GetHandle | 取得当前freeform、或内部非模式对话框、或Validation、或下拉的句柄 |
参数 | 可以为: 空串(无参数) - 取当前Freeform的句柄，常用于Export、GetChanged、GetChangedXML函数; innerDialog - 取内部非模式对话框的Freeform句柄; Validation - 取Validation的句柄, 常用于全局函数动态存取Validation; 某下拉 Llist 控件的ID - 取得某下拉 Llist 的句柄，也包括下拉字典型的EditWithButton. 操控下拉List的内容请参见“全局函数”; 某下拉 TreeLlist 控件的ID - 取得某下拉Treelist控件的Treelist的句柄，操控下拉TreeList的内容请参见“扩展函数”;
返回值 | 整数串

Recover | 将数据恢复到输入前的初始状态 |
参数 | (无)
返回值 | (无)
备注 | 1.如果执行了Load( )， 那么这个“初始状态”就变成了Load( )后数据的状态; 2.如果执行了ResetChanged( )， 那么这个“初始状态”就变成了当前数据的状态;

GetObjectId | 或GetObjId, 取得第n个对象(Object)的ID |
参数 | 顺序号，从0开始计数 备注：没有ID的Object将不参与计数
返回值 | ID，空串表示已经到达末尾

GetObjectIds | 或GetObjIds, 取得全部或部分对象(Object)的ID |
参数 | 可选，可以是某种对象类型，例如 input、text、rect等等. 默认是所有类型
返回值 | 逗号分隔的ID

AddObject | 动态创建Object |
参数1 | Object的类型，如Input、Line、image
参数2 | 属性串，例如"x=20;y=33;type=button;text=确认"
参数3 | 可选，表示插入位置，可以是插入处的id值，默认为空(表示从末尾添加)
返回值 | (无)

DeleteObject | 动态删除Object |
参数 | Object的ID，可以包含多个ID一起删除，相互以逗号分隔
返回值 | (无)
备注 | TableLayout是无法被删除的

GetObjectType | 或GetObjType, 取得某对象的类型 |
参数 | Object的ID
返回值 | 如Input、Text、Line、Image等

GetObjectProp(用途1) | 或GetObjProp, 取得XML中某Object(如Input、Line、image等)的属性, 也可以是自定义属性 |
参数1 | Object的ID
参数2 | 属性名，请参见Freeform的XML文件文档规范
返回值 | 属性的值

SetObjectProp(用途1) | 或SetObjProp, 动态更改XML中某Object(如Input、Line、image等)的属性, 也可以是自定义属性 |
参数1 | Object的ID，可以包含多个ID一起更改，相互以逗号分隔
参数2 | 属性名，请参见Freeform的XML文件文档规范
参数3 | 内容
参数4 | 可选，当Object是Pager(分页器)、参数2是dataURL属性时，此处允许书写例如这样的选项串: mode=asynch; isResetPage=true 其中 mode=asych 表示要求以异步加载数据; isResetPagge=true 表示重置当前页(将当前页转成第一页).
返回值 | 1/0 - 成功/失败
备注 | 1.少数属性如控件类型、id、type、droplistid是无法修改的; 2.如果是异步加载数据，后继的js不应该调用Treelist的函数;

GetObjectProp(用途2) | 或GetObjProp, 取得XML中某TableLayout的某行(TR)、某列(Col)的属性 |
参数1 | TableLayout的ID
参数2 | 行或列的ID，如果是行，ID前必须加"TR."；如果是列，ID前必须加"col."
参数3 | 属性名，有visible、height(仅用于行)、width(仅用于列)
返回值 | 属性的值

SetObjectProp(用途2) | 或SetObjProp, 动态更改XML中TableLayout中某行(TR)、某列(Col)的属性 |
参数1 | TableLayout的ID
参数2 | 行或列的ID，如果是行，ID前必须加"TR."；如果是列，ID前必须加"col."
参数3 | 属性名，有visible、height(仅用于行)、width(仅用于列)
参数4 | 内容
返回值 | 1/0 - 成功/失败
示例 | 假如某行是 <tr id="row3">, 如下js隐藏该行: AF.func("SetObjProp", "layout1 \r\n TR.row3 \r\n visible \r\n false");

AddDroplist | 动态增加下拉资源(Droplists\Droplist) |
参数 | 可包含id、treelistURL、dataURL等6个属性，以“;”分隔。 例如"id=cus;treelistURL=cus.xml;dataURL=http://www.abcde.com/aa/aa"
返回值 | 1 - 成功; 空串 - 失败(id为空或重复)
示例 | AF.func("AddDroplist", "id=customer;treelistURL=customer.xml;DataCol=id;DisplayCol=name");

SetDroplistProp | 动态更改XML中某 Droplist 的属性 |
参数1 | Droplist的ID, 或者是Input控件的ID
参数2 | 属性名
参数3 | 内容
返回值 | (无)
备注 | 1.更改dataURL相当于是重新加载数据，其内容可以是绝对或相对URL(注意：是相对于XML描述文件，而不是页面)，也可以是XML/JSON大串，且对type为Droplist、 DropTreelist的Input均能生效; 2.若treelistURL内容是相对URL，那么是相对于该XML描述文件的 3.id是无法修改的
示例 | AF.func("SetDroplistProp", "sex \r\n dataURL \r\n <items><item key=1>男</item><item key=2>女</item></items>");

GetValue | 取得某Input控件的值 |
参数1 | Input控件的ID
参数2 | 可选，true/false, true表示取修改前的原始内容(即 Load 的内容), false表示取当前内容，默认是false
返回值 | 串
备注 | 如果是RadioButton，参数可以是GroupID，这样返回值就是所选RadioButton的SelectValue.

SetValue | 置某Input控件的值 |
参数1 | Input控件的ID
参数2 | 值串
返回值 | (无)
备注 | 如果是RadioButton，参数1可以是GroupID，参数2则为所需的SelectValue. 严重警告：参数之间不得留有多余空格，否则结果将不是你所期望的，例如： AF.func("SetValue", "city \r\n "+ vCity);　　//执行结果是左侧有多余空格

GetText | 取得某控件的显示的串 |
参数 | Input控件的ID
返回值 | 串

SetText | 置某控件的显示文字 |
参数1 | Input控件的ID
参数2 | 串
返回值 | (无)
备注 | 常用于和Droplist绑定的EditWithButton的显示值，否则和SetValue( )效果一样.

SetValueText | 增加一个value-text键值对，并应用到当前Input，用于设置了textId的input |
参数1 | Input控件的ID
参数2 | Value串
参数3 | Text串
返回值 | (无)
备注 | 仅用于Text、Edit、EditWithButton.

SelectCell | 切换焦点 |
参数 | id，如果id为空则自动取第一个可编辑的id
返回值 | 1-成功, 0-失败

GetDroplistIndex | 取得某下拉List的当前选中行顺序号 |
参数 | Input控件的ID
返回值 | 下拉列表的当前选中行, 从0开始计数
备注 | 一般用于非排序的下拉List

SetDroplistIndex | 选中下拉List中的某行 |
参数1 | Input控件的ID
参数2 | 行号(下拉列表中的顺序号, 从0开始计数)
返回值 | 1 / 0 - 成功 / 失败
备注 | 一般用于非排序的下拉List

Refresh(用途1) | 刷新某下拉Input控件的Treelist |
参数 | Input控件的ID
返回值 | (无)

Load(含义2) | 为某下拉Input控件的Treelist加载数据 |
参数1 | Input控件的ID
参数2 | 数据的URL
返回值 | (无)

Filter | 过滤某下拉Input控件的Treelist |
参数1 | Input控件的ID
参数2 | 过滤表达式, 请参见“公共内容\表达式”
返回值 | (无)

BuildTreelist | 重新创建某下拉Input控件的Treelist |
参数1 | Input控件的ID
参数2 | URL
返回值 | (无)

CloseDropdown | 关闭正处在弹出状态的下拉 |
参数 | (无)
返回值 | 被关闭的Input控件的ID, 空串表示当前没有弹出的下拉
备注 | 也可用于 DropList

SetFiles | 限制上传文件个数 |
参数1 | Input控件的ID
参数2 | 数字，0表示无限制
返回值 | (无)

SetFileTypes | 限制文件类型 |
参数1 | Input控件的ID
参数2 | 为文件后缀，后缀间以逗号分隔，如"bmp,jpg,png"。 后缀也可以是星号(*)，例如"bmp,jpg, *"，带星号表示允许选任何文件，前面的后缀只是起引导作用.
返回值 | (无)

SetFileMaxKb | 限制单个文件长度 |
参数1 | Input控件的ID
参数2 | 数字，单位为KB，0表示不限制
返回值 | (无)

SetPictureMaxSize | 限制图片文件尺寸 |
参数1 | Input控件的ID
参数2 | 2个数字，以逗号分隔，分别表示横向/纵向的像素数，0表示不限制. 备注：只能辨认后缀是BMP、JPG、PNG、GIF、TIF的图片文件.
返回值 | (无)

GetFiles | 取得文件个数 |
参数 | Input控件的ID
返回值 | 文件数

GetFilename | 取得文件名 |
参数1 | Input控件的ID
参数2 | 顺序号，从0开始计数
返回值 | 全文件名，空串表示顺序号已超出范围

GetFileType | 取得文件的扩展名 |
参数1 | Input控件的ID
参数2 | 顺序号，从0开始计数, 或者干脆就是全文件名
返回值 | 文件名的后缀

GetFileSize | 取得文件的长度 |
参数1 | Input控件的ID
参数2 | 顺序号，从0开始计数, 或者干脆就是全文件名
返回值 | 整数，单位：kb

GetPictureWidth | 取得图片文件的宽度 |
参数1 | Input控件的ID
参数2 | 顺序号，从0开始计数, 或者干脆就是全文件名
返回值 | 整数，单位：像素

GetPictureHeight | 取得图片文件的高度 |
参数1 | Input控件的ID
参数2 | 顺序号，从0开始计数, 或者干脆就是全文件名
返回值 | 整数，单位：像素

GetFileBase64 | 取得文件的Base64串, 用于页面自行上传 |
参数1 | Input控件的ID
参数2 | 顺序号，从0开始计数, 或者干脆就是全文件名 备注：如果参数是全文件名，那么该文件可以是任何本地文件.
返回值 | Base64大串

fptUpload | Ftp方式上传文件 |
参数1 | Input控件的ID
参数2 | 格式为：url=[?];uid=[?];pwd=[?];index=[?];isShowProgress=[?];isEcho=[?]; . . . , 其含义如下： url - FTP服务器的URL，必须以"ftp://"开头，例如：ftp://www.supcan.cn/WorkPlace/Res uid - FTP帐号，可选; pwd - 密码，可选; isShowProgress - 文件过程中是否显示进度条，可选true/false, 默认是true; isEcho - 文件上传成功后是否弹出一个提示对话框，可选true/false, 默认是true; 此外，也可以上传独立的本地文件，和对话框中的文件无关： filename - 本地文件全文件名，如果要同时上传多个文件，请以Tab("\t")符分隔; 甚至也可以上传独立的本地目录，参数如下： dir - 本地目录的路径，如果要同时上传多个目录，请以Tab("\t")符分隔; isCreateServerDir - 是否在服务器端也建立该目录, true/false, 默认false; ext - 需要上传的文件的通配符，比如"*.doc"，默认是"*.*"; isIncludeSubDir - 是否包含目录下子孙目录的文件, true/false, 默认false;
返回值 | 1-成功, 0-失败
备注 | 1.若帐号或密码为星号(*)，那么上传前将会弹出帐号和密码的对话框; 2.上传过程是异步的，所以不应该在本函数后面书写其它上传相关js;

httpUpload | 以Http PUT方式上传文件 |
参数1 | Input控件的ID
参数2 | 格式为：url=[?];uid=[?];pwd=[?];index=[?];isShowProgress=[?];isEcho=[?];filename=[?], 其含义如下： url - URL(绝对或相对)，有二种写法: 一.如/WorkPlace/Res/abc.txt，其中abc.txt是服务器端最终生成文件，常用于单个文件上传； 二.如/WorkPlace/Res/，即以"/"结尾，服务器将在此目录生成与本地上传文件同名的文件 uid - 具有Http"写"权限的帐号，可选; pwd - 密码，可选; isShowProgress - 文件过程中是否显示进度条，可选true/false, 默认是true; isEcho - 文件上传成功后是否弹出一个提示对话框，可选true/false, 默认是true; filename - 上传独立的本地文件，用于上传和对话框中的文件无关的其它本地文件，可选;
返回值 | 1-成功, 0-失败
备注 | 1.若帐号或密码为星号(*)，那么上传前将会弹出帐号和密码的对话框;; 2.上传过程是异步的，所以不应该在本函数后面书写其它上传相关js;

httpPost | 以Http POST方式将文件内容发给服务器 |
参数1 | Input控件的ID
参数2 | 格式为：url=[?];uid=[?];pwd=[?];index=[?];isEcho=[?];filename=[?];mode=[?];PartSize=[?];isShowProgress=[?]..., 其含义如下： url - 服务器URL，绝对或相对均可; uid - 该URL的Http帐号，可选; pwd - 登录名的密码，可选; isEcho - 文件上传成功后是否弹出一个提示对话框，可选true/false, 默认是true; index - 上传文件的顺序号 (即对话框中的文件的顺序号，从0开始计数); filename - 上传独立的本地文件，用于上传和对话框中的文件无关的其它本地文件，可选。如果设置了本参数，前面的 index 参数就可以忽略; dir - 将独立的本地目录中的某些文件打包成zip文件上传，和对话框中的文件无关，可选。如果设置了本参数，前面的 index、filenname 参数将无效; PartSize - 分块上传，指定的块大小，单位是字节，也可以在数字后面加“K”、"M"表示单位是千字节、兆字节。默认是0，即不分块; StartPart - 分块上传，指定从第几块开始上传(从0开始计数)，常用于断点续传。默认是0; mode - synch/asynch - 同步/异步，默认是同步; isShowProgress - 当分块上传时，在上传过程中是否显示进度条，可选true/false, 默认是true; Compress - zip/autozip/空串，是否先压缩成zip再上传，"zip"表示始终采用zip压缩，"autozip"表示如果压缩后尺寸反而更大，则上传原文件，默认是空(即不压缩); 如果文件是压缩后上传的，那么URL中将自动增加 "zip=true" 这样的参数，便于后端识别。如果前面设定了"dir"参数，那么本参数被内置为"Zip". 如果前面选择了 dir 参数，那么还可以选择如下和目录文件有关的内容： ext - 文件的通配符，比如"*.doc"，默认是"*.*"; isIncludeSubDir - 是否包含目录下子孙目录的文件, true/false, 默认false;
返回值 | 1-成功, 0-失败
备注 | 1.一次只能上传一个文件，要上传多个文件，必须用js写个循环; 2.参数 index、filename 和 dir 是三种不同用途，所以只能三选一; 3.发送的Http请求中，Http body是文件的二进制内容，Http Header中的Content-Type是application/octet-stream，发送方式是POST 4.文件名可以写在URL的参数中，以便后端获取; 5.如果不采用分块上传，单个文件的长度是有限制的，因为是一次性读取到内存后发送的; 6.如果启用分块上传，就能够上传大于4G的文件，控件会多次发送http请求，每次发送一段，并且请求的URL中将自动增加诸如: "...?PartSize=65536&Parts=30&Part=0&MD5=e4b69387a56aef304625b2c1809c5a3e" 这样的参数，其中 PartSize表示块的大小, Parts 表示一共有多少块，Part表示当前是第几块(从0开始计数)，MD5是当前数据块的MD5串，用以验证。如果接收数据有误，服务器的 Http StatusCode(状态码)必须不等于200，这样控件会重复发送，最多重复5遍 ; 7.如果是分块上传，每上传一块都会触发 Upload 事件;
示例 | //上传对话框中的第一个文件 AF.func("httpPost", "edit1\r\n url=../usercache/savefile.aspx?docname=12.doc; index=0;"); //单独上传和对话框无关的文件 AF.func("httpPost", "edit1\r\n url=../usercache/savefile.aspx?doc=手册.doc&userid=33; filename=c:\\mydoc\\手册.doc; partSize=500K; mode=asynch");

CancelUpload | 中断上传，仅用于以Http POST方式上传、并且是分块、异步的场合的 |
参数1 | Input控件的ID
参数2 | 格式为 Filename=[?];NotifyServer=[?]，含义如下: NotifyServer - true/false, 表示是否要通知服务器，要求删除先前上传的内容，默认是false。如果为true, 那么控件将发送一个请求http，其URL中将额外多了一个如下参数: “Upload=Canceled”，便于服务器判断; Filename - 文件名，当同时有多个文件上传时，需要指定中断哪个文件，如果为空，表示中断正在异步上传的所有任务，默认是空;
返回值 | (无)

GetHttpPostResponse | 取得上次执行HttpPost后的服务器返回串 |
参数 | Input控件的ID
返回值 | 串，服务器的 response
备注 | 1.仅限于同步的httpPost; 如果是分块上传，则返回最后一次的服务器response

AddFile | 增加一个本地文件 |
参数1 | Input控件的ID
参数2 | 全文件名
返回值 | 1/0 - 成功/失败, 失败原因是文件不存在

OpenFileDialog | 打开文件选择对话框，相当于模拟点击右侧小按钮 |
参数1 | Input控件的ID
参数2 | 本地目录, 表示初次开启对话框所定位的文件位置
返回值 | 1/0 - 对话框确认/取消

Empty | 清空选中的文件, 以便再次使用 |
参数1 | Input控件的ID
参数2 | 可选，数字，为对话框中的文件的顺序号(从0开始计数)，表示仅仅剔除其中的某个文件，其它不变
返回值 | (无)

BindMenu | 动态将 <menus> 资源下的某个菜单 和 工具条绑定 |
参数1 | Toolbar的ID
参数2 | Menu的ID
返回值 | (无)
备注 | 其实用 SetObjectProp 函数也完全能实现本功能

PopupMenu | 弹出下拉菜单，用于动态菜单按钮 |
参数 | (无)
返回值 | (无)

SetMenu | 重构某菜单 |
参数1 | Menu的ID
参数2 | 用法1: 菜单XML的URL; 用法2: 直接的XML大串; 用法3: 以回车(或Tab)分隔的简易文本串，如下所示: id=101; text=菜单项1; icon=car0.png; checked=true; id=102; text=菜单项2; icon=treelist/cars.zip#car1.png; ...
返回值 | (无)
备注 | 用法3只能创建单级菜单

DeleteMenuItem | 删除某菜单中的某个菜单项 |
参数1 | Menu的ID, 如果不确定，允许为空串
参数2 | 菜单项的ID, 即某个 item 的 id
返回值 | (无)

GetMenuItemProp | 取得某菜单中的某个菜单项的属性 |
参数1 | Menu的ID, 如果不确定，允许为空串
参数2 | 菜单项的ID, 即某个 item 的 id
参数3 | 属性名，支持 icon(或image)、text、detail、enabled、checked, 或者是其它自定义属性
返回值 | 属性的内容

SetMenuItemProp | 更改某菜单中的某个菜单项的属性 |
参数1 | Menu的ID, 如果不确定，允许为空串
参数2 | 菜单项的ID, 即某个 item 的 id
参数3 | 属性名，支持 icon(或image)、text、detail、enabled、checked, 或者是其它自定义属性
参数4 | 属性的内容
返回值 | (无)
备注 | 如果该菜单项是和 Toolbar 工具条绑定的，那么工具条的相关内容也会随之改变
示例 | AF.func("SetMenuItemProp", "menu1 \r\n 5001 \r\n enabled \r\n false");

BindPager | 分页器和Treelist(或报表数据源)绑定 |
参数1 | Treelist的句柄，或报表中数据源的句柄
参数2 | Pager的ID
参数3 | 可选，格式为 CurrentPage=[?], 表示将当前页定位到某页(从0开始计数)
返回值 | (无)

GetPages | 取得总页数 |
参数 | 分页器的ID
返回值 | 页数

GetCurrentPage | 取得当前页 |
参数 | 分页器的ID
返回值 | 页号，从0开始计数

GotoPage | 切换当前页 |
参数1 | 分页器的ID
参数2 | 页号，从0开始计数
返回值 | 1/0 - 成功/失败

Refresh(用途2) | 刷新Treelist、重新获得总行数 |
参数 | Pager的ID
返回值 | (无)

TimerRoundPage | 启动内部定时器，自动滚动跳转到下一页 |
参数1 | 分页器的ID
参数2 | 0 - 终止定时器； 大于100的整数 - 间隔，单位是毫秒
返回值 | 1/0 - 成功/失败
示例 | AF.func("timerRoundPage", "IDPage \r\n 3000");

GetTabCount | 获得选项卡中页签数量 |
参数 | 选项卡的Id
返回值 | 数量

GetTabIds | 获得选项卡中各页签的Id，逗号分隔 |
参数 | 选项卡的Id
返回值 | 串

SetCurSel | 切换选项卡当前页签 |
参数1 | 选项卡的Id
参数2 | 顺序号
返回值 | 1/0 - 成功/失败

GetCurSel | 获得选项卡中当前页签的顺序号 |
参数 | 选项卡的Id
返回值 | 顺序号

GetCurSelId | 获得选项卡中当前页签的Id |
参数 | 选项卡的Id
返回值 | Id值

DeleteTab | 删除选项卡中的某个页签 |
参数1 | 选项卡的Id
参数2 | 页签的Id，或顺序号(从0开始计数)
返回值 | (无)

InsertTab | 插入新页签 |
参数1 | 选项卡的Id
参数2 | 插入位置, 小于0表示从右侧(末尾)添加
参数3 | 名值对的串，以分号分隔，名值对含义如下： id - 页签的 id 号; type - 页签大粒度组件的类型; text - 页签上的文字; createPara - 大粒度组件的创建参数, 请以引号包绕; enable - 页签是否Enable; cursel - 当前页签, new 表示定位到新的页签, old表示页签保持不变, 默认是 new;
返回值 | (无)
示例 | AF.func("InsertTab", "Tab1 \r\n 0 \r\n id=kk; type=treelist; text=销售表; cursel=old; createPara='border=none'");

GetObjectProp(用途3) | 取得选项卡中某页签的属性 |
参数1 | 选项卡的ID和页签的ID，以小数点分隔, 例如 "Tab1.t1"
参数2 | 属性名，有如下属性: id - 页签的 id ; type - 页签的大粒度组件的类型 ; text - 页签的文字 ; enable - 页签是否Enable; visible - 页签是否可见; URL - 类型为WebBrowser的大粒度组件的URL ;
返回值 | 属性的值

SetObjectProp(用途3) | 更改选项卡中某页签的属性 |
参数1 | 选项卡的ID和页签的ID，以小数点分隔, 例如 "Tab1.t1"
参数2 | 属性名，见上面的GetObjectProp函数，但 id 和 type 是不能被设置的.
参数3 | 内容
返回值 | 1/0 - 成功/失败

Validate | 验证输入的内容. 如果未通过验证，将自动浮现出错误提示. 验证包括input的nullAble属性、以及 <Validations> 的内容. |
参数 | 可选，可以有： include - 其它Freeform的句柄，将它也包含进来. 若有多个句柄, 则以逗号分隔.
返回值 | 1 - 通过验证; 0 - 未通过，并自动弹出错误的对话框.
备注 | 一般不需要调用这个函数，因为函数GetChangedXML( )本身就包含了验证过程.
示例 | var h2 = AForm2.func("GetHandle", ""); var h3 = AForm3.func("GetHandle", ""); AF.func("Validate", "include=" +h2+ "," +h3);

GetChangedXML | 调用Validate( )验证，并生成用于提交的XML串 |
参数 | 可选，可以有： level - 级别，有0(默认，取得所有Input的当前内容)、1(只取得修改过的Input的内容、原始内容)、2(取得所有Input的内容、原始内容); returnFormat - 本函数返回串的格式, xml/json, 默认是xml; DateFormat - 日期的格式，默认是'%Y.%m.%d'，可参见公共内容中now( )函数的参数 DateTimeFormat - 日期时间的格式，默认是'%Y.%m.%d %H:%M:%S'，可参见公共内容中now( )函数的参数; isExecuteValidations - 是否执行XML描述文件的 <Validations> 中的验证，默认是true. include - 其它Freeform的句柄，将它也包含进来. 若有多个句柄, 则以逗号分隔. includeCol / excludeCol - 仅包含某些列/不包含某些列，二者可选其一，表示列的范围. 列名之间以逗号分隔。默认是空串，表示提交所有列; absIncludeCol - 始终包含某些列，不管其列数据有没有被修改过. 仅用于Level=1;
返回值 | 正常情况下是一个XML或JSON串. 如果串仅为"0"，表示未通过验证，且自动弹出错误的对话框.
备注 | 参与生成XML的Object的条件为： 1.可输入的对象(Input)，且ID有效(不为空、不以$开头); 2.IsBindingCol=true 的 Text 和 Image 对象，且ID有效(不为空、不以$开头);
示例 | 示例一： AF.func("GetChangedXML", "level=1;dateFormat=%Y-%m-%d;dateTimeFormat=%Y-%m-%d %H:%M:%S"); 示例二： var h2 = AForm2.func("GetHandle", ""); var h3 = AForm3.func("GetHandle", ""); AF.func("GetChangedXML", "level=1; include=" +h2+ "," +h3);

GetChanged | 判断是否被修改过, 也可以写成 IsChanged. |
参数 | 有4种写法： 1.空串 - 检查整个Freeform是否被修改过; 2.ID号 - 检查某个ID的输入框是否被修改过; 3.某Radio的GroupID号 - 检查某组Radio框是否被修改过; 4.include=[Feeeform句柄],[Feeeform句柄] - 同时检查其它几个Freeform，逗号分隔。(注：可用GetHandle( )取得句柄)
返回值 | 1/0 - 是/否
示例 | AF.func("GetChanged", "price"); var h = AF2.func("GetHandle", ""); AF1.func("GetChanged", "include=" + h);

ResetChanged | 合并修改内容，清除Input的修改标记. |
参数 | (无)
返回值 | (无)

SetAsNewRow | 强制设置新增、修改的标识 |
参数 | 可选，true/false - 是/否, 默认true
返回值 | (无)
备注 | 用于生成GetChangedXML( )函数的XML. 注：通过Load( )加载后，就不是新增行了.

IsNewRow | 是否新增行 |
参数 | (无)
返回值 | 1/0 - 是/否
备注 | 用于生成GetChangedXML( )函数的XML. 注：通过Load( )加载后，就不是新增行了.

Locate | 将中心位置定位到某幅图 |
参数1 | id, 或顺序号
参数2 | 可选，true/false, true表示参数1是id，false表示参数1是顺序号(从0开始计数)，默认是true.
返回值 | (无)

Scroll | 发送一个滚动消息 |
参数 | 速率, -150至150之间，小于0表示向左滚动.
返回值 | (无)

GetImages | 取得图片总数 |
参数 | ImageFlow 的 Id
返回值 | 数量

GetImageProp | 取得某个图片的属性(包括自定义属性) |
参数 | ImageFlow 的 Id
参数 | 图片的顺序号(从0开始计数)
参数 | 属性, 可以是 Id, src(或URL), tip(或Text)，或其它自定义属性
返回值 | 属性的值

GetImagePropById | 按图片的Id取得某个图片的属性(包括自定义属性) |
参数 | ImageFlow 的 Id
参数 | 图片的 Id
参数 | 属性, 可以是 src(或URL), tip(或Text)，或其它自定义属性
返回值 | 属性的值

AddPath | 动态创建Path |
参数1 | ID
参数2 | XML串
返回值 | (无)

Export | 取得XML格式的数据，一般用于打印:将串作为数据源转交给Report组件. |
参数 | 可选，可以有 content=[?]; include=[?]; metaOnly=[?]; includeHide=[?]; includeEmpty=[?] 这5个子句，含义分别为： content: asData表示输出内容是纯数据, asDisplay表示和界面显示的一样串，默认是asDisplay; include: 其它freeform的句柄，表示一起参与输出，多个句柄以逗号分隔; metaOnly: =true表示不含数据，仅含结构，默认是false includeHide: 是否包含隐藏(不可视)的输入对象，默认是true; includeEmpty: 是否包含空值，默认是true;
返回值 | XML大串
备注 | 返回的串的格式类似于：
    <form id="business1" key="orderId" 自定义属性="?" >
     <row>
      <orderId>k1020</id>
      <dt>2011.08.01</dt>
      <rate>6.1203</rate>
      <checked>商业保险</checked>
      <city>Charleroi</city>
     </row>
    </form>
示例 | var h = AF2.func("GetHandle",""); AF.func("export", "content=asDisplay; include="+h);

AddHotKey | 增设快捷键。快捷键将触发HotKey事件 |
参数1 | 第一个快捷键，可以是F1至F12、字母、数字、或键的AscII码，也可再加Ctrl、Shift、Alt的组合，以'+'分隔.
参数2 | 可选，第二个快捷键，以此类推.
返回值 | (无)
备注 | 1.并不是所有键都能用作快捷的，受制于浏览器，您需要逐个测试; 2.快捷键将触发 HotKey 事件
示例 | AF.func("AddHotKey", "F12 \r\n Ctrl+F4 \r\n Ctrl+Shift+S \r\n Alt+5 \r\n Ctrl+32"); 分别表示了5个快捷键：F12、Ctrl+F4、Ctrl+Shift+S、Alt+5、Ctrl+空格(空格的AscII码是32)