Как получить типы полей в таблице по ссылке из поля Reference?
const current = new SimpleRecord('itsm_incident');
current.get('170539993117855116');
current.caller // -- и вот здесь получить список всех полей и их типы.
// Где caller это Reference на другую таблицу
Есть таблица колонки (sys_db_column). В ней как раз все поля таблиц описаны. Но надо учитывать, что таблица может быть основана на другой таблице и надо также просматривать поля родительской таблицы.
Код ниже как раз и выдаст список полей и их типы референсной таблицы.
const current = new SimpleRecord('itsm_incident');
current.get('170539993117855116');
const tableId = getTableIdByName(current.getTableName()); //получаем id текущей таблицы
const refTableId = getTableIdByReference(tableId,'caller'); //получаем id референсной таблицы поля caller
if (refTableId) {
const result = getComuns(refTableId);
// вывод результата
result.forEach(function(item){
print(item.column_name+' - '+getColumnTypeNameById(item.column_type_id)+'\n');
})
}
function getComuns(tableId) {
let result = new Array();
const column = new SimpleRecord('sys_db_column');
const tableIds = getParentTableIds(tableId);
column.addQuery('table_id', 'in', tableIds);
column.selectAttributes(['sys_id', 'column_name', 'column_type_id']);
column.query();
while (column.next()) {
result.push({sys_id:column.sys_id,column_name:column.column_name,column_type_id:column.column_type_id});
}
return result;
}
//получаем id референсной таблиц
function getTableIdByReference(tableId, columnName) {
const column = new SimpleRecord('sys_db_column');
const tableIds = getParentTableIds(tableId);
column.addQuery('table_id', 'in', tableIds);
column.addQuery('column_name', columnName);
column.addQuery('column_type_id', '8'); //убеждаемся, что колонка имеет тип Referece
column.selectAttributes(['sys_id', 'reference_id']);
column.query();
if (column.getRowCount()) {
column.next();
return column.getValue('reference_id');
}
}
// получаем список id таблицы и ее родителей
function getParentTableIds(tableId) {
const tableName = getTableNameById(tableId);
const parentTables = new SimpleTable(tableName).getParentTables().map(({ sys_id }) => sys_id);
parentTables.push(tableId);
return parentTables;
}
function getTableIdByName(name) {
const table = new SimpleRecord('sys_db_table');
table.get('name', name);
return table.sys_id;
}
function getTableNameById(id) {
const table = new SimpleRecord('sys_db_table');
table.get('sys_id', id);
return table.name;
}
function getColumnTypeNameById(id) {
const table = new SimpleRecord('sys_db_column_type');
table.get('sys_id', id);
return table.name;
}