DataGrid
profile
Financial_Services_Creatio_customer_journey_edition
7.16

Здравствуйте. Есть задача, для разных ролей выводить разный набор колонок, для раздела. Нашёл метод "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 с сформированным ключом будет пустой и т.п.

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

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

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

Показать все комментарии
7.8
Lead
profile
ProfileContainer
Технические вопросы
7.x

Добрый день.
Необходимо сделать блок 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, поскольку данная схема не предназначена для фильтрации по пользовательским колонкам.

Показать все комментарии
Button
profile
Технические вопросы
7.x

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

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

Нравится

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")
					}
				}));
			}
		}
	};
});

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

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

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


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

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

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