Используя AlexaCRM/dynamics-webapi-toolkit, мне нужно добавить фильтр для даты и времени «modifiedon»

Как следует из названия, я использую пакет AlexaCRM/dynamics-webapi-toolkit в проекте PHP. У меня есть код, в котором я получаю несколько записей (эта часть работает). Однако мне нужно добавить своего рода фильтр, в котором я получаю только те, которые были «модифицированы» за последние X дней. Вот текущий рабочий код

$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);

Формат «модифицированного»: «2024-07-22T10:57:01Z». (Это сработает, если я укажу точную дату $query->AddAttributeValue("modifiedon", $twoDaysAgoDateTimeFormat);

Я попытался добавить параметр, как предлагалось на другом форуме, но каждый раз, когда я делал запрос в этой строке, это не удавалось: $query->AddAttributeValue("modifiedon", 'ge ' . $twoDaysAgoDateTimeFormat); или $query->AddAttributeValue("modifiedon ge", $twoDaysAgoDateTimeFormat);

Любые предложения будут полезны.

🤔 А знаете ли вы, что...
PHP обеспечивает безопасность с помощью механизмов фильтрации ввода.


508
1

Ответ:

Решено

Во-первых, QueryByAttribute поддерживает только оператор " eq ". Вы можете обратиться к строке исходного кода 400.

Вместо этого вам следует использовать 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);

Вот официальное руководство .

Кстати, FetchXml также можно создать с помощью Расширенный поиск (шаг 1–3) и FetchXML Builder. Вы можете выбрать столбцы и отфильтровать, а затем нажать кнопку ""