私は友人のためのインポートツールを開発していたので、私はQuickbooksのSDKを使用して、我々は、サードパーティのライブラリを購入するの贅沢を持っていませんでした。
私はWebサービスとして開発を開始しましたが、Quickbooks SDKの再配布可能ファイルをサーバーに展開する必要があるだけでなく、Quickbooks自体をインストールする必要もありました。クイックブックでは、ダイアログボックスが表示され、サーバー上では問題が発生します。
このダイアログが開いていれば、Quickbooks SDKはそのダイアログボックスへの接続を拒否します。
私は純粋なC#Winformアプリケーションとしてやってしまいました。そこから、それはむしろストレートフォワードです。プログラムの中心に
は、セッションおよびメッセージその後
public static class Quickbooks
{
public static QuickbookSession CreateSession()
{
return new QuickbookSession();
}
}
public class QuickbookSession : IDisposable
{
/// <summary>
/// Initializes a new instance of the <see cref="QuickbookSession"/> class.
/// </summary>
internal QuickbookSession()
{
this.SessionManager = new QBSessionManager();
this.SessionManager.OpenConnection2(
ConfigurationManager.AppSettings["QuickbooksApplicationId"],
ConfigurationManager.AppSettings["QuickbooksApplicationName"],
Utils.GetEnumValue<ENConnectionType>(ConfigurationManager.AppSettings["QuickbooksConnectionType"]));
var file = Quickbook.QuickbookDatabaseFilePath;
if (string.IsNullOrEmpty(file))
{
file = ConfigurationManager.AppSettings["QuickbooksDatabaseLocalPath"];
}
this.SessionManager.BeginSession(file, Utils.GetEnumValue<ENOpenMode>(ConfigurationManager.AppSettings["QuickbooksSessionOpenMode"]));
}
/// <summary>
/// Gets the Quickbook session manager that is owning this message.
/// </summary>
public QBSessionManager SessionManager { get; private set; }
public QuickbookMessage CreateMessage()
{
return new QuickbookMessage(this.SessionManager);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// get rid of managed resources
}
this.SessionManager.EndSession();
this.SessionManager.CloseConnection();
System.Runtime.InteropServices.Marshal.ReleaseComObject(this.SessionManager);
}
}
を扱っquickbookセッションクラスだった、それは、セッションを作成し、メッセージを作成し、別のクエリを追加の問題簡単でした。
using(var session = Quickbooks.CreateSession())
{
// Check if the job already exist
using (var message = session.CreateMessage())
{
var jobQuery = message.AppendCustomerQueryRq();
jobQuery.ORCustomerListQuery.CustomerListFilter.ORNameFilter.NameFilter.Name.SetValue("something");
jobQuery.ORCustomerListQuery.CustomerListFilter.ORNameFilter.NameFilter.MatchCriterion.SetValue(ENMatchCriterion.mcContains);
var result = message.Send();
// do stuff here with the result
}
}
このコードは、Quickbooksの多くの落とし穴からの弾圧ではありません。 Quickbooks SDKもやや遅いです。たとえば、サプライヤのリストを取得するには、約1000のサプライヤに対して約2分かかります。
Windowsサービスの場合、COM相互運用機能は、それらの中から最善の解決策のようです。 –
それは少し面倒かもしれないという事実にもかかわらず、COMを使用すると何が問題になりますか? –
@JP、私たちはそれをビジネス要件と呼ぶ – iamkrillin