Savelyev_Vyacheslav

buildEncodedQueryByRemAttribute

Jun 7th, 2024 (edited)
519
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const licenseID = parent.sys_id
  2. const columnName = 'license_number'
  3.  
  4. const resultQuery = buildEncodedQueryByRemAttribute(licenseID, columnName)
  5.  
  6. current.addEncodedQuery(resultQuery);
  7.  
  8. /**
  9.  * Построить закодированный запрос по атрибуту REM для всех моделей.
  10.  *
  11.  * Эта функция создает строку закодированного запроса на основе предоставленных licenseID и columnName.
  12.  * Она выполняет запрос к таблице 'sys_re_attribute' для записей, соответствующих columnName,
  13.  * а затем категоризирует идентификаторы контейнеров в зависимости от их ассоциации с конкретной таблицей коллекции.
  14.  * Она также выполняет запрос к таблице 'sys_re_model_collection' для поиска связанных идентификаторов моделей,
  15.  * обеспечивая уникальность всех идентификаторов.
  16.  * Полученная строка запроса используется для фильтрации записей по указанным licenseID и columnName.
  17.  *
  18.  * @param {string} licenseID - Идентификатор лицензии, используемый в запросе.
  19.  * @param {string} columnName - Название столбца, используемое в запросе.
  20.  * @returns {string} - Строка закодированного запроса.
  21.  *
  22.  * Привер возврата "(171225583937679456:license_number=171567080102956836^OR171242624908895501:license_number=171567080102956836)"
  23.  * где 171567080102956836 - номер лицензии,
  24.  * 171225583937679456, 171242624908895501 - рем модели в которых встретилось поле 'license_number'
  25.  */
  26. function buildEncodedQueryByRemAttribute(licenseID, columnName) {
  27.     const COLLECTION_TABLE_ID = '160372368007429526';
  28.  
  29.     // Запрос к таблице 'sys_re_attribute' для записей с указанным названием столбца
  30.     const tasks = new SimpleRecord('sys_re_attribute');
  31.     tasks.addQuery('column_name', columnName);
  32.     tasks.query();
  33.  
  34.     const contaiderIDs = [];
  35.     const containerCollections = [];
  36.  
  37.     // Категоризация идентификаторов контейнеров в зависимости от их ассоциации с таблицей коллекции
  38.     while (tasks.next()) {
  39.         if (tasks.re_container_id.sys_db_table_id === COLLECTION_TABLE_ID) {
  40.             containerCollections.push(tasks.getValue('re_container_id'));
  41.         } else {
  42.             contaiderIDs.push(tasks.getValue('re_container_id'));
  43.         }
  44.     }
  45.  
  46.     const uniqueIDs = new Set(contaiderIDs);
  47.  
  48.     // Запрос к таблице 'sys_re_model_collection' для поиска связанных идентификаторов моделей
  49.     const collectionTasks = new SimpleRecord('sys_re_model_collection');
  50.     collectionTasks.addQuery('re_collection_id', 'in', containerCollections);
  51.     collectionTasks.query();
  52.  
  53.     // Добавление связанных идентификаторов моделей в набор уникальных идентификаторов
  54.     while (collectionTasks.next()) {
  55.         uniqueIDs.add(collectionTasks.getValue('re_model_id'));
  56.     }
  57.  
  58.     // Создание строки закодированного запроса
  59.     const queryParts = Array.from(uniqueIDs).map(modelID => `${modelID}:${columnName}=${licenseID}`);
  60.     const encodedQuery = `(${queryParts.join('^OR')})`;
  61.     return encodedQuery;
  62. }
  63.  
Advertisement
Add Comment
Please, Sign In to add comment