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 < then in Book の場合、このメソッドはエラーを返します。

Quickbooks からイテレータ インポート データの正しいクエリを作成するのを手伝ってください。

4

1 に答える 1

3

正解です。QuickBooks_Object_Customerクラスはイテレータでは機能しません。独自のqbXMLリクエストを作成する必要があります。

そうは言っても、これはすべて、DevKitに含まれている例の1つで行われます。

QuickBooksPHPDevKitの毎晩のリリースを入手してください。

このファイルを見てください:docs / 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 ...
于 2013-01-18T12:30:25.687 に答える