从C#代码集成quickbooks的最佳方法是什么?

从我的研究看起来基本上有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服务,第三方)?
2:为什么你会选择其他选项呢?
3:我还有其他选择吗?

我使用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 { ///  /// Initializes a new instance of the  class. ///  internal QuickbookSession() { this.SessionManager = new QBSessionManager(); this.SessionManager.OpenConnection2( ConfigurationManager.AppSettings["QuickbooksApplicationId"], ConfigurationManager.AppSettings["QuickbooksApplicationName"], Utils.GetEnumValue(ConfigurationManager.AppSettings["QuickbooksConnectionType"])); var file = Quickbook.QuickbookDatabaseFilePath; if (string.IsNullOrEmpty(file)) { file = ConfigurationManager.AppSettings["QuickbooksDatabaseLocalPath"]; } this.SessionManager.BeginSession(file, Utils.GetEnumValue(ConfigurationManager.AppSettings["QuickbooksSessionOpenMode"])); } ///  /// Gets the Quickbook session manager that is owning this message. ///  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 Data Provider”的产品,它显然是由生产QuickBooks集成商产品的人制作的

我选择它的原因……

1)它有一个远程访问组件
您安装远程服务器,并且可以从网络上的任何位置访问QuickBooks数据

2)远程访问组件可以作为服务运行
努夫说

3)为QuickBooks数据提供SQL样式接口
4)是否有一些自动魔术缓存来加速数据访问

我使用了nSoftware的QuickBooks集成商来处理我所在的项目。 它比使用QuickBooks SDK更容易,并且支持很棒。 该产品已存在约8年。

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

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

如果您正在寻找源代码或预先打包用于.NET的东西,则QuickBooks会存在Kentico,Ektron和nopCommerce连接器。 请查看我的商店 。