1.这个工具条其实就是freeformBar,和上例中的“查询区”属于同一个范畴;
2.按钮都是freeform中的按钮,触发的也全部是freeform的事件,通过即时更改 TableLayout 的 “Visible” 属性实现freeform的重新展现;
3.本例将查询条件存入本地Cache了,请输入查询条件按“确认”按钮后,关闭浏览器,再进入,观察查询条件;
4.真实的查询请参考演示页 "30.FreeformBar".




1.采用了上一个demo页中的Treelist,但是没有采用其内定的FreeformBar,而是在OpenFreeformBar( )函数中指向另一个:
function OnReady(id)
{
 AF.func("Build", "treelist/t20.xml");
 AF.func("Load", 'treelistdata/data.txt');
 AF.func("OpenFreeformBar","treelist/query2.xml");  //立即开启FreeformBar, 使用query2.xml作为Freeform
}

2.上面的XML中引用的 query2.xml 是一个标准的freeform(自由表头),它包含了多个TableLayout. query2.xml是用表单设计器设计出来的,请详见"自由表头"部分的demo页“16.Freeform设计器”;

3.js源码分析如下:
//Supcan事件
function OnEvent(id, Event, p1, p2, p3, p4)
{
 if(Event=="ButtonClicked") {
  if(p1 == "btn3") {  //打印预览按钮
   AF.func("PrintPreview", "");
   return;
  }
  
  if(p1 == "close1" || p1=="close2") {
   //关闭:调用freeform的扩展函数SetObjectProp( ),让用于条件输入的TableLayout隐藏
   AF.func("tBar.SetObjectProp", "layout1,layout2,mirror \r\n visible \r\n 0");
   return;
  }
  if(p1=="ok1" || p1=="ok2") {
   //确认:调用freeform的扩展函数Export( ),取得查询条件的XML串
   var xml = AF.func("tBar.Export", "includeHide=false;includeEmpty=false");
   //查询条件保存到本地Cache
   AF.func("SaveCache", "top" + p1 + "\r\n" + xml + "\r\n Persist=File");
   //如果需要json格式: 执行全局函数 toJSON
   AF.func("MessageBoxFloat", AF.func("toJSON", xml + "\r\n recordset"));
   return;
  }
  
  //打开不同的条件查询框:让部分TableLayout隐藏、另一部分显示
  if(p1 == "btn1") {
   AF.func("tBar.SetObjectProp", "layout2 \r\n visible \r\n 0");
   AF.func("tBar.SetObjectProp", "mirror, layout1 \r\n visible \r\n 1");
   //从本地Cache读取初始值
   var cache = AF.func("ReadCache", "topok1");
   if(cache != "") AF.func("tBar.Load", cache + "\r\n useLast=true");  //useLast=true表示部分替换(初始日期部分)
  }
  else if(p1 == "btn2") {
   AF.func("tBar.SetObjectProp", "layout1 \r\n visible \r\n 0");
   AF.func("tBar.SetObjectProp", "mirror, layout2 \r\n visible \r\n 1");
   //从本地Cache读取初始值
   var cache = AF.func("ReadCache", "topok2");
   if(cache != "") AF.func("tBar.Load", cache + "\r\n useLast=true");  //useLast=true表示部分替换(初始货重部分)
  }
 }
}