我有一个使用Quickbooks version13构建的自制C++应用程序。该应用程序的目的是允许我通过从网络端口接收XML字符串来与Quickbook对话。我可以使用qbXML 2.1版进行通信。它正在与Quickbooks版本16对话。我很惊讶,当我运行主机查询时……
<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="2.1"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<HostQueryRq></HostQueryRq>
</QBXMLMsgsRq>
</QBXML>...that输出如下:
<?xml version="1.0" ?>
<QBXML>
<QBXMLMsgsRs>
<HostQueryRs statusCode="0" statusSeverity="Info" statusMessage="Status OK">
<HostRet>
<ProductName>Intuit QuickBooks Enterprise Solutions: Manufacturing and Wholesale 16.0</ProductName>
<MajorVersion>26</MajorVersion>
<MinorVersion>0</MinorVersion>
<SupportedQBXMLVersion>1.0</SupportedQBXMLVersion>
<SupportedQBXMLVersion>1.1</SupportedQBXMLVersion>
<SupportedQBXMLVersion>2.0</SupportedQBXMLVersion>
<SupportedQBXMLVersion>2.1</SupportedQBXMLVersion>
</HostRet>
</HostQueryRs>
</QBXMLMsgsRs>
</QBXML>显然,SDK的13版应该能够使用qbXML的13版,而Quickbook Enterprise16应该与高于2.1的qbXML兼容。我需要使用qbXML的一个特性,这个特性只有在qbXML 2.1之后才能使用。来自Intuit的These release notes表示,Quickbooks 14.0与qbXML版本13.0、12.0、11.0、10.0、9.0、8.0、7.0、6.0、5.0、4.1、4.0、3.0、2.1、2.0、1.1和1.0兼容。当然,像16这样的较新版本也将与这些版本兼容。
为什么Quickbook告诉我它只能使用qbXML 2.1?要使用更新的版本,我可以做些什么?
编辑:抱歉,之前我忘了提到,将<?qbxml version="2.1"?>更改为<?qbxml version="13.0"?>或任何大于2.1的值都会返回80040428错误,这意味着“当前请求处理器不支持该请求”。而且,如果我使用<?qbxml version="2.0"?>,我仍然会得到<SupportedQBXMLVersion>2.1</SupportedQBXMLVersion>。
发布于 2018-06-24 02:38:28
为什么Quickbook告诉我它只能使用qbXML 2.1?
因为你只使用了2.1。只要使用不同的版本即可。2.1大约是15岁。
更改此设置:
<?qbxml version="2.1"?>
类似这样的东西:
<?qbxml version="13.0"?>
发布于 2018-06-27 02:38:07
如果你在使用2.1时出现80040428错误,听起来就像你在机器上安装了旧版本的SDK。您可能需要卸载并重新安装13.0 SDK。我还没有使用过HostQueryRq,所以不确定这是否是问题所在。下面是我获取支持版本的方法:
IRequestProcessor5 rp = new RequestProcessor3();
rp.OpenConnection2("AppID", "AppName", QBXMLRPConnectionType.localQBD);
string ticket = rp.BeginSession("", QBFileMode.qbFileOpenDoNotCare);
string[] versions = (string[])rp.QBXMLVersionsForSession[ticket];发布于 2020-03-23 05:18:37
为什么Quickbook告诉我它只能使用qbXML 2.1?
我也有同样的问题。我使用的代码是我从位于C:\Program Files (x86)\Intuit\IDN\QBSDK13.0\samples\qbdt\cpp\qbxml\sdktest的软件开发工具包中提取的代码,并且通过2.1获得了与受支持的qbXML版本1.0相同的结果。
sdktest代码导入仅支持1.0到2.1版本的QBXMLRP.dll (见下文
/*---------------------------------------------------------------------------
* FILE: SDKTest.cpp
*
* Description:
* QBXMLRP API tester. Run "sdktest -h" to learn how to use it.
*
* Created On: 09/09/2001
*
* Copyright (c) 2001-2013 Intuit Inc. All rights reserved.
* Use is subject to the terms specified at:
* http://developer.intuit.com/legal/devsite_tos.html
*
*/
#include <ctype.h>
#include <ctime>
#include <fstream>
#include <atlbase.h>
#include <iostream>
#include <string>
using namespace std;
#import "QBXMLRP.dll" // this supports only up to v 2.1QuickBooks SDK Programmer's Guide声明:
从SDK3.0开始,提供了一个新的请求处理器QBXMLRP2Lib.RequestProcessor2。只有这个新的请求处理器支持事件订阅和SDK 3.0的其他新功能。在新的请求处理器中保持了与旧请求处理器的向后兼容性。
为了使用较新的QBXMLRP2Lib
QBXmlConsole Interopt.QBXMLRP2 QBXmlConsole.cpp文件现在,例如,当我运行QBXmlConsole.exe < "\Program Files (x86)\Intuit\IDN\QBSDK13.0\samples\xmlfiles\HostQueryRq.xml"时,我会得到从1.0到13.0的支持版本。如果您遇到问题,请查看SDK的hostquery示例。希望能有所帮助。
/** QBXmlConsole.cpp **/
#include "pch.h"
using namespace System;
using namespace Interop::QBXMLRP2; // supports all version of qbXML
int main(array<System::String ^> ^args)
{
String^ ticket;
String^ request;
String^ response;
String^ line;
int err = 0;
while ((line = Console::ReadLine()) != nullptr) {
if (line->StartsWith("<!--")) {
continue;
}
request = request + line + "\n";
}
Console::WriteLine("Processing XML:");
Console::WriteLine(request);
Console::WriteLine("--");
Interop::QBXMLRP2::IRequestProcessor6^ rqPtr = gcnew Interop::QBXMLRP2::RequestProcessor3;
try {
rqPtr->OpenConnection2("123", "QBXmlConsole", Interop::QBXMLRP2::QBXMLRPConnectionType::localQBD);
ticket = rqPtr->BeginSession("", Interop::QBXMLRP2::QBFileMode::qbFileOpenDoNotCare);
response = rqPtr->ProcessRequest(ticket, request);
rqPtr->EndSession(ticket);
rqPtr->CloseConnection();
}
catch (Runtime::InteropServices::COMException^) {
response = "Handled exception: " + rqPtr->GetQBLastError();
err = 1;
}
Console::Write(response);
Console::WriteLine("Query complete");
return err;
}编辑:我认为完全有可能不导入QBXMLRP.dll,您可以尝试只导入Interopt.QBXMLRP2Lib.dll,但我没有尝试过。
https://stackoverflow.com/questions/50991209
复制相似问题