Технические вопросы
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), я думаю потребуется удаленное подключение для решение проблемы.

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

В созданном разделе добавляю статическую группу, выдает ошибку (см. приложенный файл)
Exception Message: Элемент коллекции с именем PGNHK_AuctionLot не найден Exception Type: Terrasoft.Common.ItemNotFoundException Exception Source: Terrasoft.Core

Нравится

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

Ощущение что потерялась какая то связь в SQL'е, но вот какая?

Добрый день.

Данную ошибку необходимо проверять "на месте", советую написать в саппорт и договориться об удаленном доступе.

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

  1. 1. Когда Вы создавали раздел, Вы указали, что объект должен входить во множество групп?
  2. 2. У Вас присутствуют объекты [Object]Folder и [Object]InFolder?
  3. 3. И последнее. В какой момент вываливается этот Exception? При нажатии на элемент контекстного меню, при сохранении, или, судя по CallStack'у, при открытии раздела?

Либо же воспользуйтесь, как говорил Максим услугами саппорта.
Спасибо.
P.S. Возможно в комментарии дублирование нумерации, но это потому что на данный момент записи комментариев не отображают нумерацию тегами [ol]->[li].

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

1.в дизайне процессов при переносе элемента (например Читать данные) не открывается карточка для редактирования этого элемента, ничего не могу сделать

2. Есть объект Заказ
У него есть поля-справочники Контрагент и Торговая точка(Торговая точка это по сути деталь Контрагента, у Контрагента может не быть Торговых точек )
Подскажите как сделать в карточке редактирования Заказа, чтобы при выборе Контрагента
в справочнике Торговая точка открывались только записи, связанные с этим контрагентом

3.При создании Заказа торговая точка может не указываться, запись создаётся, но при повторном открытии выскакивает ошибка
я так понимаю ругается на то, что не найдена запись ....как быть?

Нравится

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

Здравствуйте Ольга.

"Найданова Ольга" написал:Подскажите как сделать в карточке редактирования Заказа, чтобы при выборе Контрагента
в справочнике Торговая точка открывались только записи, связанные с этим контрагентом

Наложить фильтр на датасорс при открытии справочника. Т.е. на событии Init зарегистрировать событие

Page.[LookupEdit].PrepareFilters => (sender, evtArgs) {
evtArgs.Filters.Add(new Dictionary<string, object> {
// Add Account Filter Here
});
};

"Найданова Ольга" написал:3.При создании Заказа торговая точка может не указываться, запись создаётся, но при повторном открытии выскакивает ошибка

Так с одного CallStack'а мало что можно сказать. Попробуйте описать последовательно действия, которые Вы выполняли.
На сколько я понимаю коробка FMCG???
Спасибо.

"Бабуков Андрей Александрович" написал:На сколько я понимаю коробка FMCG???

Не в курсе, знаю только BPMonline v.5.4.
при нажатии на справочник выходит сообщение


в Дизайнере страниц для поля Торговая точка указываю справочник Торговая точка


"Бабуков Андрей Александрович" написал:Наложить фильтр на датасорс при открытии справочника. Т.е. на событии Init зарегистрировать событие
Page.[LookupEdit].PrepareFilters => (sender, evtArgs) {
evtArgs.Filters.Add(new Dictionary {
// Add Account Filter Here
});
};

Не совсем поняла, я могу это код вставить в обработчик события выбора Контрагента(LookupEdit1Change1)

Добрый день.

"Найданова Ольга" написал:при нажатии на справочник выходит сообщение

Вам необходимо задать значение для отображения в объекте справочника Торговая точка, во всех свойствах:

"Найданова Ольга" написал:Не совсем поняла, я могу это код вставить в обработчик события выбора Контрагента(LookupEdit1Change1)

Нет, код необходимо добавлять на обработчик события Init карточки редактирования:

Не срабатывает фильтрация, вроде всё как в примерах, теме не менее


может ещё что-то пропустила

Здравствуйте Ольга!
Попробуйте для начала создать переменную типа Guid и вкладывать эту переменную в rightExpression.
Если не получится, попробуйте отладить приложение, вставив перед "e.Filters.Add(..." строку
System.Diagnostics.Debugger.Break();
Про отладку конфигурации можете прочитать здесь.
Спасибо.

"Бабуков Андрей Александрович" написал:Попробуйте для начала создать переменную типа Guid и вкладывать эту переменную в rightExpression.

Сделала так

object value = Page.AccountEdit.Value;
    Guid accountId = (value == null || value.ToString().Equals(string.Empty)) ? Guid.Empty : Guid.Parse(value.ToString());
    if (!Page.AccountEdit.Value.Equals(Guid.Empty)) 
    {
		System.Diagnostics.Debugger.Break();
		e.Filters.Add(new Dictionary<string, object> {
                  {"comparisonType", FilterComparisonType.Equal},
                  {"leftExpressionColumnPath", "Account.Id"},
                  {"useDisplayValue", false},
                  {"rightExpressionParameterValues", new object[] {accountId.ToString()}}});
    };

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

Делаю это удалённо, на том компе, где развёрнут сайт

Здравствуйте Ольга!
Да, намутили Вы воды в коде. К чему такие сложности? Замените существующий код на:

Guid accountId = (Guid)Page.AccountEdit.Value;
    if (!accountId.Equals(Guid.Empty)) 
    {
                System.Diagnostics.Debugger.Break();
                e.Filters.Add(new Dictionary<string, object> {
                  {"comparisonType", FilterComparisonType.Equal},
                  {"leftExpressionColumnPath", "Account.Id"},
                  {"useDisplayValue", false},
                  {"rightExpressionParameterValues", new object[] {accountId}}});
    };

Далее, чтобы вызвался отладчик, Вам не нужно ставить бряку. Он автоматически подключится, если accountId будет не равен Guid.Empty. Вопрос в том, что Вы используете свою конфигурацию, а бряку ставите в исходнике какой-то другой конфигурации. Пгоэтому, Вам VS и сообщает о том, что брейкпоинт не отработает никогда. Просто подключитесь дебаггером к процессу IIS. А лучше, вынесите точку code-debug перед условием "if".

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

Может дело в студии самой, ей ещё чего-то не хватает

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

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

Что то я запутался, не могу никак понять, как мне раздать права на Активности таким образом, чтобы активности видели:
1. Тот кто ее создал
2. Ответственный (он я так понимаю будет ее видеть в любом случае, так как прописан как "Владелец")
3. Пользователи с детали "Участники"

И больше никто! (системных администраторов не берем, это отдельная песня)

На данный момент стоят полные права по умолчанию для "Все пользователи".

Помогите разобраться, ум за разум зашел окончательно.

Нравится

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

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

:smile:

Но есть один нюанс: например, сотруднику Отдела раз поставил задачу Петров из отдела 2. И тогда начальник отдела раз не увидит задачу своего подчиненного. А было бы неплохо, если бы видел.

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

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

Где найти примеры программирования в BPMonline?
Типовые, вроде установки значения поля на странице и тому подобное...
Только не кусками, а желательно полностью с комментариями...

Нравится

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

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

Примеры можно найти, собственно, в конфигурации. Как получить все схемы и искать по ним, описано тут: http://www.community.terrasoft.ua/blogs/8747

кое-какие примеры есть в BPMonline SDK, они постоянно пополняются: http://www.terrasoft.ru/bpmonlinesdk/

Кроме того, масса примеров есть на Community. При необходимости вы можете также обращаться в техническую поддержку - Вам дадут рекомендации и примеры программирования.

Порядок обращения в таком случае следующий:

1. Вами кратко описывается бизнес-задача, которую нужно реализовать программно (например, автоматизировать работу по продаже);
2. Описывается этап, на котором Вы на данный момент находитесь (например, автоматический расчет времени между звонками клиентам);
3. Описываете, с чем возникли сложности.

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

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

В продолжение темы https://community.terrasoft.ru/forum/topic/9322

Решение родилось такое:
1. Сделать справочник доступных адресов email в системе
2. На записи в справочнике раздать соответствующие права пользователям (тогда в списке при выборе "От кого" пользователь будет видеть только то, что ему положено)
3. В поле "От кого" сделать выбор из справочника.

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

Варианта два:
1. Снять таки как то блокировку и изменить тип колонки на справочник все таки (существующие записи активностей меня не волнуют, их просто нет)
2. Скрыть поле "От кого", сделать свое, которое будет справочником, потом в скрытое "От кого" записывать выбранное значение из справочника.

Как лучше сделать?

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

Нравится

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

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

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

Поэтому в данном случае рекомендуется второй вариант.

в принципе так и думал. пойду писать

Где найти примеры программирования в BPMonline?
Типовые, вроде установки значения поля на странице и тому подобное...
Только не кусками, а желательно полностью с комментариями...

Александр, я предоставила Вам уже несколько примеров, однако Вы просите новые. Давайте договоримся: вы предоставляете описание того, что конкретно Вам нужно, а мы готовим пример.

В данном конкретном случае от Вас требуется:

1. Описание бизнес-задачи;
2. Описание планируемой реализации;
3. Описание того, на каком этапе возникли сложности с реализацией;
4. Запрос на консультацию (предоставьте, пожалуйста, пример такой-то реализации).

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

Я уже все получил, спасибо. Я новых не просил просто написал и на форуме и в саппорт одновременно.

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

Как показать имя текущего пользователя?
Я имею ввиду показывать имя пользователя, под которым человек вошел в систему?
Справа вверху, к примеру, как в у гугла на скриншоте.

Нравится

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

Имя получается примерно таким образом:

var currentUserContactId = userConnection.CurrentUser.ContactId;
string currentUserContactName = string.Empty;
var entitySchemaManager = userConnection.GetSchemaManager("EntitySchemaManager") as EntitySchemaManager;
var contactSchemaQuery = new EntitySchemaQuery(entitySchemaManager, "Contact");
contactSchemaQuery.AddColumn("Name");
var contactIdFilter = contactSchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", currentUserContactId);
contactSchemaQuery.Filters.Add(contactIdFilter);
var contacts = contactSchemaQuery.GetEntityCollection(userConnection);
if (contacts.Count > 0) {
	currentUserContactName = contacts[0].GetColumnValue("Name").ToString();
}

Можно в MainPage добавить надпись и при открытии её заполнять.

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

Разобрался, только непонятно что за черта появляется справа и как её убрать (на скриншоте обведено красным)?

У вас надпись со стилем "Заголовок группы". Смените на стиль "Надпись".

Ээээээ, а как тогда можно управлять шрифтом, точнее размером и стилем (bold и т.д.)?

все, допер, это же веб в конце концов :biggrin:
html никто не отменял :lol:

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

Приветствую!

В свойствах объекта установил свойство "Владелец".
Как явствует из хелпа и форума:
[Владелец] — это поле заполняется в случае, если определенным пользователям необходимо автоматически предоставлять права доступа к записям объекта.

Однако не работает.
Куда копать? Может это быть связано с тем, что объекта администрируется по записям и колонкам?

Нравится

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

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

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