Salesforce Commerce Cloud/Demandware — заказы запросов OCAPI по диапазону дат

Я пытаюсь запросить API Demandware (SFCC) для извлечения заказов с использованием диапазона дат. POST для orders_search работает, но кажется ужасно неэффективным. Сначала я извлекаю ВСЕ данные, а затем фильтрую результаты.

Я хотел бы просто запросить диапазоны дат, но я не могу понять, как это сделать. Помощь.

{ 
    query : {
        filtered_query: {
            query: {
                term_query: { fields: ["creation_date"], operator: "is_not_null" } 
            },
       filter: {
                range_filter: {
                    field: "creation_date",
                    from: "2017-08-12T00:00:00.000Z",
                    to: "2017-08-13T00:00:00.000Z",
                    from_inclusive: true
                }
            }
        }
    }
}

РЕДАКТИРОВАТЬ: Хотя я решил первоначальный вопрос, это оказалось более сложным, потому что служба позволяет одновременно только 200 ответов. Итак, сначала вам нужно сделать запрос, чтобы узнать, сколько результатов есть, а затем несколько раз вызвать службу, чтобы получить данные. Ниже приведен код, используемый с C#. Диапазоны дат передаются как переменные.

                var m_payload_count = "{ query : { filtered_query: { query: { term_query: { fields: [\"creation_date\"], operator: \"is_not_null\" } }, filter: { range_filter: { field: \"creation_date\", from: \"" + strBeginDateTime + "\", to: \"" + strEndDateTime + "\", from_inclusive: true } } } } }";

                // can only get 200 responses at a a time so make a basic call first to get the total

                m_response_count = apiClient.UploadString(m_url, m_payload_count);

                dynamic m_jsoncount = JsonConvert.DeserializeObject(m_response_count);

                // determine number of times of full api call, rounding up.  substitute begin/end dates and beginning count placeholder 

                int m_records = m_jsoncount["total"];
                int m_numbercalls = (m_records + (200 - 1)) / 200;

                dynamic m_json;

                for (int i = 0; i < m_numbercalls; i++)
                {
                    var m_payload = "{ query : { filtered_query: { query: { term_query: { fields: [\"creation_date\"], operator: \"is_not_null\" } }, filter: { range_filter: { field: \"creation_date\", from: \"" + strBeginDateTime + "\", to: \"" + strEndDateTime + "\", from_inclusive: true } } } }, select: \"(**)\", start: " + i * 200 + ", count: 200 }";

                    m_response = apiClient.UploadString(m_url, m_payload);

                    m_json = JsonConvert.DeserializeObject(m_response);

Остальная часть кода опущена, но, по сути, это перебор объекта m_json.


person smoore4    schedule 18.08.2017    source источник
comment
Могу я спросить, почему вы не просите сопровождающих кода SFCC создать для вас пакетный экспорт этих заказов?   -  person sholsinger    schedule 02.07.2018
comment
Потому что это часть автоматизированного процесса, а пакетный экспорт звучит ужасно ручным.   -  person smoore4    schedule 03.07.2018
comment
Он может быть создан как повторяющееся задание и, следовательно, вообще не будет выполняться вручную.   -  person sholsinger    schedule 15.10.2019


Ответы (1)


person    schedule
comment
пожалуйста, также кратко объясните свой ответ, чтобы указать, почему вы предлагаете это как решение - person sissy; 23.10.2017