веб-коннектор для рабочего стола quickbooks qbxml добавить задание continueOnError не работает

Я использую QuickBooks Enterprise, веб-коннектор версии 2.1.0.30 и платформу, найденную здесь: https://github.com/consolibyte/quickbooks-php.
При добавлении заданий в некоторых случаях существует такое же имя задания, поэтому quickbooks выдает ошибку. Я хочу, чтобы процесс продолжался после ошибки, поэтому я установил для атрибута onError значение «continueOnError», как описано здесь: https://developer-static.intuit.com/qbSDK-current/Common/newOSR/qbsdk/staticHtml/QBD-Attributes.html, но процесс останавливается и следующий запрос (добавление счета) не выполняется. Мне нужно перезапустить для обработки следующего запроса. Вот часть моего xml:

<?xml version="1.0" encoding="utf-8"?>
    <?qbxml version="2.0"?>
    <QBXML>
          <QBXMLMsgsRq onError="continueOnError">
               <CustomerAddRq requestID="...">
                   <CustomerAdd> ...

Что я здесь делаю неправильно? Это правильный путь или мне нужно сделать что-то еще?
Заранее спасибо.


person realife    schedule 07.04.2015    source источник


Ответы (1)


Флаги stopOnError и continueOnError указывают, что делать (остановить или продолжить) с оставшейся частью текущего запроса, если в текущем запросе возникает ошибка.

Например, если вы сделали это:

<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="2.0"?>
<QBXML>
      <QBXMLMsgsRq onError="continueOnError">
           <CustomerAddRq requestID="1">
           ...
           </CustomerAddRq>
           <InvoiceAddRq requestID="2">
           ...
           </InvoiceAddRq>
       ....

Вы сообщаете QuickBooks, что если в разделе CustomerAddRq возникает ошибка, игнорируйте ее и продолжайте обработку раздела InvoiceAddRq (по сравнению с тем, если бы вы использовали stopOnError, он даже не пытался бы выполнить InvoiceAddRq после обнаружения ошибки в разделе CustomerAddRq.

Однако, если вы используете веб-коннектор правильно (а вы это делаете), вы отправляете несколько отдельных запросов, а не один пакетный запрос, как в приведенном выше примере. Это означает, что stopOnError и continueOnError не то, что вам нужно.

Вместо этого вам нужно обработать ошибку в вашем PHP-коде с помощью обработчика ошибок.

Добавьте функцию:

/** 
 * Try to handle an error 
 * 
 * @param string $requestID
 * @param string $user         This is the username of the connected Web Connector user
 * @param string $action       The action type that experienced an error (i.e. QUICKBOOKS_ADD_CUSTOMER, or QUICKBOOKS_QUERY_CUSTOMER, or etc.)
 * @param string $ID           The $ID value of the record that experienced an error (usually your primary key for this record)
 * @param array $extra 
 * @param string $err          If an error occurs **within the error handler**, put an error message here (i.e. if your error handler experienced an internal error), otherwise, leave this NULL
 * @param string $xml
 * @param string $errnum       The error number or error code which occurred
 * @param string $errmsg       The error message received from QuickBooks 
 * @return boolean             Return TRUE if the error was handled and you want to continue processing records, or FALSE otherwise
 */
function my_error_handler($requestID, $user, $action, $ID, $extra, &$err, $xml, $errnum, $errmsg)
{
    // ...
    // return true;     // return TRUE if you want the Web Connector to continue to process requests
    // return false;    // return FALSE if you want the Web Connector to stop processing requests and report the error
}

И обязательно сообщите PHP-библиотеке QuickBooks о своей новой функции обработчика ошибок:

$errmap = array(
    // This is an array mapping the error number/code to the error handler function
    3070 => 'my_error_handler', 

    // You can also use static method error handlers if you don't like functions...
    // 3070 => 'MyStaticClass::myStaticMethod', 

    // ... or object instant error handlers.
    // 3070 => array( $MyObjectInstance, 'myMethod' ), 

    // You can also register a "catch-all" error handler to catch all errors:
    // '*' => 'my_catchall_error_handler', 
    );

Больше информации:

person Keith Palmer Jr.    schedule 07.04.2015