Всем доброго времени суток.

Версия 7.9 sales.

Задача примерно такая: существует поле (колонка) на странице, и кнопка, вызывающая бизнес-процесс, в который отправляется значение из этого поля.

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

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

Возможно ли это сделать?

Нравится

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

Да, в вашем БП вызывайте сигнал и передавайте в него значение.

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

Получите и обработайте значение из БП, после чего вызовите стандартное системное окно сообщения вот таким вот способом:

Terrasoft.utils.showMessage({
	caption: "Ваше сообщение",
	buttons: ["ok"],
	defaultButton: 0
});

Илья, это понятно :)

Можно даже при помощи скрипта вызвать стандартное модальное окно :) this.showInformationDialog

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

"Смородинов Денис" написал:Там вопрос именно в том, можно ли отобразить это всё именно в виде синенького блока у поля, как при стандартной валидации.

Я не сразу понял о чем идет речь.
Если вас интересует именно визуализация процесса, а не имитация механизма валидации, то можете поступить вот так...
Для примера в карточке контакта, в методе onEntityInitialized, или прям в консоли отладки выполните код:

var targetElements = Ext.select("[id*=AccountNameTextEdit-validation]");
targetElements.setStyle({"visibility": "visible"});
targetElements.setHTML("Мое сообщение");

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

Илья, ясно, спасибо.

То есть по сути - обращение к элементу на уровне DOM и подстановка туда напрямую своего текста.
Я просто думал, может есть какие-нибудь bpm-овские методы для вызова этого элемента.

"Смородинов Денис" написал:Я просто думал, может есть какие-нибудь bpm-овские методы для вызова этого элемента.

Они однозначно есть. Для этого надо подебажить asyncValidate метод из BasePageV2
Истина где-то там рядом (с)

Лично я запнулся на вызове this.validate
это дело отправляет тебя к "праотцам" :lol: в all-combined.js
С минифицированным кодом ядра.
Даже в Pretty Print режиме это практически нечитаемо.


вот где-то здесь - творится "магия" :)

Но так же, капитан очевидность подсказывает, что в ткущем контексте (объекте this)
есть аттрибуты ValidationConfig и ValidationInfo

Я "игрался" устанавливая false в соотв аттрибуте ValidationInfo принудительно на this.validate это не оказывает эффекта.
Но возможно ключ к решению вашего кейса штатными средствами - манипуляция с этими объектами, например найти пример объекта добавляемого в ValidationConfig, возможно туда можно добавить некий конфигурационный объект.

Илья, большое спасибо за настолько подробный разбор темы! Прямо даже неожиданно :)

Но я думаю, до манипуляции объектами не дойдёт - это была по сути хотелка, выводить информацию таким вот образом. В итоге договорились, что всё-таки сделаем стандартным окном :) Но знания в любом случае полезные.

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

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

!

Нравится

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

Добрый день, Мария.

За стили отображения мини карточки контакта отвечают стили, описанные в модулях ContactMiniPageCSS и BaseMiniPageCSS. Вам необходимо создать свой модуль с css стилями по аналогии с ContactMiniPageCSS и добавить его в зависимости к замещающей схеме ContactMiniPage.

При замещении css стилей Вам необходимо смотреть в сторону добавления стилей height и overflow-y к селектору MiniPageContentContainer.

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

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

Нравится

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

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

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

"Shevchenko Andrey" написал:

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

Настройки колонок находятся в SysProfileData.

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


Спасибо

"Сурмачевский Евгений Александрович" написал:выполнить привязку SySprofileData к выгружаемому пакету.

Не работает :)
Через "Данные" настройки колонок не переносятся, по крайней мере в версиях до 7.10.
В таблице SysProfileData 2 колонки с бинарными данными, в конечном итоге на целевой системе - записи создадутся - но значения этих колонок окажутся пустыми, что делает бесполезным само мероприятие.
Мы переносим настройки колонок SQL-скриптами.
Порядок действий такой, используем по-возможности какой ни будь толковый инструмент для работы с SQL например Jetbrains DataGrip
1) Открываем на просмотр таблицу SySprofileData, отсортируем записи по колонке ModifedOn
2) Идем в необходимый реестр/карточку/деталь, или открываем необходимый справочник/поиск, настраиваем колонки, выполняем действия "Сохранить" (Если кастомите под конкретного пользователя), или "Сохранить для всех".
3) Снова смотрим в таблицу, там появится 2-3 новые записи.
4) Дампим данные (DataGrip умеет прям в виде INSERT записей формировать).
5) Составляем SQL-скрипт:
В ваших INSERT обратите внимание на значения в колонке Key
Перед вставкой проверяйте наличие других записей с таким Key и удаляйте их если они есть.
Т.к. если в этой таблице будет несколько записей с одинаковым соотношением Key - ContactId
то применяться будут более старые значения.

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

Необходимо построить строку запроса ESQ, для присоединения колонки:
Таблицы:
Contact
SysAdminUnit
SysAdminUnitInRole

Корневая (текущая схема): Contact

Необходимо присоединить схему "SysAdminUnit" по полю "Contact"
Вопросов нет:

esq.addColumn("[SysAdminUnit:Contact].Id", "AdminUnitId")

В результате в поле ответа "AdminUnitId" будет содержаться соответствующее значение Id из "SysAdminUnit"

Так...
А теперь мы хотим немного усложнить, и использовать полученный Id для присоединения еще одной таблицы SysAdminUnitInRole по полу "SysAdminUnit"
пробуем:

esq.addColumn("[SysAdminUnit:Contact].[SysAdminUnitInRole:SysAdminUnit].Id", "AdminUnitInRoleId")

Но и такая конструкция уже не работает...

Здесь какая-то проблема с колонкой Id так как если для связи все время использовать разные поля - то такая конструкция работает нормально, например если бы мы привязывали "AdminUnitId" у которого нужный нам для дальнейшей связи Id содержался бы в некоем кастомном поле, н/п "TargetId"
, а в конечной таблице SysAdminUnitInRole нам нужен был бы не Id а скажем какое ни будь другое поле, н/п "CustomFiled"
тогда:

esq.addColumn("[SysAdminUnit:Contact"].[SysAdminUnitInRole:SysAdminUnit:TargetId].CustomFiled", "AdminUnitInRoleId")

то такой запрос бы сработал...

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

Нравится

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

Все понятно... Это не я дурак, это лыжи не едут.
SysAdminUnitInRole оказалась ОСОБЕННОЙ таблицей, в нее нельзя делать напрямую ESQ запросы, как и в некоторые другие таблицы системы, даже от лица Supervisor, обсуждалось в этой теме форума

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

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

Нравится

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

Добрый день!

Документация по РФС будет доступна в течение 3-х недель на сайте Академии в разделе SDK
https://academy.terrasoft.ru/documents/technic-sdk/7-10/dokumentaciya-p…

Здравствуйте
Статьи по разработке в файловой системе для версии 7.10 пока что пишутся. Ориентировочно будут опубликованы через 2-3 недели.
Но можно попробовать использовать существующую (правда уже устаревшую) статью
https://academy.terrasoft.ru/documents/technic-sdk/7-10/rabota-s-server…
Подход аналогичный, правда поменялись названия кнопок, работа с SVN, механизм и правила выгрузки схем и ресурсов.
P.S. Постараемся опубликовать новую документацию по РФС как можно быстрее

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

//---------------
Раньше мы использовали для каждого разработчика отдельные рабочие пространства. И исходный код выгружали по пути "...\%WORKSPACE%\JScode" для клиентских схем и "...\%WORKSPACE%\Src" для CompilerSources. Соответственно каждый работал со своей конфигурацией обособленно и через SVN всё сливалось воедино.

Здавствуйте
Несколько конфигураций слить в разные папки, увы, никак не получится. Приложение может работать только с одним конфигурационным проектом Terrasoft.Configuration и только с пространством по-умолчанию (Default).

На текущий момент мы не рекомендуем использовать разработку в разных рабочих пространствах. Для каждого разработчика нужна своя среда разработки (развернутое приложение + база данных) и разработка должна вестись только в пространстве Default (Конфигурация 0)
https://academy.terrasoft.ru/documents/technic-sdk/7-10/osnovnye-pravil…

Понял. Спасибо за оперативный ответ.

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

Добрый день. bpm'online версии 7.10
Подскажите такой момент: во время отладки недоступны некоторые переменные. Visual Studio пишет:
Cannot obtain value of the local variable or argument because it is not available at this instruction pointer, possibly because it has been optimized away.
(Не удается получить значение локальной переменной или аргумента, так как оно недоступно по указателю инструкции, возможно, вследствие оптимизации.)

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

Нравится

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

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

Данная ошибка будет исправлена в ближайшее время. В качестве обходного решения рекомендуем вам отаттачиться от процесса и приаттачиться снова.

Спасибо, будем ждать.

Добрый день.
Подскажите в версии 7.10.1 исправлена ли ошибка?

Добрый день, Евгений!

К сожалению, это плавающая ошибка, исправлений пока нет. Решается повторной компиляцией приложения ПОСЛЕ аттача к процессу IIS. После выполнения Компилировать все в Конфигурации доступ к переменным есть. Однако рекомендуем переходить на работу с файловой системой : https://academy.terrasoft.ru/documents/technic-sdk/7-10/razrabotka-v-fa…
, так как примерно к концу года от данного функционала откажутся.

Добрый день.

система у меня настроена на работу в файловой системе.

Евгений, по данной ошибке при отладке в ФС отдел R&D работает, однако пока что нет точного кейса, в 7.10.1 не исправлено. Варианты исправления те же - зааттачиться заново либо же компилировать проект непосредственно Visual Studio, а не WorkspaceConsole.

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

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

Понимаю что можно вытащить через WorkspaceConsole, но предполагаю, что настройки полей, системные настройки не все перенесутся.

Конечно есть вариант, сделать копию бд...и WorkspaceConsole перетащить пакеты. Что скажете?

Поделитесь опытом пож-та.
Спасибо

Нравится

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

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

Есть два варианта:
1) Перенос БД (в случае, если на продакшн среде нет данных)
2) Выгрузить пакет через WorkspaceConsole. В таком случае необходимо предварительно выполнить привязку данных к пакету по данным, которые должны быть перенесены. Из того, что назвали вы, необходимо привязать данные объектов:

  • SysProfileData (Настройки колонок в разделах)
  • SysSettings (Системные настройки)
  • SysSettingsValue (Значение системных настроек)
1) Перенос БД (в случае, если на продакшн среде нет данных)

Т.е. нет необходимости привязки к SVN ?

А где хранятся рабочие места?

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

Привязка к SVN не требуется. Рабочие места хранятся в объекте SysWorkplace, разделы в рабочих местах - в объекте SysModuleInWorkplace.

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

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

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

Данное уведомление появляется при попытке привязать данные на новом локальном стенде. Уже и перекомпилировал, и обновлял БД. Что это за объект администрирования?)
Скрин: https://yadi.sk/i/o6CEkWqU3GjtQA

Нравится

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

Проблема в следующем:
Здесь храниться дата изменения объекта
SELECT *
FROM [SysSchema]
WHERE UId = '84F44B9A-4BC3-4CBF-A1A8-CEC02C1C029C'

А здесь дата когда изменения были приняты
SELECT *
FROM [SysSchemaSource]
WHERE SysSchemaId = '1E9FA34C-B906-48E7-BC1A-241190FFBD6C'

Посмотрев на объекты, изменения были применены а вот с датами косяк.
Дата изменения в моей базе указана была: '2017-07-05 18:37:55.000'

Изменив дату последнего изменения на дату из таблицы SysSchemaSource у меня ошибка ушла
update SysSchema
SET ModifiedOn = '2017-04-04 11:31:40.877'
WHERE UId = '84F44B9A-4BC3-4CBF-A1A8-CEC02C1C029C'

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

Выполните операцияю [Обновить для требующих обновления]

"Терещук Павел" написал:Здравствуйте!

Выполните операцияю [Обновить для требующих обновления]

Павел, это первое, что пришло в голову - но нет, не помогает.

Найдите последний измененный [Объект администрирования]

Пересохраните, опубликуйте, после чего выполните операцию [Обновить для выбранных]

Объект администрирования - системный. К нему доступа нет.
добавьте sql сценарий и впишите в него запрос:

update SysSchema
SET ModifiedOn = (SELECT top 1 ModifiedOn
FROM [SysSchemaSource]
WHERE SysSchemaId = '1E9FA34C-B906-48E7-BC1A-241190FFBD6C')
WHERE UId = '84F44B9A-4BC3-4CBF-A1A8-CEC02C1C029C'

И собственно выполните затем сценарий

"Сурмачевский Евгений Александрович" написал:Объект администрирования - системный. К нему доступа нет.
добавьте sql сценарий и впишите в него запрос:

update SysSchema
SET ModifiedOn = (SELECT top 1 ModifiedOn
FROM [SysSchemaSource]
WHERE SysSchemaId = '1E9FA34C-B906-48E7-BC1A-241190FFBD6C')
WHERE UId = '84F44B9A-4BC3-4CBF-A1A8-CEC02C1C029C'

И собственно выполните затем сценарий

Евгений, спасибо помогло!

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

Здравствуйте. Подскажите пожалуйста, как в BPM узнать является ли пользователь активным, т.е. находиться ли он в системе в данный момент?

Нравится

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

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

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

declare @userName varchar(50)
set @userName = 'Supervisor' /*Здесь должно быть имя пользователя*/
IF EXISTS
(select SysUserSession.Id from SysUserSession
inner join SysAdminUnit
on SysAdminUnit.Id = SysUserSession.SysUserId
where SessionEndDate is NULL and SysAdminUnit.Name = @userName)
print('Пользователь '+@userName+' сейчас в системе')
ELSE print ('Пользователь '+@userName+' оффлайн')

Добрый день!

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

http://prntscr.com/etibd0

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

С уважением,
Валерия

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

Добрый день.
Подскажите как на кнопку детали свой метод сделать.
Смотрел деталь "график поставок" нашел как добавить свою кнопку...но как убрать стандартную?

Нравится

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

"Юсупов Марат" написал:Подскажите как на кнопку детали свой метод сделать.

переопределить метод addRecord
"Юсупов Марат" написал:но как убрать стандартную?

в диффе remove->addRecordButton

"Варфоломеев Данила" написал:Юсупов Марат пишет:

но как убрать стандартную?

в диффе remove->addRecordButton

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

"Назыров Михаил" написал:Хотелось бы добавить, что если по нажатию на плюс появляется несколько вариантов добавления записи

Юзкейз интересный, если найдете решение в каком либо виде - обязательно отпишитесь для страждующих.
От себя могу предложить "костыль" в виде:
замещаем стандартный AddRecord метод, в котором перед родительской логикой (callParent)
делаем openLookup (открываем окно выбора) наполняя его само собой своей коллекцией вариантов,
ну а далее в коллбеке реагируем, в каких-то случаях идем по callParent варианту, в каих-то по своему кастомному. Вот...

"Назыров Михаил" написал:Хотелось бы добавить, что если по нажатию на плюс появляется несколько вариантов добавления записи

Юзкейз интересный, если найдете решение в каком либо виде - обязательно отпишитесь для страждующих.
От себя могу предложить "костыль" в виде:
замещаем стандартный AddRecord метод, в котором перед родительской логикой (callParent)
делаем openLookup (открываем окно выбора) наполняя его само собой своей коллекцией вариантов,
ну а далее в коллбеке реагируем, в каких-то случаях идем по callParent варианту, в каих-то по своему кастомному. Вот...

"Назыров Михаил" написал:Хотелось бы добавить, что если по нажатию на плюс появляется несколько вариантов добавления

"Севостьянов Илья Сергеевич" написал:если найдете решение в каком либо виде - обязательно отпишитесь для страждующих.

А в чём сложность-то? По кофигурации полно примеров.

{
	"operation": "merge",
	"name": "AddRecordButton",
	"values": {
		"click": Terrasoft.emptyFn, //перетираем стандартный обработчик клика
		"menu": {
			"items": [
				{
					"caption": "Нафига",
					"tag": "why",
					"click": {"bindTo": "onMyFuncClick"}
				},
				{
					"caption": "козе",
					"tag": "goat",
					"click": {"bindTo": "onMyFuncClick"}
				},
				{
					"caption": "баян?",
					"tag": "needs accordion",
					"click": {"bindTo": "onMyFuncClick"}
				}
			]
		}
	}
}

ну и дальше как угодно:
или биндим на каждый пункт свою функцию,
или делаем одну, отлавливаем tag через arguments,
или вообще items биндим на коллекцию и генерим её как делает террасофт с toolsMenu (+можно ещё присобачить bindConfig).
pic

"Варфоломеев Данила" написал:А в чём сложность-то? По конфигурации полно примеров.

Ну я просто не сталкивался с реализацией в UI, по этому не мог строить дедуктивное предположение о том, что это, где-то там есть, фактически я не знал что искать :) потому и не искал.
Спасибо, за пример - пригодиться.

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