Вопрос

Получить все колонки объекта

Всем доброго времени суток. Версия 7.12.

Можно ли как-нибудь по id раздела (записи SysModule) получить список всех входящих в него колонок с типами и названиями? Возможно, есть какой-то объект, где они хранятся?

Нашёл что-то такое: SysPackageSchemaDataColumn но не похоже, что это оно.

Нравится

5 комментариев

я так понимаю хранятся в 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|%'

 

Александр, интересный пример. А есть ли аналог для JS?


 
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, а служебные таблицы на том же сервере БД.

Показать все комментарии