Здравствуйте. Есть задача, для разных ролей выводить разный набор колонок, для раздела. Нашёл метод "initializeProfile" в схеме "BaseSchemaViewModel", в котором проставляется значение переменной "Profile". Я добавляю свою колонку, но в итоге она не выводится в реестр, хотя например если зайти в настройку колонок реестра, то там видна моя добавленная колонка, тогда не понятно почему она не видна в реестре раздела. Как вообще правильно сделать эту таску?

initializeProfile: function(callback, scope) {
				this.requireProfile(function(profile) {
					var profileColumnName = this.getProfileColumnName();
					if (profile && profile.DataGrid && profile.DataGrid.tiledConfig) {
						var prifileDataGrid = JSON.parse(profile.DataGrid.tiledConfig);
						prifileDataGrid.items.pop();
						prifileDataGrid.items.push({
							"bindTo": "PlaceOfBirth",
							"caption": "Место рождения",
							"position": {
							  "column": 17,
							  "colSpan": 7,
							  "row": 2
							},
							"dataValueType": 1,
							"metaPath": "PlaceOfBirth",
							"path": "PlaceOfBirth",
							"captionConfig": {
							  "visible": true
							}
						});
						profile.DataGrid.tiledConfig = JSON.stringify(prifileDataGrid);
					}
					this.set(profileColumnName, profile);
					Ext.callback(callback, scope);
				}, this);
			}

 

Нравится

3 комментария

Александр, добрый день!

 

Реализовать вашу задачу можно добавив в таблицу SysProfileData записи с определёнными ключами и правильным содержанием ObjectData и переопределив метод получения Profile получать нужное содержание по сформированному ключу по вашему условию.

Но также нужно учесть много нюансов, например, когда запись в таблице SysProfileData с сформированным ключом будет пустой и т.п.

А вы не слишком заморочились? Не проще ли научить пользователей менять состав колонок? 

Что будет, если кто-то из пользователей в роли, для которой вы проставляете набор колонок автоматом, захочет добавить/убрать какую-то? 

Александр, если уж вспомнили о ролях, можно просто настроить права на колонки. Если у пользователя или роли прав не будет, колонка исчезнет не только в карточке, но и в реестре. А в настройках реестра настроить полный набор.

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

Добрый день.
Необходимо сделать блок ProfileContainer для вывода информации из пользовательского справочника.
Делал по инструкции из поста
В качестве MasterColumn для фильтрации данных ProfileContainer используется поле CityId карточки Лида. Внешним ключом в справочнике выступает поле UsrCityId.
При инициализации ProfileContainer`а происходит ошибка при получении entityStructure моего справочника в методе initTypeColumnName (моего справочника нет вообще в перечне сущностей Terrasoft.configuration.EntityStructure).
Вопросы:
1. Как добавить пользовательский справочник в Terrasoft.configuration.EntityStructure?
2. Как более правильно реализовать описанную выше задачу, при условии, что фильтрация в ProfileContainer будет производиться не по полю Id, а по справочному полю UsrCityId c префиксом Usr?

Нравится

3 комментария

Здравствуйте, Игорь.

1) Проверьте, корректно ли был создан справочник. Так же проверьте описан ли данный справочник в define модуля.

2) Вам следует воспользоваться свойством profileColumnName. viewModelConfig должен выглядеть примерно следующим образом:

"viewModelConfig": {
masterColumnName: "City",
"profileColumnName": "UsrCity"
}

Здравствуйте, Илья! Спасибо за ответ.
1. Справочник наследуется от базового объекта. Название схемы справочника добавлено в define (как в вашем примере).
2. В модуле карточки Лида уже использую profileColumnName

  modules: /**SCHEMA_MODULES*/ {
            "InterventionCostProfile": {
                "config": {
                    "schemaName": "CostProfileSchema",
                    "isSchemaConfigInitialized": true,
                    "useHistoryState": false,
                    "parameters": {
                        "viewModelConfig": {
                            "masterColumnName": "City",
                            "profileColumnName": "UsrCity"
                        }
                    }
                }
            }
        },
        /**SCHEMA_MODULES*/

Но, к сожалению, в методе initTypeColumnName в переменную entityStructure приходит Undefine вместо структуры схемы.
Может что-то упустил.

Здравствуйте, Игорь.

1) Попробуйте выполнить компиляцию конфигурации, а также пере генерировать исходные коды.
2) Так же рекомендую Вам смотреть в сторону создания своего модуля по аналогии с BaseProfileSchema, поскольку данная схема не предназначена для фильтрации по пользовательским колонкам.

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

Добрый день, коллеги!

Подскажите , кто знает, вот есть кнопка в верхнем правом углу , на любой странице, кнопка профиля, при нажатие на неё открывается меню , как в это меню добавить свою запись\кнопку ?

Нравится

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

Замещаете MainHeaderSchema и переопределяете loadProfileButtonMenu и вставляете необходимые код, который будет вызывать пользовательский метод

Спасибо большое, это именно тот модуль. Но что-то пошло не так ...

http://pixs.ru/showimage/Bezimyanni_3822167_22664458.png

Пропал в целом хедер страницы, и кнопки профиля. Я создал замещающую страницу, скопировал код который был, вставил, и изменил этот метод, просто добавил кнопку ещё одну, и метод для неё, который открывал бы страницу редактирования. И вот так получилось.

Такое впечатление что при наследовании этой страницы, потерялись картинки ... Такое было замечено в 7.8 с кепшинами, там это решить просто, пробел написать у каждой локалайзыбыл стринг, и все они появятся ... А как быть с картинками ?

"Заставный Роман" написал: Я создал замещающую страницу, скопировал код который был...

Т.е. вы вставили код из родительской схемы?

Да. Но пропали картинки, а не дублируются функции

Вам нужно просто добавить новый код в замещающую схему, например вот так

define("MainHeaderSchema", [], function() {
	return {
		methods: {
			// обработчик нажатия на новый пункт меню
			myClickMethod: function() {
				window.console.log("работает");
			},
			//перегрузка родительского метода
			loadProfileButtonMenu: function() {
				//вызов родительского метода
				this.callParent();
				//пользовательская реализация
				var profileMenuCollection = this.get("ProfileMenuCollection");
				//сепаратор
				profileMenuCollection.addItem(this.Ext.create("Terrasoft.BaseViewModel", {
					values: {
						Type: "Terrasoft.MenuSeparator",
						Caption: ""
					}
				}));
				//новый пункт меню
				//используются существующие картинки и строки
				profileMenuCollection.addItem(this.Ext.create("Terrasoft.BaseViewModel", {
					values: {
						Caption: this.get("Resources.Strings.ProfileMenuItemCaption"),
						Click: {
							bindTo: "myClickMethod"
						},
						MarkerValue: this.get("Resources.Strings.ProfileMenuItemCaption"),
						ImageConfig: this.get("Resources.Images.ContactEmptyPhoto")
					}
				}));
			}
		}
	};
});

После сохранения схемы и обновления страницы приложения полцчится так, как на прикрепленной картинке

"Симута Роман Русланович" написал:

Т.е. вы вставили код из родительской схемы?


Спасибо вам большое! Сейчас попробовал оставить только необходимые методы, и все заработало. Но был как-то случай, что модуль отказывался работать полноценно, пока весь код из родительской схемы не перенёс в замещёную ...

Пожалуйста :)

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