正如标题所述,我正在 php 项目中使用 AlexaCRM/dynamics-webapi-toolkit 包。我有一些代码可以检索多个记录(这部分有效)。但是,我需要添加一种过滤器,以便只获取过去 X 天内有“modifiedon”的记录。这是当前有效的代码

$pagingInfo = new \AlexaCRM\Xrm\Query\PagingInfo();
$pagingInfo->Count = 10;

$client = ClientFactory::createOnlineClient(
    'https://some-microsoft-crm.com',
    'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
);

$query = new QueryByAttribute('contact');
$query->ColumnSet = new \AlexaCRM\Xrm\ColumnSet(columnSet(true));
$query->PageInfo = $pagingInfo;

$result = $client->RetrieveMultiple($query);

“modifiedon” 的格式为“2024-07-22T10:57:01Z”。(如果我输入确切的日期,则此方法有效$query->AddAttributeValue("modifiedon", $twoDaysAgoDateTimeFormat);

我曾尝试按照其他论坛的建议添加一个参数,但每次我在此行执行请求时都会失败:
$query->AddAttributeValue("modifiedon", 'ge ' . $twoDaysAgoDateTimeFormat);

$query->AddAttributeValue("modifiedon ge", $twoDaysAgoDateTimeFormat);

任何建议都会有帮助。


最佳答案
1

首先,QueryByAttribute 仅支持操作符" eq "

您应该使用FetchExpression。以下代码检索过去 3 天内修改的联系人:

$fetchXML = <<<FETCHXML
<fetch mapping="logical"> 
    <entity name="contact">
        <all-attributes />
        <filter>
            <condition attribute="modifiedon" operator="last-x-days" value="3" />
        </filter>
    </entity>
</fetch>
FETCHXML;

$fetchExpression = new FetchExpression($fetchXML);
$collection = $client->RetrieveMultiple($fetchExpression);

这是

顺便说一句,也可以用生成。

2

  • 正如您所建议的,这就是我最终所做的。效果很好。尽管我不知道“all-attributes”标签,所以我会尝试一下。您发布的链接很有用。感谢您的帮助 🙂


    – 

  • “all-attributes”标签用于检索所有属性(与 SQL 中的 SELECT * FROM contact 相同);最好只选择必要的属性以获得更好的性能。


    –