Добрый день, столкнулся с ситуацией, нужно сохранить настройку колонок детали для портальной страницы.
Если страница обычная, тут понятно, настраиваем колонки - сохраняем настройку для всех пользователей, привязываем данные SysProfileData фильтруя по ключу.
А как правильно сохранить настройку на портальной странице, у портального пользователя нету кнопки сохранить настройку колонок для всех.
Подменой названия страницы в URL адресе, тогда под супервизором можно попасть на страницу портала, единственное ли это решение?

Нравится

2 комментария
Лучший ответ

Смотреть в таблицу SysProfileData, твой настройке нужно поставить в поле ContactId значение null

 

Приведу пример как я скриптом делал "настройки колонок" для всех, скопировав настройки у супервизора. Возможно еще что потребуется, сейчас не помню.

--удалял все настройки кроме тех, которые не пустые и не под пользователем супервизор. В вашем примере в key нужно подставить настройку этой самой детали. А id пользователя твоего пользователя, от которого копировать на всех
	/*	
		delete from SysProfileData where "Key" in (
		select "Key" from SysProfileData
		where ("Key" like 'Usr%GridDataView' or "Key" like '%Detail%') and SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03'
		and (ContactId = '410006E1-CA4E-4502-A9EC-E54D922D2C00' or ContactId is null)
		group by "Key"
		having count(*) >=2
		) and ContactId is null
	*/
--	в тут обновляем contactId на null (для системы если стоит null, то это считается настройкой по умолчанию.
 /*	
	update SysProfileData set ContactId = null
	where "Key" like 'Usr%GridDataView' or "Key" like '%Detail%' and SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03' and ContactId = '410006E1-CA4E-4502-A9EC-E54D922D2C00'
  */

 

Смотреть в таблицу SysProfileData, твой настройке нужно поставить в поле ContactId значение null

 

Приведу пример как я скриптом делал "настройки колонок" для всех, скопировав настройки у супервизора. Возможно еще что потребуется, сейчас не помню.

--удалял все настройки кроме тех, которые не пустые и не под пользователем супервизор. В вашем примере в key нужно подставить настройку этой самой детали. А id пользователя твоего пользователя, от которого копировать на всех
	/*	
		delete from SysProfileData where "Key" in (
		select "Key" from SysProfileData
		where ("Key" like 'Usr%GridDataView' or "Key" like '%Detail%') and SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03'
		and (ContactId = '410006E1-CA4E-4502-A9EC-E54D922D2C00' or ContactId is null)
		group by "Key"
		having count(*) >=2
		) and ContactId is null
	*/
--	в тут обновляем contactId на null (для системы если стоит null, то это считается настройкой по умолчанию.
 /*	
	update SysProfileData set ContactId = null
	where "Key" like 'Usr%GridDataView' or "Key" like '%Detail%' and SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03' and ContactId = '410006E1-CA4E-4502-A9EC-E54D922D2C00'
  */

 

Трефилов Павел Сергеевич,

Большое спасибо!

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

Нравится

2 комментария
Лучший ответ

Насколько помню эти настройки автоматом пишутся в пакет. В разделе схемы будет схема типа DcmSchemaManager с заголовком у вас "Продажи", в разделе данные пишутся данных двух таблиц SysDcmSettings, SysDcmSchemaInSettings. Выгружаем и переносим пакет. Все просто, по крайней мере у меня не было ни разу сложностей с переносом кейсов. Пакет берется из настройки CurrentPackageId или изменения пишутся сразу в этот кейс, если он уже кастомный. Начиная 7.17 есть возможность сохранять отдельно новую версию кейса, но пока сам не тестировал.

Насколько помню эти настройки автоматом пишутся в пакет. В разделе схемы будет схема типа DcmSchemaManager с заголовком у вас "Продажи", в разделе данные пишутся данных двух таблиц SysDcmSettings, SysDcmSchemaInSettings. Выгружаем и переносим пакет. Все просто, по крайней мере у меня не было ни разу сложностей с переносом кейсов. Пакет берется из настройки CurrentPackageId или изменения пишутся сразу в этот кейс, если он уже кастомный. Начиная 7.17 есть возможность сохранять отдельно новую версию кейса, но пока сам не тестировал.

Александр, конкретно интересующая информация о связях стадий хранится не в тех таблицах, в метаданных схемы, в параметре ParentStageUId. Например, для стадий продажи в схеме OpportunityCase:

\n        {\r
\n          \"BL1\": \"Terrasoft.Core.DcmProcess.DcmSchemaStage\",\r
\n          \"UId\": \"a5bf6b99-4c8c-4922-8f78-743d2b94b5da\",\r
\n          \"A2\": \"Stage5\",\r
\n          \"A3\": \"296e261b-5dae-4102-b030-ac84ae63fe2a\",\r
\n          \"A4\": \"296e261b-5dae-4102-b030-ac84ae63fe2a\",\r
\n          \"A5\": \"b89bc79a-381e-4e10-9661-05e0e85cb739\",\r
\n          \"Color\": \"#8ecb60\",\r
\n          \"StageRecordId\": \"60d5310c-5be6-df11-971b-001d60e938c6\",\r
\n          \"Elements\": []\r
\n        },\r
\n        {\r
\n          \"BL1\": \"Terrasoft.Core.DcmProcess.DcmSchemaStage\",\r
\n          \"UId\": \"b223ff36-a772-4903-9c1e-b31e88b32526\",\r
\n          \"A2\": \"Stage4\",\r
\n          \"A3\": \"296e261b-5dae-4102-b030-ac84ae63fe2a\",\r
\n          \"A4\": \"296e261b-5dae-4102-b030-ac84ae63fe2a\",\r
\n          \"A5\": \"b89bc79a-381e-4e10-9661-05e0e85cb739\",\r
\n          \"ParentStageUId\": \"a5bf6b99-4c8c-4922-8f78-743d2b94b5da\",\r
\n          \"Color\": \"#ef7e63\",\r
\n          \"StageRecordId\": \"a9aafdfe-2242-4f42-8cd5-2ae3b9556d79\",\r
\n          \"Elements\": [],\r
\n          \"IsSuccessful\": false\r
\n        }\r

А узнать, что за стадии, можно там же ниже:

    {
      "Culture": "ru-RU",
      "ResourceType": "String",
      "Key": "Stages.Stage4.Caption",
      "Value": "Завершена с проигрышем",
      "ImageData": ""
    },
    {
      "Culture": "ru-RU",
      "ResourceType": "String",
      "Key": "Stages.Stage5.Caption",
      "Value": "Завершена с победой",
      "ImageData": ""
    },

 

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

Возник такой вопрос: необходимо определенным пользователям запретить отображать в Гриде дополнительные поля, т.е. если мы, например, в модуле Контакты сделали видимыми поля "Имя", Адрес и Тип, то некоторые пользователи могут видеть только эти поля, некоторые могут добавлять другие. Можно ли это реализовать без написания дополнительных скриптов?
Если есть подобные темы, буду благодарен ссылкам, я почему-то не нашел.

Нравится

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

конечно можно

или Вы хотите, чтобы у всех было стандартное представление грида по умолчанию?

Вы меня немного не поняли. Есть два пользователя: пользователь А и пользователь В.
Пользователю А доступны все поля (также можно добавлять тем способом, который на скриншоте), а пользователю В доступны только три поля, дополнительные он сам добавлять для отображения не должен.

Здравствуйте, Владимир!

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

Подробная информация о настройке прав есть в руководстве администратора в разделе Права доступа http://training.terrasoft.ru/sites/default/files/document/TS_AG_3.3.2.p…

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

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

Пример кода для скрытия колонки в гриде:

if (Connector.CurrentUser.ContactID == '{0095C6D9-D7B3-4ADD-8DF6-04B62E8A36D6}'){
	colNumberdgvAll.IsEnbled = false;
}else{
	colNumberdgvAll.IsEnbled = false;
}

где
'{0095C6D9-D7B3-4ADD-8DF6-04B62E8A36D6}' - идентификатор пользователя, которому нужно запретить доступ

colNumberdgvAll - название колонки, которую нужно скрыть из грида:

grid

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

Зависит от количества задач. Повлияет, но не существенно.

Владимир,

Ни в коем случае не поддавайтесь соблазну сделать хард-код для конкретного пользователя.
Сделайте для группы. Насколько я помню, есть сервис, который определяет принадлежность пользователя к секюрити-группе, используйте его.
Сами ID-ники секюрити-групп вынесите в отдельный файлик (на подобие Scr_Consts).
В коде используйте именованные константы.

komgbu, спасибо за совет, приму к сведению.

"komgbu" написал:
Насколько я помню, есть сервис, который определяет принадлежность пользователя к секюрити-группе, используйте его.

Вы правы, такой код есть.

Пример есть вот тут:
http://www.community.terrasoft.ru/forum/topic/6990#comment-29924

Подскажите пожалуйста если нужно запретить не на столики а на данные в столбика. Что бы в строке для пользователя который не ответственный было видно лишь поле Name, а все остальные пустые

Сергей,

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

В этом случае требуется существенная программная доработка системы. Навскидку могу предложить следующие варианты:

1. Заменить все колонки запроса SQL-колонками, проверять права доступа при получении данных в запросе и выводить только то, на что права есть;

2. Проверять на уровне скриптов и передавать в DisplayValue датасета грида пустое значение;

3. Для пользователей, у которых есть доступ только на чтение контрагентов, принудительно отключить в представлении все колонки, кроме Name и запретить открытие карточки контрагента из соответствующего реестра.

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

Доброго времени суток!
Такой вопрос, в карточку контактов я добавил поле со справочником типа "Договора". Проконсультируйте, возможно ли настроить работу этого справочника так, что бы после нажатия на него, можно было увидеть все договора с признаком "Имя клиента=ФИО страхователя". Если да то как это реализовать)
Заранее спасибо.

Нравится

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

Берете на событие OnPrepareSelectWindow включаете фильтр, например:

function edtStageOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
	var OpportunityID = dlData.Dataset.Values('OpportunityID');
	var Dataset = LookupDataControl.DataField.LookupDataset;
	ApplyDatasetFilter(Dataset, 'OpportunityID', OpportunityID, true);
}

--
www.it-sfera.com.ua

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

В том то и дело, что бы можно было просмотреть все его договора, перейти к ним прямо из карточки договора

В случае, если задача звучит так: для некоторого контакта необходимо увидеть все его договора (т.е. договора, у которых в поле Контакт указан данный контакт), с возможностью перейти к выбранному договору, то можно сделать деталь Договора в разделе Контакты.
Сделать деталь несложно - можно воспользоваться примерами из раздела Контрагенты или воспользоваться поиском и найти примеры на Community.
По числу действий пользователя эта реализация более удобна и быстра.

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