Добрый день.

Столкнулись со следующей проблемой:

Есть объект заявка, при создании этого объекта запускается бизнес процесс "Обработать заявку". Заявка может быть создана и со стороны основного приложения, с потрала и с мобильного клиента. 

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

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



После того как скачали текст ошибки и изучил исходники - выяснилось, что портальному пользователю не хватает прав на объект ActivityParticipantRole. После того как были выданы права на этот объект, появилась ошибка, что прав не хватает уже на объект "ActivityParticipant". Дальше права не стали выдавать (т.к. есть опасения что придется выдавать очень много).

Пока мы видим 3 решения этой проблемы: 

а) Последовательно выдавать пользователям портала права на все необходимые объекты - видится что это не самый правильный вариант решения проблемы, но рабочий.

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

в) Всегда запускать процесс от конкретного пользователя (если такое возможно).





Собственно вопросы:

1) Есть ли еще какие нибудь варианты решения и как "правильно" решить данную проблему?

2) Можно ли запускать процесс от конкретного пользователя?

 

Нравится

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

По пунктам:

а) Действительно рабочий, но куча проблем оттестировать этот момент.

б) Я бы переделал весь процесс и выборки/изменения/удаления делал через C# скрипт, пользуясь UserConnection.AppConnection.SystemUserConnection

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

Добрый день. Вот тоже столкнулся с проблемой. Что за пункт 6? 

Что то сайт совсем поломался, процитировать не могу.



По поводу "Я бы переделал весь процесс и выборки/изменения/удаления делал через C# скрипт, пользуясь UserConnection.AppConnection.SystemUserConnection" - наш процесс не маленький, по этому такая переделка будет очень трудоемкой, возможно даже более трудоемкой чем выдача прав.



Придумали еще 1 вариант, это запускать процессы по новым заявкам по таймеру (например раз в 1, 5 или 10 минут получать все заявки по которым еще не запущен процесс и запускать)

Габбазов Искандер Рустемович,

А как вы считываете, что по данному обращению был запущен именно тот процесс который активность создаёт? 

Евгений. В журнале процессов это все можно увидеть

Габбазов Искандер Рустемович,

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

А, вопрос про то запущен процесс уже или нет? Так можно поле флаг создать. Например когда процесс по заявке стартует, сразу заполняем это поле флаг. А для запуска ищем все заявки у которых этот флаг не отмечен.

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

Всем привет, нет физического доступа к серверу с MSsql.

Можно ли просматривать таблицы, через "Управление Конфигурацией" ?

 

Нравится

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

Это оно?

Втупляет не подецки, так и должно быть?

Добрый день.

Для выполнения произвольных запросов можете воспользоваться продуктом "SQL Executor for bpm’online".

https://marketplace.terrasoft.ru/app/pt-sql-executor-bpmonline

"Втупляет" на каком моменте?

Если при выполнении запросов, то наверное это вопрос к запросу.

Толмачев Дмитрий Юрьевич,

 

select * from SysEntitySchemaReference - 30-40сек

Добрый день!

Единственный способ - использовать SQL Executor. Указанная таблица хранит все связи объектов, в связи с чем данный запрос может выполняться достаточно долго. По вопросу быстродействия лучше обратиться к разработчикам решения - support@samarasoft.com

Последовский Роман,

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

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

Товарищи подскажите, как добавить(можно ли) в showInformationDialog,  поле для комментария

 

 

Нравится

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

Вильшанский Дмитрий,

Спасибо за ссылку

Сделал, пока так 

 	//Код всплывающего окна
			    var customCommentPopUp = '<div id="popUpWindow" class="ts-messagebox-box ts-messagebox-border-style-blue ts-messagebox-center-position" style="height: 250px;"><div id="t-comp0-caption" class="ts-messagebox-caption">Оставьте комментарий</div><textarea id="commentTextArea"  style="width: 100%;height: 100px;" placeholder="Ваш комментарий"></textarea><span id="customCommentBtnOk" class="t-btn-wrapper t-btn-text t-btn-style-blue" style="margin-top:15px" tabindex="1" data-item-marker="ОК">ОК</span><span id="customCommentBtnNo" class="t-btn-wrapper t-btn-text t-btn-style-default " style="margin-top:15px" tabindex="1" data-item-marker="Нет">Нет</span></div>';
	            $('body').append(customCommentPopUp);//Добавляем элемент на страницу
 
 
	             //Обработка нажания на кнопку (Да)
	             $('#customCommentBtnOk').click(function(){
 
 
	                  var comment = $('#commentTextArea').val();//Получаем комментарий
	               	  console.log("comment:"+comment);
 
                      if(comment!=''){
                        $('#popUpWindow').remove();//Закрываем окно
                      }else{
                      	$('#commentTextArea').css('background-color', '#FFF9C4');//Пользователь не ввел данные и пытается сохранить
 
                      }
                  });
 
                   //Обработка нажания на кнопку (Нет)
                   $('#customCommentBtnNo').click(function(){
                       $('#popUpWindow').remove();//Закрываем окно
                   });

 

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

Добрый день! Пытаюсь получить через DataService web service  список аккаунтов.

1. Первым делом авторизуюсь:

Post http://mydomain/ServiceModel/AuthService.svc/Login (Try to auth)
Postfield: '{"UserName":"xxx","UserPassword":"yyy"}'
Total time: 0.047, connect time: 0.016, size: 84
Recieved cookie: BPMLOADER: r1jyukv11qu21m3pmdbzkpci
Recieved cookie: .ASPXAUTH: 8F7AF926D3E294AF47CF293C6EB584CA15B7D613356C67C11C5CE6809EB5999A4ACE2B8AB25264A0AF059DAA10CCD0D6B5401AADC3A8B3362AA50D127A34BD1BFA95162304FD73720563C83BA6B808957C49B408C77B0B8911E1098B5A2AC2115EAB24D3F4BDA3F6A196F3578B58397142A26D3BD53EE5641D35C684D45F9236CB991D31033746E3D4656214E35160339050BD4E2DB42DDE1E72F46AD358DBB4974C90DBEC4772244B6BA86FAE3D917E6EB97D286B1F593F4C6FAB494DA19E2F13B7B3F8AE4063CB3880896D8E2E06A914409A866C2B5564F1630622C370335968FA761BC23DCFC13EC09B1EB97DD9A9C07AA921C1DC2C2CD99F7C8E32B9946A04E59C4A40B0311723A53C4D6427A4DE67152F471F69FE0F4B22D3ADAABE812240D404A05B2FEC57014C73FFB4A5A5CE43625D2348579FC792F05343C3AFA7191205CDE70636CB995A65CC1294E11C94922A74576D34E8A0E952FB4947C1102036331298
Recieved cookie: BPMCSRF: NNvOddpIAkRg61RqcS3a6.
Recieved cookie: UserName: xxx
 
Reply:
{"Code":0,"Message":"","Exception":null,"PasswordChangeUrl":null,"RedirectUrl":null}

Все ок, авторизация проходит без ошибок. В куках возвращаются нужные токены и ошибок нет.

 

2. Далее пробую запросить данные:

Post http://mydomain/json/reply/SelectQuery (Try to get data)
Postfield: '{"RootSchemaName":"Contact"}'
Use cookie: BPMLOADER=r1jyukv11qu21m3pmdbzkpci; .ASPXAUTH=8F7AF926D3E294AF47CF293C6EB584CA15B7D613356C67C11C5CE6809EB5999A4ACE2B8AB25264A0AF059DAA10CCD0D6B5401AADC3A8B3362AA50D127A34BD1BFA95162304FD73720563C83BA6B808957C49B408C77B0B8911E1098B5A2AC2115EAB24D3F4BDA3F6A196F3578B58397142A26D3BD53EE5641D35C684D45F9236CB991D31033746E3D4656214E35160339050BD4E2DB42DDE1E72F46AD358DBB4974C90DBEC4772244B6BA86FAE3D917E6EB97D286B1F593F4C6FAB494DA19E2F13B7B3F8AE4063CB3880896D8E2E06A914409A866C2B5564F1630622C370335968FA761BC23DCFC13EC09B1EB97DD9A9C07AA921C1DC2C2CD99F7C8E32B9946A04E59C4A40B0311723A53C4D6427A4DE67152F471F69FE0F4B22D3ADAABE812240D404A05B2FEC57014C73FFB4A5A5CE43625D2348579FC792F05343C3AFA7191205CDE70636CB995A65CC1294E11C94922A74576D34E8A0E952FB4947C1102036331298; BPMCSRF=NNvOddpIAkRg61RqcS3a6.; UserName=XXX; BPMSESSIONID=5k0j1gso45wpxqbm5ajckuob
Total time: 0.031, connect time: 0.015, size: 1222
 
Reply:
 
Array
(
    [http/1.1] => 403 Forbidden
    [content-type:] => text/html
    [server:] => Microsoft-IIS/8.5
    [x-powered-by:] => ASP.NET
    [x-frame-options:] => SAMEORIGIN
    [date:] => Fri, 08 Dec 2017 14:34:17 GMT
    [connection:] => keep-alive
    [content-length:] => 1222
)
 
Ошибка сервера
403 - запрещено. Доступ запрещен.
Предоставленные учетные данные не дают права на просмотр этого каталога или страницы.
 

В чем проблема, что не так?

Нравится

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

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

а сайт точно работает под http, а не под https? попробуйте добавить в куки "secure; HttpOnly;"

Или просто попробовать подключиться по http и по https.

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

Собственно насколько я понял по умолчанию запросы с использованием EntitySchemaQuery асинхронны, есть возможность выполнить синхронный  запрос

Нравится

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

Добрый день

Вопрос не понятен. Какая синхронность вам нужна?

Артем Гура,

 esq.getEntityCollection

Ответ - синхронно сделать не получится/ну либо получится, но тогда у пользователя будет виснуть браузер в ожидании ответа сервера (см xmlhttprequest).

Если нужно вручную вызывать нужные функции последовательно - Terrasoft.chain в помощь.

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

Добрый день!

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

Вопрос - есть ли возможность выгружать настроенные фильтры во всех  дашбордах в отдельный файл?

Нравится

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

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

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

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

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

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

Добрый день! 

Установил дополнение, но оно не работает, требует регистрации деталей в справочнике. Что нужно сделать? Спасибо!

Нравится

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

Здравствуйте! Извините за задержку с ответом. С утра вам ответят мои коллеги

Добрый день! На нашем сайте есть инструкция, в которой подробно расписаны использование и настройка Change log for bpm'online (https://samarasoft.com/changelog/). 

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

 

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

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

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

Как это реализовать? Если можно подробно, спасибо заранее!

Нравится

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

Артем, добрый день! Рекомендуем вам добавить свой пользовательский модуль с необходимыми полями, а при нажатии на действие делать переход в него с помощью PushHistoryState. Пример подобной реализации - метод openDuplicatesModule в AccountSectionV2.

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

 Всем пример

Делаю быстрый фильтр по примеру из документации.

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

Кейс простой при клике на элементе "Контрагенты"- отобразить уже отфильтрованный реестр. 

Подскажите где моя ошибка или чего я не понимаю

define("AccountSectionV2", ["BaseFiltersGenerateModule","jQuery"], function(BaseFiltersGenerateModule) {
 
 
 
 
	return {
		entitySchemaName: "Account",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		attributes: {
 
        },
		methods: {
			initFilters: function() {
				  console.log("initFilters");
					this.initFilterActions();
					this.initFixedFiltersConfig();
					this.subscribeFiltersChanged();
					this.subscribeFilterGetConfigMessages();
					this.loadFiltersModule();
				},
			initQueryFilters: function(esq) {
				//this.callParent(arguments);
				console.log("initQueryFilters");
					var filters = this.getFilters();
					if (filters) {
						console.log(filters);
						esq.filters.addItem(filters);
                 	}
 
	          },
 
			// Инициализирует фиксированные фильтры.
            initFixedFiltersConfig: function() {
            	console.log("initFixedFiltersConfig");
                // Создание конфигурационного объекта.
                var fixedFilterConfig = {
                    // В качестве схемы объекта для фиксированных фильтров указывается схема объекта раздела.
                    entitySchema: this.entitySchema,
                    // Массив фильтров.
                    filters: [
                                   // Фильтр периода.
                        {
                            // Название фильтра.
                            name: "PeriodFilter",
                            // Заголовок фильтра.
                            caption: this.get("Resources.Strings.PeriodFilterCaption"),
                            // Тип данных — дата.
                            dataValueType: this.Terrasoft.DataValueType.DATE,
                            // Дата начала периода фильтрации.
                            startDate: {
                                // Фильтруются данные из колонки [Date].
                                columnName: "StartDate",
                                // Значение по умолчанию.
                                defValue: this.Terrasoft.startOfWeek(new Date())
                            },
                            // Дата завершения периода фильтрации.
                            dueDate: {
                                columnName: "StartDate",
                                defValue: this.Terrasoft.endOfWeek(new Date())
                            }
                        },
                        // Фильтр ответственного.
                        {
                            // Название фильтра.
                            name: "Owner",
                            // Заголовок фильтра.
                            caption: this.get("Resources.Strings.OwnerFilterCaption"),
                            // Фильтрация данных из колонки [Owner].
                            columnName: "Owner",
                            // В качестве значения по умолчанию указывается контакт текущего пользователя.
                            // Значение берется из системной настройки.
                            defValue: this.Terrasoft.SysValue.CURRENT_USER_CONTACT,
                            // Тип данных — справочник.
                            dataValueType: this.Terrasoft.DataValueType.LOOKUP,
                            // Фильтр.
                            filter: BaseFiltersGenerateModule.OwnerFilter
                        }
                    ]
                };
                // Колонке [FixedFilterConfig] присваивается ссылка на созданный конфигурационный объект.
                this.set("FixedFilterConfig", fixedFilterConfig);
            }
 
 
		}
	};
});

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

Нравится

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

1) Сложно без кода страницы что-то конкретное сказать.

2) У вас точно колонка Owner в объекте есть? И точно ли она ссылается на Контактов.

3) " ...при клике на элементе "Контрагенты"..." — При чём тут контрагенты?

Варфоломеев Данила,

1. Код щас приложу

2. Owner - точно есть

3. Мне надо показать пользователю в реестре только созданных им контрагентов

1) Resources.Strings.OwnerFilterCaption не определён в localizableStrings, поэтому на скрине пустота

2) Пусто внутри выборки контрагентов потому, что срабатывает фильтр 

filter: BaseFiltersGenerateModule.OwnerFilter

Подробнее - посмотрите в BaseFiltersGenerateModule, если не нужна фильтрация - закомментируйте эту строчку

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

Добрый день!

В дашборде при выборе даты (например, даты создания) в список подтягивается время ЧЧ:ММ, которое не нужно, но при этом занимает много полезного пространства (многие задачи занимали бы 1 строчку отображения, а занимают 2 из-за времени).

Можно ли убрать отображение времени в дашборде?

Нравится

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

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

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

Я передал Ваше пожелание аналитикам продукта. Они рассмотрят возможность реализации в будущих версиях приложения.

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