9

私の調査によると、基本的に3つの選択肢があるようです。

1:COM
の使用2:WebサービスとWebコネクタの使用
3:サードパーティのコンポーネントの使用(かなりの数があるようです)

これらの各オプションは私にとって問題を提示します:
1:COMを使用できないと言われました
2:Windowsサービスから統合する必要があるため、このソリューションは私には非常に厄介なようです
3:これらのソリューションのいくつかはかなり高価です。

サードパーティのルートに行かなければならないようですが、頭の中には2人のフロントランナーがいます。

1:QODBC(http://www.qodbc.com/usa.html)
2:AccessBooks(http://www.synergration.com/AccessBooksUpdater/default.aspx)

親愛なる読者の皆さん、私の質問は次のとおりです。

1:どのソリューション(com、Webサービス、どのサードパーティ)を使用しますか?
2:なぜ他のオプションよりもそれを選ぶのですか?
3:私が逃した他のオプションはありますか?

4

4 に答える 4

8

友人のためにインポート ツールを開発していたので、Quickbooks SDK を使用しましたが、サード パーティのライブラリを購入する余裕はありませんでした。

Web サービスとして開発を開始しましたが、Quickbooks SDK の再配布可能ファイルをサーバーにデプロイする必要があるだけでなく、Quickbooks 自体もインストールする必要があることに気付き、フォールバックする必要がありました。また、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);
    }
}

その後、セッションを作成し、メッセージを作成して、別のクエリを追加するだけの簡単なことでした。

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 分かかります。

于 2011-08-16T20:11:24.520 に答える
4

「QuickBooks ADO.NET Data Provider」と呼ばれる上記以外の製品を使用することにしました。これは明らかに、QuickBooks インテグレーター製品を作成しているのと同じ人々によって作成されています

選んだ理由は…

1) リモート アクセス コンポーネントを備えてい
ます。リモート サーバーをインストールすると、ネットワーク上のどこからでも QuickBooks データにアクセスできます。

2) リモート アクセス コンポーネントはサービスとして実行できます

3) QuickBooks データへの SQL スタイルのインターフェイスを提供します
4) データ アクセスを高速化するために自動マジック キャッシングを実行します

于 2011-08-23T21:01:02.380 に答える
2

私が参加していたプロジェクトでは、nSoftware の QuickBooks インテグレーターを使用しました。QuickBooks SDK を使用するよりもはるかに簡単で、サポートも充実しています。その製品は約8年間使用されています。

http://www.nsoftware.com/ibiz/quickbooks/

于 2011-08-16T19:30:06.600 に答える
1

うまくいかない場合もあると思いますが、私の最初の攻撃方向は、Intuit開発者センターにあるQuickbooksSDKです。

于 2011-08-16T19:22:47.433 に答える