【问题标题】:What is the best way to integrate with quickbooks from C# code? [closed]与 C# 代码中的快速手册集成的最佳方式是什么? [关闭]
【发布时间】:2011-08-16 19:18:07
【问题描述】:

从我的研究看来,基本上有 3 个选项。

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

这些选项中的每一个都给我带来了问题:
1:我被告知我不能使用 COM
2:这个解决方案对我来说似乎很老套,因为我需要从 Windows 服务集成
3:其中一些解决方案相当昂贵。

看来我将不得不走第 3 方路线,并且我的脑海中有两个领先者:

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

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

1:您会使用哪种解决方案(com、Web 服务、哪个第 3 方)?
2:您为什么会选择它而不是其他选项?
3:还有其他我错过的选项吗?

【问题讨论】:

  • 对于 Windows 服务,COM 互操作似乎是其中最好的解决方案。
  • 尽管它可能有点乱,但使用 COM 有什么问题?
  • @JP,我们称之为业务需求
  • 我不认为这个要求有缺陷,作为开发人员,我们每天都会决定将哪些技术纳入我们编写的软件中。有时这些决定是基于金钱,有时是基于其他因素(生产力提高、不想处理特定技术等)。
  • 感谢您的意见。我要进一步评估

标签: c# quickbooks


【解决方案1】:

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

我开始将其开发为 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 分钟。

【讨论】:

  • 如果集成在同一个公司文件上,或者该文件已配置为接受与您的应用签名的集成,则不应显示对话框。只要文件配置了always-allow。
  • Quickbooks 显示授权应用程序对话框以外的对话框的原因有很多。
【解决方案2】:

我决定使用上面未提及的另一个产品,称为“QuickBooks ADO.NET 数据提供程序”,它显然是由制作 QuickBooks 集成器产品的同一个人制作的

我选择它的原因...

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

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

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

【讨论】:

  • 如果避免 COM 是一个硬性要求,我不想告诉你,但几乎所有用于自动化 QB 的方法都会打破这个要求。 QB 的 API COM,无论你使用什么抽象,它最终都会在 COM 层之上。也就是说,这不适用于 IIF 文件的导入/导出。
  • 这我意识到,要求是我们没有弄乱COM,只要它被隐藏就一切都好
【解决方案3】:

我在我参与的一个项目中使用了 nSoftware 的 QuickBooks 集成器。它比使用 QuickBooks SDK 容易得多,而且支持很棒。该产品已经存在了大约 8 年。

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

【讨论】:

  • 您是否偶然知道是否可以将远程连接器作为服务运行?您是否需要始终保持同步?如果是这样,您是如何解决连接器组件的?
  • 前阵子用的时候,感觉就像打开了一个数据库连接。您将添加一个客户,然后是产品,然后是客户的发票,然后是发票上的行,然后关闭连接。
【解决方案4】:

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

【讨论】:

  • intuit 开发者中心是我研究的地方:他们提供了 COM 接口和 Web 服务连接器,他们还列出了各种 3rd 方组件。
猜你喜欢
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 2012-10-21
  • 2022-11-23
  • 2010-09-06
  • 1970-01-01
相关资源
最近更新 更多