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

console.log(`assignedId: ${assignedId}, stateInput: ${stateInput}`);

assignedId = assignedId.substring(5); // убираем "user_"

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

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

function doIteration() {
  const filter = {'>ID': state.lastSeenId};
  filter['=ASSIGNED_BY_ID'] = assignedId;

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

  if (lastChunk.length > 0) {
    result.push(...lastChunk.map((entity) => parseInt(entity.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,
  "contactIds": result
};