Quickbooks 不按优先级执行请求
Quickbooks not executing request by priority
我正在使用 QuickBooks SDK 在 QuickBooks 和我的 Volusion 网站之间同步订单。为此,我创建了 6 种不同类型的请求,并按优先级执行。下面你可以看到我的请求。
$Queue->enqueue(QUICKBOOKS_IMPORT_ITEM, QB_PRIORITY_ITEM);
$Queue->enqueue(QUICKBOOKS_IMPORT_SALESORDER, QB_PRIORITY_SALESORDER);
$Queue->enqueue(QUICKBOOKS_ADD_CUSTOMER, QB_PRIORITY_ADD_CUSTOMER);
$Queue->enqueue(QUICKBOOKS_ADD_INVENTORYITEM, QB_PRIORITY_ADD_ITEM);
$Queue->enqueue(QUICKBOOKS_ADD_SALESORDER,QB_PRIORITY_ADD_SALESORDER);
$Queue->enqueue(QUICKBOOKS_IMPORT_CUSTOMER, QB_PRIORITY_CUSTOMER);
这些请求的优先级如下
define('QB_PRIORITY_CUSTOMER', 1);
define('QB_PRIORITY_ITEM', 2);
define('QB_PRIORITY_SALESORDER', 3);
define('QB_PRIORITY_ADD_CUSTOMER', 4);
define('QB_PRIORITY_ADD_ITEM', 5);
define('QB_PRIORITY_ADD_SALESORDER', 6);
所以根据我的知识请求应该遵循这些优先级。假设 QUICKBOOKS_IMPORT_CUSTOMER 请求的优先级为 1,那么无论它是否放在最后,它都应该是第一个被执行的。正如你所看到的,我在所有请求的末尾都有那个请求(第一个代码块),即使它在最后它首先执行,所以它很好。
现在可以看到 QUICKBOOKS_ADD_INVENTORYITEM 优先级为 5 的请求。但问题是当我 运行 Web 连接器时它没有执行(我正在使用它在 QB 之间同步数据和 Volusion)第一次。
当我随后 运行 Web 连接器时,从该方法 (QUICKBOOKS_ADD_INVENTORYITEM) 开始执行,然后执行该方法的其余部分。我不知道为什么会这样。我清除了数据库 3 次并尝试再次同步,但它不起作用。
所以请帮助我。我正在使用 QuickBooks Desktop Enterprise 19 和网络连接器 2.3
您传递给函数的参数不正确。如果您查看函数签名:
可以看到第3个参数优先:
public function enqueue($action, $ident = null, $priority = 0, $extra = null, $user = null, $qbxml = null, $replace = true)
当您尝试将您的优先级作为 第二个参数 传递时:
$Queue->enqueue(QUICKBOOKS_IMPORT_ITEM, QB_PRIORITY_ITEM);
修复您的代码:
$Queue->enqueue(QUICKBOOKS_IMPORT_ITEM, null, QB_PRIORITY_ITEM);
另外,请注意优先级较高运行优先。例如您所做的声明是不正确的。在您的示例中,销售订单将首先运行,因为它具有最高优先级:
Suppose priority for QUICKBOOKS_IMPORT_CUSTOMER request is 1 so it should be the first one to be executed no matter if it's placed at last.
我正在使用 QuickBooks SDK 在 QuickBooks 和我的 Volusion 网站之间同步订单。为此,我创建了 6 种不同类型的请求,并按优先级执行。下面你可以看到我的请求。
$Queue->enqueue(QUICKBOOKS_IMPORT_ITEM, QB_PRIORITY_ITEM);
$Queue->enqueue(QUICKBOOKS_IMPORT_SALESORDER, QB_PRIORITY_SALESORDER);
$Queue->enqueue(QUICKBOOKS_ADD_CUSTOMER, QB_PRIORITY_ADD_CUSTOMER);
$Queue->enqueue(QUICKBOOKS_ADD_INVENTORYITEM, QB_PRIORITY_ADD_ITEM);
$Queue->enqueue(QUICKBOOKS_ADD_SALESORDER,QB_PRIORITY_ADD_SALESORDER);
$Queue->enqueue(QUICKBOOKS_IMPORT_CUSTOMER, QB_PRIORITY_CUSTOMER);
这些请求的优先级如下
define('QB_PRIORITY_CUSTOMER', 1);
define('QB_PRIORITY_ITEM', 2);
define('QB_PRIORITY_SALESORDER', 3);
define('QB_PRIORITY_ADD_CUSTOMER', 4);
define('QB_PRIORITY_ADD_ITEM', 5);
define('QB_PRIORITY_ADD_SALESORDER', 6);
所以根据我的知识请求应该遵循这些优先级。假设 QUICKBOOKS_IMPORT_CUSTOMER 请求的优先级为 1,那么无论它是否放在最后,它都应该是第一个被执行的。正如你所看到的,我在所有请求的末尾都有那个请求(第一个代码块),即使它在最后它首先执行,所以它很好。
现在可以看到 QUICKBOOKS_ADD_INVENTORYITEM 优先级为 5 的请求。但问题是当我 运行 Web 连接器时它没有执行(我正在使用它在 QB 之间同步数据和 Volusion)第一次。
当我随后 运行 Web 连接器时,从该方法 (QUICKBOOKS_ADD_INVENTORYITEM) 开始执行,然后执行该方法的其余部分。我不知道为什么会这样。我清除了数据库 3 次并尝试再次同步,但它不起作用。
所以请帮助我。我正在使用 QuickBooks Desktop Enterprise 19 和网络连接器 2.3
您传递给函数的参数不正确。如果您查看函数签名:
可以看到第3个参数优先:
public function enqueue($action, $ident = null, $priority = 0, $extra = null, $user = null, $qbxml = null, $replace = true)
当您尝试将您的优先级作为 第二个参数 传递时:
$Queue->enqueue(QUICKBOOKS_IMPORT_ITEM, QB_PRIORITY_ITEM);
修复您的代码:
$Queue->enqueue(QUICKBOOKS_IMPORT_ITEM, null, QB_PRIORITY_ITEM);
另外,请注意优先级较高运行优先。例如您所做的声明是不正确的。在您的示例中,销售订单将首先运行,因为它具有最高优先级:
Suppose priority for QUICKBOOKS_IMPORT_CUSTOMER request is 1 so it should be the first one to be executed no matter if it's placed at last.