2017-02-03 2 views
2

QuickbooksのすべてのベンダをWebアプリケーションと同期させたいと思っていますが、私が必要とする5500点ではなく10点の結果しか得られないという問題が発生しています。 QWCへの要求は10個の要求を戻し、残りのベンダーとの同期を継続するのではなく、最後の実行(秒前)以降に更新された要求に対して再度実行されます。私は何か重要なものが欠けていると確信しています。私は一度に10を同期させることができますが、それ以上得ることができなくなるまで一度に10を取得し続けるべきではありませんか?Consolibyte Quickbooks PHP Webコネクタがすべてのベンダを同期できない

私のコードの大部分は、この例のオフに基づいています。https://github.com/consolibyte/quickbooks-php/blob/master/docs/web_connector/example_web_connector_import.php

をここにされているいくつかのコードスニペットは:

Quickbooksの取り扱いコントローラ - インデックスメソッドは、QBの要求を処理します。ベンダー機能は別々に保管され、以下にリストされています。

<?php 


define('QB_QUICKBOOKS_CONFIG_LAST', 'last'); 
define('QB_QUICKBOOKS_CONFIG_CURR', 'curr'); 
define('QB_QUICKBOOKS_MAX_RETURNED', 10); 
define('QB_QUICKBOOKS_MAILTO', '...'); 

class QuickbooksController extends Controller { 

    public function index() { 
     QuickBooks_WebConnector_Queue_Singleton::initialize($this->dsn); 
     $queue = QuickBooks_WebConnector_Queue_Singleton::getInstance(); 
     $queue->enqueue(QUICKBOOKS_IMPORT_VENDOR, 1, QB_PRIORITY_VENDOR); 
     $server = new QuickBooks_WebConnector_Server($this->dsn, $this->map, $this->errmap, $this->hooks, $this->log_level, $this->soapserver, QUICKBOOKS_WSDL, $this->soap_options, $this->handler_options, $this->driver_options, $this->callback_options); 
     $response = $server->handle(true, true); 
    } 


    public function __construct() { 
     $this->loadHelper('accounting.quickbooks.vendors'); 
     date_default_timezone_set('America/New_York'); 
     $this->user = 'internal'; 
     $this->pass = 'BrownBadgerPizza'; 

     $this->map = [ 
      QUICKBOOKS_IMPORT_VENDOR => array('vendorImportRequest', 'vendorImportResponse'), 
     ]; 
     $this->errmap = [ 
      500 => '_quickbooks_handle_500', 
     ]; 
     $this->hooks = array(
      QuickBooks_WebConnector_Handlers::HOOK_LOGINSUCCESS => '_quickbooks_hook_loginsuccess', 
     ); 
     $this->log_level = QUICKBOOKS_LOG_DEBUG; 
     $this->soapserver = QUICKBOOKS_SOAPSERVER_BUILTIN; 
     $this->handler_options = [ 
      'deny_concurrent_logins' => false, 
      'deny_reallyfast_logins' => false, 
     ]; 
     $this->driver_options = []; 
     $this->callback_options = []; 
     $this->dsn = '...', 
     define('QB_QUICKBOOKS_DSN', $this->dsn); 
    } 

    public function support() { 
     header("HTTP/1.1 200 OK"); 
    } 
} 

function _quickbooks_hook_loginsuccess($requestID, $user, $hook, &$err, $hook_data, $callback_config) { 
    $Queue = QuickBooks_WebConnector_Queue_Singleton::getInstance(); 
    $date = '1983-01-02 12:01:01'; 
    if (!_quickbooks_get_last_run($user, QUICKBOOKS_IMPORT_VENDOR)) 
    { 
     _quickbooks_set_last_run($user, QUICKBOOKS_IMPORT_VENDOR, $date); 
    } 
    $Queue->enqueue(QUICKBOOKS_IMPORT_VENDOR, 1, QB_PRIORITY_VENDOR); 
} 

function _quickbooks_get_last_run($user, $action) { 
    $type = null; 
    $opts = null; 
    return QuickBooks_Utilities::configRead(QB_QUICKBOOKS_DSN, $user, md5(__FILE__), QB_QUICKBOOKS_CONFIG_LAST . '-' . $action, $type, $opts); 
} 


function _quickbooks_set_last_run($user, $action, $force = null) { 
    $value = date('Y-m-d') . 'T' . date('H:i:s'); 
    if ($force) { 
     $value = date('Y-m-d', strtotime($force)) . 'T' . date('H:i:s', strtotime($force)); 
    } 
    return QuickBooks_Utilities::configWrite(QB_QUICKBOOKS_DSN, $user, md5(__FILE__), QB_QUICKBOOKS_CONFIG_LAST . '-' . $action, $value); 
} 

function _quickbooks_get_current_run($user, $action) 
{ 
    $type = null; 
    $opts = null; 
    return QuickBooks_Utilities::configRead(QB_QUICKBOOKS_DSN, $user, md5(__FILE__), QB_QUICKBOOKS_CONFIG_CURR . '-' . $action, $type, $opts); 
} 

function _quickbooks_set_current_run($user, $action, $force = null) 
{ 
    $value = date('Y-m-d') . 'T' . date('H:i:s'); 

    if ($force) 
    { 
     $value = date('Y-m-d', strtotime($force)) . 'T' . date('H:i:s', strtotime($force)); 
    } 

    return QuickBooks_Utilities::configWrite(QB_QUICKBOOKS_DSN, $user, md5(__FILE__), QB_QUICKBOOKS_CONFIG_CURR . '-' . $action, $value); 
} 

function _quickbooks_handle_500($requestID, $user, $action, $ID, $extra, &$err, $xml, $errnum, $errmsg) { 
    return true; 
} 

ベンダーリクエスト:

function vendorImportRequest($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale) { 
    $attr_iteratorID = ''; 
    $attr_iterator = ' iterator="Start" '; 
    if (empty($extra['iteratorID'])) { 
     $last = _quickbooks_get_last_run($user, $action); 
     _quickbooks_set_last_run($user, $action); 
     _quickbooks_set_current_run($user, $action, $last); 
    } else { 
     $attr_iteratorID = ' iteratorID="' . $extra['iteratorID'] . '" '; 
     $attr_iterator = ' iterator="Continue" '; 
     $last = _quickbooks_get_current_run($user, $action); 
    } 
    $xml = '<?xml version="1.0" encoding="utf-8"?> 
     <?qbxml version="' . $version . '"?> 
     <QBXML> 
      <QBXMLMsgsRq onError="stopOnError"> 
       <VendorQueryRq ' . $attr_iterator . ' ' . $attr_iteratorID . ' requestID="' . $requestID . '"> 
        <MaxReturned>' . QB_QUICKBOOKS_MAX_RETURNED . '</MaxReturned> 
        <FromModifiedDate>' . $last . '</FromModifiedDate> 
        <OwnerID>0</OwnerID> 
       </VendorQueryRq> 
      </QBXMLMsgsRq> 
     </QBXML>'; 
    return $xml; 
} 

ベンダーの応答:

function vendorImportResponse($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $xml, $idents) { 
    if (!empty($idents['iteratorRemainingCount'])) { 
     $Queue = QuickBooks_WebConnector_Queue_Singleton::getInstance(); 
     $Queue->enqueue(QUICKBOOKS_IMPORT_VENDOR, null, QB_PRIORITY_VENDOR, array('iteratorID' => $idents['iteratorID'])); 
    } 
... do things with XML 

どのような援助のためにありがとうございました。

EDIT:

qb_action ident extra qbxml priority qb_status enqueue_datetime  dequeue_datetime  msg 
VendorImport    1  4  e   2017-02-03 13:15:34 2017-02-03 13:15:341: A query request did not find a matching object in QuickBooks 
VendorImport    1  4  q   2017-02-03 13:15:38 NULL 

quickbooks_logテーブル

Handler is starting up...: Array 
(
    [qb_company_file] => 
    [qbwc_min_version] => 
    [qbwc_wait_before_next_update] => 
    [qbwc_min_run_every_n_seconds] => 
    [qbwc_version_warning_message] => 
    [qbwc_version_error_message] => 
    [qbwc_interactive_url] => 
    [autoadd_missing_requestid] => 1 
    [check_valid_requestid] => 1 
    [server_version] => PHP QuickBooks SOAP Server v3.0 at /route.php/quickbooks 
    [authenticate] => 
    [authenticate_dsn] => 
    [map_application_identifiers] => 1 
    [allow_remote_addr] => Array 
     (
     ) 

    [deny_remote_addr] => Array 
     (
     ) 

    [convert_unix_newlines] => 1 
    [deny_concurrent_logins] => 
    [deny_concurrent_timeout] => 60 
    [deny_reallyfast_logins] => 
    [deny_reallyfast_timeout] => 600 
    [masking] => 1 
) 
sendRequestXML() 
Dequeued: (VendorImport, 1) 
Outgoing XML request: <?xml version="1.0" encoding="utf-8"?> 
<?qbxml version="13.0"?> 
<QBXML> 
<QBXMLMsgsRq onError="stopOnError"> 
<VendorQueryRq iterator="Start" requestID="318"> 
<MaxReturned>10</MaxReturned> 
<FromModifiedDate></FromModifiedDate> 
<OwnerID>0</OwnerID> 
</VendorQueryRq> 
</QBXMLMsgsRq> 
</QBXML> 
Handler is starting up...: Array 
(
    [qb_company_file] => 
    [qbwc_min_version] => 
    [qbwc_wait_before_next_update] => 
    [qbwc_min_run_every_n_seconds] => 
    [qbwc_version_warning_message] => 
    [qbwc_version_error_message] => 
    [qbwc_interactive_url] => 
    [autoadd_missing_requestid] => 1 
    [check_valid_requestid] => 1 
    [server_version] => PHP QuickBooks SOAP Server v3.0 at /route.php/quickbooks 
    [authenticate] => 
    [authenticate_dsn] => 
    [map_application_identifiers] => 1 
    [allow_remote_addr] => Array 
     (
     ) 

    [deny_remote_addr] => Array 
     (
     ) 

    [convert_unix_newlines] => 1 
    [deny_concurrent_logins] => 
    [deny_concurrent_timeout] => 60 
    [deny_reallyfast_logins] => 
    [deny_reallyfast_timeout] => 600 
    [masking] => 1 
) 
receiveResponseXML() 
Incoming XML response: 
10 vendors of data ... 
25% complete... 
Handler is starting up...: Array 
(
    [qb_company_file] => 
    [qbwc_min_version] => 
    [qbwc_wait_before_next_update] => 
    [qbwc_min_run_every_n_seconds] => 
    [qbwc_version_warning_message] => 
    [qbwc_version_error_message] => 
    [qbwc_interactive_url] => 
    [autoadd_missing_requestid] => 1 
    [check_valid_requestid] => 1 
    [server_version] => PHP QuickBooks SOAP Server v3.0 at /route.php/quickbooks 
    [authenticate] => 
    [authenticate_dsn] => 
    [map_application_identifiers] => 1 
    [allow_remote_addr] => Array 
     (
     ) 

    [deny_remote_addr] => Array 
     (
     ) 

    [convert_unix_newlines] => 1 
    [deny_concurrent_logins] => 
    [deny_concurrent_timeout] => 60 
    [deny_reallyfast_logins] => 
    [deny_reallyfast_timeout] => 600 
    [masking] => 1 
) 
sendRequestXML() 
Dequeued: (VendorImport, 1) 
Outgoing XML request: <?xml version="1.0" encoding="utf-8"?> 
<?qbxml version="13.0"?> 
<QBXML> 
<QBXMLMsgsRq onError="stopOnError"> 
<VendorQueryRq iterator="Start" requestID="1"> 
<MaxReturned>10</MaxReturned> 
<FromModifiedDate>2017-02-03T13:15:32</FromModifiedDate> 
<OwnerID>0</OwnerID> 
</VendorQueryRq> 
</QBXMLMsgsRq> 
</QBXML> 
Handler is starting up...: Array 
(
    [qb_company_file] => 
    [qbwc_min_version] => 
    [qbwc_wait_before_next_update] => 
    [qbwc_min_run_every_n_seconds] => 
    [qbwc_version_warning_message] => 
    [qbwc_version_error_message] => 
    [qbwc_interactive_url] => 
    [autoadd_missing_requestid] => 1 
    [check_valid_requestid] => 1 
    [server_version] => PHP QuickBooks SOAP Server v3.0 at /route.php/quickbooks 
    [authenticate] => 
    [authenticate_dsn] => 
    [map_application_identifiers] => 1 
    [allow_remote_addr] => Array 
     (
     ) 

    [deny_remote_addr] => Array 
     (
     ) 

    [convert_unix_newlines] => 1 
    [deny_concurrent_logins] => 
    [deny_concurrent_timeout] => 60 
    [deny_reallyfast_logins] => 
    [deny_reallyfast_timeout] => 600 
    [masking] => 1 
) 
receiveResponseXML() 
Incoming XML response: <?xml version="1.0" ?> 
<QBXML> 
<QBXMLMsgsRs> 
<VendorQueryRs requestID="1" statusCode="1" statusSeverity="Info" statusMessage="A query request did not find a matching object in QuickBooks" iteratorRemainingCount="0" iteratorID="{a7b4ed15-9612-4fe8-aa3c-31ee60b7b491}" /> 
</QBXMLMsgsRs> 
</QBXML> 
Attempting to handle error: 1, A query request did not find a matching object in QuickBooks 
Handled error: 1: A query request did not find a matching object in QuickBooks (handler returned:) 
Transaction error at -1% complete... 
Handler is starting up...: Array 
(
    [qb_company_file] => 
    [qbwc_min_version] => 
    [qbwc_wait_before_next_update] => 
    [qbwc_min_run_every_n_seconds] => 
    [qbwc_version_warning_message] => 
    [qbwc_version_error_message] => 
    [qbwc_interactive_url] => 
    [autoadd_missing_requestid] => 1 
    [check_valid_requestid] => 1 
    [server_version] => PHP QuickBooks SOAP Server v3.0 at /route.php/quickbooks 
    [authenticate] => 
    [authenticate_dsn] => 
    [map_application_identifiers] => 1 
    [allow_remote_addr] => Array 
     (
     ) 

    [deny_remote_addr] => Array 
     (
     ) 

    [convert_unix_newlines] => 1 
    [deny_concurrent_logins] => 
    [deny_concurrent_timeout] => 60 
    [deny_reallyfast_logins] => 
    [deny_reallyfast_timeout] => 600 
    [masking] => 1 
) 
getLastError() 
Handler is starting up...: Array 
(
    [qb_company_file] => 
    [qbwc_min_version] => 
    [qbwc_wait_before_next_update] => 
    [qbwc_min_run_every_n_seconds] => 
    [qbwc_version_warning_message] => 
    [qbwc_version_error_message] => 
    [qbwc_interactive_url] => 
    [autoadd_missing_requestid] => 1 
    [check_valid_requestid] => 1 
    [server_version] => PHP QuickBooks SOAP Server v3.0 at /route.php/quickbooks 
    [authenticate] => 
    [authenticate_dsn] => 
    [map_application_identifiers] => 1 
    [allow_remote_addr] => Array 
     (
     ) 

    [deny_remote_addr] => Array 
     (
     ) 

    [convert_unix_newlines] => 1 
    [deny_concurrent_logins] => 
    [deny_concurrent_timeout] => 60 
    [deny_reallyfast_logins] => 
    [deny_reallyfast_timeout] => 600 
    [masking] => 1 
) 
closeConnection() 

EDIT#2 した後、すべてのベンダーを同期する最初の試みの後

quickbooks_queueテーブル結果ログやキューを調べると、何らかの理由で追加の結果があるXML応答を受け取ったときにiteratorIDを渡しても、ライブラリはそのIDを$extraというパラメータで渡していないということですキューされた要求。

データベースのキューテーブルには、extraの列にa:1:{s:10:"iteratorID";s:38:"{3a096324-6e5e-4fcb-a6ac-9a2600372029}";}という値が入ります。しかし、追加のparamは要求関数上では空白です。

+0

public function index() { QuickBooks_WebConnector_Queue_Singleton::initialize($this->dsn); $queue = QuickBooks_WebConnector_Queue_Singleton::getInstance(); $queue->enqueue(QUICKBOOKS_IMPORT_VENDOR, 1, QB_PRIORITY_VENDOR); $server = new QuickBooks_WebConnector_Server($this->dsn, $this->map, $this->errmap, $this->hooks, $this->log_level, $this->soapserver, QUICKBOOKS_WSDL, $this->soap_options, $this->handler_options, $this->driver_options, $this->callback_options); $response = $server->handle(true, true); } 

から:ここで

はそれを働かせたアップデートです。 quickbooks_queueテーブルを見て、処理が期待通りの順序で行われているかどうかを確認してください。 –

+0

quickbooks_queueとquickbooks_logの結果を追加しました。キューに何か問題があるように見えますが、私は何を見ているのか正確には分かりません。 –

+0

レスポンスは、アイテム数とイテレータIDを持ちます。より多くのデータを取得するためにイテレータIDを送信していますか? –

答えて

0

ソリューション

。これは、ログイン成功のエンキューに加えて行われます。私はこれを削除した後、うまくいった。

ログを投稿

public function index() { 
    QuickBooks_WebConnector_Queue_Singleton::initialize($this->dsn); 
    $queue = QuickBooks_WebConnector_Queue_Singleton::getInstance(); 
    $server = new QuickBooks_WebConnector_Server($this->dsn, $this->map, $this->errmap, $this->hooks, $this->log_level, $this->soapserver, QUICKBOOKS_WSDL, $this->soap_options, $this->handler_options, $this->driver_options, $this->callback_options); 
    $response = $server->handle(true, true); 
} 
1

QB_QUICKBOOKS_MAX_RETURNED値とは何ですか?

最初のパスを作成したら、返されたIterator値を取得して処理していますか?

+0

QB_QUICKBOOKS_MAX_RETURNEDの値は10に設定されています。私はイテレーターIDで処理していると思います。ベンダーレスポンスハンドラのエンキューは次のとおりです: '$ Queue-> enqueue(QUICKBOOKS_IMPORT_VENDOR、null、QB_PRIORITY_VENDOR、array( 'iteratorID' => $ idents ['iteratorID']))' –

1

これはおそらく、あなたの問題である:

<FromModifiedDate></FromModifiedDate> 

何の日は、そこにありません。

あなたはそれを超えてあなたを助けるために十分なコードを実際に投稿していませんでした。私は私のQBWCハンドラ関数では、私はベンダーのインポート要求をキューイングしていることが分かっ

関連する問題