从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,哪个第三方)?
为什么你会选择它而不是其他选项?
还有其他我错过的选择吗?
我使用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。