javascript - addPreSearch 过滤器不适用
问题描述
我正在尝试使用该addPreSearch
函数将自定义过滤器添加到查找字段,但在显示查找结果之前该函数似乎没有完全执行。代码如下所示:
function onFieldChange(executionContext) {
var formContext = executionContext.getFormContext();
formContext.getControl("test_code").removePreSearch(testFunctionFilter);
formContext.getControl("test_code").addPreSearch(testFunctionFilter);
}
function testFunctionFilter(executionContext) {
var formContext = executionContext.getFormContext();
var record1 = formContext.getAttribute("test_record1_link").getValue(); //get linked record
var record1FullId, record1Id, stringRecordId, idLength, record1Guid = "0";
if (record1 != null) {
record1Id = record1[0].id;
record1Id = record1FullId.slice(1, -1);
stringRecordId = record1FullId.toString();
idLength = stringRecordId.length;
//Guid when retrieved from tablet does not have parenthesis on each end
if (idLength == 36) {
record1Guid = record1FullId;
} else {
record1Guid = recordId;
}
}
var fieldValue;
Xrm.WebApi.retrieveRecord("test_record1", record1Guid, "?$select=test_field1")
.then(function(result1) {
fieldValue = result1.test_field;
var options = generateOptions(executionContext, fieldValue); //creates option string using retrieved fieldValue
Xrm.WebApi.retrieveMultipleRecords("test_record2", options)
.then(function(result) {
var codes = getCodes(result2, fieldValue);
filter = generateFilter(codes, record1Guid); //creates custom filter using provided parameters
console.log(filter); //displays filter correctly
formContext.getControl("test_codelookup").addCustomFilter(filter, "test_coderecord"); //not working?
});
});
}
过滤器是使用上面未显示定义的函数正确生成的。那不是问题。我尝试创建一个单独的测试函数,在其中对上述函数生成的一个过滤器进行硬编码,并且查找显示了正确的结果。在testFunctionFilter
显示查找结果之前应该运行完成,对吗?因为在查找结果出现后过滤器被记录到控制台。嵌套的异步Xrm.WebApi
调用是否以某种方式导致了问题?我不太确定出了什么问题。请指教。
解决方案
你说的对。Xrm.WebApi
调用始终是Asynchronous,在使用addCustomFilter
.
您必须通过如下设置第三个参数来使用XMLHttpRequest
并将该调用设为同步false
:
var req = new XMLHttpRequest();
req.open("GET", Xrm.Utility.getGlobalContext().getClientUrl() +
"/api/data/v9.0/test_record1?$select=test_field1", false);
推荐阅读
- python - Python Selenium 中的 Chrome 选项:禁用 GPU 与 Headless
- ruby-on-rails - 为 rswag 运行 rspec 时,键和值在参数中连接在一起,因为键和值变为 nil?
- python - 在计算引擎 ssh 问题中的 python 中追加文件
- c# - 使用 C# 应用程序生成随机 ID 时的 SQL TOP 1 查询
- c# - C# - 从 USB 设备发送和接收数据
- swiftui - SwiftUI ObservableObject 用作 EnvironmentObject 奇怪的行为
- python - 有没有办法在 Tkinter(python)中为 matplotlib 设置可变间隔?
- java - 如何制作一个像回收站一样的安卓应用程序?
- git - Github 中的“blob”对应什么?
- ios - 如何使用 Swift 将字符串日期时间格式转换为另一种格式