Пытаюсь перенести настройки реестра деталей на другую среду 

Мой алгоритм действий такой

В данных выбираю объект sysprofiledata с типом установки установка

Далее на вкладке привязка данных по ключу ищу детали для фиксации настройки реестра, далее сохраняю, фиксирую изменения и заливаю на целевую среду,   но настройки реестра не применяются 

(в пятницу по этому алгоритму все получилось, но сегодня утром сказали, что все сбросилось,хотя я все изменения фиксировал

Раньше при фиксации изменений настройек реестра было больше колонок для выбора, а именнно нету данные и objectdifference, которые ставил обязательно для обновления)

Версия на которой фиксирую изменения 7 17 , целевая среда на 7 16

 

Нравится

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

Дима, больше всего смущает это: 

Версия на которой фиксирую изменения 7 17 , целевая среда на 7 16

Лучше всего переносить между идентичными версиями системы, в крайнем случае — от старой на новую, но не наоборот, из новой в старую, поскольку такое использование никто не тестировал. Если на базах разных версий привести содержимое поля ObjectData в SysProfileData у аналогичных записей к текстовому виду при помощи «cast([ObjectData] as varchar(max))», видно различия в параметрах и формате информации о столбцах. Вероятно, дело в этом. Более подробно можно сказать, сравнивая конкретное наполнение поля у Вас: дело в формате, дубле записей или ещё чём-то.

дев и прод еще не обновили, поэтому он на 16

Но меня больше смущает то. куда пропали колонки данные и objectdifference  в новой версии ?

У меня в 7.17 есть и [ObjectData], и [ObjectDifference] (в последней всегда null или «0x», и в 7.16, и в 7.17).

Зверев Александр,

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

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

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

Когда нажимаю кнопку сохранить страница редактирования детали закрывается

Как я понял из постов в академии мне надо переопределеить метод onSilentSaved я пробовал несколько примеров, но пока не один не дал должного результата

Нравится

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

            save: function(config) {

                config = config || {};

                config.isSilent = true;

                this.callParent([config]);

            }

            save: function(config) {

                config = config || {};

                config.isSilent = true;

                this.callParent([config]);

            }

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

Когда пытаюсь установить пакет , на новой среде, то выдает ошибку 

Конфликт инструкции INSERT с ограничением FOREIGN KEY "FKVJgxmU9tugUNJfIWHaADhTn9tE". Конфликт произошел в базе данных "ST_MENU_3503480_0906", таблица "dbo.SysCulture", column 'Id'. Выполнение данной инструкции было прервано.

Я пробовал методы из двух похожих тем, но не одна не помогла

Нравится

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

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

 

Попробуйте сравнить наполнение таблицы SysCulture на обеих базах. Там может либо отсутствовать какая-то запись о культуре, либо у какой-то культуры с тем же названием будет другой Id. В зависимости от этого будет нужно либо добавить недостающую, либо вносить правки в коде пакета, исправляя Id.

 

Если непонятно, о какой записи речь, можно записать неудавшийся запрос на вставку в профайлере и узнать её Id.

На версии 7.17.1 присутствует 19 строк.

Проверьте и дополните отсутствующие на своей БД.

Главное, не создать две строки с разными Id об одной культуре, будет ещё хуже, сломается компиляция.

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

Изображение удалено.На странице редактирования лида есть задача "Квалифицировать обращение", которая содержит кнопку "Завершить". Как мне изменить название этой кнопки, так, чтобы наименование поменялось лишь на странице редактирования лида?

Нравится

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

В каком смысле название кнопки задачи?

Александр Тыра, Кнопка "Завершить" на скриншоте

Эта логика реализована сразу во многих схемах, заменить надпись не так просто.

Сама кнопка и её название из расположенной там же локализируемой строки заполняется в схеме BaseDashboardItemViewModel:

/**
 * Initializes "ExecuteButtonCaption" property.
 */
initExecuteButtonCaption: function() {
    this.set("ExecuteButtonCaption", resources.localizableStrings.ExecuteButtonCaption);
},

От неё наследуется схема EntityDashboardItemViewModel, а затем ActivityDashboardItemViewModel.

Она применяется в схеме SectionActionsDashboard в функции initDashboardConfig:

const activityItemsConfig = {
    "Activity": {
        viewModelClassName: "Terrasoft.ActivityDashboardItemViewModel",
        viewConfigClassName: "Terrasoft.BaseDashboardItemViewConfig"
    }
};

А уже от неё унаследована LeadSectionActionsDashboard.

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

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

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

 

Я установил приложение Open popup window

Добавил элемент в БП http://prntscr.com/v10nfx (почему-то он не так выглядит как в презентации на маркетплейсе)

Настроил оба поля элемента: http://prntscr.com/v10nq5

Выводить простой текст текущему пользователю.

 

Процесс отрабатывает http://prntscr.com/v10nyp

Но окно почему-то не появляется.

В чем может быть причина?

Нравится

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

Сидоров Александр Валерьевич,

 Сделал не большое видео с описанием

https://youtu.be/rPthWz3E7uQ

Причина в том, что данный элемент сработает только после элемента из блока "Действия пользователя". О чем и написано в описании расширения https://prnt.sc/v24s91

Может я использовал более старую версию, но у меня срабатывает не зависимо от того где стоит. Можете сам реализовать работу этого элемента, логика у него простая (ну была на момент когда я первый раз ее смотрел). Могу подсказать как, если надо, так как я код себе в проект интегрировал

Александр Тыра, вообще было бы интересно, если поделитесь. Изобретать велосипед не хочется)

Павел, добрый день!

 

действительно элемент будет корректно отрабатывать после элемента из блока "Действия пользователя". Проверьте сначала работу такого кейса.

Использование после других элементов в бизнес-процессах не рекомендую, потому что дополнение не поддерживает корректное отображение пользователю параллельных всплывающих окон.

Сидоров Александр Валерьевич,

 Сделал не большое видео с описанием

https://youtu.be/rPthWz3E7uQ

Александр Тыра,

С огромным интересом смотрю и утаскиваю в корп вики)) Александр, большое вам спасибо за фундаментальное видео по этому вопросу. Очень полезно!

 

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

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

Александр Тыра,

не, все великолепно)

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

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

 

Подскажите есть ли возможность сохранять реестр для нескольких культур разом?

Изображение удалено.

Нравится

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

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

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



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

 

при сохранении настройки колонки идёт обращение к сервису /0/DataService/json/SyncReply/UserProfile, там передаётся в поле profileCultureId ссылка на Id конкретной культуры:

{
   "key":"AccountSectionV2GridSettingsGridDataView",
   "data":"{\"tiledColumnsConfig\":\"{}\",\"listedColumnsConfig\":\"{}\",\"DataGrid\":{\"tiledConfig\":\"{\\\"grid\\\":{\\\"rows\\\":2,\\\"columns\\\":24},\\\"items\\\":[{\\\"column\\\":0,\\\"caption\\\":\\\"Название\\\",\\\"metaPath\\\":\\\"Name\\\",\\\"isTitleText\\\":true,\\\"width\\\":8,\\\"dataValueType\\\":1,\\\"bindTo\\\":\\\"Name\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":8,\\\"row\\\":1},\\\"isCaptionHidden\\\":true,\\\"isURLType\\\":false,\\\"columnType\\\":\\\"title\\\",\\\"captionConfig\\\":{\\\"visible\\\":false},\\\"type\\\":\\\"title\\\"},{\\\"column\\\":8,\\\"caption\\\":\\\"Web\\\",\\\"metaPath\\\":\\\"Web\\\",\\\"isTitleText\\\":false,\\\"width\\\":6,\\\"bindTo\\\":\\\"Web\\\",\\\"position\\\":{\\\"column\\\":8,\\\"colSpan\\\":6,\\\"row\\\":1},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"column\\\":14,\\\"caption\\\":\\\"Основной телефон\\\",\\\"metaPath\\\":\\\"Phone\\\",\\\"isTitleText\\\":false,\\\"width\\\":5,\\\"bindTo\\\":\\\"Phone\\\",\\\"position\\\":{\\\"column\\\":14,\\\"colSpan\\\":5,\\\"row\\\":1},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"column\\\":19,\\\"caption\\\":\\\"Тип\\\",\\\"metaPath\\\":\\\"Type\\\",\\\"isTitleText\\\":false,\\\"width\\\":5,\\\"bindTo\\\":\\\"Type\\\",\\\"position\\\":{\\\"column\\\":19,\\\"colSpan\\\":5,\\\"row\\\":1},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"column\\\":0,\\\"caption\\\":\\\"Основной контакт\\\",\\\"metaPath\\\":\\\"PrimaryContact\\\",\\\"isTitleText\\\":false,\\\"width\\\":8,\\\"dataValueType\\\":10,\\\"bindTo\\\":\\\"PrimaryContact\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":8,\\\"row\\\":2},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"columnType\\\":\\\"text\\\",\\\"captionConfig\\\":{\\\"visible\\\":true},\\\"type\\\":\\\"text\\\"},{\\\"column\\\":8,\\\"caption\\\":\\\"Адрес\\\",\\\"metaPath\\\":\\\"Address\\\",\\\"isTitleText\\\":false,\\\"width\\\":6,\\\"dataValueType\\\":1,\\\"bindTo\\\":\\\"Address\\\",\\\"position\\\":{\\\"column\\\":8,\\\"colSpan\\\":6,\\\"row\\\":2},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"column\\\":14,\\\"caption\\\":\\\"Город\\\",\\\"metaPath\\\":\\\"City\\\",\\\"isTitleText\\\":false,\\\"width\\\":5,\\\"bindTo\\\":\\\"City\\\",\\\"position\\\":{\\\"column\\\":14,\\\"colSpan\\\":5,\\\"row\\\":2},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"column\\\":19,\\\"caption\\\":\\\"Страна\\\",\\\"metaPath\\\":\\\"Country\\\",\\\"isTitleText\\\":false,\\\"width\\\":5,\\\"bindTo\\\":\\\"Country\\\",\\\"position\\\":{\\\"column\\\":19,\\\"colSpan\\\":5,\\\"row\\\":2},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"captionConfig\\\":{\\\"visible\\\":true}}]}\",\"listedConfig\":\"{\\\"items\\\":[{\\\"column\\\":0,\\\"caption\\\":\\\"Название\\\",\\\"metaPath\\\":\\\"Name\\\",\\\"isTitleText\\\":false,\\\"width\\\":9,\\\"dataValueType\\\":1,\\\"bindTo\\\":\\\"Name\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":9,\\\"row\\\":1},\\\"columnType\\\":\\\"text\\\",\\\"isURLType\\\":false,\\\"type\\\":\\\"text\\\"},{\\\"column\\\":9,\\\"caption\\\":\\\"Тип\\\",\\\"metaPath\\\":\\\"Type\\\",\\\"width\\\":5,\\\"bindTo\\\":\\\"Type\\\",\\\"position\\\":{\\\"column\\\":9,\\\"colSpan\\\":5,\\\"row\\\":1}},{\\\"column\\\":14,\\\"caption\\\":\\\"Основной телефон\\\",\\\"metaPath\\\":\\\"Phone\\\",\\\"width\\\":5,\\\"bindTo\\\":\\\"Phone\\\",\\\"position\\\":{\\\"column\\\":14,\\\"colSpan\\\":5,\\\"row\\\":1}},{\\\"column\\\":19,\\\"caption\\\":\\\"Основной контакт\\\",\\\"metaPath\\\":\\\"PrimaryContact\\\",\\\"width\\\":5,\\\"bindTo\\\":\\\"PrimaryContact\\\",\\\"position\\\":{\\\"column\\\":19,\\\"colSpan\\\":5,\\\"row\\\":1}}]}\",\"isTiled\":true,\"type\":\"tiled\",\"key\":\"AccountSectionV2GridSettingsGridDataView\"},\"DataGridVerticalProfile\":{\"tiledConfig\":\"{\\\"grid\\\":{\\\"rows\\\":5,\\\"columns\\\":24},\\\"items\\\":[{\\\"bindTo\\\":\\\"Name\\\",\\\"caption\\\":\\\"Название\\\",\\\"type\\\":\\\"title\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":1},\\\"dataValueType\\\":1,\\\"metaPath\\\":\\\"Name\\\",\\\"captionConfig\\\":{\\\"visible\\\":false}},{\\\"bindTo\\\":\\\"Type\\\",\\\"caption\\\":\\\"Тип\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":2},\\\"dataValueType\\\":10,\\\"metaPath\\\":\\\"Type\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"PrimaryContact\\\",\\\"caption\\\":\\\"Основной контакт\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":3},\\\"dataValueType\\\":10,\\\"metaPath\\\":\\\"PrimaryContact\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"Phone\\\",\\\"caption\\\":\\\"Основной телефон\\\",\\\"type\\\":\\\"text\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":4},\\\"dataValueType\\\":1,\\\"metaPath\\\":\\\"Phone\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}}]}\",\"listedConfig\":\"{\\\"items\\\":[]}\",\"key\":\"AccountSectionV2GridSettingsGridDataView\",\"isTiled\":true,\"type\":\"tiled\"},\"key\":\"AccountSectionV2GridSettingsGridDataView\",\"Filters\":{},\"isTiled\":true,\"MobileDataGrid\":{\"tiledConfig\":\"{\\\"grid\\\":{\\\"rows\\\":7,\\\"columns\\\":24},\\\"items\\\":[{\\\"bindTo\\\":\\\"City\\\",\\\"caption\\\":\\\"Город\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":1},\\\"dataValueType\\\":10,\\\"metaPath\\\":\\\"City\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"Web\\\",\\\"caption\\\":\\\"Web\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":2},\\\"dataValueType\\\":1,\\\"metaPath\\\":\\\"Web\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"Address\\\",\\\"caption\\\":\\\"Адрес\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":3},\\\"dataValueType\\\":1,\\\"metaPath\\\":\\\"Address\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"ModifiedBy\\\",\\\"caption\\\":\\\"Изменил\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":4},\\\"dataValueType\\\":10,\\\"metaPath\\\":\\\"ModifiedBy\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"AlternativeName\\\",\\\"caption\\\":\\\"Альтернативные названия\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":5},\\\"dataValueType\\\":1,\\\"metaPath\\\":\\\"AlternativeName\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"AdditionalPhone\\\",\\\"caption\\\":\\\"Дополнительный телефон\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":6},\\\"dataValueType\\\":1,\\\"metaPath\\\":\\\"AdditionalPhone\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"City\\\",\\\"caption\\\":\\\"Город\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":7},\\\"dataValueType\\\":10,\\\"metaPath\\\":\\\"City\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}}]}\",\"listedConfig\":\"{\\\"items\\\":[]}\",\"isTiled\":true,\"type\":\"tiled\"},\"profileCultureId\":\"1a778e3f-0a8e-e111-84a3-00155d054c03\"}",
   "isDef":false
}

Настройка задаётся для себя с isDef =  false или для всех с isDef =  true.

Стандартно для отправки настроек в другой культуре функции нет, нужно делать доработку: либо отправлять ещё один запрос к сервису с указанием другой культуры и того же значения key, либо менять (или добавлять, если нет) в базе значения в таблице SysProfileData, отфильтровав там по Key и SysCultureId.

Сами настройки хранятся в поле ObjectData, его значение можно увидеть, написав в SQL-запросе «cast(ObjectData as varchar(max))».

Обратите внимание, там тоже упомянуты key и profileCultureId. Также просто скопировать из одной культуры в другую будет недостаточно, заголовки каждой колонки на соответствующем языке хранятся прямо в этом поле в значении параметров caption, их нужно будет перевести и для нелатинских букв представить в нужной кодировке.

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

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



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

 

при сохранении настройки колонки идёт обращение к сервису /0/DataService/json/SyncReply/UserProfile, там передаётся в поле profileCultureId ссылка на Id конкретной культуры:

{
   "key":"AccountSectionV2GridSettingsGridDataView",
   "data":"{\"tiledColumnsConfig\":\"{}\",\"listedColumnsConfig\":\"{}\",\"DataGrid\":{\"tiledConfig\":\"{\\\"grid\\\":{\\\"rows\\\":2,\\\"columns\\\":24},\\\"items\\\":[{\\\"column\\\":0,\\\"caption\\\":\\\"Название\\\",\\\"metaPath\\\":\\\"Name\\\",\\\"isTitleText\\\":true,\\\"width\\\":8,\\\"dataValueType\\\":1,\\\"bindTo\\\":\\\"Name\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":8,\\\"row\\\":1},\\\"isCaptionHidden\\\":true,\\\"isURLType\\\":false,\\\"columnType\\\":\\\"title\\\",\\\"captionConfig\\\":{\\\"visible\\\":false},\\\"type\\\":\\\"title\\\"},{\\\"column\\\":8,\\\"caption\\\":\\\"Web\\\",\\\"metaPath\\\":\\\"Web\\\",\\\"isTitleText\\\":false,\\\"width\\\":6,\\\"bindTo\\\":\\\"Web\\\",\\\"position\\\":{\\\"column\\\":8,\\\"colSpan\\\":6,\\\"row\\\":1},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"column\\\":14,\\\"caption\\\":\\\"Основной телефон\\\",\\\"metaPath\\\":\\\"Phone\\\",\\\"isTitleText\\\":false,\\\"width\\\":5,\\\"bindTo\\\":\\\"Phone\\\",\\\"position\\\":{\\\"column\\\":14,\\\"colSpan\\\":5,\\\"row\\\":1},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"column\\\":19,\\\"caption\\\":\\\"Тип\\\",\\\"metaPath\\\":\\\"Type\\\",\\\"isTitleText\\\":false,\\\"width\\\":5,\\\"bindTo\\\":\\\"Type\\\",\\\"position\\\":{\\\"column\\\":19,\\\"colSpan\\\":5,\\\"row\\\":1},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"column\\\":0,\\\"caption\\\":\\\"Основной контакт\\\",\\\"metaPath\\\":\\\"PrimaryContact\\\",\\\"isTitleText\\\":false,\\\"width\\\":8,\\\"dataValueType\\\":10,\\\"bindTo\\\":\\\"PrimaryContact\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":8,\\\"row\\\":2},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"columnType\\\":\\\"text\\\",\\\"captionConfig\\\":{\\\"visible\\\":true},\\\"type\\\":\\\"text\\\"},{\\\"column\\\":8,\\\"caption\\\":\\\"Адрес\\\",\\\"metaPath\\\":\\\"Address\\\",\\\"isTitleText\\\":false,\\\"width\\\":6,\\\"dataValueType\\\":1,\\\"bindTo\\\":\\\"Address\\\",\\\"position\\\":{\\\"column\\\":8,\\\"colSpan\\\":6,\\\"row\\\":2},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"column\\\":14,\\\"caption\\\":\\\"Город\\\",\\\"metaPath\\\":\\\"City\\\",\\\"isTitleText\\\":false,\\\"width\\\":5,\\\"bindTo\\\":\\\"City\\\",\\\"position\\\":{\\\"column\\\":14,\\\"colSpan\\\":5,\\\"row\\\":2},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"column\\\":19,\\\"caption\\\":\\\"Страна\\\",\\\"metaPath\\\":\\\"Country\\\",\\\"isTitleText\\\":false,\\\"width\\\":5,\\\"bindTo\\\":\\\"Country\\\",\\\"position\\\":{\\\"column\\\":19,\\\"colSpan\\\":5,\\\"row\\\":2},\\\"isCaptionHidden\\\":false,\\\"isURLType\\\":false,\\\"captionConfig\\\":{\\\"visible\\\":true}}]}\",\"listedConfig\":\"{\\\"items\\\":[{\\\"column\\\":0,\\\"caption\\\":\\\"Название\\\",\\\"metaPath\\\":\\\"Name\\\",\\\"isTitleText\\\":false,\\\"width\\\":9,\\\"dataValueType\\\":1,\\\"bindTo\\\":\\\"Name\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":9,\\\"row\\\":1},\\\"columnType\\\":\\\"text\\\",\\\"isURLType\\\":false,\\\"type\\\":\\\"text\\\"},{\\\"column\\\":9,\\\"caption\\\":\\\"Тип\\\",\\\"metaPath\\\":\\\"Type\\\",\\\"width\\\":5,\\\"bindTo\\\":\\\"Type\\\",\\\"position\\\":{\\\"column\\\":9,\\\"colSpan\\\":5,\\\"row\\\":1}},{\\\"column\\\":14,\\\"caption\\\":\\\"Основной телефон\\\",\\\"metaPath\\\":\\\"Phone\\\",\\\"width\\\":5,\\\"bindTo\\\":\\\"Phone\\\",\\\"position\\\":{\\\"column\\\":14,\\\"colSpan\\\":5,\\\"row\\\":1}},{\\\"column\\\":19,\\\"caption\\\":\\\"Основной контакт\\\",\\\"metaPath\\\":\\\"PrimaryContact\\\",\\\"width\\\":5,\\\"bindTo\\\":\\\"PrimaryContact\\\",\\\"position\\\":{\\\"column\\\":19,\\\"colSpan\\\":5,\\\"row\\\":1}}]}\",\"isTiled\":true,\"type\":\"tiled\",\"key\":\"AccountSectionV2GridSettingsGridDataView\"},\"DataGridVerticalProfile\":{\"tiledConfig\":\"{\\\"grid\\\":{\\\"rows\\\":5,\\\"columns\\\":24},\\\"items\\\":[{\\\"bindTo\\\":\\\"Name\\\",\\\"caption\\\":\\\"Название\\\",\\\"type\\\":\\\"title\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":1},\\\"dataValueType\\\":1,\\\"metaPath\\\":\\\"Name\\\",\\\"captionConfig\\\":{\\\"visible\\\":false}},{\\\"bindTo\\\":\\\"Type\\\",\\\"caption\\\":\\\"Тип\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":2},\\\"dataValueType\\\":10,\\\"metaPath\\\":\\\"Type\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"PrimaryContact\\\",\\\"caption\\\":\\\"Основной контакт\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":3},\\\"dataValueType\\\":10,\\\"metaPath\\\":\\\"PrimaryContact\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"Phone\\\",\\\"caption\\\":\\\"Основной телефон\\\",\\\"type\\\":\\\"text\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":4},\\\"dataValueType\\\":1,\\\"metaPath\\\":\\\"Phone\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}}]}\",\"listedConfig\":\"{\\\"items\\\":[]}\",\"key\":\"AccountSectionV2GridSettingsGridDataView\",\"isTiled\":true,\"type\":\"tiled\"},\"key\":\"AccountSectionV2GridSettingsGridDataView\",\"Filters\":{},\"isTiled\":true,\"MobileDataGrid\":{\"tiledConfig\":\"{\\\"grid\\\":{\\\"rows\\\":7,\\\"columns\\\":24},\\\"items\\\":[{\\\"bindTo\\\":\\\"City\\\",\\\"caption\\\":\\\"Город\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":1},\\\"dataValueType\\\":10,\\\"metaPath\\\":\\\"City\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"Web\\\",\\\"caption\\\":\\\"Web\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":2},\\\"dataValueType\\\":1,\\\"metaPath\\\":\\\"Web\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"Address\\\",\\\"caption\\\":\\\"Адрес\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":3},\\\"dataValueType\\\":1,\\\"metaPath\\\":\\\"Address\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"ModifiedBy\\\",\\\"caption\\\":\\\"Изменил\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":4},\\\"dataValueType\\\":10,\\\"metaPath\\\":\\\"ModifiedBy\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"AlternativeName\\\",\\\"caption\\\":\\\"Альтернативные названия\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":5},\\\"dataValueType\\\":1,\\\"metaPath\\\":\\\"AlternativeName\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"AdditionalPhone\\\",\\\"caption\\\":\\\"Дополнительный телефон\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":6},\\\"dataValueType\\\":1,\\\"metaPath\\\":\\\"AdditionalPhone\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}},{\\\"bindTo\\\":\\\"City\\\",\\\"caption\\\":\\\"Город\\\",\\\"position\\\":{\\\"column\\\":0,\\\"colSpan\\\":24,\\\"row\\\":7},\\\"dataValueType\\\":10,\\\"metaPath\\\":\\\"City\\\",\\\"captionConfig\\\":{\\\"visible\\\":true}}]}\",\"listedConfig\":\"{\\\"items\\\":[]}\",\"isTiled\":true,\"type\":\"tiled\"},\"profileCultureId\":\"1a778e3f-0a8e-e111-84a3-00155d054c03\"}",
   "isDef":false
}

Настройка задаётся для себя с isDef =  false или для всех с isDef =  true.

Стандартно для отправки настроек в другой культуре функции нет, нужно делать доработку: либо отправлять ещё один запрос к сервису с указанием другой культуры и того же значения key, либо менять (или добавлять, если нет) в базе значения в таблице SysProfileData, отфильтровав там по Key и SysCultureId.

Сами настройки хранятся в поле ObjectData, его значение можно увидеть, написав в SQL-запросе «cast(ObjectData as varchar(max))».

Обратите внимание, там тоже упомянуты key и profileCultureId. Также просто скопировать из одной культуры в другую будет недостаточно, заголовки каждой колонки на соответствующем языке хранятся прямо в этом поле в значении параметров caption, их нужно будет перевести и для нелатинских букв представить в нужной кодировке.

Зверев Александр,

Спасибо

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

Заружал пакет, который при загрузке выдал сообщение о том, что не может загрузиться, в логах сказали обращаться за более подробной инфой в конфу, зашел в конфу нажал скомпилировать и выдало ряд ошибок, который не совсем понимаю с чем связаны(скриншот)Изображение удалено.

Нравится

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

Добрый день, Дмитрий!

 

Для решения возникших ошибок вам стоит обратится в техническую поддержу. 

 

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

Задача: округлять дробную часть десятичного числа вверх.

Нашёл статью с методом на Microsoft https://docs.microsoft.com/en-us/dotnet/api/system.midpointrounding?vie…;

 

В БП пробую применять формулу Decimal.Round(([#Исходное дробное число#]), 1, MidpointRounding.AwayFromZero) - ругается, что "Допущена ошибка в формуле: Параметр "MidpointRounding" не найден.]."



При этом, если не использовать MidpointRounding, а просто указывать количество знаков после запятой Decimal.Round(([#Исходное дробное число#]), 1) - то формулу принимает и пересчёт ведёт, но по правилам округления, а не в бОльшую сторону, как мне нужно.

 

Может быть кто-то сталкивался с такой же задачей? Как решали?

Нравится

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

Сергей, в отличие от старого движка процессов, в котором можно было указать в элементе-формуле или условии произвольный фрагмент C#-кода, в нынешнем, интерпретируемом, работа с формулами может не поддерживать все особенности функций от Microsoft.

 

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

decimal positiveValue = Get<decimal>("ProcessSchemaParameterPositiveValue");
decimal result = Math.Round(positiveValue, 1, MidpointRounding.ToEven);
Set<decimal>("ProcessSchemaParameterResult", result);
return true;

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

Сергей, в отличие от старого движка процессов, в котором можно было указать в элементе-формуле или условии произвольный фрагмент C#-кода, в нынешнем, интерпретируемом, работа с формулами может не поддерживать все особенности функций от Microsoft.

 

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

decimal positiveValue = Get<decimal>("ProcessSchemaParameterPositiveValue");
decimal result = Math.Round(positiveValue, 1, MidpointRounding.ToEven);
Set<decimal>("ProcessSchemaParameterResult", result);
return true;

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

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

Проблема в том что не могу отследить событие добавление файла на деталь "Файлы и ссылки".

"KtFilesConfirmingDiscountDetail": {
	"schemaName": "KtFilesConfirmingDiscountDetail",
	"entitySchemaName": "KtFilesConfirmingDiscount",
	"filter": {
		"detailColumn": "KtOpportunityProductInterest",
		"masterColumn": "Id"
	},
	"subscriber": {
		"methodName": "discountValueEnable"
	}
}

Данная конструкция отслеживает удаление файла а так же изменение записи (описание внутри, можно сказать редактирование), но добавление файла не как не отправляет сообщение. Смотрел логику работы, так и не нашел что бы отправлялось сообщение что "добавлен файл"

Нравится

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

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

 

Если нужно разработать свою логику со срабатыванием на добавление, можно в обычном БП или встроенном БП объекта файла в этом разделе завязаться на событие добавления.

 

Например, в CaseFile есть такая логика:

Зверев Александр,

 

Код детали

define("KtFilesConfirmingDiscountDetail", ["css!KtFilesConfirmingDiscountDetailCssModule"],
	function() {
	return {
		methods: {
			/**
			 * Initializes parent entity.
			 */
			initParentEntity: function() {
				this.parentEntity = {};
				const entitySchemaName = this.entitySchema && this.entitySchema.name || "";
				const parentSchemaName = entitySchemaName.replace("KtFilesConfirmingDiscount", "KtOpportunityProductInterest");
				const masterRecordId = this.get("MasterRecordId");
				this.parentEntity.EntityName = parentSchemaName;
				this.parentEntity.RecordId = masterRecordId;
			},
			/**
			 * ############## ####### "drag" # "drop" ##########.
			 * @private
			 */
			initDropzoneEvents: function() {
				const dropZone = document.getElementById("DragAndDropContainerOpportunityProductInterest");
				if (!dropZone) {
					return;
				}
				if (this.Terrasoft.Features.getIsEnabled("CheckMasterRecordEditRights") &&
						!this.get("CanEditMasterRecord")) {
					return;
				}
				this.Terrasoft.ConfigurationFileApi.initDropzoneEvents(dropZone, function(over) {
					if (over) {
						dropZone.classList.add("dropzone-hover");
					} else {
						dropZone.classList.remove("dropzone-hover");
					}
				}, function(files) {
					this.onFileSelect(files);
				}.bind(this));
			},
			getAddRecordButtonVisible: function() {
				return this.getToolsVisible() && this.get("CanEditMasterRecord") && this.get("IsEnabled");
			}
		},
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "merge",
				"name": "DragAndDrop Container",
				"parentName": "Detail",
				"propertyName": "items",
				"values": {
					"id": "DragAndDropContainerOpportunityProductInterest",
					"selectors": {"wrapEl": "#DragAndDropContainerOpportunityProductInterest"},
					"itemType": Terrasoft.ViewItemType.CONTAINER,
					"wrapClass": ["dropzone"],
					"items": [
						{
							"labelClass": ["DragAndDropLabel"],
							"itemType": Terrasoft.ViewItemType.LABEL,
							"caption": {"bindTo": "Resources.Strings.DragAndDropCaption"}
						}
					]
				}
			}
		]
		/**SCHEMA_DIFF*/
	};
});

Родительский объект "FileDetailV2 ( UIv2 )". Думаю CSS нет смысла прикладывать, он стандартный.

Событие на добавление нужно отловить на клиентской части, нужно по этому событию сделать поле на странице редактируемым (снять блок, эта логика уже есть)

По рекомендации поддержки просмотрел методы сохранения и решил остановится на onFileComplete

 

на стороне детали:

messages: {
	"DiscountValueEnable": {
		"mode": Terrasoft.MessageMode.PTP,
		"direction": Terrasoft.MessageDirectionType.PUBLISH
	}
},
onFileComplete: function() {
	this.callParent(arguments);
	this.sandbox.publish("DiscountValueEnable", null, [this.sandbox.id]);
}

на стороне страницы:

messages: {
	"DiscountValueEnable": {
		mode: this.Terrasoft.MessageMode.PTP,
		direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
	}
},
methods: {
	init: function() {
		this.callParent(arguments);
		this.sandbox.subscribe("DiscountValueEnable", function() {
				this.discountValueEnable();
			}, this, [this.sandbox.id + "_detail_KtFilesConfirmingDiscountDetailKtFilesConfirmingDiscount"]);
	},
	discountValueEnable: function(){
		this.set("discountValueEnable", true);
	}
}

 

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

Согласно статье https://academy.terrasoft.ru/documents/technic-sdk/7-16/klass-entityschemaquery-rabota-s-filtrami можно подключать и отключать фильтры и далее считывать уже разные отфильтрованные данные

var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Country.Name", "Испания");
var esqSecondFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Country.Name", "Франция");
esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.OR;
esq.filters.add("esqFirstFilter", esqFirstFilter);
esq.filters.add("esqSecondFilter", esqSecondFilter);
esq.getEntityCollection(function (result) {
    if (result.success) {
        result.collection.each(function (item) {
            // Обработка элементов коллекции.
        });
    }
}, this);
 
// Для второго фильтра указывается, что он не будет участвовать в построении результирующего запроса.
// При этом данный фильтр не удаляется из коллекции фильтров запроса.
esqSecondFilter.isEnabled = false;
 
esq.getEntityCollection(function (result) {
    if (result.success) {
        result.collection.each(function (item) {
            // Обработка элементов коллекции.
        });
    }
}, this);

Решил сделать так же

var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
	rootSchemaName: "KtJasperFullNumberPool"
});
var requestFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, 
	"KtRequest", this.get("KtRequest").value);
var productFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, 
	"KtOpportunityProductInterest", this.get("Id"));
esq.filters.add("requestFilter", requestFilter);
esq.filters.add("productFilter", productFilter);
esq.getEntityCollection(function (result) {
	if (result.success) {
		this.set("IsVisibleKtJasperNumbersInKtRequestDetail", result.collection.getItems().length > 0 ? true : false);
	}
}, this);
productFilter.isEnabled = false;
esq.getEntityCollection(function (result) {
	if (result.success) {
		this.set("NumberCounts", result.collection.getItems().length);
	}
}, this);

Но при запуске, когда доходим до второго "esq.getEntityCollection" получаю ошибку "message: Uncaught Terrasoft.ItemAlreadyExistsException: Элемент с ключом "24f2c79e-4a52-457f-9e8e-e24009bb135b" Уже существует"

Изображение удалено.

Как бы не старался, не могу сделать что бы как в примере с ак=ккадемии работало.

Подскажите, что я делаю не так, и что это за элемент что при чтении создается новый?

Нравится

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

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

Литвинко Павел,

 в какую колонку? Может у меня что-то не так?

А что это за GUID «24f2c79e-4a52-457f-9e8e-e24009bb135b»?

Это запись в таблице KtJasperFullNumberPool, Id поля, фильтра или ещё что-то?

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