0

我有一个 QBO3 任务,其中包含一个下拉列表,该列表配置为使用几个可能的参数进行 API 调用。

API调用是:

Process/DatawarehouseQuery?Field1=Foo&Field2=Bar

任务的字段包括:

  • DWDropdown:应呈现 DatawarehouseQuery api 调用结果的下拉列表
  • Field1:用户可以输入数据的输入
  • Field2:用户可以输入数据的输入

我为如下配置了一个onchange事件处理程序:Field1

document.id('DWDropdown').retrieve('qbo.Dropdown').refresh({'Field1', this.value});

同样对于Field2

document.id('DWDropdown').retrieve('qbo.Dropdown').refresh({'Field2', this.value});

当用户触发Field1.onchange事件时,进行的 API 调用为:

Process/DatawarehouseQuery?Field1=Foo

当用户触发Field2.onchange事件时,进行的 API 调用为:

Process/DatawarehouseQuery?Field2=Bar

如何配置任务以同时传递Field1和传递Field2给 API 调用?

4

1 回答 1

0

qbo3.Dropdown行为的refresh方法需要 api 调用所需的所有数据:

为了清楚起见,添加了回车;{{ 和 }} 的加倍是 QBO 的任务 GUI 设计器的工件。

document.id('DWDropdown').retrieve('qbo.Dropdown').refresh({{
  'Field1': document.id('Field1').value,
  'Field2': document.id('Field2').value
}});

随着字段数量的增长,维护这些onchange处理程序可能会变得笨拙。作为替代方案,您可以Javascript在任务面板中创建自定义函数,并从每个 onchange 处理程序中引用该函数:

任务 GUI 设计器 Javascript 选项卡

function refreshDWDropdown()
{
  document.id('DWDropdown').retrieve('qbo.Dropdown').refresh({
    'Field1': document.id('Field1').value,
    'Field2': document.id('Field2').value
  });
}

然后你的onchange处理程序变成:

refreshDWDropdown();

在对下拉列表(或任何其他qbo3 行为)进行故障排除时,请考虑使用Chrome 调试器Fiddler

具体来说,您可以按照以下方式从调试器控制台中使用下拉列表:

var dd = document.id('DWDropdown').retrieve('qbo.Dropdown');
dd.options; // this will show you the options, including url and data, used by the dropdown
dd.refresh({'Field1': 'Foo', 'Field2': 'Bar'}); // this will trigger the refresh directly
dd.refresh({'Field1': document.id('Field1').value}); // mimic your existing onchange code
dd.refresh({'Field1': document.id('Field1').value, 'Field2': document.id('Field2').value}); // mimic the recommend onchange code
refreshDWDropdown(); // call your function directly
于 2021-02-18T18:08:39.090 回答