Действие "Поиск сделок"
Возвращает id сделок, удовлетворяющих всем ненулевым критериям поиска.
Если найденных сделок более 1000, то понадобится вызвать это активити несколько раз.
Входные параметры
  • assignedId: критерий поиска, числовой id ответственного за сделку
  • companyId: критерий поиска, числовой id компании, к которой относится сделка
  • contactId: критерий поиска, числовой id контакта в сделке
  • stateInput: при первом запуске передавать пустую строку; при повторном запуске передавать значение выходного параметра stateOutput из предыдущего запуска; это требуется для сохранения id последнего полученного элемента
Выходные параметры
  • stateOutput: нужен для повторного запуска (см. описание stateInput)
  • isFinished: Y - все элементы выгружены, N - есть не выгруженные элементы (то есть много элементов и нужен повторный запуск активити)
  • result: массив ID выгруженных сделок
Исходный код

console.log("assignedId: '" + assignedId + "', companyId: '" + companyId 
+ "', contactId: '" + contactId + "', stateInput: '" + stateInput + "'");

let state;
let result = [];
let lastChunk = null;

if (stateInput === "") {
  state = { // initial state
     lastSeenId: 0
  };
} else {
  state = JSON.parse(stateInput);
}

function doIteration() {
  const filter = {'>ID': state.lastSeenId};
  if (!!assignedId) {
    filter['=ASSIGNED_BY_ID'] = assignedId;
  }
  if (!!companyId) {
    filter['=COMPANY_ID'] = companyId;
  }
  if (!!contactId) {
    filter['=CONTACT_ID'] = contactId;
  }

  lastChunk = bx24.callMethod('crm.deal.list', {
    start: -1,
    order: {'ID': 'ASC'},
    select: [ "ID" ],
  	filter: filter
  });

  if (lastChunk.length > 0) {
    result.push(...lastChunk.map((deal) => parseInt(deal.ID)));
    state.lastSeenId = lastChunk[lastChunk.length - 1].ID;
  }

  return lastChunk.length < 50;
}

let isFinished;
while (!(isFinished = doIteration())) {
  if (stopWatch.getRemainingMillis() <= 0) {
    console.log("Достигли ограничения времени запуска");
    break;
  }
  console.log("Получили часть элементов: " + lastChunk.length + ", продолжаем");
}

if (isFinished) {
  console.log("Выгрузка данных полностью завершена, получено элементов в этой итерации: " 
     + result.length);
} else {
  console.log("Выгрузка данных завершена частично, получено элементов в этой итерации: " 
   + result.length);
}

return {
  "stateOutput": JSON.stringify(state),
  "isFinished": isFinished,
  "result": result
};