карточка
События
Технические вопросы
5.x

Доброго времени суток!

Есть задача: на карточке редактирования добавить свою логику сохранения записи, при которой нужно выводить в messagePanel сообщение подобное "Поле {0} обязательно для заполнения" и не давать сохранять запись.

Подскажите, пожалуйста, каким образом можно это реализовать, либо где можно посмотреть аналогию?

Нравится

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

Здравствуйте Constantine!
Это просто.
У карточки редактирования есть метод: "AreConditionsCorrect". Переопределив его и добавив свою логику (установив Page.[EditControl].Required = true [данный метод установит свойство поле обязательно для заполнения] и панель сообщений сама Вам выведет указанное в описании сообщение со ссылкой на поле) или Вы можете вернуть значение "false" из метода перед этим заполнив MessagePanel, и базовая логика сохранения не отработает.
А лучше, если Вы будете устанавливать свойство обязательности в своей логике, например при смене значения другого поля.
И наконец, почему бы Вам просто не изменить свойство в объекте, установив значение "Обязательно для заполнения на уровне приложения"?

Спасибо за совет, Андрей!
Я видимо не совсем правильно сформулировал саму задачу. Указанное сообщение я упомянул для примера, а логика разрешения/запрета сохранения записи не касается обязательных для заполнения полей.
Буду копать в сторону этого метода

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

Есть карточка Заказы, как по событию выбора Контрагента(поле-справочник), прочитать Id выбранной записи контрагента , чтобы потом его использовать для выборки данных из связанной таблицы

Нравится

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

Опять не заметил, что для BPM

Извините, если я правильно поняла, этот код для Террасофт 3,а у меня BPMonline

Для BPM можно создать параметр AccountID,
а в скрипте на изменение написать

AccountID = Page.AccountEdit.Value.ToString(); //AccountEdit - название поля на страничке

Добрый день, Ольга!
Если я правильно понял вопрос, то Вам нужно просто в скрипте карточки после события "lookupGridPageClose" вызвать у UserTask'а, который "Открыть страницу справочника" спросить параметры.
Примерный код:

var values = (Dictionary <string, object>)OpenLookupUserTask.GetSelectedValues(UserConnection);
 if (values.Count.Equals(0)) {
	return true;
}
var id = String.Empty;
var text = String.Empty;
foreach(var value in values) {
	id = value.Key;
	var items = value.Value as Dictionary<string, object>;
	text = items["Name"].ToString();
}
Page.OwnershipEdit.SetValueAndText(id, text);

Александр, Андрей , спасибо ))

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

Здравствуйте Ольга!
Событие Init страницы наступает всегда. Т.е. Вы не можете отменить его наступление. Вы можете подписаться на это событие самостоятельно из дизайнера, добавив в событийный подпроцесс начальное сообщение "Init" (зелененький кружочек с конвертиком внутри). И от него вывести свой скрипт. Только не забудьте, если Ваша страница наследуется от какой-то базовой страницы, отправить сообщение "Init" в базовую, до или после своего скрипта. Это такой темно синий кружочек с конвертом внутри. И в свойствах этого сообщения укажите "Сообщение - Init" и поставьте checkbox "Отправлять в базовый".

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

Опять сваливается при нажатии на кнопку почты.....
Описанное здесь https://community.terrasoft.ru/forum/topic/9354 проверил, все нормально, но сваливается......
Кэш, профиль и редиску чистил.

Текст ошибки

Date: 06.06.2013 17:26:12
Date (UTC): 06.06.2013 13:26:12

Exception Message: Object reference not set to an instance of an object.
Exception Type: System.NullReferenceException
Exception Source: TSBpm

Exception Stack Trace:
at Terrasoft.WebApp.MainPageEventsProcessSchema`1.InitScriptTaskExecute(ProcessExecutingContext context)
at Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
at Terrasoft.Core.Process.ProcessScriptTask.Execute(ProcessExecutingContext context, Func`2 internalExecute)
at Terrasoft.WebApp.MainPageEventsProcessSchema`1.ProcessQueue(ProcessExecutingContext context)
at Terrasoft.WebApp.MainPageEventsProcessSchema`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
at Terrasoft.Core.Process.ProcessFlowElement.OnExecuted(ProcessActivityAfterEventArgs e)
at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
at Terrasoft.WebApp.MainPageEventsProcessSchema`1.ProcessQueue(ProcessExecutingContext context)
at Terrasoft.WebApp.MainPageEventsProcessSchema`1.ThrowEvent(ProcessExecutingContext context, String message)
at Terrasoft.UI.WebControls.PageSchemaUserControl.ThrowEvent(String message)
at Terrasoft.UI.WebControls.Controls.PageContainer.LoadFromAssembly()
at Terrasoft.UI.WebControls.Controls.PageContainer.LoadUserControl()
at Terrasoft.UI.WebControls.Controls.PageContainer.OnInit(EventArgs e)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

SessionID: t2uokzc0flbahd252pxm3per
Request URL: /0/ViewPage.aspx?Id=5e5f9a9e-aa7d-407d-9e1e-1c24c3f9b59a&ActiveTabId=PageContainer_5ca0dabc8c894e1a9bb536407e1c4ef2_055063c98180e011afbc00155d04320c_830581929880e011afbc00155d04320c&action=selectemailfolder
Request Path: /0/ViewPage.aspx
Request UrlReferrer: http://bpm/0/ViewPage.aspx?Id=5e5f9a9e-aa7d-407d-9e1e-1c24c3f9b59a&SysMa...
Request Type: GET
User Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
User Host Address: 10.240.1.222
User: sham
Is Authenticated: True
Authentication Type: Forms
Is Secure Connection: False

Application Version: 5.4.0.1063
Application Path: C:\inetpub\wwwroot\BPMonline\Terrasoft.WebApp\
Application Virtual Path: /0
Application Trust Level: Full
Machine Name: BPM
Is Local: False

Process ID: 1644
Process Name: w3wp.exe
Process Account Name: PG-NHK\bpm
Thread Account Name: PG-NHK\bpm
OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1
Net Framework Version: 4.0.30319.233
DBExecutor Type: MSSqlExecutor

Нравится

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

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

PS: предварительно выгрузите (создайте бекап) схему MainPage.

Александр, Вам помогло?

Прошу прощения, еще не пробовал, так как я в отпуске, всем привет из солнечной Турции.

Гм....добрейшей души человечище вы, Дмитрий!
В после импорта опубликованной схемы, в ее процессе все подписи ромбиками с вопросами...... так что ориентироваться там занятие не для слабонервных....

Ну да это не так печально, как то что, все равно не помогло....

Александр, скопируйте идентификатор как отображено на скриншоте ниже

/system/files/1_2_3.png

И замените им идентификатор, который отметила Анна в посте http://www.community.terrasoft.ru/forum/topic/9354#comment-39634

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

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


Ромбики - это потому что Вы, и Дмитрий использовали разные настройки кодировки для экспорта. Ну это так, к основному вопросу не относится...

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

Следующий момент: Когда в конфигурации запускаешь страницу раздела существующую в поставке (напр Контрагент), то открывается страница и можно записи добавлять, редактировать. Если же я запускаю новую страницу раздела, то страница открывается, но при попытке добавить запись выходит ошибка NullReferenceException. Я правильно понимаю, связывание с карточкой редактирования происходит на этапе создания рабочего места

Нравится

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

Создала новый раздел Заказ, записи добавляются и в Заказ и в Деталь заказа-Продукты, но я нажимаю Изменить, то выходит ошибка . При этом и в основной таблице Заказ и в связанной таблице Продукты заполнены все справочники т.е. нет нулевых ссылок

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

Спасибо, работает

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

Упорно выдает ошибку компиляции на метод select.ExecuteReader(UserConnection.EnsureDBConnection))...

Using'и подключил уже какие только можно.....

Нравится

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

С ExecuteScalar та же история, работает Execute, но информация о количестве выбраных строк в количестве одной меня ни разу не спасает.....

В месте, где Вы определяете переменную select, приведите ее к типу Select.

Уже, но все равно спасибо.

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

В бизнес-процессе функцией вычисляю строку и записываю ее в параметр процесса, потом вставляю в колонку Заметки активности. Все работает, только новую строку не могу вставить.
Как новую строку вставить?

[#Читать данные добавленного лота аукциона.Результат выборки.Ссылка#] + "\n\n" + [#Читать данные добавленного лота аукциона.Результат выборки.Описание ссылки#] + "\n\n" + [#Читать данные добавленного лота аукциона.Результат выборки.Заметки#]

Какой нибудь спецсимвол вместо "\n"?

Нравится

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

Добрый день.

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

В заметках символы "\n" не отображаются, но и перехода на новую строку нет, это на детали Заметки
А в колонке реестра, что интересно, переводы строк есть, как и хотелось

Здравствуйте Александр.
Деталь "Заметки" отображает HTML текст, а реестр нет. Поэтому Вам нужно как-то определится, где Вам нужен перевод строки. Если на детали, то вместо "\n\n" вставьте "[br /]". Примечание, квадратные скобки заменить знаками > <. Но учтите, что в реестре у Вас так запись и отобразится "[Данные1][br /][Данные2]", и мало того, что никаких переходов, так еще и теги будут выводиться. Я рекомендую Вам не выводить колонку "Заметки" в реестр. Если Вы хотите туда что-нить запихнуть, то удаляйте при этом теги. В качестве обходного решения могу Вам порекомендовать такой вариант. В дизайнере объекта создайте колонку с типом "неограниченный текст". Потом перейдите в дизайнер процессов и при сохранении записи, т.е. на событии "...Saving" уберите теги и вставьте в новую колонку. Старую колонку сделайте системной, чтобы пользователи не путались при вытаскивании колонок в реестр и не вытащили ее случайно. Опубликуйте объект и наступит Вам счастье.:cool:

Супер. Это то что хотелось услышать :-) Именно с фразы

"Бабуков Андрей Александрович" написал:Деталь "Заметки" отображает HTML текст, а реестр нет. Поэтому Вам нужно как-то определится, где Вам нужен перевод строки. Если на детали, то вместо "\n\n" вставьте "[br /]".

все встало на места.
THNX.

Когда-нибудь...., но не при нашей жизни..... ;-)

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

Как скрыть рабочее место от определенных пользователей?

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

Нравится

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

Добрый день.

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

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

Прошу описать постановку задачи, чего необходимо добиться:
1. Скрытие какого-то раздела? Для этого у нас есть базовые средства.
2. Скрытие набора разделов от определенных пользователей. Нужно тогда собрать все такие разделы в определенное рабочее место и настроить доступ. Если у какого то клиента нет доступа по всем разделам из рабочего места то и само рабочее место не будет видно.

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

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

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

Добрый день!

Вопрос по этой теме: Как в разделе Задачи и Документы скрыть у пользователя доступ к чужим задачам и документам. В настройках Администрирование я могу или дать полный доступ к разделу или скрыть раздел, а пользователю нужен доступ только к своим Задачам и Документам. Нельзя что бы видел складской сотрудник задачу, которую создает бухгалтер или директор.

Спасибо

Людмила, согласно распределению прав доступа, автор записи всегда имеет полный набор прав на созданную им запись. Права для других пользователей и ролей определяются настройками прав по умолчанию. Для решения задачи Вам необходимо: 1. Раздать для ролей пользователей права доступа по умолчанию (раздел "Администрирование" - "Права доступа по умолчанию"). А именно, удалить все настройки с детали [Права по умолчанию]. В результате, создаваемые записи будут доступны только автору и пользователю с правами администратора. 2. Переопределить права на уже созданные записи посредством детали [Доступ] (деталь в разделе). Если записей много, можно воспользоваться скриптом перераздачи прав. 

Наталья , спасибо большое !

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

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

Нравится

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

SysSchema и SysSchemaInSolution.
Подробнее тут и тут.

А после того как удалены записи в таблицах можно удалять сами таблицы , если речь идёт об объектах?

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

Здравствуйте!
Из BPMonline уже удалять ничего не надо будет, просто обновите страницу и записей не будет.

Сергей, я имею ввиду могу ли я после удаления данных из системных таблиц например об объекте Заказ, удалить и саму таблицу Заказ из БД BPM

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

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

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

Все в порядке, активность создается, все попадают в участники активности, начальник прекрасно прописался и в поле "создал", но сотрудник видит активность в списке, а начальник нет.

В чем беда?

Нравится

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

Задача полностью следующая:
Есть диспетчер, он создает карточки заявок, от создания карточки заявки стартует процесс, в ходе которого создается активность соответствующему сотруднику.
Сотрудники работают в нескольких отделах, у которых есть у каждого свой начальник.
Диспетчер создает заявки для сотрудников ВСЕХ отделов
Надо сделать, так чтобы эти активности были видны только диспетчеру, сотруднику и его начальнику.

С начальником проблемы...(смешно :-)), так как в ходе создания активности в процессе диспетчер получает права автоматом, сотрудника я прописываю в Owner'а, а вот с начальником беда.
Как уже писал выше, прописывать начальника в "автор" и "создал" не помогает.....

Права доступа по умолчанию не помогают, так как группа диспетчеров одна (да и вообще диспетчер один пока :-)), а отделов несколько и если их все прописать, то получится, что начальники отделов смогут видеть активности сотрудников из всех отделов.

Как быть то?

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

UPD: Точнее решение даже более радикальное, снимающее проблему раз и навсегда: добавить добавление начальника сотрудника в доступ при сохранении активности.
Вот только вопроса два остается:
1. Куда именно это лучше всего вставить в процессе активности?
2. И как мне в коде достучатся до детали доступ с целью добавления туда записи?

Помогите, люди добрые, сроки горят, хочу в отпуск......

Здравствуйте, Александр.

раздачу прав доступа из процесса можно реализовать скриптом. Примеры запросов к БД можно посмотреть в BPMonline SDK: http://www.terrasoft.ru/bpmonlinesdk/UsingInsertExamples.html

Формат названия таблицы с правами в БД следующий:

Sys<название_исходной таблицы>Right

Только не совсем понятно в какое место процесса Активности все это вставить......
А также что конкретно писать в таблицу Sys......Right.....
Жду инструкцию.

Александр, потребовалось некоторое дополнительное время на описание примера. Пример предоставлен Вам в Вашем обращении на портале.

В случае, если Вами планируется выполнять раздачу прав, рекомендуется это делать в обработчике события ActivitySaved (добавить еще один поток и скрипт в процесс объекта)

Ок, спасибо большое. :biggrin:

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

Добрый день.
В процесс открываю Страницу редактирования протокола, на скриншоте выделил зеленым цветом, у меня теперь такой вопрос когда пользователь нажимает кнопки «Ок» или «Применить» процесс идет по одной ветке, а когда нажимают кнопку «Отмена» или закрывает страничку то по другой, как можно определить пользователь какую кнопку нажал? есть ли примеры. Спасибо.
Версия системы 5.1.1.155

Нравится

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

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

Смотрите, в Вашем случае элемент "карточка редактирования" можно настроить следующим образом:

считать элемент завершенным при нажатии кнопки "ОК", и добавить какие либо условия по значениям колонок (по желанию).
Тогда Вы пойдете далее по процессу только тогда, когда будет нажата кнопка "ОК". Если пользователь закроет карточку - можно продолжить выполнение этого процесса снова на этом же шаге (открытие карточки редактирования).

"Олейник Дмитрий" написал:

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

Смотрите, в Вашем случае элемент "карточка редактирования" можно настроить следующим образом:

считать элемент завершенным при нажатии кнопки "ОК", и добавить какие либо условия по значениям колонок (по желанию).

Тогда Вы пойдете далее по процессу только тогда, когда будет нажата кнопка "ОК". Если пользователь закроет карточку - можно продолжить выполнение этого процесса снова на этом же шаге (открытие карточки редактирования).

С уважением,

Олейник Дмитрий

Эксперт 3-й линии поддержки


считать элемент завершенным при нажатии кнопки "ОК" ----- как можно считать примеры есть в скрипте, как та внутри процесса определить

Баглан, на второй вкладке, Вы можете регулировать данные моменты:

"Олейник Дмитрий" написал:5.1.1.155

у нас нет такого, версия наша 5.1.1.155 как быть?

А у Вас On-Site или On-Demand Версия?
Напишите, пожалуйста, Ваш вопрос в тех. поддержку (support@terrasoft.ru), я думаю потребуется удаленное подключение для решение проблемы.

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