我是c#的开发人员,但是对QBFC还是陌生的。我已经下载了样本,并且实际上能够使用它向我的文件添加发票,但是我有些困惑。除非QB已启动并正在运行,否则我无法连接。我试图遵循示例中的代码,但这很困难。即使没有打开QB,我也需要此应用程序才能将发票和账单添加到文件中。它们只有一个文件,因此不会出现已经打开另一个文件的实例。而且,环境很简单,因为所有内容都在同一台计算机上运行。
我的基本问题是:
非常感谢任何指针。
QBSessionManager qbSession = new QBSessionManager();
qbSession.OpenConnection("", "Lumber Management System");
try
{
qbSession.BeginSession("C:\\Users\\Jerry\\Documents\\QuickBooks\\Company Files\\MRJ Tecnology, LLC", ENOpenMode.omDontCare);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + '\n' + ex.StackTrace, "Error opening QB");
}
答案 0 :(得分:1)
要使其正常工作,您需要做一些事情。首次请求访问公司文件时,必须打开QuickBooks,并且必须登录Admin。然后将为Admin提供一个对话框,以授予您的应用程序访问QuickBooks的权限。在权限对话框中,它将询问管理员是否希望使用以下四个选项允许应用程序读取和修改公司文件:
管理员必须选择第四个选项,以允许您的应用在不运行的情况下启动QuickBooks。
我还建议您使用OpenConnection2
而不是OpenConnection
,并使用唯一ID作为第一个参数。您还需要指定连接类型,该类型应为ENConnectionType.ctLocalQBD
。
同样,您在BeginSession
调用中传递的文件名似乎不包含.qbw扩展名。这是一个基本示例:
QBSessionManager SessionManager = null;
try
{
SessionManager = new QBSessionManager();
SessionManager.OpenConnection2("UniqueAppID", "Lumber Management System", ENConnectionType.ctLocalQBD);
SessionManager.BeginSession("C:\\Users\\Jerry\\Documents\\QuickBooks\\Company Files\\MRJ Tecnology, LLC.qbw", ENOpenMode.omSingleUser);
// CODE TO SEND TO QB GOES HERE
}
catch(Exception ex)
{
MessageBox.Show("Error opening QB:" + ex.ToString());
}
finally
{
if(SessionManager != null)
{
SessionManager.EndSession();
SessionManager.CloseConnection();
}
}