首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quickbooks与我期望的qbXML版本不兼容

Quickbooks与我期望的qbXML版本不兼容
EN

Stack Overflow用户
提问于 2018-06-22 23:27:13
回答 3查看 835关注 0票数 1

我有一个使用Quickbooks version13构建的自制C++应用程序。该应用程序的目的是允许我通过从网络端口接收XML字符串来与Quickbook对话。我可以使用qbXML 2.1版进行通信。它正在与Quickbooks版本16对话。我很惊讶,当我运行主机查询时……

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="2.1"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<HostQueryRq></HostQueryRq>
</QBXMLMsgsRq>
</QBXML>

...that输出如下:

代码语言:javascript
复制
<?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>

EN

回答 3

Stack Overflow用户

发布于 2018-06-24 02:38:28

为什么Quickbook告诉我它只能使用qbXML 2.1?

因为你只使用了2.1。只要使用不同的版本即可。2.1大约是15岁。

更改此设置:

<?qbxml version="2.1"?>

类似这样的东西:

<?qbxml version="13.0"?>

票数 2
EN

Stack Overflow用户

发布于 2018-06-27 02:38:07

如果你在使用2.1时出现80040428错误,听起来就像你在机器上安装了旧版本的SDK。您可能需要卸载并重新安装13.0 SDK。我还没有使用过HostQueryRq,所以不确定这是否是问题所在。下面是我获取支持版本的方法:

代码语言:javascript
复制
IRequestProcessor5 rp = new RequestProcessor3();
rp.OpenConnection2("AppID", "AppName", QBXMLRPConnectionType.localQBD);
string ticket = rp.BeginSession("", QBFileMode.qbFileOpenDoNotCare);
string[] versions = (string[])rp.QBXMLVersionsForSession[ticket];
票数 0
EN

Stack Overflow用户

发布于 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.02.1版本的QBXMLRP.dll (见下文

代码语言:javascript
复制
/*---------------------------------------------------------------------------
 * 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.1

QuickBooks SDK Programmer's Guide声明:

从SDK3.0开始,提供了一个新的请求处理器QBXMLRP2Lib.RequestProcessor2。只有这个新的请求处理器支持事件订阅和SDK 3.0的其他新功能。在新的请求处理器中保持了与旧请求处理器的向后兼容性。

为了使用较新的QBXMLRP2Lib

  1. in Visual Studio
  2. I had to create a new CLR c++/cli project
  3. Named it QBXmlConsole
  4. Using the browse feature,located,然后added the reference to Interopt.QBXMLRP2
  5. 将类似以下简单示例的内容添加到项目的QBXmlConsole.cpp文件

现在,例如,当我运行QBXmlConsole.exe < "\Program Files (x86)\Intuit\IDN\QBSDK13.0\samples\xmlfiles\HostQueryRq.xml"时,我会得到从1.013.0的支持版本。如果您遇到问题,请查看SDK的hostquery示例。希望能有所帮助。

代码语言:javascript
复制
/** 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,但我没有尝试过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50991209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档