2013-01-18 52 views
2

对于查询我用QB WebKit的,所以我的查询看起来就像是:导入客户

$customer = new QuickBooks_Object_Customer(); 
$customer->set(...); 
return QBXML_START . $customer->asQBXML('CustomerQueryRq') . QBXML_END; 

但对于迭代方法,这是行不通的。所以我用明文的方法:

return '<?xml version="1.0" encoding="utf-8"?> 
<?qbxml version="5.0"?> 
<QBXML> 
<QBXMLMsgsRq onError="continueOnError"> 
<CustomerQueryRq requestID="' . $requestID . '" iterator="'. $iterator .'"> 
<MaxReturned>5</MaxReturned> 
<OwnerID>0</OwnerID> 
</CustomerQueryRq> 
</QBXMLMsgsRq> 
</QBXML>'; 

该方法返回错误,如果MaxReturned <然后在书。

请帮我写一个正确的查询来从Quickbooks中导入迭代器数据。

回答

3

你是对的 - QuickBooks_Object_Customer类不能用于迭代器。你将不得不建立你自己的qbXML请求。

就这样说,这些都是在DevKit包含的一个例子中完成的。

去抓住QuickBooks PHP DevKit的夜间释放。

看看这个文件:文档/ example_web_connector_import.php

代码应该是这个样子:

/** 
* Build a request to import customers already in QuickBooks into our application 
*/ 
function _quickbooks_customer_import_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale) 
{ 
    // Iterator support (break the result set into small chunks) 
    $attr_iteratorID = ''; 
    $attr_iterator = ' iterator="Start" '; 
    if (empty($extra['iteratorID'])) 
    { 
     // This is the first request in a new batch 
     $last = _quickbooks_get_last_run($user, $action); 
     _quickbooks_set_last_run($user, $action);   // Update the last run time to NOW() 

     // Set the current run to $last 
     _quickbooks_set_current_run($user, $action, $last); 
    } 
    else 
    { 
     // This is a continuation of a batch 
     $attr_iteratorID = ' iteratorID="' . $extra['iteratorID'] . '" '; 
     $attr_iterator = ' iterator="Continue" '; 

     $last = _quickbooks_get_current_run($user, $action); 
    } 

    // Build the request 
    $xml = '<?xml version="1.0" encoding="utf-8"?> 
     <?qbxml version="' . $version . '"?> 
     <QBXML> 
      <QBXMLMsgsRq onError="stopOnError"> 
       <CustomerQueryRq ' . $attr_iterator . ' ' . $attr_iteratorID . ' requestID="' . $requestID . '"> 
        <MaxReturned>25</MaxReturned> 
        <FromModifiedDate>' . $last . '</FromModifiedDate> 
        <OwnerID>0</OwnerID> 
       </CustomerQueryRq> 
      </QBXMLMsgsRq> 
     </QBXML>'; 

    return $xml; 
} 

/** 
* Handle a response from QuickBooks 
*/ 
function _quickbooks_customer_import_response($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $xml, $idents) 
{ 
    if (!empty($idents['iteratorRemainingCount'])) 
    { 
     // Queue up another request 
     $priority = 10; 
     $Queue = QuickBooks_WebConnector_Queue_Singleton::getInstance(); 
     $Queue->enqueue(QUICKBOOKS_IMPORT_CUSTOMER, null, $priority, array('iteratorID' => $idents['iteratorID'])); 
    } 
    ... do stuff with the data you got back here ... 
+0

谢谢你,但它无法正常工作(所需的requestId) – Salavat

+0

但是我用这标记为我的目标(但没有面向类的版本) – Salavat

+0

没有任何关于上述代码的类。我更新了代码来解决您的requestID问题。 –