我在一个使用 QAS Pro 近 2 年的呼叫中心工作。我们使用访问数据库中的资源 DLL 与内部托管的 QAS 服务器进行通信。它的唯一用途是根据邮政编码收集地址详细信息。因此,第一个函数从该邮政编码中获取地址列表,将它们插入到访问中的组合框中。在操作员可以选择适当的地址并将其插入正确的字段之后。
这是由不再与我们在一起的开发人员编写的。修复代码是我的工作。通过一些测试,我已经能够验证它是我们使用的 c# 代码而不是地址。由于测试工具工作正常。
资源 DLL 使用来自 QAS 的 c# 测试代码以及用于一些功能的额外文件。我是 c# 新手,以前从未做过这样的事情。任何帮助表示赞赏。
这是一位老同事写的代码。
namespace MangoQAS
{
using com.qas.proweb;
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[ComVisible(true)]
public class QAS
{
public QAS()
{
QuickAddress address = new QuickAddress("http://10.10.15.7:2021") {
Engine = QuickAddress.EngineTypes.Singleline,
Flatten = true
};
this.searchService = address;
}
private string GetMoniker(string p)
{
return this.searchService.Search("GBR", p, PromptSet.Types.Default, "Database layout").Picklist.Items[0].Moniker;
}
public string[] RefinePostcode(string p)
{
string moniker = this.GetMoniker(p);
FormattedAddress formattedAddress = this.searchService.GetFormattedAddress(moniker, "Database Layout");
return new string[] { formattedAddress.AddressLines[0].Line, formattedAddress.AddressLines[1].Line, formattedAddress.AddressLines[2].Line, formattedAddress.AddressLines[3].Line, formattedAddress.AddressLines[4].Line, formattedAddress.AddressLines[5].Line, formattedAddress.AddressLines[6].Line };
}
public string[] SearchPostcodes(string postCode)
{
SearchResult result = this.searchService.Search("GBR", postCode, PromptSet.Types.OneLine, "Database layout");
string[] strArray = new string[result.Picklist.Length];
for (int i = 0; i < result.Picklist.Length; i++)
{
strArray[i] = result.Picklist.Items[i].Text;
}
return strArray;
}
private QuickAddress searchService { get; set; }
}
}
SearchPostcodes - 根据邮政编码返回地址列表。RefinePostcode - 获取地址行并发送回格式化的地址。
问题似乎出在 RefinePostcode 上。我尝试格式化地址字符串,因为我的第一个想法是它不喜欢正斜杠。这没有用。
例如,使用邮政编码:PA169AE。
这给了我:位于组合框顶部的 0/1 15 Brachelston Street, GREENOCK, Renfrewshire。
如果我点击这个地址,它会发回:1 Crossgates, Greenock Road, PA7 5JU。
更改所有内容,包括我输入的邮政编码。
我相信问题出在 RefinePostcode 或 GetMoniker 上。下面的 2 个块来自示例代码,未更改,但可能需要进行诊断。
public FormattedAddress GetFormattedAddress(string sMoniker, string sLayout)
{
Debug.Assert((sMoniker != null) && (sLayout != null));
QAGetAddress qAGetAddress = new QAGetAddress {
Layout = sLayout,
Moniker = sMoniker,
QAConfig = this.m_Config,
Language = this.m_LanguageString
};
FormattedAddress address2 = null;
try
{
address2 = new FormattedAddress(this.SearchService.DoGetAddress(qAGetAddress).QAAddress);
}
catch (Exception exception)
{
this.MapException(exception);
}
return address2;
}
public SearchResult Search(string sDataID, string sSearch, PromptSet.Types tPromptSet, string sLayout)
{
Debug.Assert(sDataID != null);
Debug.Assert(sSearch != null);
QASearch qASearch = new QASearch {
Country = sDataID,
Engine = this.m_Engine
};
qASearch.Engine.PromptSet = (PromptSetType) tPromptSet;
qASearch.Engine.PromptSetSpecified = true;
qASearch.Layout = sLayout;
qASearch.QAConfig = this.m_Config;
qASearch.Search = sSearch;
qASearch.Language = this.m_LanguageString;
SearchResult result = null;
try
{
result = new SearchResult(this.SearchService.DoSearch(qASearch));
}
catch (Exception exception)
{
this.MapException(exception);
}
return result;
}
我已经彻底搜索了谷歌,似乎找不到任何会发生这种情况的原因。如果需要,我可以发布更多代码示例。