Всем доброго времени суток. Версия 7.12.
Можно ли как-нибудь по id раздела (записи SysModule) получить список всех входящих в него колонок с типами и названиями? Возможно, есть какой-то объект, где они хранятся?
Нашёл что-то такое: SysPackageSchemaDataColumn но не похоже, что это оно.
Нравится
я так понимаю хранятся в SysSchema, колонка MetaData.
скрипт глянуть из базы:
select cast(MetaData as varchar(max)) from SysSchema where caption='Account' order by createdOn desc
На JS колонки вытягиваюся через this.entitySchema.columns (ну или require объекта).
На С# можно перебрать колонки
var manager = UserConnection.EntitySchemaManager.GetInstanceByName("Account"); foreach (var column in manager.Columns) { if (column.IsValueCloneable) { } var fixedColumnName = column.IsLookupType ? column.Name+"Id" : column.Name; var uid = column.UId; var columnName = column.Name; var columnCaption = column.Caption; }
Ну и как всегда, без сюрпризов не обошлось. Лукап колонки идут без Id-окончания.
Не факт, что так подтянутся унаследованные из родительских объектов колонки. Можно вытянуть из системных таблиц базы, как тут:
SELECT t.name AS [Table Name], c.name AS [Column Name], value AS [Extended Property] FROM sys.extended_properties AS ep INNER JOIN sys.tables AS t ON ep.major_id = t.object_id INNER JOIN sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id WHERE class = 1 and t.name = 'ContactAddress' AND CAST(value AS VARCHAR) LIKE 'ru-RU|%'
addAllColumns: function(esq) { Terrasoft.each(this.columns, function(column, columnName) { if (column.type === Terrasoft.ViewModelColumnType.ENTITY_COLUMN) { if (!esq.columns.contains(columnName)) { esq.addColumn(columnName); } } }, esq); },
Нет, через JS такое невозможно. Это даже не таблицы базы bpm'online, а служебные таблицы на том же сервере БД.