从c#代码中集成quickbooks的最佳方式是什么?

本文关键字:最佳 方式 是什么 quickbooks 代码 集成 | 更新日期: 2023-09-27 18:05:51

从我的研究来看,基本上有3种选择。

1:使用COM
2:使用web服务和web连接器
3:使用第三方组件(似乎有不少)

这些选项对我来说都有一个问题:
1:我被告知不能使用COM
2:这个解决方案对我来说似乎很做作,因为我需要从windows服务集成
3 .

看来我要走第三党路线了,我脑子里有两个领先者:

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

亲爱的读者,我的问题如下:

1:你会使用哪个解决方案(com, web service,哪个第三方)?
为什么你会选择它而不是其他选项?
还有其他我错过的选择吗?

从c#代码中集成quickbooks的最佳方式是什么?

我使用Quickbooks SDK是因为我正在为一个朋友开发一个导入工具,我们没有购买第三方库的奢侈。

我开始开发它作为一个web服务,但我不得不后退后意识到,我们不仅需要部署Quickbooks SDK的服务器上的可重新分发,但我们也需要Quickbooks本身安装。而且Quickbooks经常会显示一个对话框,这在服务器上是很糟糕的。

只要这个对话框是打开的,Quickbooks SDK将拒绝任何连接到它。

我最终做了一个纯c# Winform应用程序。从这里开始,它相当直接。

程序的核心是一个quickbook会话类,它处理会话和消息

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分钟。

我决定使用上面没有提到的另一个产品"QuickBooks ADO"。. NET数据提供程序",它显然是由制作QuickBooks集成产品的人制作的

我选择它的原因是……

1)具有远程访问组件
你安装了远程服务器,你就可以从网络上的任何地方访问你的QuickBooks数据

2)远程访问组件可以作为服务运行
足够地说

3)为QuickBooks数据提供SQL风格的接口
4)做一些自动魔术缓存来加速数据访问

我在一个项目中使用了nSoftware的QuickBooks集成商。它比使用QuickBooks SDK要简单得多,而且支持也很好。这个产品已经问世8年了。

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

虽然我确定在某些情况下它不会工作,但我的第一个攻击方向将是在Intuit开发人员中心找到的Quickbooks SDK。