You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xero API中按Tracking Option筛选发票与账单?

在Xero API中通过Tracking Option筛选发票和账单的问题

我正尝试在Xero API中通过Tracking Option筛选发票和账单,以显示关联项目的成本,该项目信息设置在账单或发票的Tracking Category/Option中。返回的对象结构如下:

["tracking"]=>
  array(1) {
    [0]=>
    object(XeroAPI\XeroPHP\Models\Accounting\LineItemTracking)#18755 (1) {
      ["container":protected]=>
      array(4) {
        ["tracking_category_id"]=>
        string(36) "8a29ae32-c0f1-43b4-a4aa-09293ad182be"
        ["tracking_option_id"]=>
        NULL
        ["name"]=>
        string(7) "Project"
        ["option"]=>
        string(4) "2455"
      }
    }
  }

我曾尝试在Where语句中使用LineItems、LineItemTracking等进行筛选,例如:

$where = "Type==\"ACCPAY\"&&tracking_category_option==\"' . $projectNo . '\"";

但均未成功。请问有人知道如何实现Tracking Category或Option的筛选,或是有可行的替代方案吗?


解决方案

1. 正确的API筛选语法

Xero API的WHERE子句需要通过LineItems.Tracking.Any()来嵌套匹配跟踪记录,以下是两种可行的写法:

  • 通过Tracking分类名称和选项值筛选:
$where = "Type == 'ACCPAY' && LineItems.Tracking.Any(Name == 'Project' && Option == '" . $projectNo . "')";
  • 通过Tracking分类ID和选项值筛选(更精准,避免名称冲突):
$categoryId = "8a29ae32-c0f1-43b4-a4aa-09293ad182be";
$where = "Type == 'ACCPAY' && LineItems.Tracking.Any(TrackingCategoryID == '" . $categoryId . "' && Option == '" . $projectNo . "')";

核心是用Any()方法遍历行项目下的所有跟踪条目,匹配对应的分类和选项条件。

2. 筛选注意事项

  • 匹配规则大小写敏感,要确保Name和Option的值与Xero后台配置完全一致;
  • 若TrackingOptionID有值,优先用该字段替代Option进行筛选,避免不同分类下出现同名选项的误匹配;
  • 确认请求端点正确:账单和发票都通过/api.xro/2.0/Invoices接口获取,Type参数区分ACCPAY(账单)和ACCREC(发票)。

3. 本地过滤替代方案

如果API端筛选仍存在问题,可先批量拉取目标类型的记录,再在本地代码中过滤:

// 获取所有ACCPAY类型的账单
$invoices = $xero->load('Accounting\\Invoice')->where("Type == 'ACCPAY'")->execute();

// 本地筛选匹配指定项目的记录
$filteredResults = [];
foreach ($invoices as $invoice) {
    foreach ($invoice->getLineItems() as $lineItem) {
        foreach ($lineItem->getTracking() as $tracking) {
            if ($tracking->getName() === 'Project' && $tracking->getOption() === $projectNo) {
                $filteredResults[] = $invoice;
                break 2; // 找到匹配项后跳出多层循环,提升效率
            }
        }
    }
}

这种方式适合数据量较小的场景,无需依赖API端的筛选能力,稳定性更强。


内容的提问来源于stack exchange,提问作者TomC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:47:33