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;
}
Google を徹底的に検索しましたが、これが発生する理由が見つからないようです。必要に応じて、さらにコード サンプルを投稿できます。