Здравствуйте!
после установки BPMOnline 5.4 demo при авторизации под пользователем "Пользователь 1" получаю следующую ошибку

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

возможно, что-то упустил при настройке IIS? (IIS 6.1)

Нравится

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

Здравствуйте Ростислав!
Попробуйте при авторизации использовать логин Supervisor.

Здравствуйте, Дмитрий! пробовал этот вариант - не помогает. такое ощущение, что проблемы или с подключением к базе или с самой базой. может быть на это влияют какие-нибудь настройки redis или iis ?

Хорошо, тогда попробуйте добавить в SQL администратора Supervisor (sysadmin - параметр и SQL-й логин), после этого не забудьте заменить в ConnectionStrings.config - Integrated Security = SSPI на User ID = Supervisor.

Если не получится сообщите мне свой контакт для связи.

Здравствуйте, Дмитрий! после звонка в техподдержку выяснилось, что файлы установки имели версию, для которой не может существовать демо-базы. все решилось скачиванием другой релизной версии bpmonline 5.4 с демо-базой

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

Возможно, не новый вопрос ]||||||[, но никак не удается передать внутри БП массив с ID-шниками как параметр.
Заполняется массив в одном скрипте, использовать надо в другом элементе-скрипте. Пытаюсь создать параметр с типом Объект (Entity) так ругается при попытке передачи туда массива.
Очень не хочется пользоваться строкой неограниченной длины с парсингом ее по необходимости... некрасиво это и если ID-шников много не факт что работать будет корректно.
Подскажите, какой тип параметра БП использовать и как туда закинуть массив?

Нравится

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

Здравствуйте.
Есть специальный тип - массив:

На самый крайний случай, можно записать в атрибут глобального объекта Connector:

Connectror.Attributes('myArray') = myArray;
var myArrayNew = Connectror.Attributes('myArray'); 

"Олейник Дмитрий" написал:Здравствуйте.

Форум BPMonline 5.x

Саша, спасибо.

Александр, для BPM создайте параметр, и не меняйте его тип. Он по умолчанию создается как Object (внимание не как Object (Entity) - это другой тип данных). При этом, если Вы изменили тип - в списке Вы его уже не найдете.

А если ничего не менять, то такой код работает:

string[] strArr = new string[10];
array = strArr;

Где array - параметр с типом Object.

"Олейник Дмитрий" написал:Александр, для BPM создайте параметр, и не меняйте его тип. Он по умолчанию создается как Object (внимание не как Object (Entity) - это другой тип данных).

Значит, не показалось мне что оно сработало ровно один раз пока я не стал менять тип и перекомпилировал систему...
Дмитрий, ну это же не правильно как-то :smile:
Может разработчикам запрос на изменение с любым пусть низким приоритетом создать чтобы в список тот "просто объект" добавить для 5ки?

Александр, вопрос передал.

"Олейник Дмитрий" написал:Александр, вопрос передал.

Дмитрий, спасибо!

И вновь продолжается бой...
Передал я массив в параметр.
Пытаюсь к нему обратиться в другом элементе.
Вот так, например:

foreach (var i in SomeParameterArray.Length) {

где SomeParameterArray и есть параметр бп с типом объект...
и ругается оно, и не компилируется
'object' doesn't contain definition for 'Length' and no extension method 'Length' ...

Поэтому теперь надо разбираться, как же к этому переданному массиву обратиться... :sad:

Александр, во-первых, цикл foreach должен выглядеть так:

foreach (var i in SomeParameterArray) {

А в данном случае, скорее всего это не сработает и нужно приведение типов:

string[] strArr = new string[100];
ArrayParam = strArr;
IEnumerable<string> enumerable = ArrayParam as IEnumerable<string>;
foreach (var s in enumerable)
{
//своя логика
}

"Андрей Каспаревич" написал:Александр, во-первых, цикл foreach должен выглядеть так:
foreach (var i in SomeParameterArray) {

Ошибся :redface:

Сейчас еще поэкспериментирую

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

Дмитрий, а есть ли какиенибудь результаты? Тоже столкнулись с такой проблеммой.

Илья, в каком смысле? Всё работает и сейчас - создаете объект с типом Object, затем записываете в него массив.
При обращении, не забудьте привести тип Object к Array.

"Олейник Дмитрий" написал:Александр, для BPM создайте параметр, и не меняйте его тип. Он по умолчанию создается как Object (внимание не как Object (Entity) - это другой тип данных). При этом, если Вы изменили тип - в списке Вы его уже не найдете.

Я так понимаю Илья Т. пишет именно об этом, что нельзя данный тип назначить повторно, что есть баг

Тут я согласен, хоть, согласитесь, он и не критичен.

Создали действие процесса, а в нем параметр и по умолчанию создается тип String, создать параметр с типом Object невозможно.

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

Согласен :smile:
"Илья Т." написал:Создали действие процесса, а в нем параметр и по умолчанию создается тип String, создать параметр с типом Object невозможно.

В режиме редактирования метаданных поменяйте тип параметра "DataValueType" на "84ed6865-9692-4c98-aaed-4d15b96a95c2" ручками и затем сохраните и опубликуйте

Ручками и так поменяли. Но это не правильно. Так можно сказать, а зачем нужен редактор? Пишите метаданные в блокноте.

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

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

Как можно поменять базовый язык (культуру) пользователей портала
(не пользователей, а пользователей портала)?

Заранее спосиба за ответ.

С уважением,
Гюнель Рустамова

Нравится

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

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

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

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

в карточке регистрации раздела в колонке [Тип записи указан в колонке] для определения типа записи раздела сменил значение. затем почистил редис. после этого стал невозможен вход в систему, падает с ошибкой

Exception Message: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
Exception Type: System.ArgumentOutOfRangeException
Exception Source: mscorlib

Exception Stack Trace:
   в System.ThrowHelper.ThrowArgumentOutOfRangeException()
   в System.Collections.Generic.List`1.get_Item(Int32 index)
   в System.Collections.ObjectModel.Collection`1.get_Item(Int32 index)
   в Terrasoft.WebApp.MainPageEventsProcessSchema`1.GetAddMenuItemCaption(Guid schemaUId, Guid typeColumnUId, Guid typeId)
   в Terrasoft.WebApp.MainPageEventsProcessSchema`1.GetModuleEdits()
   в Terrasoft.WebApp.MainPageEventsProcessSchema`1.FillAddButtonMenu()
   в Terrasoft.WebApp.MainPageEventsProcessSchema`1.PageLoadCompleteScriptTaskExecute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessScriptTask.Execute(ProcessExecutingContext context, Func`2 internalExecute)
   в Terrasoft.WebApp.MainPageEventsProcessSchema`1.ProcessQueue(ProcessExecutingContext context)
   в Terrasoft.WebApp.MainPageEventsProcessSchema`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
   в Terrasoft.Core.Process.ProcessFlowElement.OnExecuted(ProcessActivityAfterEventArgs e)
   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   в Terrasoft.WebApp.MainPageEventsProcessSchema`1.ProcessQueue(ProcessExecutingContext context)
   в Terrasoft.WebApp.MainPageEventsProcessSchema`1.ThrowEvent(ProcessExecutingContext context, String message)
   в Terrasoft.UI.WebControls.PageSchemaUserControl.ThrowEvent(String message)
   в Terrasoft.WebApp.MainPageSchemaUserControl.PageLoadComplete(Object sender, EventArgs e)
   в System.EventHandler.Invoke(Object sender, EventArgs e)
   в System.Web.UI.Page.OnLoadComplete(EventArgs e)
   в Terrasoft.WebApp.Page.OnLoadComplete(EventArgs e)
   в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

возможно ли каким-то образом откатить изменения?

Нравится

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

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

Если назначит права доступа («Доступ к объектам – Администрируется по колонкам») на объект «Инцидент и запрос на обслуживание», то при регистрации обращения выдает следующую ошибку:

Значение аргумента "columnValueName" не может быть пустым или неопределенным

Не знаете, с чем это связанно?
Это очень срочно.

Заранее спосиба.
С уважением
Гюнель

Нравится

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

Gunel, не смогла воспроизвести ошибку. Как Вы распределили права доступа к колонкам (уточните, пожалуйста, название колонок и уровень доступа)?

Здраствуйте Наталия,

Мы хотим что бы, пользователи входящий на рол "Служба поддержки", смогли:

1. Войти на раздел "Инциденты"
--- установила "Администрирование: Доступ к объектам" для роли СП Чтение и Изменение

2. Открыт карточку "Инциденты", но не смогли не какие поля поменять
--- установила "Администрирование: Администрируется по колонкам" для всех полей ("Пользователь / Роль" - служба поддержки и "Уровень доступа" - х)

Заранее спосиба,
С уважением,
Гюнель Рустамова

Gunel, Вы установили уровень доступа “Доступ запрещен”. Измените уровень доступа на “Чтение” (иконка в виде глаза).

Большое спосиба за ответь

С уважением,
Гюнель Рустамова

Здраствуйте Наталия,

Я проверила но у меня все еще выдает ошибку.
Не для роли служба поддержки а для роли диспетчер.

С уважением,
Гюнель Рустамова

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

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

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

С уважением,
Гюнель Рустамова

Gunel, вложите, пожалуйста, скриншоты детали [Доступ к колонкам объекта] (доступ на колонки объекта «Инцидент и запрос на обслуживание») для пользователя, под которым возникает ошибка.

Наталя,

Спосиба за сотрудничество.
Отправляю вам скриншоты детали роли "Диспетчер".

С уважением,
Гюнель Рустамова

Gunel, проблема рассматривается в рамках обращения 0164131.
Все рекомендации будут направлены Вам по данному обращению.

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

У меня собственно два вопроса:
1. Как в BPM подгрузить wsdl.
2. Как и где нужно грузить свою dll, что бы в нутри любого процесса можно было сделать using MyDll и спокойно обратиться к ней.

Нравится

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

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

supplierId = new Guid(Page.DataSource.ActiveRow.GetColumnValue("SupplierId").ToString());

Если в поле есть значение, все в порядке. А если его очистить, то bpm падает на вызове собственно
Page.DataSource.ActiveRow.GetColumnValue("SupplierId")

Как проверить, что поле заполнено?

Нравится

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

Лучше использовать:

Guid supplierId = Page.DataSource.ActiveRow.GetTypedColumnValue<Guid>("SupplierId");

null.ToString() = свал.

if(Page.DataSource.ActiveRow.GetColumnValue("SupplierId") != null) {
                supplierId = new Guid(Page.DataSource.ActiveRow.GetColumnValue("SupplierId").ToString());
}

А чем это лучше моего варианта?

Кстати, Александр прав, в случае если там ничего нет Guid supplierId получит значение Guid.Empty.
Проверено. :wink:

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

В разделе Документы есть деталь Файлы и ссылки.
В определенный момент, в зависимости от статуса документа мне надо предотвратить изменение/редактирование файлов документа.

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

Что не так?

Нравится

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

Открытие по двойному клику задаётся JS, который возвращает функция GetRegisterTreeGridDblClickScript в BaseGridPage. По умолчанию он равен обработчику кнопки "Изменить".

Чтобы его отключить, можно в функции GetRegisterTreeGridDblClickScript в своей странице написать вначале

return string.Empty;

вместо текущего содержимого.

о как.
THNX, попробую

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

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

Открыть окно по клику в реестре можно и без JS, обычной серверной логикой.

Поподробнее, если не трудно

В BaseGridPage уже есть штатный обработчик сообщения EditButtonClick (и вызывающий его же обрабочик TreeGridDblClick) в виде кусков БП. Они отключены от нажатия кнопки и двойного клика по реестру, поскольку используются JS-обработчики. Но их можно привязать снова.

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

Здравствуйте, меня интересует или есть возможность создавать excel отчеты в BPMOnline 5.4 ?
(Печатные формы и последующую конвертацию в excel не предлагать, в силу того что там изначально нарушено форматирование).
Имееться в виду возможность в скрипте описать файл или какимто другим способом.
Пробывал использовать csv файлы, но в них нельзя применять форматирование и обьеденение строк.

Нравится

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

Здравствуйте, Игорь!
Да, есть возможность сделать такую доработку.
Вам нужно использовать Open XML SDK.
Для использования нужно просто подключить namespace DocumentFormat.OpenXml:

Вот конкретный пример использования:
здесь формируется .xlsx файл с колонками объекта, выбранного в lookup-поле

Page.BaseMessagePanel.Clear();
if (string.IsNullOrEmpty(SchemaName)) {
	Page.BaseMessagePanel.AddMessage(WarrningMessage, UnableSelectObjectMessage, MessageType.Warning, true);
	return true;
}
Page.Response.ClearHeaders();
Page.Response.ClearContent();
string fileName = SchemaName;
var instance = UserConnection.EntitySchemaManager.GetInstanceByUId(SchemaId);
if (instance != null) {
	fileName = instance.Caption.ToString();
}
Page.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Page.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
 
List<double> columnWidthsList = new List<double>();
using (MemoryStream stream = new MemoryStream()) {
	using(SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook)) {
		// Add a WorkbookPart to the document.
        var workbookpart = spreadsheetDocument.AddWorkbookPart();
        workbookpart.Workbook = new OpenXmlSpreadsheet.Workbook();
 
        // Add a WorksheetPart to the WorkbookPart.
        var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
        var workbookStylesPart = workbookpart.AddNewPart<WorkbookStylesPart>(); 
		worksheetPart.Worksheet = new OpenXmlSpreadsheet.Worksheet(new OpenXmlSpreadsheet.SheetData());
 
        // Add Sheets to the Workbook.
        OpenXmlSpreadsheet.Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<OpenXmlSpreadsheet.Sheets>(new OpenXmlSpreadsheet.Sheets());
 
        // Append a new worksheet and associate it with the workbook.
		string relationshipId = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart);
		string sheetName = fileName;
        OpenXmlSpreadsheet.Sheet sheet = new OpenXmlSpreadsheet.Sheet() {
			Id = relationshipId,
            SheetId = 1, 
			Name = sheetName
        };
        sheets.Append(sheet);
 
        OpenXmlSpreadsheet.Worksheet worksheet = new OpenXmlSpreadsheet.Worksheet();
        OpenXmlSpreadsheet.SheetData sheetData = new OpenXmlSpreadsheet.SheetData();
        OpenXmlSpreadsheet.Row row = new OpenXmlSpreadsheet.Row();
 
		OpenXmlSpreadsheet.Cell currentCell;
		int columnCount = 0;
		var entitySchema = UserConnection.EntitySchemaManager.GetInstanceByName(SchemaName);
		foreach (var column in entitySchema.Columns) {
			if (!column.DefValue.IsSystemValue && !column.Name.Equals("ProcessListeners")) {
				currentCell = new OpenXmlSpreadsheet.Cell();
				currentCell.DataType =  OpenXmlSpreadsheet.CellValues.String;
				if (column.RequirementType == EntitySchemaColumnRequirementType.ApplicationLevel || column.RequirementType == EntitySchemaColumnRequirementType.DBLevel) {
					currentCell.StyleIndex = 3;
				} else {
					currentCell.StyleIndex = 4;
				}
				columnWidthsList.Add(CalculateWidth(column.Caption.Value));
	            currentCell.CellValue = new OpenXmlSpreadsheet.CellValue(column.Caption.Value);
				row.AppendChild(currentCell);
			}
		}
		sheetData.Append(row);
		row = new OpenXmlSpreadsheet.Row();
		for (int i=0;i<columnWidthsList.Count; i++) {
			currentCell = new OpenXmlSpreadsheet.Cell();
			currentCell.DataType =  OpenXmlSpreadsheet.CellValues.String;
			currentCell.StyleIndex = 5;
			row.AppendChild(currentCell);
		}
		sheetData.Append(row);
		//Adding columns and specifeing width
		OpenXmlSpreadsheet.Columns columns = new OpenXmlSpreadsheet.Columns();
		uint j = 1;
		foreach (var w in columnWidthsList) {
			columns.Append(CreateColumnData(j, w));
			j++;
		}
		worksheet.Append(columns);
		//--
        worksheet.Append(sheetData);
 
		workbookStylesPart.Stylesheet = CreateStyleSheet();
        worksheetPart.Worksheet = worksheet;
		spreadsheetDocument.Close();
 
		stream.Seek(0, SeekOrigin.Begin);
		byte[] dataArray = stream.ToArray();
 
		Page.Response.BinaryWrite(dataArray);
		Page.Response.End();
	}
}
return true;

Андрей, большое спасибо !

Андрей, Добрый день!
Пытаюсь реализовать создание Excel отчета по вашему примеру. Не компилируется из-за ошибки с функцией CreateStyleSheet()
Не могли бы Вы привести пример данной функции, т.к. вероятно данная функция добавлена в methods, или ответить, что необходимо написать вместо данной функции.

Код без данной строки

workbookStylesPart.Stylesheet = CreateStyleSheet();

компилируется и отрабатывает(видно в Visual Studio), но файл на сохранение не выдается. Пишет ошибку "Время ожидания выполнения запроса истекло." Может ли быть проблема в данной строке?

Здравствуйте, Эмин!
Этот пример из страницы "ImportSettingsPage". Метод CreateStyleSheet() определен там же. На всякий случай прикладываю исходный код.

Добрый день!
Почти та же проблема, что и у Эмина, только у меня код отрабатывает без ошибок, но в конце файл не выдается на сохранение с ошибкой:
Время ожидания выполнения запроса истекло.
Action: Click
ControlId: PageContainer_btnOk
SubmitAjaxEventConfig: {"config":{"viewStateMode":"include","extraParams":{}}}

            Page.Response.ClearHeaders();
            Page.Response.ClearContent();
            Page.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Page.Response.AddHeader("Content-Disposition", "attachment; filename=TurnoverReport.xlsx");
 
            using (DB.DBExecutor dbExecutor = UserConnection.EnsureDBConnection())
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    #region openxml
                    using (OpenXmlPackaging.SpreadsheetDocument spreadsheetDocument = OpenXmlPackaging.SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook, true))
                    {
//...тут все без ошибок
                    }//using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create
                    #endregion
 
                    stream.Seek(0, SeekOrigin.Begin);
                    byte[] dataArray = stream.ToArray();
 
                    Page.Response.BinaryWrite(dataArray);
                    Page.Response.End();
 
                } //using (MemoryStream stream = new MemoryStream())
            } //using dbExecutor

версия 5.4
схемы из примера Андрея у меня в конфигурации нет

Здравствуйте, Лариса!
Вам нужно импортировать схему, которую я предоставлял, вызвать

workbookStylesPart.Stylesheet = CreateStyleSheet();

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

Андрей, я вырезала свой очень длинный рабочий код :)

если я сохраняю stream в файл на диск, то получаю корректный отчет, т.е. проблема не в OpenXML, а в отдаче файла на сохранение

если я убираю весь код, связанный с

Page.Response

то ошибок нет

Спасибо за помощь :twisted:

Проблему решила. Если кому-то будет интересно - пишите.

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

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

Возникает при нажатии на кнопку Просмотр при создании печатных форм (в данном случае досье)
Скрин ошибки

Нравится

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