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.
1 ответ
{
"query" :
{
"filtered_query": {
"query": { match_all_query: {} },
"filter": {
"range_filter": {
"field": "creation_date",
"from": "2016-01-01T00:00:00.000Z"
}
}
}
},
"select" : "(**)"
}