首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QBFC“无效票证参数”

QBFC“无效票证参数”
EN

Stack Overflow用户
提问于 2014-12-18 18:11:50
回答 1查看 309关注 0票数 0

从QBFC得到一个奇怪的错误。此代码失败:

代码语言:javascript
复制
        var qbRequest = sessionManager.CreateMsgSetRequest("US", 7, 0);
        qbRequest.Attributes.OnError = ENRqOnError.roeStop;
        var qbQuery = qbRequest.AppendCustomerQueryRq();                
        // Don't get all fields (would take forever) - just get these...
        qbQuery.IncludeRetElementList.Add("ListID");
        qbQuery.IncludeRetElementList.Add("Phone");
        qbQuery.IncludeRetElementList.Add("AltPhone");
        qbQuery.IncludeRetElementList.Add("Fax");
        var qbResponses = sessionManager.DoRequests(qbRequest);// <<- EXCEPTION:  INVALID TICKET PARAMETER !!!

不过-如果我只是在里面拖延一下就行了。例如:

代码语言:javascript
复制
        System.Threading.Thread.Sleep(1000);
        var qbResponses = sessionManager.DoRequests(qbRequest);// <<- WORKS FINE!!

我发现这是因为每当我在代码中设置一个断点来调试问题时,问题就会消失。所以我学会了,我可以在里面睡1秒,模拟同样的行为。(顺便说一句,半秒的延迟也无济于事--仍然抛出异常)

这让我抓挠了头。我在应用程序开始时初始化sessionManager,并在我的代码中重用它。它在这个应用程序中的其他地方都能工作,但在这里。我查看了原始XML (包括请求和响应),没有发现其中有什么问题。响应只是一个错误:“数据文件已不再打开。无法继续。”但没什么能说明原因。(数据文件是打开的,在这个异常之后,我可以将它用于任何其他事情)

我怀疑这与调用此代码的时间有关。我有一个侦听器侦听来自XDMessaging外接程序(用于进程间通信)的消息。当侦听器收到消息时,事件将调用此代码。但是,这段代码在同一个应用程序(和同一个线程)中被调用,就像我拥有的大量其他QBFC代码一样,它们做的事情非常相似,没有问题。如果这是一个线程问题,我认为无论我是否睡眠(),这个错误都会发生。

有人有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-12-26 16:35:13

您使用的是什么版本的QBSDK以及QuickBooks的什么版本?我使用QBSDK13进行了测试(尽管我在创建消息请求时指定了版本7),使用14.0版本的企业R5P进行了测试。我没有遇到任何问题或例外,没有任何拖延。也许您的SessionManager出现了一些问题,因为您似乎已经打开了连接,并在其他地方开始了会话?

以下是我的代码,没有问题:

代码语言:javascript
复制
QBSessionManager SessionMananger = new QBSessionManager();
SessionMananger.OpenConnection2("Sample", "Sample", ENConnectionType.ctLocalQBD);
SessionMananger.BeginSession("", ENOpenMode.omDontCare);
IMsgSetRequest MsgRequest = SessionMananger.CreateMsgSetRequest("US", 7, 0);
MsgRequest.Attributes.OnError = ENRqOnError.roeStop;
var qbQuery = MsgRequest.AppendCustomerQueryRq();
qbQuery.IncludeRetElementList.Add("ListID");
qbQuery.IncludeRetElementList.Add("Phone");
qbQuery.IncludeRetElementList.Add("AltPhone");
qbQuery.IncludeRetElementList.Add("Fax");
IMsgSetResponse MsgResponse = SessionMananger.DoRequests(MsgRequest);

for (int index = 0; index < MsgResponse.ResponseList.Count; index++)
{
    IResponse response = MsgResponse.ResponseList.GetAt(index);
    if (response.StatusCode != 0)
    {
        MessageBox.Show(response.StatusMessage);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27553039

复制
相关文章

相似问题

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