Здравствуйте.
Добавили новые поля BusinessSegment типа Справочник и BusinessSegmentString типа Строка в SysAdminUnit, VwSysAdminUnit, модифицировали скрипт для последнего, вывели новое поле в интерфейс на страницу SysAdminUnitPageV2. Система дает выбирать значение из справочника или вносить значения в текстовое кастом поле. Нажимаем кнопку сохранить, система говорит, что все ОК, только актуализируйте роли Но по факту значения внесенные в кастомные поля не сохраняются.

В клиентском модуле объект changedColumns содержит наше поле и внесенное значение в виде, который представлен на скриншоте. Далее вызывается веб-сервис AdministrationService. В нем меня смутило вот это место

                ///
                /// Возвращает значение преобразованное в соотвествтии с типом колонки
                ///
                /// Колонка схемы значение для которой необходимо получить.
                /// Преобразуемое значение.
                /// Преобразованное значение.
                private static object GetColumnValue(EntitySchemaColumn column, object value) {
                        if (column.DataValueType is DateTimeDataValueType) {
                                return DataTypeUtilities.ValueAsTypeDateTime>(value);
                        }
                        if (column.DataValueType is LookupDataValueType){
                                return String.IsNullOrEmpty((string)value) ? null : value;
                        }
                        return value;
                }

Думал может проблема с несовпадением по типу или формату (string с Guid), поэтому и добавил текстовое поле еще, но нет - текстовое поле точно также не сохраняет.
Подскажите в чем может быть причина? Можно ли вообще добавлять в SysAdminUnit пользовательские поля?

Нравится

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

Здравствуйте, Андрей
Недавно этот вопрос был подробно рассмотрен в этой теме
http://www.community.terrasoft.ru/forum/topic/21828

Здравствуйте, Андрей
Недавно этот вопрос был подробно рассмотрен в этой теме
http://www.community.terrasoft.ru/forum/topic/21828

Здравствуйте, Роман.
Спасибо за ответ. Я ознакомился с темой, которую вы предложили и не смог найти ответа на свой вопрос. Из темы также неясно решил ли автор все свои проблемы. Но те проблемы, которые он изначально поднял, я прошел. У меня поля добавлены в объекты SysAdminUnit и VwSysAdminUnt. Для View выполнен скрипт

USE [BPMonline770]
GO
 
/****** Object:  View [dbo].[VwSysAdminUnit]    Script Date: 11.10.2016 21:01:55 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
 
 
ALTER VIEW [dbo].[VwSysAdminUnit]
AS
SELECT [SysAdminUnit].[Id]
	,[SysAdminUnit].[CreatedOn]
	,[SysAdminUnit].[CreatedById]
	,[SysAdminUnit].[ModifiedOn]
	,[SysAdminUnit].[ModifiedById]
	,[SysAdminUnit].[Name]
	,[SysAdminUnit].[Description]
	,[SysAdminUnit].[ParentRoleId]
	,[SysAdminUnit].[ContactId]
	,[SysAdminUnit].[IsDirectoryEntry]
	,[TimeZone].[Id] AS [TimeZoneId]
	,[SysAdminUnit].[UserPassword]
	,[SysAdminUnitType].[Id] AS [SysAdminUnitTypeId]
	,[SysAdminUnit].[AccountId]
	,[SysAdminUnit].[Active]
	,[SysAdminUnit].[LoggedIn]
	,[SysAdminUnit].[SynchronizeWithLDAP]
	,[LDAPElement].[Name] as [LDAPEntry]
	,[LDAPElement].[LDAPEntryId]
	,[LDAPElement].[LDAPEntryDN]
	,[SysAdminUnit].[SysCultureId]
	,[SysAdminUnit].[ProcessListeners]
	,[SysAdminUnit].[PasswordExpireDate]
	,[SysAdminUnit].[HomePageId]
	,[SysAdminUnit].[ConnectionType]
	,[SysAdminUnit].[ForceChangePassword]
	,[SysAdminUnit].[LDAPElementId]
	,[SysAdminUnit].[BusinessSegmentId]
	,[SysAdminUnit].[BusinessSegmentString]
FROM [SysAdminUnit]
INNER JOIN [SysAdminUnitType] ON [SysAdminUnitType].[Value] = [SysAdminUnit].[SysAdminUnitTypeValue]
LEFT JOIN [TimeZone] ON [TimeZone].[Code] = [SysAdminUnit].[TimeZoneId]
LEFT JOIN [LDAPElement] ON [LDAPElement].[Id] = [SysAdminUnit].[LDAPElementId]
 
GO

На уровне БД я вижу что нужные колонки (с требуемым именем и типом) появились и в таблице, и в представлении. В интерфейсе я вижу эти поля, вношу в них требуемую информацию. Жму сохранить, система говорит, что все ОК. Но когда я возвращаюсь к измененной мной записи, обнаруживаю, что поля пусты. В таблице SysAdminUnit в соответствующих полях также пусто. Механизм сохранения записей из раздела Орг структура использует конфигурационный веб-сервис AdministrationService, который задебажить у меня нет возможности. Единственно, что вижу, что в конфигурационный объект, передаваемый этому сервису, попадают изменения внесенные мной в эти кастомные поля на странице. Я, конечно, понимаю, что можно придумать обходной путь с updatequery прямо из клиентского модуля, но как-то это будет выглядеть как костыль.

Что касается вопроса наследования, поднятого Вами в предложенной теме, то пока не совсем понял что именно мне стоит проверить. Но вот, что могу сказать.
Объект VwSysAdminUnit в моем пакете замещает схему Пользователи/роли (представление) ( Base ). По этому заголовку в системе имеется ряд объектов, но все они находятся в разных пакетах (как я понял проблема именно, когда в одном пакете есть схемы с одинаковым заголовком??) То же относится и к SysAdminUNit (замещает Объект администрирования ( Base )) с SysAdminUnitPageV2 (замещает Схема страницы редактирования раздела "Организационные роли" ( UIv2 )) К сообщению прикрепляю скриншоты с найденными по заголовкам схемами, а также скриншот с прописанными зависимостями моего пакета.

Здравствуйте, Роман.
Спасибо за ответ. Я ознакомился с темой, которую вы предложили и не смог найти ответа на свой вопрос. Из темы также неясно решил ли автор все свои проблемы. Но те проблемы, которые он изначально поднял, я прошел. У меня поля добавлены в объекты SysAdminUnit и VwSysAdminUnt. Для View выполнен скрипт

USE [BPMonline770]
GO
 
/****** Object:  View [dbo].[VwSysAdminUnit]    Script Date: 11.10.2016 21:01:55 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
 
 
ALTER VIEW [dbo].[VwSysAdminUnit]
AS
SELECT [SysAdminUnit].[Id]
	,[SysAdminUnit].[CreatedOn]
	,[SysAdminUnit].[CreatedById]
	,[SysAdminUnit].[ModifiedOn]
	,[SysAdminUnit].[ModifiedById]
	,[SysAdminUnit].[Name]
	,[SysAdminUnit].[Description]
	,[SysAdminUnit].[ParentRoleId]
	,[SysAdminUnit].[ContactId]
	,[SysAdminUnit].[IsDirectoryEntry]
	,[TimeZone].[Id] AS [TimeZoneId]
	,[SysAdminUnit].[UserPassword]
	,[SysAdminUnitType].[Id] AS [SysAdminUnitTypeId]
	,[SysAdminUnit].[AccountId]
	,[SysAdminUnit].[Active]
	,[SysAdminUnit].[LoggedIn]
	,[SysAdminUnit].[SynchronizeWithLDAP]
	,[LDAPElement].[Name] as [LDAPEntry]
	,[LDAPElement].[LDAPEntryId]
	,[LDAPElement].[LDAPEntryDN]
	,[SysAdminUnit].[SysCultureId]
	,[SysAdminUnit].[ProcessListeners]
	,[SysAdminUnit].[PasswordExpireDate]
	,[SysAdminUnit].[HomePageId]
	,[SysAdminUnit].[ConnectionType]
	,[SysAdminUnit].[ForceChangePassword]
	,[SysAdminUnit].[LDAPElementId]
	,[SysAdminUnit].[BusinessSegmentId]
	,[SysAdminUnit].[BusinessSegmentString]
FROM [SysAdminUnit]
INNER JOIN [SysAdminUnitType] ON [SysAdminUnitType].[Value] = [SysAdminUnit].[SysAdminUnitTypeValue]
LEFT JOIN [TimeZone] ON [TimeZone].[Code] = [SysAdminUnit].[TimeZoneId]
LEFT JOIN [LDAPElement] ON [LDAPElement].[Id] = [SysAdminUnit].[LDAPElementId]
 
GO

На уровне БД я вижу что нужные колонки (с требуемым именем и типом) появились и в таблице, и в представлении. В интерфейсе я вижу эти поля, вношу в них требуемую информацию. Жму сохранить, система говорит, что все ОК. Но когда я возвращаюсь к измененной мной записи, обнаруживаю, что поля пусты. В таблице SysAdminUnit в соответствующих полях также пусто. Механизм сохранения записей из раздела Орг структура использует конфигурационный веб-сервис AdministrationService, который задебажить у меня нет возможности. Единственно, что вижу, что в конфигурационный объект, передаваемый этому сервису, попадают изменения внесенные мной в эти кастомные поля на странице. Я, конечно, понимаю, что можно придумать обходной путь с updatequery прямо из клиентского модуля, но как-то это будет выглядеть как костыль.

Что касается вопроса наследования, поднятого Вами в предложенной теме, то пока не совсем понял что именно мне стоит проверить. Но вот, что могу сказать.
Объект VwSysAdminUnit в моем пакете замещает схему Пользователи/роли (представление) ( Base ). По этому заголовку в системе имеется ряд объектов, но все они находятся в разных пакетах (как я понял проблема именно, когда в одном пакете есть схемы с одинаковым заголовком??) То же относится и к SysAdminUNit (замещает Объект администрирования ( Base )) с SysAdminUnitPageV2 (замещает Схема страницы редактирования раздела "Организационные роли" ( UIv2 )) К сообщению прикрепляю скриншоты с найденными по заголовкам схемами, а также скриншот с прописанными зависимостями моего пакета.

"Орленко Андрей Николаевич" написал:AdministrationService

Вы можете почитать исходные коды AdministrationService, т.к. это схемы на уровне конфигурации. Более того, в случае необходимости Вы можете разблокировать и переписать под свои нужны.

Кстати, костыль с updatequery тоже не заработал. Возвращало ошибку, что пользователь не имеет права на объект SysAdminUnit. Пользователь был в роли Системные администраторы. Администрируемость объекта SysAdminUnit в системе выключена и на уровне объекта и в разделе администрирование

Коллеги, кому-нибудь удалось справиться с данной проблемой?

Добрый вечер, Сергей.

Предыдущие комментаторы не учли одну важную вещь - триггеры. Для корректной работы замещенной SysAdminUnitPageV2 нужно:

1) Заместить объект SysAdminUnit и добавить нужные поля.
2) Изменить в бд VwSysAdminUnit
3) Заместить объект VwSysAdminUnit и добавить поля (типы и имена должны совпадать).
4) Заместить SysAdminUnitPageV2
5) Изменить на уровне бд триггеры TRVwSysAdminUnitIU (апдейт VwSysAdminUnit) и VwSysAdminUnitI (инсерт).

Да, Илья, действительно изменение указанных тригеров помогло решить проблему. Жаль, что этой информации еще не было в октябре:smile:

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

Здравствуйте. Не нашел в академии информации по сабджу. Подскажите, как реализовать такую деталь. Вид детали во вложении.

Нравится

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

Нам программисты из Softex реализовали довольно универсальную родительскую страницу детали. Правда, на 7.8 пока не перевелись (на 7.5 работает), но думаю, что они смогут и на 7.8 сделать

К чему ваш комментарий, Владимир?

Здравствуйте!

Инструкции по созданию такой детали нет, но Вы можете взять за основу существующую деталь "Средства связи контакта" (ContactCommunicationDetailV2) и сделать по аналогии свою.

"Олег Кречетов" написал:К чему ваш комментарий, Владимир?

К тому, что я знаю, кто знает, как её сделать :) И с вами поделился

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

Добрый день,

возникла такая проблема, при реализации планировщика(календаря) по аналогии с разделом Активности

, в разделе Продажи, отображается лишь "сегодяншний"(текущий) день,

что нужно исправить, чтобы отображались все дни, как в разделе Активности? Какой метод отвечает за это?

Нравится

1 комментарий

Здравствуйте, Евгений.

В базовой реализации (в разделе активности), за данный функционал отвечают атрибуты SchedulerStartDate и SchedulerDueDate. Значения этих атрибутов берутся из фильтра по дате. Если же фильтрация не установлена, данным атрибутам устанавливается значение текущего дня и Schedule отображает только сегодняшний день (как и на скриншоте). Для изменения периода, Вам стоит смотреть в сторону метода getSchedulerPeriod из ActivitySectionV2 (NUI).

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

Добрый день! Подскажите пожалуйста, как можно перенести деталь "График поставок и оплат", которая находится в карточке "Заказы" в карточку "Продажи". И это вообще реально перенести данную деталь в другую карточку.

Нравится

1 комментарий

Дмитрий, перенести реально. Очень даже легко переносится. Замещаете, добавляете справочное поле из нужного раздела, после чего мастером добавляете замещенную деталь. Собственно и код схемы также открыт для анализа. Но что касается корректности работы этой детали в другом разделе, это уже другой вопрос, у меня так и не завелось. Проще уже сделать свою деталь с редактируемым реестром, чем полностью переделывать эту под другой раздел. Если что, вот инструкция на академии Террасофта https://academy.terrasoft.ru/documents/technic-sdk/7-8/sozdanie-detali-…

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

Добрый день!

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

Например, для 5 разработчиков и внедренцев создаю 5 сред (независимых инстансов, серверов и т.п.) - это Dev стенды. Но также хочу иметь Test стенд для полного/интеграционного тестирования всех наработок.

1. Как все наработки на Dev объединять и консолидировать?
Кейс: на одном Dev стенде внедренец кастомизирует сущности, на другом Dev стенде разработчик начинает пилить решение, работающее с этой кастомизацией. Как им обмениваться между собой наработками? Не хочу чтоб они работали вместе и мешали друг другу.

2. Как защититься или контролировать перетирание одним разработчиком изменений другого при разворачивании нескольких пакетов?

Нравится

1 комментарий

Здравствуйте!

1) Все доработки сохраняются в SVN. Разработчики фиксируют изменения в хранилище. Для того, чтобы получить изменения, сделанные другим разработчиками, необходимо обновить пакет из хранилища.

Таким образом происходит обмен изменениями между конфигурациями.

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

Более подробно Вы можете прочитать по ссылке:
https://academy.terrasoft.ru/documents/technic-sdk/7-8/kak-rabotat-s-hr…

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

Доброго времени суток!
В продукте sales enterprice 7.8 нужно в зависимости от некоторых значений типа документа проставлять галку в одном из чекбоксов карточки:
если пользователь выбирает значения 1 и 3, чекбокс проставляется, если пользователь выбирает значение 2, то галка либо не проставляется, либо исчезает, если до этого галка в чекбоксе стояла.
Это реализуется с помощью бизнес-правила? и как, если да?

Нравится

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

Анастасия, здравствуйте!

Действительно, Вы правы, этот функционал можно реализовать через бизнес-правило. Рекомендации описаны в руководстве для разработчиков https://academy.terrasoft.ua/documents/technic-sdk/7-8/biznes-pravila-i…

"Мария Ватулина" написал:

Анастасия, здравствуйте!

Действительно, Вы правы, этот функционал можно реализовать через бизнес-правило. Рекомендации описаны в руководстве для разработчиков https://academy.terrasoft.ua/documents/technic-sdk/7-8/biznes-pravila-i-...

К сожалению, не получилось это реализовать с помощью бизнеса-правила. Массив enums.property не подходит, т.к. нам нужно установить конкретное значение чекбокса, а не его видимость, обязательность и т.д. Что неправильно делаю:

rules: {
"UsrPaid": {
BindParametrVisibilePlaceByType: {
ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
valueType: BusinessRuleModule.enums.ValueType.CONSTANT,
value: true,
conditions: [{
leftExpression: {
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
attribute: "Type"
},
comparisonType: Terrasoft.ComparisonType.EQUAL,
rightExpression: {
type: BusinessRuleModule.enums.ValueType.CONSTANT,
value: "2cb5cac1-1523-e011-a94a-00155d043204"
}
}]
}
}
}

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

И не получится с помощью бизнес правила :)

Скорее сюда читать. Пункт 6 кроме того, что вам не надо заменять обработчик onentityinitialized.
Ваше поле (это же поле булевское как галка у вас отображается, да?) с галкой в attributes, в dependencies то поле с типом, метод напишите свой, чтоб галку проставлял снимал на основании значения поля тип

"Александр Кудряшов" написал:

И не получится с помощью бизнес правила :)

Скорее сюда читать. Пункт 6 кроме того, что вам не надо заменять обработчик onentityinitialized.

Ваше поле (это же поле булевское как галка у вас отображается, да?) с галкой в attributes, в dependencies то поле с типом, метод напишите свой, чтоб галку проставлял снимал на основании значения поля тип

Получилось!:) Спасибо, Александр, дай вам Бог здоровья)))

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

Коллеги, есть например, сигнал, которые реагирует на удаление записи.
В частности мне надо инициировать пересчет количества участников активности, если участника активности удалили.
Этот сигнал передает id записи. Но ведь запись уже удалена? Судя по поведению БП, он ничего не передает, просто срабатывает на факт удаления.
Как в таком случае стандартными средствами БП можно вычислить id Активности, из которой удалили участника?

Нравится

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

Фариз,

для конкретного случая - удаления участника активности, Id активности можно узнать следующим образом:
1) Добавить сигнал, срабатывающий при удалении записи в объекте "Участники активности" http://joxi.ru/Dr8yKdRIkxYWRm
2) Добавить элемент чтения данных для считывания Id активности, с которой была связана удаленная запись участника активности http://joxi.ru/zANY0dzulQ50v2

Прочитанный Id как раз тот, который Вам необходим. Дальнейшую обработку уже можете выполнять по Вашему усмотрению :smile:

Странно. Именно так и делал изначально. И не работало. Может ошибся где то в другом месте, ок, проверю

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

Доброго дня!
Есть ли возможность перенести преднастроенные папки поиска с одной среды на другую?
Если да, то какие объекты затрагиваются и как их перенести?

Нравится

1 комментарий

Здравствуйте!

Группы хранятся в объекте [#Object#]Folder, где [#Object#] - объект раздела.

Вы можете, например, привязать данные объекта к пакету, в котором Вы переносите доработки между средами.

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

Доброго дня!
Есть ли возможность перенести преднастроенные папки поиска с одной среды на другую?
Если да, то какие объекты затрагиваются и как их перенести?

Нравится

1 комментарий

Здравствуйте!

В системе есть объект [#Object#]Folder, где [#Object#] - название объекта раздела. Необходимо привязать данных к пакету и выгрузить пакет. При накатке пакета на другой сайт данные будут установлены.

Второй вариант реализации - перенос данных между средами прямым SQL запросом.

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

Здравствуйте! Продукт sales enterprice 7.8

В справочнике "Типы средств связи" создала новый тип средств связи "Основной телефон (открытый)" с типом коммуникации "Телефон".

В карточке раздела новый тип появился, но при попытке обратиться к нему из бизнес-процесса (элементом добавление данных) этот тип в списке колонок не виден (хотя остальные средства связи, как Мобильный телефон, Рабочий телефон) из бизнес-процесса доступны https://yadi.sk/i/SfbDYp-awCuCa

Как решить этот вопрос?

Нравится

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

Здравствуйте!

Вы добавили новое значение в справочнике "Типы средств связи", а ожидаете появления поля в объекте "Контакт"? Сильно!:twisted:

"Демьяник Алексей" написал:

Здравствуйте!

Вы добавили новое значение в справочнике "Типы средств связи", а ожидаете появления поля в объекте "Контакт"? Сильно!:twisted:


Ок, не ожидаю. В справочнике же есть галка "Показывать в контакте", и в бизнес-процессах другие типы номеров доступны из объекта Контакт. Вопрос, как сделать, чтобы новый тип телефона тоже был доступен из бизнес-процесса и бизнес-процессом его можно было заполнить значением

"Злыднева Анастасия Сергеевна" написал:

Ок, не ожидаю. В справочнике же есть галка "Показывать в контакте", и в бизнес-процессах другие типы номеров доступны из объекта Контакт. Вопрос, как сделать, чтобы новый тип телефона тоже был доступен из бизнес-процесса и бизнес-процессом его можно было заполнить значением

Признак "Показывать в контакте" распространяется на деталь "Средства связи". На детали страницы редактирования раздела "Контакты" отображаются только те средства связи, которые отмечены признаком "Показывать в контакте". В базовой версии, например, тип средства связи "Факс" не отображается на детали в записи контакта.

Вам необходимо создать новое поле на странице редактирования раздела "Контакты" и заполнять это поле. Также хочу обратить Ваше внимание, что в объектах "Контакт" и "Средство связи контакта" есть логика, которая переносит значение из детали на страницу и наоборот. Вы можете создать аналогичную логику, чтобы данные на детали соответствовали данным в созданном Вами поле.

Как вариант, Вы можете создавать запись в объекте "Средство связи контакта", заполнив поля "Контакт", "Тип", "Номер". Тогда создавать поле в объекте "Контакт" необходимости не будет.

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