получение и изменение данных полей
Технические вопросы
7.x

Добрый день, только начинаю изучение данного ПО.
Столкнулся с таким вопросом, нужно получить результирующее поле по определенной формуле.
Я так полагаю что всё это делается по следующему пути: я открываю конфигурацию, там в Custom нахожу нужную форму, в ней создаю событие "перед сохранением" и там создаю процесс в который добавляю сценарий C# по расчету этих полей. Вот как в этом сценарии можно получить данные полей?
я так полагаю что

public virtual bool ScriptTask1Execute(ProcessExecutingContext context) {
                       
//так не работает
int result = Convert.ToInt32(UsrMargCoast.Value)+ 1;
UsrMargCoast.Value = result;

//так не понятно что написать где "dlData"
var Dataset = dlData.Dataset;
Dataset.Values('UsrMargCoast') = Dataset.Values('UsrMargCoast') + 1;

                }

или я вообще не в том краю?

Нравится

8 комментариев
//так не понятно что написать где "dlData"
var Dataset = dlData.Dataset;
Dataset.Values('UsrMargCoast') = Dataset.Values('UsrMargCoast') + 1;

Это синтаксис террасофта тройки

в BPM используйте вот такой скрипт

Entity.SetColumnValue("UsrMargCoast", Entity.GetTypedColumnValue<int>("UsrMargCoast")+1);

Добрый день!

Данное решение описано для embeded process - обработчиков, которые запускаются по событиям объекта.
Данную задачу можно реализовать через бизнес процесс без написания не единой строки кода.
Создайте новый бизнес процесс в дизайнере процессов. Создайте новый параметр бизнес процесса с типом уникальный идентификатор (назовем его "Id записи"). Приступим к реализации бизнес процесса.
Бизнес процесс будет иметь два стартовых элемента - сигнала:

  1. При добавлении новой записи
  2. При изменении существующей записи

После каждого стартового сигнала, используйте элемент "Формула". Этим элементом мы запишем Id записи, по которой запускается процесс, в параметр "Id записи".
Объеденим две ветки, используя элемент "Исключающее ИЛИ".
После исключающего ИЛИ, используйте "Чтение данных". Выберите нужный объект (раздел) и в фильтре сравните Id с параметром "Id записи".
Далее, используйте элемент "Изменить данные". Выберите нужное поле и в заполните значение этого поля, расчитывая нужное Вам значение.

Для того, чтобы этот процесс не "засорял" журнал процессов, в свойствах процесса уберите признак "Журналировать".

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

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

ааа, ещё не опубликовал

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

"Демьяник Алексей Олегович" написал:Создайте новый параметр бизнес процесса с типом уникальный идентификатор (назовем его "Id записи")
не где не могу найти где они создаются(((

На скриншоте отображена страница со свойствами процесса.
Откройте свойства процесса. Если панели изображенной на скриншоте нет, тогда нажмите на стрелку, отмеченную в квадрате под номером 1.
Вверху будет ветка процесса. Нажмите правой кнопкой на "Parameters". Нажмите "Добавить" (квадрат под номером 2).

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

"Демьяник Алексей Олегович" написал:

На скриншоте отображена страница со свойствами процесса.

Откройте свойства процесса. Если панели изображенной на скриншоте нет, тогда нажмите на стрелку, отмеченную в квадрате под номером 1.

Вверху будет ветка процесса. Нажмите правой кнопкой на "Parameters". Нажмите "Добавить" (квадрат под номером 2).

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


Спасибо, я похожий скриншот видел, но не нашел как вызвать это окно. а оказывается справа есть 2 незаметных стрелочки.

"Демьяник Алексей Олегович" написал:Данную задачу можно реализовать через бизнес процесс без написания не единой строки кода.

всё сделал как описали. Спасибо. всё работает замечательно!

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

Здравствуйте.
Где и как можно настроить уведомление о новых сообщениях. Сообщения приходят, но в боковой панели не показывается уведомление. Возможно ли настройка уведомления?
Спасибо

Нравится

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

Здравствуйте!
Следует проверить доступ Вашего пользователя или роли, в которую он входит к объектам - "Уведомление", "Уведомление ленты" (раздел Администрирование: Доступ к объектам).
Также просьба уточнить название и версию Вашего продукта.

"Зарицкий Олег Васильевич" написал:

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

Следует проверить доступ Вашего пользователя или роли, в которую он входит к объектам - "Уведомление", "Уведомление ленты" (раздел Администрирование: Доступ к объектам).

Также просьба уточнить название и версию Вашего продукта.

Здравствуйте.
bpm'online sales enterprise 7.6
Когда открываешь боковую панель с письмами, там показываются новые сообщения. Однако, уведомление о том, что пришло новое письмо или же изменения в ленте не показывается. Допустим, как приходит уведомление о новой визе или же обычные уведомления.
Спасибо.

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

На коммуникационной панели стоит разделять "Лента" и "Уведомления".
В Ленте отображается сообщения раздела ЛЕНТА (например, другой пользователь оставил Вам комментарий или "лайкнул" существующий, созданный Вами)
В Уведомлениях отображается системная информация (например - Импортированы новые записи),
напоминания по активностям. Уведомления о новом входящем письме не приходят, т.к. достаточно открыть рядом стоящую панель "Email".
Более детальную информацию Вы можете найти в документации.
http://academy.terrasoft.ru/documents/docs/product/bpm'online%20sales/e…?

Добрый день!
Возобновлю тему.
Подскажите, как при создании визы по БП сделать так, чтобы сразу появлялись и исчезали уведомления.?

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

Вам необходимо сразу после создания визы запускать процесс "Получить количество уведомлений". Точно также нужно сделать поле визирования.

Алексей, а с какими параметрами нужно запускать этот процесс?

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

Алексей, спасибо. Все работает.

А почему может быть такое, что уведомление появляется (если открыть и посмотреть панель), но красной цифры на иконке не появляется?

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

"Владимир Соколов" написал:

А почему может быть такое, что уведомление появляется (если открыть и посмотреть панель), но красной цифры на иконке не появляется?

Уточните, пожалуйста, версию, на которой наблюдается такое поведение.

Задаю поля в Add Data (для Notification): To = ответственный, Title, Time = current date/time, Object = Document, Source = Owner, Unique caption Id = Record Id (из сигнала)
После этого запускаю Get number of reminders

В итоге само уведомление есть, а красная цифра не загорается.
Версия omnichannel English 7.6.0.938

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

Это зависит от часовых поясов на сервере, в профиле пользователя и на локальной машине пользователя. В версии 7.7.0. данное поведение поправили. Попробуйте убрать в профиле пользователя значение в поле "Часовой пояс".

"Демьяник Алексей" написал:Это зависит от часовых поясов на сервере, в профиле пользователя и на локальной машине пользователя. В версии 7.7.0. данное поведение поправили. Попробуйте убрать в профиле пользователя значение в поле "Часовой пояс".

Проверил в 7.10 - то же самое... Может, что-то забыл указать при создании Notification?

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

В версии 7.10 система показывает, что появились новые сообщения без доработок.

Что касается уведомлений, то необходимо проверить подключения по websocket. Также для корректного получения уведомлений, при создании уведомления необходимо заполнять следующие поля:

  • NotificationType
  • Время
  • Заголовок
  • Кому
  • Объект
  • Уникальный идентификатор заголовка

Здравствуйте, подскажите , пожалуйста: пользователь создает активность на другого человека: указывает все необходимые параметры (тип уведомления, время начала , завершения, заголовок, кому, объект), но уведомление не отображается на боковой панели другого пользователя, хотя в активности время напоминания ответственному указано. Часовые пояса у пользователей не указаны. Уведомления то приходят ,то нет (в основном нет). В чем может быть проблема?

Медведева Анастасия Дмитриевна,

Данное поведение может быть вызвано следующими причинами:

1. Сначала была установлена галочка "Напоминать автору" и сохранена активность, а уже после этого установлено время напоминания;

2. У Вас часовой пояс в профиле пользователя не совпадает с часовым поясом на ПК. 

3. У Вас не установлен Формат даты и времени.

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

1.Имеем некоторый код,который отправляет данные на сервер.Получем данные в виде JSON.
2.Хочу эти данные обрабоать и отобразить в контрагентах.
3.Какие дейстивия мне пошагово надо сделать(какие вкадки открывать, что и куда писать)?

Нравится

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

Владимир, интеграция с внешними ресурсами возможна через протокол OData. Данные можно получить в формате JSON или XML.

С детальной документацией по запросам OData можете ознакомиться на http://www.terrasoft.ru/bpmonlinesdk/ по пути Статьи -> API BPMOnline -> OData, а именно:
http://www.terrasoft.ru/bpmonlinesdk/WorkWithBpmByOdata.html
http://www.terrasoft.ru/bpmonlinesdk/WorkWithBpmByOdataHttp.html

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

Здравствуйте, Николай!

Реализация полностью зависит от данных, которые Вы хотите получать. Примера, на основании которого можно реализовать получение любых данных, нет. Главное начать, а по точечным вопросам уже легче получить ответ:wink:.

Здравствуйте.
Вопрос следующий:
Вот у нас есть свой билинг и он может отдавать РОST запросы если оплата произведена. В запросе будет хранится информация об OrderId заказа и Email клиента что сделал оплату. Что мне нужно сделать чтобы bpmonline получил и обработал этот запрос и в счете поменялась состояние оплаты на оплачен полностью.

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

Создайте бизнес процесс ChangeOrderStatus с параметром OrderId. Элементом изменить данные Вы будете менять состояние счета, у которого Id совпадает с параметром процесса OrderId.

С биллинга отправляйте http запрос на адрес http[s]://<адрес_приложения_bpm'online>/0/ServiceModel/ProcessEngineService.svc/ChangeOrderStatus/Execute?OrderId='Здесь должен быть Id заказа'

Более подробно Вы можете узнать по ссылке.

Спасибо, Алексей.
А скажите еще. Может ли bpmonline отправлять запросы? Если да, то как это сделать?

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

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

Создайте бизнес процесс ChangeOrderStatus с параметром OrderId. Элементом изменить данные Вы будете менять состояние счета, у которого Id совпадает с параметром процесса OrderId.

С биллинга отправляйте http запрос на адрес http[s]://<адрес_приложения_bpm'online>/0/ServiceModel/ProcessEngineService.svc/ChangeOrderStatus/Execute?OrderId='Здесь должен быть Id заказа'

Более подробно Вы можете узнать по ссылке.


Я так понимаю это get запрос. А можна сделать Post запрос, ибо у нас еще одна задача - в запросе передать значения карточок контакта (150 полей в одной карточке) и они не поместятся все в строку.

В документации написано следующее:
"Запуск бизнес-процесса

Чтобы запустить в системе определенный бизнес-процесс, необходимо вызвать метод Execute сервиса ProcessEngineService.

Вызов метода Execute можно выполнять с помощью HTTP-запросов GET и POST."

Так что все поместится) Главное, чтобы параметра был с типом "Строка 500 символов".

Я так понял, Я после Post запроса получу в бизнесс-процессе (например) файл Json и присвою его параметру с типом "Строка 500 символов".
А как мне достать из этого вайла все нужные мне поля? Есть какой-то пример?
Спасибо вам большое за ваши ответы, Алексей!

У сервиса ProcessEngineService есть результирующий параметр ResultParameterName, результат которого может быть получен в результате выполнения бизнес-процесса. В этот параметр Вы можете записать JSON строку.

Показать все комментарии
ITIL
общий почтовый ящик
почтовый ящик
служба поддержки
7.x

Добрый день!
В itil transitions в инструкции написано:

Для начала работы по процессу необходимо выполнить предварительные настройки.
Прежде всего:
• Укажите почтовый ящик, который будет использоваться в бизнес-процессе для
автоматической отправки почтовых сообщений ( его необходимо указать в соответствующей системной настройке e-mail службы поддержки)
Во вторую очередь:
• Настройте общий почтовый ящик службы поддержки, который будет использоваться для
обмена сообщениями между службой поддержки и клиентами.
• Настройте права доступа пользователей системы к общему почтовому ящику

Вопрос:
В чем разница между этими двумя ящиками?
E-mail службы поддержки служит для отправки автоматических сообщений(отправка пользователю сообщений при взятии инцидента в работу, при разрешении и т.п.)

Зачем нужен еще один ящик "общий почтовый ящик службы поддержки"? Где именно в процессе он сейчас используется? Можно ли использовать для этих целей один и тот же ящик?

Нравится

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

Добрый день, Дарья!

Речь идет об одном и том же почтовом ящике. Функция общего ящика настраивается в [Доступе к операциям] - [Доступ к подключению общего почтового ящика].
Здесь необходимо добавить Пользователя или роль которым будет доступна возможность отправки писем с общего ящика поддержки:
[IMG]http://s018.radikal.ru/i524/1507/ee/d3227987b75e.jpg[/IMG]
После, необходимо в профиле активировать возможность использования общего ящика:
[IMG]http://s018.radikal.ru/i502/1507/eb/06e8171f1bf1.jpg[/IMG]

А обшие ящики только в ITIL? Или уже появились во всех продуктах?

Владимир, посмотрите, есть ли в вашем продукте системная операция [Доступ к подключению общего почтового ящика]. Если есть, то возможность такого ящика скорее всего есть..

Сергей, то есть этот же общий почтовый ящик нужно указывать в системной настройке "e-mail службы поддержки"?

"Владимир Соколов" написал:А обшие ящики только в ITIL? Или уже появились во всех продуктах?

Владимир, есть в линейке продуктов service и sales.

"Татаровская Дарья" написал:

Сергей, то есть этот же общий почтовый ящик нужно указывать в системной настройке "e-mail службы поддержки"?


Дарья, да.

Показать все комментарии
Иконка
напоминания
раздел
Технические вопросы
7.x

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

Как сделать чтобы иконка корректно отображалась в списке разделов и в области уведомлений?
И ещё один вопрос: можно ли сделать напоминание на деталь а не на раздел?

Версия 7.5

Нравится

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

Вячеслав, добрый день!

1. Если я правильно понял, то изображение для уведомлений можно добавить в модуле «NotificationsModule» (Рис. 1) (предварительно необходимо заместить).

Для корректного отображения необходимо, чтобы размер был 42х42 pixels и была заливка заднего фона (например, серый).

2. Такой возможности в приложении нет.

Заместил NotificationsModule, скопировал исходный код. Загрузил изображение, но получаю ошибку в консоли "Cannot read property 'source' of undefined"
Выяснил что ругается на эту функцию:

            /**
             * Создает контейнер для размещения текста о новых уведомлениях
             * @private
             * @return {Object} Возвращает экземпляр конфигурации контейнера
             */
            getMessageContainer: function() {
                debugger;
                return {
                    className: "Terrasoft.Container",
                    id: "messageContainer",
                    selectors: {wrapEl: "#messageContainer"},
                    classes: {wrapClassName: ["showNewNotificationContainer-class"]},
                    visible: {bindTo: "ShowNewNotificationsVisible"},
                    items: [
                        {
                            className: "Terrasoft.Button",
                            caption: {bindTo: "getShowNewNotificationText"},
                            classes: {textClass: ["showNewNotificationButton-class"]},
                            style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            iconAlign: Terrasoft.controls.ButtonEnums.iconAlign.LEFT,
                            imageConfig: {
                                source: Terrasoft.ImageSources.URL,
                                url: Terrasoft.ImageUrlBuilder.getUrl(resources.localizableImages.More)
                            },
                            click: {bindTo: "onShowNewNotificationClick"}
                        }
                    ]
                };
            },

Как я понимаю не может получить путь к изображению в строке
"url: Terrasoft.ImageUrlBuilder.getUrl(resources.localizableImages.More)"
потому, что resources.localizableImages.More = undefined

Я так понимаю, что при замещении объекта, localizableImages не подтянулись. Допустим ActivityImage и DocumentImage я могу перезалить. А вот что такое More ?

И в связи с чем вопрос почему на вкладке "Изображения" изображения не отображаются? Я бы мог оттуда их вытащить.

Вячеслав, судя по сообщению:

"Ляутин Вячеслав Андреевич" написал:Заместил NotificationsModule, скопировал исходный код. Загрузил изображение, но получаю ошибку в консоли "Cannot read property 'source' of undefined"

У Вас не подгрузились ресурсы.

Есть не большая специфичность у модулей. При замещении модулей необходимо копировать полностью код, в ручную добавлять в структуру замещенного модуля, например, Images, т.е. копировать из родительского «ActivityImage», «DocumentImage» и т.д. И затем заново загружать изображения в поле «Изображение».
Также название в структуре для всех изображений необходимо задать новое (например, ActivityImageNew), а также изменить в коде на соответствующее название объекта.

Например:

imageConfig: {
source: Terrasoft.ImageSources.URL,
url:Terrasoft.ImageUrlBuilder.getUrl(resources.localizableImages.MoreNew)
},
click: {bindTo: "onShowNewNotificationClick"}
}

"Ляутин Вячеслав Андреевич" написал:
Я так понимаю, что при замещении объекта, localizableImages не подтянулись. Допустим ActivityImage и DocumentImage я могу перезалить. А вот что такое More ?

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

"Ляутин Вячеслав Андреевич" написал:
И в связи с чем вопрос почему на вкладке "Изображения" изображения не отображаются? Я бы мог оттуда их вытащить.

Колонка «Изображение» работает только на импорт файлов.
Изображение можно отобразить используя разметку страницу в браузере.

Например, можно поступить следующим образом, прописать в адресной строке:

https://название_сайта/0/img/source-code/hash/NotificationsModule/More

, где

NotificationsModule – название модуля
More – название изображения

И в результате можно сохранить изображение на рабочий стол.

Загрузил изображение для localizableImages.More

Ошибок нет и все картинки отображаются как и прежде. Т.е. стандартные разделы отображаются иконками с фоном. А мой кастомный раздел "Заявки" на прозрачном фоне, хотя в localizableImages.EmptyImage загрузил иконку с фоном.

На всякий случай загружаю скриншот исходного кода NotificationProvider для моего раздела

NotificationProvider

А еще пришлось переписывать все localizableStrings.

Вячеслав, как писал ранее:

«Есть не большая специфичность у модулей. При замещении модулей необходимо копировать полностью код, в ручную добавлять в структуру замещенного модуля, например, Images, т.е. копировать из родительского «ActivityImage», «DocumentImage» и т.д.»

Чтобы корректно заместить модуль необходимо полностью копировать и переименовывать локализированные строки, так значения родительского объекта не вызовутся.
После проделанных действий обязательно нужно чистить Redis и кэш браузера.

Если данный способ не помог, то можно поступить следующим образом:

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

sozdanie_spravochnika_s_izobrazheniem.docx

- в SysImage найти ID нужного изображения;
- проапдейтить изображения в колонке LogoID для нужного раздела (таблица SysModule);
- почистить Redis и кэш браузера.

Кэш и редис конечно чистил.

Я пока не пробовал способ через справочник. Но в теории мне кажется это не совсем то, что мне надо. У меня уже есть иконка раздела и колонка LogoID в таблице SysModule заполнена для моего раздела "Заявки". Там у меня хранится иконка с прозрачным фоном как я понимаю. А если я вместо неё загружу с фоном тогда при смене цветовой схемы в списке разделов будет не корректно отображаться иконка.

И еще исходя из названия локализированной картинки EmptyImage - она используется когда у раздела нет иконки, а у меня то она есть.

Или я что-то не так понимаю?..

Вячеслав, Вам необходимо загрузить в SysImage изображение. Нет разницы каким способом Вы это сделаете (через новый справочник или например, можно загрузить через мастер раздела изображение а потом вернуть прежнюю).
Если Вы хотите:
1. иконку для левой панели, где размещаются разделы, то Вам необходима прозрачная иконка и проапдейтить колонку «Image32Id» (таблица SysModule);
2. иконку для правой панели (панель уведомлений), то Вам необходима иконка с фоном (заливкой) и проапдейтить колонку «LogoId» (таблица SysModule);

Т.е загружаете изображение, узнаете ID и обновить значение для соответствующей колонки.

Да! Вот именно это мне и нужно было, оказывается колонка "Image32Id" для левой панели а "LogoId" для правой!

Спасибо большое всё заработало!
NotificationsModule можно не трогать.

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

Добрый вечер.
Возможно ли добавления налога к продукту не в процентах, а в конкретных цифрах?
На странице заказа, при добавлении продукта указывать налог не процентный, а в котором указывается конкретная цифра. К примеру, товар стоит 100 у.е., НДС - 5 у.е.
Возможен ли такой расчёт налога?
Спасибо.

Нравится

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

Дмитрий, здравствуйте!

К сожалению, НДС указывается только ставкой. Регулировать ставку Вы можете в системных настройках "Налог по умолчанию" и "Цена сформирована с учётом налога".

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

Спасибо!

Тогда нужно будет играть со скидками к каждому продукту по отдельности, что проблематично и займёт слишком много времени при коротких продажах.
Нет ли другого способа добавления к стоимости готового продукта конкретной надбавки не в процентах?
Благодарю.

"Ануфриев Дмитрий Юрьевич" написал:Нет ли другого способа добавления к стоимости готового продукта конкретной надбавки не в процентах?

Добавить такое поле в настройки налога. И изменить логику рассчета общей суммы продукта (см схему BaseProductDetailPageV2)

"Владимир Соколов" написал:
Ануфриев Дмитрий Юрьевич пишет:

Нет ли другого способа добавления к стоимости готового продукта конкретной надбавки не в процентах?

Добавить такое поле в настройки налога. И изменить логику рассчета общей суммы продукта (см схему BaseProductDetailPageV2)

Здравствуйте. Подскажите, а где это всё находится?

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

Данную схему Вы можете найти в конфигурации.

Спасибо!

"Арменчу Артём Александрович" написал:

Дмитрий, здравствуйте!

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

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

Данную схему Вы можете найти в конфигурации.

Спасибо!

С уважением, Арменчу Артём.

Здравствуйте.
Спасибо за разъяснение.
Надеюсь в следующем обновлении данная беспроцентная система расчёта налога будет учтена. Ибо для интернет-магазинов очень даже подходит.

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

Есть задача считать кол-во переносов задачи.
Сделал поле "кол-во переносов" и когда у задачи дата завершения меняется, то +1 к переносам.
Потом может быть будет получена задача выводить список переносов (кто, на какой срок). Поэтому подумал, что может сделать в рамках аудита, но не понятно как в bpm сделать поле с запросом с sql (как в тройке можно было). Такое можно сделать в bpm?

Начал копать в сторону на событие перед сохранением записи. Но не понятно как получить старое значение колонки. Есть ли какое-нибудь свойство OldValue и как его получить?

Если нет, думаю над двумя костылями:
1) После загрузки данных, записывать значение в переменную и сравнивать с ней
2) В скрипте делать запрос к БД к этой активности (перед сохранением запись еще не изменена и там находится старое значение)

Какие есть пути решения?

Нравится

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

Добрый день, Александр Владимирович!

Для решения Вашей задачи используйте следующие возможности:
1) Создайте деталь с полями:

  • Старая дата начала
  • Новая дата начала
  • Старая дата окончания
  • Новая дата окнончания
  • Активности

Поля "Создал" и "Дата создания" - системные
Колонка связи с объектом Активности - Деталь.Активность=Активность.Id.
2) Создайте бизнес процесс с двумя входами:

  • При добавлении записи "Активность"
  • При изменении записи "Активность" в полях "Дата начала", "Завершение"

Логика следующая:
1) Первая запись будет создаваться при добавлении активности
2) Узнать старую дату начала Вы сможете в поле "Новая дата начала", старую дату окончания - в поле "Новая дата окончания", отсортировав записи на детали по дате создания по убыванию.
3) Количество переносов = (количество записей на детали - 1)

А в объекте Contact в процессе есть следующий метод NamePartColumnChanged, в котором как раз отслеживается старое значение:

return changedColumns.Any(column => {
return
column.Name == namePart &&
column.Value != null &&
!string.IsNullOrEmpty(column.Value.ToString()) &&
!column.Value.Equals(column.OldValue);
});

Так же в событии Saving доступно значение Entity.GetTypedOldColumnValue("FieldName"), которое можно записать в параметр, а потом в событии Saved уже сравнивать с текущим значением

Владимир, данный вариант предполагает хорошие навыки программирования. Мой вариант подойдет для пользователей, которые не владеют программированием.

Показать все комментарии
7.5
Мастер разделов
Технические вопросы
7.x

Добрый день, создал объект, добавил ему все необходимые поля, через мастер деталей пытаюсь создать деталь для этого объекта и получаю следующую ошибку
1
Причем создаю один в один с другим объектом, с предыдущим проблем не было

Нравится

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

Олег, в базовой версии не удалось воспроизвести ошибку.
Попробуйте, пожалуйста, пересоздать объект.
Ждем обратной связи!

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

Здравствуйте, Олег!
Вы создаете в системе новый объект не наследуясь от базового объекта?
Скажите, пожалуйста, в данном объекте кроме системных полей и двух справочных полей есть еще какие-то поля? Например, название и описание.

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

А я после странных творений мастера в английской версии 7.6 с ним завязал.
Делаю объект в конфигурации. Дальше на его основе генерирую мастером деталь без вообще каких либо полей, правок... главная его задача в нынешнем виде - зарегистрировать мою деталь в системе, и за это ему большое спасибо. Потом иду в конфигурацию и полностью (!) переписываю текст модулей, им созданных :smile:
Вот выйдет новый красивый и правильный мастер в 7.7...

Вынужден огорчить на 7.8 такая же проблема!
Создал новый объект, унаследовался от Базового. Набросил 2 поля: 1 для связи и 2 целое.
Забежал в Мастер Деталей. Попытался создать.
Создает запись в SysModuleEntity на шаге Регистрация детали и на этом этапе висит.

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

  1. SysDetail
  2. SysModuleEntity
  3. SysModuleEdit

Я и сам бы зарегал но не работает же :(
4 детали создал руками в Конфигурациии, а 5ый ну никак. Ни мастером ни руками(

Лечится созданием нового объекта и все по новой

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

Добрый день, уважаемые участники коллективного разума :cool:
В 7.6 есть работоспособный мастер создания раздела, но вот работает он только если создавать новый объект. А если нужно использовать существующий объект?
Для конкретики - я хочу создать раздел Cashflow и расширить функционал данной скромной детали в разделе Заказы до раздела - просмотр платежей, прикрепление к ним файлов и так далее.
Пойти по пути светлой стороны силы - создать все руками и зарегистрировать все руками... но может кто сталкивался с подобным и знает путь иной? Как бы мастеру объяснить, что мне надо создавать на основе существующего объекта...

Нравится

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

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

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


Рис. 1

Через мастер раздела можно только те объекты, которые являются пользовательскими (Рис. 2).


Рис. 2

Для этого Вам необходимо убрать значение в системной настройке "Префикс названиия объекта" (Рис. 3) и в местере раздела в коде указать название объекта (Рис 2) .


Рис. 3

Дмитрий, спасибо за ответ!
На всякий случай уточню - я указываю пустой префикс в настройках, затем перезахожу в систему и создаю новый раздел Cashflow, при этом у меня подцепится существующий объект?

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

Да совершенно верно!
Убираете префикс и в коде указываете название кастомного объекта

"Вильшанский Дмитрий" написал:название кастомного объекта

То есть все же кастомного? Штатный cashflow не пройдет?

Александр, я писал ранее:

"Вильшанский Дмитрий" написал:

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

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



Рис. 1

Через мастер раздела можно только те объекты, которые являются пользовательскими (Рис. 2).



Рис. 2

С объектом "Cashflow" не получится подобное сделать.

Ну значит пойду познавать светлую сторону силы - вернусь с прокачанным навыком ручной регистрации раздела :cry:

Александр Кудряшов,

прокачали скилл? Научите юного падавана)) Тоже хочу уметь)

У нас такой же вопрос.. создать раздел, в котором будут отображаться все записи с существующей детали.

 

Alex Zaslavsky пишет:

Alex Zaslavsky,

и нас))

 

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

В последних версиях приложения создать раздел на основании существующего объекта возможности нет, аналитики продукта пока рассматривают реализацию такой возможности.

Можно данный тип раздела создать вручную, подробный алгоритм описывался в этом посте: https://community.terrasoft.ru/questions/poradok-sozdania-razdela-vrucnuu

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

Добрый день!

При попытке подключиться к 7.6 onSite, получаю такую ошибку:

[RedisResponseException: invalid DB index, sPort: 49982, LastCommand: ]
   ServiceStack.Redis.RedisNativeClient.CreateResponseError(String error) +197
   ServiceStack.Redis.RedisNativeClient.ExpectSuccess() +162
   ServiceStack.Redis.RedisNativeClient.set_Db(Int32 value) +136
   ServiceStack.Redis.RedisNativeClient.AssertConnectedSocket() +172
   ServiceStack.Redis.RedisNativeClient.SendCommand(Byte[][] cmdWithBinaryArgs) +39
   ServiceStack.Redis.RedisNativeClient.SendExpectSuccess(Byte[][] cmdWithBinaryArgs) +18
   ServiceStack.Redis.PooledRedisClientManager.GetClient() +573
   Terrasoft.Redis.RedisClientsManager.GetClient() +46
   Terrasoft.Redis.BaseRedisStore.GetValue(String key) +102
   Terrasoft.Core.Configuration.SysCulture.GetCultures(UserConnection userConnection) +94
   Terrasoft.Core.AppConnection.InitilizeCulture() +46
   Terrasoft.Core.AppConnection.Initialize(ConfigurationSectionGroup appConfigurationSectionGroup) +615
   Terrasoft.WebApp.Loader.Global.InitializeAppConnection() +475
   Terrasoft.WebApp.Loader.Global.Application_Start(Object sender, EventArgs e) +168

[HttpException (0x80004005): invalid DB index, sPort: 49982, LastCommand: ]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +12584905
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +175
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +404
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475

[HttpException (0x80004005): invalid DB index, sPort: 49982, LastCommand: ]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12601936
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12441597

То, что причина в Redis - это я понял. А, вот как исправить - не знаю. Может, кто сталкивался с подобным?

Нравится

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

У Вас в ConnectionStrings выставлено не валидное значение db (базы данных).

В конфигурационном файле "ConnecnionStrings.config" (находится в папке с сайтом BPMonline) есть строка, в которой указаны параметра подключения к Redis-серверу: . Укажите в прараметре host имя машины, где установлен Redis-сервер. В параметре db укажите номер базы redis (установите значаение "0"). В значение пераметра port укажите значение - 6379. Параметр timeout оставьте равным - 20. Проверьте, что в сайте есть приложение под названием - "0" и оно настроено на директорию "Terrasoft.WebApp" (находится в папке с сайтом).

Спасибо, помогло!

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