---
title: "页面导航与扩展"
description: "页面运行、命名空间、导航、报表和 Supcan 扩展。 共 36 个 Wb 公共方法。"
---

> Documentation Index
> Fetch the complete documentation index at: https://ag.879818327.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# 页面导航与扩展

本文档由项目中的 `wb-debug.js` 自动提取。每个条目包含源码提炼的使用说明、优先采用源码示例的用法示例，以及完整 JSDoc 供参数和行为核对。

## Wb.optMain

```javascript
Wb.optMain(app);
```

源码：`wb-debug.js:4882`

**使用说明**

获取应用容器入口控件，返回的优先级依次为：itemId为main的入口,viewport/container,panel,form,tabpanel,fieldset。 如果没找到以上控件，则返回第一个容器控件。如果无容器控件则返回null。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.optMain(/* app */ undefined);
```

**源码注释**

```javascript
/**
 * 获取应用容器入口控件，返回的优先级依次为：itemId为main的入口,viewport/container,panel,form,tabpanel,fieldset。
 * 如果没找到以上控件，则返回第一个容器控件。如果无容器控件则返回null。
 * @param {Object} app 命名空间。
 * @return {Component} 获取的入口控件。
 */
```

## Wb.open

```javascript
Wb.open(PortalConfigs);
```

源码：`wb-debug.js:4949`

**使用说明**

在主页，IDE或其他任意窗口中打开指定xwl文件或任意url链接。xwl模块可以直接添加到应用主页而无需frame，从而使应用 模块的加载更快速，同时更省资源。如果上下文环境在主页或IDE将直接打开，否则在新窗口内打开。如果需要直接在新窗口中打 开，可以使用Wb.submit。 否则激活已经打开的模块。 如果为false，则不创建模块面板。

**用法示例**

以下示例直接取自源码注释。

```javascript
Wb.open({url: 'm?xwl=path/myModule', title: 'My Module', iconCls: 'myIconCls',
     params: {param1: 'foo', param2: 'bar'}});
Wb.open({url: 'http://www.google.com', title: 'Google', inframe:true, iconCls: 'web_icon'});
```

**源码注释**

```javascript
/**
 * 在主页，IDE或其他任意窗口中打开指定xwl文件或任意url链接。xwl模块可以直接添加到应用主页而无需frame，从而使应用
 * 模块的加载更快速，同时更省资源。如果上下文环境在主页或IDE将直接打开，否则在新窗口内打开。如果需要直接在新窗口中打
 * 开，可以使用Wb.submit。
 *
 * Example:
 *
 *     Wb.open({url: 'm?xwl=path/myModule', title: 'My Module', iconCls: 'myIconCls',
 *              params: {param1: 'foo', param2: 'bar'}});
 *     Wb.open({url: 'http://www.google.com', title: 'Google', inframe:true, iconCls: 'web_icon'});
 *
 * @param {Object} PortalConfigs 打开模块或文件的配置参数。该参数子模块可见，首字母为大写。
 * @param {String} PortalConfigs.url url路径。
 * @param {String} [PortalConfigs.title] 显示在页标签中的标题。
 * @param {String} [PortalConfigs.iconCls] 显示在页标签中的图标样式。
 * @param {String} [PortalConfigs.icon] 显示在页标签中的图标URL。
 * @param {Object} [PortalConfigs.params] 提交的参数对象。
 * @param {Boolean} [PortalConfigs.inframe] 是否显示在Iframe中，默认为false。
 * @param {String} [PortalConfigs.method] 提交的方法，默认为POST提交。
 * @param {String} [PortalConfigs.tooltip] tab选项卡上的提示信息。
 * @param {Boolean} [PortalConfigs.reload] 如果模块已经存在是否重新加载。
 * @param {Container} [PortalConfigs.reloadCard] 需要重新加载的tab页。
 * @param {Boolean} [PortalConfigs.frameOnly] 是否只创建模块的框架。如果为true仅创建tab页，不加载模块内容。
 * @param {Boolean} [PortalConfigs.notActiveCard] 是否不激活创建的tab页。
 * @param {Boolean} [PortalConfigs.contextOwner] contextOwner对象。
 * @param {Boolean} [PortalConfigs.newWin] 是否在新窗口中使用表单提交方式打开，默认false。如果为GET方法且params为空则使用open函数打开。
 * @param {Boolean} [PortalConfigs.download] 是否下载资源，默认false。
 * @param {Boolean} [PortalConfigs.mask] 在加载过程中是否使用mask，默认为true。
 * @param {Boolean} [PortalConfigs.showError] 是否显示异常信息，默认为true。
 * @param {Boolean} [PortalConfigs.newTab] 如果指定模块已经打开，是否允许创建新的tab。默认为自动判断，即如果存在params，则允许创建新tab，
 * 否则激活已经打开的模块。
 * @param {Container/Boolean} [PortalConfigs.container] 把新的模块面板添加到该容器对象，默认为Home或IDE的tab。
 * 如果为false，则不创建模块面板。
 * @param {Function} [PortalConfigs.success] 加载xwl文件成功后的回调函数。传递参数appScope和responseText，this指向card。
 * @param {Function} [PortalConfigs.failure] 加载xwl文件失败后的回调函数。传递参数appScope和responseText，this指向card。
 * @return {Panel} 如果添加新的模块面板则返回该对象，否则为undefined。
 */
```

## Wb.run

```javascript
Wb.run(configs);
```

源码：`wb-debug.js:5189`

**使用说明**

运行指定路径的xwl文件。该方法通过ajax的方法调用指定的模块，并在回调函数中获取模块的命名空间。 该方法同Wb.open方法的区别为运行时不创建默认容器。

**用法示例**

以下示例直接取自源码注释。

```javascript
Wb.run({url: 'm?xwl=path/myModule', params: {foo: 'bar'}, success: function(scope, responseText){
   scope.myWin.show();
}});
```

**源码注释**

```javascript
/**
 * 运行指定路径的xwl文件。该方法通过ajax的方法调用指定的模块，并在回调函数中获取模块的命名空间。
 * 该方法同Wb.open方法的区别为运行时不创建默认容器。
 * Example:
 *
 *     Wb.run({url: 'm?xwl=path/myModule', params: {foo: 'bar'}, success: function(scope, responseText){
 *        scope.myWin.show();
 *     }});
 *
 * @param {Object} configs 打开模块或文件的配置参数。该参数子模块可见，首字母为大写。
 * @param {String} configs.url 引用xwl模块的url相对路径或捷径。
 * @param {Object} [configs.params] 提交的参数对象。
 * @param {Function} [configs.success] 加载成功后的回调函数，可用参数scope和responseText。
 * @param {Function} [configs.failure] 加载失败后的回调函数，可用参数scope和responseText。
 * @param {Boolean} [configs.mask] 在加载过程中是否使用mask，默认为true。
 * @param {Boolean} [configs.showError] 是否显示异常信息，默认为true。
 */
```

## Wb.onUnload

```javascript
Wb.onUnload(fn, owner);
```

源码：`wb-debug.js:5201`

**使用说明**

监听window beforeunload事件。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.onUnload(
  function () {
  // 处理结果
},
  app.owner
);
```

**源码注释**

```javascript
/**
 * 监听window beforeunload事件。
 * @param {Function} fn 事件发生时的回调函数。
 * @param {Container} [owner] 加载模块的容器。
 */
```

## Wb.toUrl

```javascript
Wb.toUrl(path);
```

源码：`wb-debug.js:5211`

**使用说明**

把xwl文件路径转换为web路径，如果不是xwl文件则直接返回。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.toUrl("示例值");
```

**源码注释**

```javascript
/**
 * 把xwl文件路径转换为web路径，如果不是xwl文件则直接返回。
 * @param {String} path 文件路径。
 * @return {String} web路径。
 */
```

## Wb.close

```javascript
Wb.close(value);
```

源码：`wb-debug.js:5222`

**使用说明**

在主页中关闭指定的页面。如果在主页或IDE之外使用此函数，无任何效果。 如果为布尔值，true关闭全部页面，false关闭其他页面。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.close(/* value */ undefined);
```

**源码注释**

```javascript
/**
 * 在主页中关闭指定的页面。如果在主页或IDE之外使用此函数，无任何效果。
 * @param {String/Boolean} value 关闭页面相关的文件名称或url路径。如果为空，表示关闭当前页面。
 * 如果为布尔值，true关闭全部页面，false关闭其他页面。
 */
```

## Wb.encodeHtml

```javascript
Wb.encodeHtml(text);
```

源码：`wb-debug.js:5256`

**使用说明**

把指定文本转换成html，除了转换html的保留词，该方法同时也转换换行符。该方法仅用于显示目的的转换。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.encodeHtml("示例值");
```

**源码注释**

```javascript
/**
 * 把指定文本转换成html，除了转换html的保留词，该方法同时也转换换行符。该方法仅用于显示目的的转换。
 * @param {String} text 需要转换的html脚本。
 * @return {String} 转换后的html脚本。
 */
```

## Wb.addLink

```javascript
Wb.addLink(links, callback, recursive);
```

源码：`wb-debug.js:5274`

**使用说明**

动态在文档header中注入js和css链接，加载成功后执行指定的回调方法。

**用法示例**

以下示例直接取自源码注释。

```javascript
Wb.addLink(['file.css', 'file.js', {url: 'file', type: 'js'}], fn, true);
```

**源码注释**

```javascript
/**
 * 动态在文档header中注入js和css链接，加载成功后执行指定的回调方法。
 *
 * Example:
 *
 *     Wb.addLink(['file.css', 'file.js', {url: 'file', type: 'js'}], fn, true);
 *
 * @param {Array} [links] 需要加载的js或css链接列表。如果链接类型未明需要在对象中显式指明url和type属性。
 * @param {Function} [callback] 加载完成js和css后执行的方法。
 * @param {Boolean} [recursive] 是否采用递归加载，递归加载是依次加载链接，加载完成上后再加载下一个链接。默认为false。
 */
```

## Wb.print

```javascript
Wb.print(object, title);
```

源码：`wb-debug.js:5363`

**使用说明**

使用浏览器内置的打印功能打印指定的对象。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.print(
  app.object,
  "示例值"
);
```

**源码注释**

```javascript
/**
 * 使用浏览器内置的打印功能打印指定的对象。
 * @param {Object} object 打印的对象。如果对象为文本则打印该文本(html)，否则将打印对象中的html内容。
 * @param {String} [title] 输出的页面标题。
 */
```

## Wb.printReport

```javascript
Wb.printReport(url, rows, title, params);
```

源码：`wb-debug.js:5404`

**使用说明**

打印指定的报表。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.printReport(
  "m?xwl=module/action",
  /* rows */ undefined,
  "示例值",
  { /* 参数或数据 */ }
);
```

**源码注释**

```javascript
/**
 * 打印指定的报表。
 * @param {Panel/String} url 引用报表xwl模块或其url相对路径或捷径。
 * @param {Object/Object[]} rows 数据记录或记录列表。
 * @param {String} [title] html页面标题。
 * @param {Object} [params] 获取报表模板的参数对象。
 */
```

## Wb.report

```javascript
Wb.report(url, rows, callback, params);
```

源码：`wb-debug.js:5416`

**使用说明**

运行报表模块并获取生成的报表html文本。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.report(
  "m?xwl=module/action",
  /* rows */ undefined,
  function () {
  // 处理结果
},
  { /* 参数或数据 */ }
);
```

**源码注释**

```javascript
/**
 * 运行报表模块并获取生成的报表html文本。
 * @param {Panel/String} url 引用报表xwl模块或其url相对路径或捷径。
 * @param {Object/Object[]} rows 数据记录或记录列表。
 * @param {Function} callback 成功生成报表之后执行的回调函数，可用参数html。
 * @param {Object} [params] 参数对象。
 */
```

## Wb.getInputValue

```javascript
Wb.getInputValue(el);
```

源码：`wb-debug.js:5479`

**使用说明**

获取指定控件/元素内所有input控件的值组成的对象，对象中每个值的名称为指定控件的itemId。 如果控件下存在重复itemId的控件，则只返回第一个控件值，其余重名的控件将被忽略。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.getInputValue(app.el);
```

**源码注释**

```javascript
/**
 * 获取指定控件/元素内所有input控件的值组成的对象，对象中每个值的名称为指定控件的itemId。
 * 如果控件下存在重复itemId的控件，则只返回第一个控件值，其余重名的控件将被忽略。
 * @param {Component/Element} el 需要获取值的组件对象或元素。
 * @return {Object} 获取的控件值组成的对象。
 */
```

## Wb.setInputValue

```javascript
Wb.setInputValue(el, values);
```

源码：`wb-debug.js:5494`

**使用说明**

对指定控件内所有input控件进行赋值，其值由values对象指定，values中的每一子项的名称为控件的itemId，值为控件值。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.setInputValue(
  app.el,
  { /* 参数或数据 */ }
);
```

**源码注释**

```javascript
/**
 * 对指定控件内所有input控件进行赋值，其值由values对象指定，values中的每一子项的名称为控件的itemId，值为控件值。
 * @param {Component/Element} el 组件或元素对象。
 * @param {Object} values 包含一组控件itemId和值组成的Object对象。
 */
```

## Wb.ns

```javascript
Wb.ns(namespace);
```

源码：`wb-debug.js:5508`

**使用说明**

创建命名空间。通过命名空间可以在全局访问指定函例。如果指定命名空间已经存在则直接返回命名空间对象。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.ns("示例值");
```

**源码注释**

```javascript
/**
 * 创建命名空间。通过命名空间可以在全局访问指定函例。如果指定命名空间已经存在则直接返回命名空间对象。
 * @param {String} namespace 必须参数说明。
 * @return {Object} 指定命名空间对象。
 */
```

## Wb.columnClick

```javascript
Wb.columnClick(view, e, columnname, func);
```

源码：`wb-debug.js:5519`

**使用说明**

从点击事件定位表头列；只有列的 dataIndex 与 columnname 相等时才调用 func。适合将表头点击逻辑限制到指定字段。

**用法示例**

以下示例依据函数体中的实际调用关系整理。

```javascript
Wb.columnClick(view, event, "STATUS", function () {
  app.grid.store.reload();
});
```

**源码注释**

```javascript
/**
 * 源码未提供 JSDoc。
 */
```

## Wb.hasNS

```javascript
Wb.hasNS(namespace, scope);
```

源码：`wb-debug.js:5531`

**使用说明**

判断指定命名空间是否存在。如果存在返回true，否则返回false。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.hasNS(
  "示例值",
  /* scope */ undefined
);
```

**源码注释**

```javascript
/**
 * 判断指定命名空间是否存在。如果存在返回true，否则返回false。
 * @param {String} namespace 必须参数说明。
 * @param {Object} [scope] 根命名空间，默认为window。
 * @return {Boolean} true存在，false不存在。
 */
```

## Wb.recordActivity

```javascript
Wb.recordActivity(comp);
```

源码：`wb-debug.js:5547`

**使用说明**

记录用于TabPanel标签页和TreePanel节点的导航的位置。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.recordActivity(app.comp);
```

**源码注释**

```javascript
/**
 * 记录用于TabPanel标签页和TreePanel节点的导航的位置。
 * @param {Component} comp TabPanel或TreePanel对象。
 */
```

## Wb.navigate

```javascript
Wb.navigate(comp, item, isBack);
```

源码：`wb-debug.js:5582`

**使用说明**

根据指定项转到对应的TreePanel节点或TabPanel标签页。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.navigate(
  app.comp,
  /* item */ undefined,
  true
);
```

**源码注释**

```javascript
/**
 * 根据指定项转到对应的TreePanel节点或TabPanel标签页。
 * @param {Component} comp 需要导航组件对象。
 * @param {Object} item 选项卡或节点。
 * @return {Boolean} 是否导航成功，true成功，false失败。
 */
```

## Wb.back

```javascript
Wb.back(comp);
```

源码：`wb-debug.js:5603`

**使用说明**

依次返回到上次位置。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.back(app.comp);
```

**源码注释**

```javascript
/**
 * 依次返回到上次位置。
 */
```

## Wb.forward

```javascript
Wb.forward(comp);
```

源码：`wb-debug.js:5621`

**使用说明**

依次前进到返回前的位置。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.forward(app.comp);
```

**源码注释**

```javascript
/**
 * 依次前进到返回前的位置。
 */
```

## Wb.setNavigate

```javascript
Wb.setNavigate(comp, backBtn, forwardBtn);
```

源码：`wb-debug.js:5641`

**使用说明**

设置对TabPanel和TreePanel的导航操作，导航操作可方便后退和前进到上次位置。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.setNavigate(
  app.comp,
  /* backBtn */ undefined,
  /* forwardBtn */ undefined
);
```

**源码注释**

```javascript
/**
 * 设置对TabPanel和TreePanel的导航操作，导航操作可方便后退和前进到上次位置。
 * @param {Component} comp 需要设计导航的对象，为TabPanel或TreePanel对象。
 * @param {Button} backBtn 后退按钮。
 * @param {Button} forwardBtn 前进按钮。
 */
```

## Wb.addSupcanIframe

```javascript
Wb.addSupcanIframe(comp, type, url, load);
```

源码：`wb-debug.js:5686`

**使用说明**

加载iframe 硕正报表

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.addSupcanIframe(
  app.comp,
  /* type */ undefined,
  "m?xwl=module/action",
  /* load */ undefined
);
```

**源码注释**

```javascript
/**
 * 加载iframe 硕正报表
 * @param {Component} comp 需要设计导航的对象，为TabPanel或TreePanel对象。
 * @param {Button} type 类型。
 * @param {Button} forwardBtn 前进按钮。
 */
```

## Wb.loadComboFilter

```javascript
Wb.loadComboFilter(combo, filter, fn);
```

源码：`wb-debug.js:5706`

**使用说明**

使用 filter 作为 store.load 的 params 重新加载下拉框数据；仅在加载成功时执行 fn。调用前 combo 必须具有 store。

**用法示例**

以下示例依据函数体中的实际调用关系整理。

```javascript
Wb.loadComboFilter(app.customerCombo, { status: "ACTIVE" }, function () {
  app.customerCombo.expand();
});
```

**源码注释**

```javascript
/**
 * 源码未提供 JSDoc。
 */
```

## Wb.loadComboAdd

```javascript
Wb.loadComboAdd(combo, objData, fn);
```

源码：`wb-debug.js:5717`

**使用说明**

重新加载 combo 的 store；加载成功后在索引 1 插入 objData，再执行 fn。该插入会改变当前 store 的显示顺序。

**用法示例**

以下示例依据函数体中的实际调用关系整理。

```javascript
Wb.loadComboAdd(app.statusCombo, { value: "ALL", text: "全部" }, function () {
  app.statusCombo.setValue("ALL");
});
```

**源码注释**

```javascript
/**
 * 源码未提供 JSDoc。
 */
```

## Wb.getSupcanMelu

```javascript
Wb.getSupcanMelu(AF, column, state);
```

源码：`wb-debug.js:5739`

**使用说明**

通过 Supcan AF.func 读取当前行或所有当前行的指定列。state 为真时返回数组；当前源码在 state 为假分支中引用未声明的 i，直接调用该分支可能抛出错误，应先修正源码或只使用 state=true。

**用法示例**

以下示例依据函数体中的实际调用关系整理。

```javascript
var values = Wb.getSupcanMelu(af, "COL_CODE", true);
```

**源码注释**

```javascript
/**
 * 源码未提供 JSDoc。
 */
```

## Wb.getSupcanMeluStr

```javascript
Wb.getSupcanMeluStr(AF, column);
```

源码：`wb-debug.js:5756`

**使用说明**

遍历 Supcan 当前行，将指定列的单元格值以逗号拼接为字符串返回。不会转义值中的逗号。

**用法示例**

以下示例依据函数体中的实际调用关系整理。

```javascript
var ids = Wb.getSupcanMeluStr(af, "ID");
```

**源码注释**

```javascript
/**
 * 源码未提供 JSDoc。
 */
```

## Wb.savesupcandata

```javascript
Wb.savesupcandata(AF, opt, url);
```

源码：`wb-debug.js:5768`

**使用说明**

从 opt 指向的 DOM 元素取得 Supcan AF 实例，读取 GetChangedXML 后通过 Wb.requestAg 保存。实现忽略传入的 AF 和 url，并写死业务 bean、className 与 method；仅适用于对应的演示业务，不能作为通用保存接口。

**用法示例**

以下示例依据函数体中的实际调用关系整理。

```javascript
Wb.savesupcandata(null, "supcanFrame", null);
```

**源码注释**

```javascript
/**
 * 源码未提供 JSDoc。
 */
```

## Wb.setSupcanMelu

```javascript
Wb.setSupcanMelu(AF, column, value, fieldValue);
```

源码：`wb-debug.js:5804`

**使用说明**

遍历 Supcan 当前行并写入指定列。fieldValue 为空时调用 SetCellData；否则调用 SetCellDataText，同时传入显示文本。

**用法示例**

以下示例依据函数体中的实际调用关系整理。

```javascript
Wb.setSupcanMelu(af, "STATUS", "1", "已启用");
```

**源码注释**

```javascript
/**
 * 源码未提供 JSDoc。
 */
```

## Wb.moreSupcanSelect

```javascript
Wb.moreSupcanSelect(AF, p2);
```

源码：`wb-debug.js:5815`

**使用说明**

加载固定的 moreSupcanWin XWL 页面，并基于 Supcan 可见列创建字段选择窗口。该方法依赖固定模块路径和窗口配置，适用于项目内 Supcan 报表选择场景。

**用法示例**

以下示例依据函数体中的实际调用关系整理。

```javascript
Wb.moreSupcanSelect(af, "filterField");
```

**源码注释**

```javascript
/**
 * 源码未提供 JSDoc。
 */
```

## Wb.pushParam

```javascript
Wb.pushParam(target, data);
```

源码：`wb-debug.js:5889`

**使用说明**

panel修改单条数据 参数1：必须是提交时获取panel实时数据 参数2：修改前的原始数据 后台日志处理逻辑：记录panel内有修改过的值，未修改不记录。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.pushParam(
  app.target,
  { /* 参数或数据 */ }
);
```

**源码注释**

```javascript
/**
 * panel修改单条数据
 * 参数1：必须是提交时获取panel实时数据
 * 参数2：修改前的原始数据
 * 后台日志处理逻辑：记录panel内有修改过的值，未修改不记录。
 */
```

## Wb.batchUpdParam

```javascript
Wb.batchUpdParam(target, records, ID);
```

源码：`wb-debug.js:5907`

**使用说明**

panel修改批量数据 参数1：必须是提交时获取panel实时数据 参数2：修改前的原始数据，grid选中值，如var records = app.grid1.getSelection(); 参数3：批量修改的原始数据ID字段，可空 后台日志处理逻辑：记录panel内有修改过的值，未修改不记录。

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.batchUpdParam(
  app.target,
  [],
  /* ID */ undefined
);
```

**源码注释**

```javascript
/**
 * panel修改批量数据
 * 参数1：必须是提交时获取panel实时数据
 * 参数2：修改前的原始数据，grid选中值，如var records = app.grid1.getSelection();
 * 参数3：批量修改的原始数据ID字段，可空
 * 后台日志处理逻辑：记录panel内有修改过的值，未修改不记录。
 */
```

## Wb.batchDelParam

```javascript
Wb.batchDelParam(records);
```

源码：`wb-debug.js:5944`

**使用说明**

批量删除

**用法示例**

以下为最小调用模板；请将 `app.*`、示例值和地址替换为当前页面的实际对象。

```javascript
Wb.batchDelParam([]);
```

**源码注释**

```javascript
/**
 * 批量删除
 * @param records 修改前的原始数据，grid选中值，如var records = app.grid1.getSelection();
 * @returns {string}
 */
```

## Wb.logAg

```javascript
Wb.logAg(bizType,keyword,info);
```

源码：`wb-debug.js:5951`

**使用说明**

通过 Wb.requestAg 调用 UserDefineLogService.saveLog，提交 bizType、keyword 和 info。服务 bean 与方法名在源码中写死。

**用法示例**

以下示例依据函数体中的实际调用关系整理。

```javascript
Wb.logAg("EDIT", "客户资料", "更新了客户名称");
```

**源码注释**

```javascript
/**
 * 源码未提供 JSDoc。
 */
```

## Wb.controlBtn

```javascript
Wb.controlBtn(btn, status);
```

源码：`wb-debug.js:5964`

**使用说明**

btn 未定义时直接返回；status 严格等于 true 时调用 enable()，其他值调用 disable()。

**用法示例**

以下示例依据函数体中的实际调用关系整理。

```javascript
Wb.controlBtn(app.saveButton, Wb.verify(app.formPanel));
```

**源码注释**

```javascript
/**
 * 源码未提供 JSDoc。
 */
```

## Wb.parseDate

```javascript
Wb.parseDate(now);
```

源码：`wb-debug.js:5974`

**使用说明**

将传入日期规范化为当天 00:00:00 的本地 Date；缺省时以当前日期为准。

**用法示例**

以下示例依据函数体中的实际调用关系整理。

```javascript
var today = Wb.parseDate(new Date());
```

**源码注释**

```javascript
/**
 * 源码未提供 JSDoc。
 */
```

## Wb.addDate

```javascript
Wb.addDate(day, date);
```

源码：`wb-debug.js:5980`

**使用说明**

先调用 Wb.parseDate 归零时分秒，再使用 setDate 增加或减少 day 天数，返回新的日期对象。

**用法示例**

以下示例依据函数体中的实际调用关系整理。

```javascript
var nextWeek = Wb.addDate(7, new Date());
```

**源码注释**

```javascript
/**
 * 源码未提供 JSDoc。
 */
```

Source: https://ag.879818327.xyz/api/navigation-and-extensions/index.mdx
