Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const licenseID = parent.sys_id
- const columnName = 'license_number'
- const resultQuery = buildEncodedQueryByRemAttribute(licenseID, columnName)
- current.addEncodedQuery(resultQuery);
- /**
- * Построить закодированный запрос по атрибуту REM для всех моделей.
- *
- * Эта функция создает строку закодированного запроса на основе предоставленных licenseID и columnName.
- * Она выполняет запрос к таблице 'sys_re_attribute' для записей, соответствующих columnName,
- * а затем категоризирует идентификаторы контейнеров в зависимости от их ассоциации с конкретной таблицей коллекции.
- * Она также выполняет запрос к таблице 'sys_re_model_collection' для поиска связанных идентификаторов моделей,
- * обеспечивая уникальность всех идентификаторов.
- * Полученная строка запроса используется для фильтрации записей по указанным licenseID и columnName.
- *
- * @param {string} licenseID - Идентификатор лицензии, используемый в запросе.
- * @param {string} columnName - Название столбца, используемое в запросе.
- * @returns {string} - Строка закодированного запроса.
- *
- * Привер возврата "(171225583937679456:license_number=171567080102956836^OR171242624908895501:license_number=171567080102956836)"
- * где 171567080102956836 - номер лицензии,
- * 171225583937679456, 171242624908895501 - рем модели в которых встретилось поле 'license_number'
- */
- function buildEncodedQueryByRemAttribute(licenseID, columnName) {
- const COLLECTION_TABLE_ID = '160372368007429526';
- // Запрос к таблице 'sys_re_attribute' для записей с указанным названием столбца
- const tasks = new SimpleRecord('sys_re_attribute');
- tasks.addQuery('column_name', columnName);
- tasks.query();
- const contaiderIDs = [];
- const containerCollections = [];
- // Категоризация идентификаторов контейнеров в зависимости от их ассоциации с таблицей коллекции
- while (tasks.next()) {
- if (tasks.re_container_id.sys_db_table_id === COLLECTION_TABLE_ID) {
- containerCollections.push(tasks.getValue('re_container_id'));
- } else {
- contaiderIDs.push(tasks.getValue('re_container_id'));
- }
- }
- const uniqueIDs = new Set(contaiderIDs);
- // Запрос к таблице 'sys_re_model_collection' для поиска связанных идентификаторов моделей
- const collectionTasks = new SimpleRecord('sys_re_model_collection');
- collectionTasks.addQuery('re_collection_id', 'in', containerCollections);
- collectionTasks.query();
- // Добавление связанных идентификаторов моделей в набор уникальных идентификаторов
- while (collectionTasks.next()) {
- uniqueIDs.add(collectionTasks.getValue('re_model_id'));
- }
- // Создание строки закодированного запроса
- const queryParts = Array.from(uniqueIDs).map(modelID => `${modelID}:${columnName}=${licenseID}`);
- const encodedQuery = `(${queryParts.join('^OR')})`;
- return encodedQuery;
- }
Advertisement
Add Comment
Please, Sign In to add comment