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

Мы активизировали лицензию для одного пользователя. А можно ли с помошью одной лицензии войти на две разные тестовые среду, которые находятся на две разных виртуальных машинах (и на две разных AD домеинов)? Но, SQL DetaBase одинаковы. То эсть, для двух SQL серверов использовались одна и та же "restore database".

С Уважением,
Гюнель

Нравится

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

Гюнель, приветствую!

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

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

delete from syslic

после чего, сформировать запрос.

С уважением,
Белецкий Арсений
Группа компаний Terrasoft

Спосиба за ответ.

Если возможна Я хотела бы уточнить вопрос, заданный лицензии. Можна ли для одного лицензии сформировать несколько запросов? Мы хотела бы создать две разные тестовую среду для разных работников. Возможна ли эта ?

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

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

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

С уважением,
Белецкий Арсений
Группа компаний Terrasoft

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

Вибрав [Инструменты]\[Системные настройки]\[Общие]\[Логотип компании]
В полі [Значение] стоїть: "Файл выбран".
Вибираю файл з логотипом компанії рекомендованого PNG- формату:

logo.png
463x163
об'єм 7kb

натискаю [OK].
При повторному відкритті параметра [Логотип компании] в значенні все так же стоїть "Файл выбран", логотип ніде не відображається.
В чому справа ?
Що не так ?

Нравится

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

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

Дякую, так получилось.
І, окрім як при авторизації, він більше ніде не проявиться ?

Логотип отображается только при авторизации.

Ще є логотип у верхньому лівому куті головної сторінки
Ви бажаєте змінити і його, правильно?

"Чуприк Сергій Іванович" написал:

Ще є логотип у верхньому лівому куті головної сторінки

Ви бажаєте змінити і його, правильно?


І його також

Здравствуйте, Игорь.

"Ігор Андрусенко" написал:
Чуприк Сергій Іванович пишет:

Ще є логотип у верхньому лівому куті головної сторінки

Ви бажаєте змінити і його, правильно?

І його також

З повагою,

Ігор Андрусенко


Этот логотип Вы можете изменить в схеме страницы MainPage:

1

Змінити - змінив, а от змусити його проявитися не вдається, хоча і опублікував, і кеш почистив.

Здравствуйте, Игорь.

Странно. Попробуйте из другого браузера, ситуация та же?

IE8, Mozilla, Google Chrome - всюди однаково.
В MainPage картинку видно ту? що треба, а на сторінці - BPM Online CRM.

Игорь, выполните следующие действия:
- Удалите из MainPage компонент ImageBox1.
- Добавьте новый компонент "Область изображения" вместо удаленного, заполните аналогично свойства.
- Опубликуйте изменения, проверьте корректность отображения логотипа.

З цим логотипом складніше, тому що в MainPage є код, який просто підмінює все те, що ви зробите в дизайні, на своє :smile:

Відкрийте процес сторінки MainPage, знайдіть там скрипт PageLoadCompleteScriptTask і закоментуйте такі рядки:

Page.ImageBox1.Image = new ControlImage {
	Source = ControlImageSource.ResourceManager,
	ResourceManagerName = "Terrasoft.WebApp",
	ResourceItemName = "ConfigurationBPMonlineCRMLogo.png"
};

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

"Чуприк Сергій Іванович" написал:

Відкрийте процес сторінки MainPage, знайдіть там скрипт PageLoadCompleteScriptTask і закоментуйте такі рядки:

Page.ImageBox1.Image = new ControlImage {

        Source = ControlImageSource.ResourceManager,

        ResourceManagerName = "Terrasoft.WebApp",

        ResourceItemName = "ConfigurationBPMonlineCRMLogo.png"

};


Зовсім інша справа :)

Спрацювало. Дякую.

так и не понял в чем может быть баг :( логотип не прицепляется даже после очистки кеша,никакие другие махинации типа flushall не помогают

Алексей,

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

"Maxim Gritsenko" написал:

Алексей,

В продолжении общения с Дмитрием Ковшевацким, Вам была отправлена схема системной настройки и инструкция по импорту.

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


Да,спасибо сотрудникам техподдержки Террасофт!!

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

Интересует организация обработки входящей почты на общий адрес службы поддержки.

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

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

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

Нравится

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

Начиная с 5.5 появится возможность настраивать более одного почтового ящика для каждого пользователя. В более ранних версиях Вы можете любому пользователю назначить общий почтовый ящик, но только один.
Для автоматического создания задачи по входящему письму не нужно создавать дополнительные процессы. Нужно просто найти схему ImapClient, в ней есть метод CreateActivity (по памяти), который создает активности с типом e-mail, Вы можете дописать еще пару методов, которые будут выполнять дополнительные операции и вызывать их там же, где вызывается CreateActivity (где-то в этой же схеме).

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

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

По второму вопросу - если Вы используете 5.4, то - можно. Начальным элементом должен быть сигнал, который будет слушать объект "Активности" с типом E-mail. Если новая запись в этот объект будет добавлена (к примеру после автоматической загрузки писем), то можно считать значения всех полей этой записи, и на основании их создать какие либо задачи, инциденты либо реализовать любую другую логику.

"Олейник Дмитрий" написал:По второму вопросу - если Вы используете 5.4, то - можно.

У нас пока версия 5.2, никак не дождемся релиза Service Desk на платформе 5.4

"Раловец Ольга" написал:Для автоматического создания задачи по входящему письму не нужно создавать дополнительные процессы. Нужно просто найти схему ImapClient, в ней есть метод CreateActivity

В версии 5.2 в схеме ImapClient нет метода CreateActivity, хотя это не так важно - мы пока находимся на стадии изучения базового функциоанала и не готовы к изменению кода.

В общем ситуацию с входящей почтой я понял, спасибо за информацию!

"Volik Eugene" написал:В версии 5.2 в схеме ImapClient нет метода CreateActivity

На всякий случай SaveAsActivity.

Подскажите, по какой причине может быть неактивным пункт меню [Настроить синхронизацию с почтовым ящиком] ? Список разрешенных почтовых серверов заполнен, в конфигурации заданы параметры smtp-сервера, но при этом у всех пользователей системы (в том числе Supervisor-а) данный пункт неактивен.

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

"Раловец Ольга" написал: Если и на ней не активен, обращайтесь в поддержку, пусть посмотрят, в чем дело.

Именно так - не доступен при выборе группы Email. Тикет я уже создал в поддержке, думал может на форуме решение быстрее появится :)

Евгений, ответ Вам будет предоставлен в рамках Вашего обращения в тех. поддержку.

"Олейник Дмитрий" написал:Евгений, ответ Вам будет предоставлен в рамках Вашего обращения в тех. поддержку.

Спасибо, обращение уже закрыто по моей же инициатиавите - проблема разрешилась сама-собой :)

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

Не могу открыть карточку раздела? Выдает следующую ошибку. Не знаю в чем проблема...

Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)
Timestamp: Tue, 30 Oct 2012 06:05:13 UTC

Message: 'caption' is null or not an object
Line: 19
Char: 15
Code: 0
URI: https://sd53-demo.bpmonline.com/terrasoft.axd?rm=Terrasoft.UI.WebControl...

Нравится

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

Здравствуйте!
Уточните, пожалуйста, о какой конкретно карточке идет речь (xxx не смог найти).
Если это карточка созданного Вами раздела - убедитесь, что Вы создали его корректно.
http://www.training.terrasoft.ru/system/files/BPMonline_CRM_CG_5.4.0_0…
(страница 157)

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

Да, это карточка созданного мною раздела. RiskEditPage4. Раньше она у меня открывалась. Но я захотела поменять поля и добавила для каждого поля номер. После того как опубликовала карточку, она не на реестре нового раздела и не на разделе конфигурации не открывается. Поэтому не могу отредактировать RiskEditPage4. Выдает следующую ошибку. Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)
Timestamp: Tue, 30 Oct 2012 06:05:13 UTC

Message: 'caption' is null or not an object
Line: 19
Char: 15
Code: 0
URI: https://sd53-demo.bpmonline.com/terrasoft.axd?rm=Terrasoft.UI.WebControl...

С уважением,
Гюнель

Здравствуйте, Гюнель!

Для устранения сбоя Вам следует установить основное поле для отображения в Вашем новом объекте.

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

Последовательность действий следующая:

1. Откройте схему объекта в конфигурации:

conf

2. Выберите расширенные свойства:

props

3. Выберите что-нибудь в поле Отображаемое значение:

disp

4. Опубликуйте схему.

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

Добрый день,
BPM CRM+SD.
Как сделать так, чтобы на странице редактирования КЕ (тут на самом деле неважно на какой) было поле типа справочник. Но так, чтобы при нажатии на лупу отображались контакты, а при выборе контакта, в этом поле отображался рабочий телефон. Т.е. не ФИО, а только телефон.
Для примера. Есть поле, типа справочник. У него подпись: телефон. Нажимаем на лупу, видим список всех контактов. Нажимаем на Иванова И.И. И в это поле появляется не Иванов И.И., а его рабочий телефон.
Как сделать поле типа справочник, и как связать его со справочником - я разобрался. А вот как подтянуть необходимые поля - нет.
Спасибо.

Нравится

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

Добрый день!
пример для поля "Основной контакт" в разделе "Контрагенты"

заходим в sq_account и добавляем поле типа "колонка с текстом SQL"
пишем:

(select Communication1 + ', ' + Communication2 from tbl_Contact 
where ID = [tbl_Account].[PrimaryContactID])
(можете добавить фильтр на тип средства связи, чтобы там были только телефоны)

в названии колонки указываем "PrimaryContactName2"
пример
сохраняем запрос.
заходим в ds_Account
для поля PrimaryContactID меняем поле для отображения на созданное. Сохраняемся.
Теперь на добаление будет показывать поле, которое указывается первичным полем для отображения в ds_Contact, а при открытии карточки на редактирование будут отображаться телефоны.

Спасибо, но у меня BPMOnline. А вы, я так понимаю, прислали решения для Terrasoft 3.x.

Здравствуйте, Кирилл.

За это отвечает свойство "Отображаемое значение" для объекта:

1

Спасибо. Т.е. для того, чтобы не попортить отображение ФИО во всей системе, мне нужно создать новый объект, с отображением телефона. А как его привязать к контактам?
Спасибо.

Возможно, Вам подойдет такое решение:
Добавить в карточку КЕ поле Телефон, которое всегда будет наполняться из Контакта (на основании) того, что выбрано в поле Контакт

Если нужно, чтобы в реестре тоже было видно этот номер, тогда придется добавить поле в объект КЕ и написать механизм синхронизации (в случае, когда у Контакта изменится номер)

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

Спасибо.
Первый вариант подойдет. Опишите, пожалуйста.

Кирилл, возможно, Вам удобнее будет следующий вариант:

1. Откройте окно выбора контакта, нажмите правой кнопкой мыши на заголовке, и выберите "Настроить колонки";

2. В отображаемые колонки добавьте телефон.

В этом случае настройки сохранятся в Вашем профиле, и при открытии окна выбра Вы сможете посмотреть как ФИО, так и телефон.

Добрый день!
Варианты из постов #3 и #7 самые удобные, на мой взгляд.

Кирилл, разрешите поинтересоваться, чем обусловлена такая постановка задачи?

Спасибо за ответы, но Анна, такой вариант не подойдет.
Задача:
В карточке КЕ определенного типа, скажем, интернет провайдер, я добавил поле "телефон поддержки". В базе контактов есть соотв. запись, но светить контакт не удобно, т.к. чтобы увидеть телефон, нужно сделать еще 2 клика. Долго, неудобно. А так при добавлении КЕ выбрал контакт, а отображается только телефон - красота.

Здравствуйте, Кирилл.

Насколько я понял, Вам этот вариант подходит:

"Добавить в карточку КЕ поле Телефон, которое всегда будет наполняться из Контакта, на основании того, что выбрано в поле Контакт этой же карточки."

Если так, инструкция по реализации во вложении.

Кстати, после выбора контакта, для красоты, можете скрывать поле с контактом, а оставлять только поле с телефоном:

Page.ContactEdit.IsVisible = false;
Page.PhoneEdit.IsVisible = true;

Добрый день.
Дмитрий, спасибо. Почти получилось.
Т.е. когда я создаю новую КЕ, выбираю интернет провайдера, автоматически в поле телефон поддержки вставляется правильный телефон. Но после открытия карточки созданной ранее КЕ, телефон не отображается. Правильно ли я понимаю, что при создании КЕ, телефон в базу не пишется. Он просто отображается при открытии карточки? Дело в том, что в инструкции указано, что новые метод нужно вставить в скрипт ChildPageLoadCompleteAfterBaseScript. Но в карточке редактирования такого нет.
Я нашел процесс PageLoadCompleteSubProcess, там есть единственный скрипт без названия ScriptTask5. В него и вставил метод. Что сделал не так?

P.S. Сам скрипт, который в инструкции пришлось подправить, т.к. у меня названия полей отличаются.

Номер, при условии что поле, в которое он вставляется связано в полем в БД, в базу кончено же пишется.

Я вижу следующую логику:

1. Для поля "Интернет провайдер" определить событие "значение изменено".
2. В этом событии в скрипт вставить код подстановки номера телефона в поле, которое связано с полем в объекте "КЕ".
3. Сохранить изменения.

Что получим:

При создании новой записи: изначально поле с телефоном пустое, при изменении поля "интернет провайдер" оно заполняется. По нажатию на "ОК" пишется в БД. При открытии, значения подтянется в поле как и все остальные.

Действительно, была ошибка привзяки поля к Datasource.
Все работает, спасибо!

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

Работаю в BPM. Создал раздел, назовем New, и все к нему(NewEditPage и т.д.). В нем помимо унаследованных важна колонка Account - справочник Контрагентов (а в карточке редактирования поле EditAccount). А в контрагенте создал колонку NewFlag, которая должна определять есть ли контрагент в разделе New. (Задача максимум)Так вот хотелось бы, чтобы при добавлении записи в New, в которой указан контрагент, в контрагенте менялся NewFlag на true, при удалении на false, а при изменении NewFlag "старого" контрагента менялся на false, "нового" на true.(Задача минимум) Для начала работы хотелось бы узнать как получить в скрипте значение поля в карточке редактирование, т.е. отклонение к предыдущей задаче это ID контрагента, выбранного в поле EditAccount.

Нравится

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

С помощь техподдержки задача минимум решена функцией Page.AccountEdit.Value.ToString()
Если есть предложения по задаче максимум, прошу.

Правильнее будет получать значение из Page.DataSource.ActiveRow.GetTypedColumnValue("AccountId"). Если Вы унаследовались от базовой страницы редактирования.
Мне не нравится идея хранить признак использования контрагента где-то в самом контрагенте. Лучше было бы в том месте, где вы хотите этот флаг использовать, определять фигурирует ли этот контрагент где-то. Например, если Вам нужно в какой-то момент отобразить контрагентов, у которых NewFlag = false, то можно просто наложить фильтр not exists на таблицу New.

"Раловец Ольга" написал: Например, если Вам нужно в какой-то момент отобразить контрагентов, у которых NewFlag = false

Что-то типа того. Мне нужно, чтобы в поле AccountEdit я мог выбрать тех контрагентов, которых нет в New.

"Раловец Ольга" написал:то можно просто наложить фильтр not exists на таблицу New.

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

Вот пример, как получить контрагентов, которые не указаны в таблице New c помощью EntitySchemQuery:

var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Account");
esq.PrimaryQueryColumn.IsAlwaysSelect = true;
esq.AddAllColumns();
var filterGroup = new EntitySchemaQueryFilterCollection(esq, LogicalOperationStrict.And);
filterGroup.IsNot = true;
filterGroup.Add(esq.CreateFilter(FilterComparisonType.Equal, "[New:Account].Account.Id", esq.CreateSchemaColumnExpression("Id")));
esq.Filters.Add(filterGroup);
var accounts = esq.GetEntityCollection(UserConnection); 

Решение с фильтром действительно лучше, сразу пропадает разветвление на добавить, удалить и изменить.
Но как его привязать к полю AccountEdit? Это делается в карточке редактирования, процессе Init?

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

Уточните, пожалуйста, что Вы имеете ввиду под "привязкой" фильтра к полю? Вы хотите чтобы в окне выбора значений для этого поля, показывались лишь те контрагенты, которые отсутствуют в разделе New?

Да, именно так.

Совсем забыл. Компилятор ругается на esq.AddAllColumns();

'Terrasoft.Core.Entities.EntitySchemaQuery' does not contain a definition for 'AddAllColumns' and no extension method 'AddAllColumns' accepting a first argument of type 'Terrasoft.Core.Entities.EntitySchemaQuery' could be found (are you missing a using directive or an assembly reference?)

Добавлять все по одной или может достаточно Id?

Метод называется AddAllSchemaColumns, но Вам из этого всего для поля нужен только фильтр. Я точно не помню, но пример можно посмотреть в странице контакта/контрагента, как в зависимости от выбранной страны фильтруются города. Событие контрола, в котором нужно накладывать фильтр называется PrepareLookupFilters или как-то похоже. Обработчики этих событий могут быть зарегистрированы где-то на Init или PageLoad. Все, что нужно сделать, это по аналогии с представленным примером, передать необходимые фильтры в виде Dictionary.

Показать все комментарии
ORA-00972: identifier is too long
Технические вопросы
5.x

возникает ORA-00972: identifier is too long
при "Администрирование" - "доступ к объектам"

в "трассах" оракла:

SELECT
        "SysVwAdministrativeObjectsRight"."Id",
        "SysVwAdministrativeObjectsRight"."SysAdminUnitId" "SysAdminUnitId",
        "SysAdminUnit"."Name" "SysAdminUnitName",
        "EntitySchemaRecRightOperation"."Id" "OperationId",
        "EntitySchemaRecRightOperation"."Name" "OperationName",
        "SysEntitySchemaRecOprRightLvl"."Id" "RightLevelId",
        "SysEntitySchemaRecOprRightLvl"."Name" "RightLevelName",
        "Position" "Position"
FROM
        "BPMONLINE520BANK_SOFTKEY"."SysVwAdministrativeObjectsRight"
        INNER JOIN "BPMONLINE520BANK_SOFTKEY"."EntitySchemaRecRightOperation" ON ("EntitySchemaRecRightOperation"."Value" = "SysVwAdministrativeObjectsRight"
."Operation")
        INNER JOIN "BPMONLINE520BANK_SOFTKEY"."SysEntitySchemaRecOprRightLvl" ON ("SysEntitySchemaRecOprRightLvl"."Value" = "SysVwAdministrativeObjectsRight"
."RightLevel")
        INNER JOIN "BPMONLINE520BANK_SOFTKEY"."SysAdminUnit" ON ("SysAdminUnit"."Id" = "SysVwAdministrativeObjectsRight"."SysAdminUnitId")
WHERE
        "SysVwAdministrativeObjectsRight"."RecordId" = :P1
        AND "SysVwAdministrativeObjectsRight"."Position" > :P2
        AND "SysVwAdministrativeObjectsRight"."Operation" = :P3
ORDER BY
        "Position" ASC NULLS FIRST

SQL> SELECT * FROM v$version;

BANNER
--------------------------------------------------------------------------------
Oracle DATABASE 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS FOR Solaris: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

Нравится

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

У Вас на только BPMOnline на этом сервере крутиться? Уж очень серьезный сервер. Обычно такие сервера в банках стоят.

нет не только

Добрый день!

Рустам, какое название таблицы в базе, которой Вы раздаете права? Причина ошибки, скорее всего, в том, что название основной таблицы и часть Right превышают допустимые 30 символов.

"Гакало Игорь Александрович" написал:

Добрый день!

Рустам, какое название таблицы в базе, которой Вы раздаете права? Причина ошибки, скорее всего, в том, что название основной таблицы и часть Right превышают допустимые 30 символов.


да, это следует из ORA-00972. меня, по-большей части интересует, как это поправить?

подсказали как решить. напишу здесь, вдруг кто столкнется.


Вы можете зайти в раздел Конфигурация, найти объект VwAdministrativeObjects, нажать Изменить и посмотреть – стоит ли у него признак Администрируется по записям

Если стоит – то ее нужно убрать (т.к. данное представление (view) не должно администрироваться по записям), и после этого сохранить и опубликовать обьект

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

Добрый день!

Нужно создать действие: создание одной активности на основании другой. При этом переносить контрагента из родительской активности в подчиненную.
Как можно это сделать?

Заранее спасибо.

Нравится

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

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

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

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

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

string recordId = Guid.Empty.ToString();
EntitySchemaUId = Page.DataSource.SchemaUId;
var pageSchemaManager = Page.DataSource.Schema.SchemaManagerProvider.GetManager("PageSchemaManager");
Guid EditPageUId = new Guid("f2bf397b-8fa3-48ba-b691-57360871967a");
var editPageSchema = pageSchemaManager.GetInstanceByUId(EditPageUId) as PageSchema;
OpenEditWindow.OpenerInstanceId = InstanceUId;
OpenEditWindow.UseCurrentActivePage = true;
OpenEditWindow.PageUId = EditPageUId;
var parameters =  
      new Dictionary<string, string> {
            {"recordId", recordId.ToString()},
            {"entitySchemaUId", EntitySchemaUId},
            {"treeGridId", Page.TreeGrid.ClientID},
			{"SysModuleEditId", SysModuleEditId.ToString()}
      };
if (!IsDetailGrid && SysModuleId != Guid.Empty) {
	parameters.Add("SysModuleId", SysModuleId.ToString());
}
if (!LocatedInEditPage && !string.IsNullOrEmpty(ListenerPageProcessUId)) {
	var listenerPageProcess = UserConnection.ProcessEngine.GetProcessByUId(ListenerPageProcessUId);	
	var mainPageProcessUId = listenerPageProcess.GetPropertyValue("MainPageProcessUId") != null ? listenerPageProcess.GetPropertyValue("MainPageProcessUId").ToString() : string.Empty;
	if (!string.IsNullOrEmpty(mainPageProcessUId)) {
		parameters.Add("mainPageProcessUId", mainPageProcessUId);	
	}	
}
if(DefValuesId != null && !DefValuesId.IsEmpty()) {
	parameters.Add("defValuesId", DefValuesId.ToString());
}
if(SelectedFolderId != null && !SelectedFolderId.Equals(Guid.Empty)) {
	parameters.Add("folderId", SelectedFolderId.ToString());
}
if (!string.IsNullOrEmpty(EditPageHelpContextId)) {
	parameters.Add("helpContextId", EditPageHelpContextId);
}
OpenEditWindow.PageParameters = parameters;
OpenEditWindow.Centered = true;
OpenEditWindow.CloseOpenerOnLoad = false;
return true;

1) EditPageUId - это ID нужной страницы
2) Что за параметры SysModuleEditId, InstanceUId, SysModuleId, DefValuesId, SelectedFolderId, EditPageHelpContextId? Можно ли их прописать вручную?
3) Можно ли в PageParameters передать ID нужной активности?

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

string recordId = Guid.Empty.ToString();
EntitySchemaUId = Page.DataSource.SchemaUId;
var pageSchemaManager = Page.DataSource.Schema.SchemaManagerProvider.GetManager("PageSchemaManager");
Guid EditPageUId = new Guid("f2bf397b-8fa3-48ba-b691-57360871967a");
var editPageSchema = pageSchemaManager.GetInstanceByUId(EditPageUId) as PageSchema;
OpenEditWindow.OpenerInstanceId = InstanceUId;
OpenEditWindow.UseCurrentActivePage = true;
OpenEditWindow.PageUId = EditPageUId;
var parameters =  
      new Dictionary<string, string> {
            {"recordId", recordId.ToString()},
            {"entitySchemaUId", EntitySchemaUId},
            {"treeGridId", Page.TreeGrid.ClientID},
                        {"SysModuleEditId", SysModuleEditId.ToString()}
      };

где recordId - ID нужной активности.

У элемента "Добавить данные" есть такой параметр RecordDefValues, как правильно записать туда параметры? Как я понял, здесь можно указать параметры полей новой записи.

Здравствуйте, Дмитрий.
Через метод Add, где первый параметр - имя поля обьекта, второй - его значение.

var RecordDefValues= new Dictionary<
	string, object>();
RecordDefValues.Add("TypeId", "fbe0acdc-cfc0-df11-b00f-001d60e938c6");

Вот что BPM выдает, если присваивать такую конструкцию к свойству элемента

Вот код скрипта:

Guid EntitySchemaId = new Guid("c449d832-a4cc-4b01-b9d5-8a12c42a9f89");
AddNewTask.EntitySchemaId = EntitySchemaId;
Guid ParentActivityId = new Guid("c2ebcd46-c33c-4fc1-8736-d36bb9ddce5f");
Guid AccountId = new Guid("3f0f1cd5-2ac9-4e0b-bc17-e386a91743c9");
var DefValues =  
      new Dictionary<string, object> {
            {"AccountId", AccountId.ToString()},
            {"ParentActivityId", ParentActivityId.ToString()}
      };
AddNewTask.RecordDefValues = DefValues;
return true;

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

Не понял что Вы имеете ввиду

Параметры - не константа, по моему другого пути нет, кроме как писать из скрипта

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

Все.

бизнес-процесс

У меня что-то не открывается окно свойств для элемента процесса, оно должно открываться по 2-ному клику?

"Беляков Дмитрий" написал:

У меня что-то не открывается окно свойств для элемента процесса, оно должно открываться по 2-ному клику?

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

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

Да, в БП процессах действительно нашла свойства для элемента процесса.
А как можно автоматически запускать нарисованный процесс?
И как передать параметры?
Нужно чтобы по кнопке, находящейся в реестре активностей, запускался процесс по добавлению новой задачи, и чтобы указывается Id предыдущей(родительской) активности.

Александра, если Вам нужно создавать подчиненную активность в конкретных определенных случаях, создайте новый БП, стартовым событием которого будет элемент "сигнал", который будет "слушать" изменения в объекте "Активности". При этом, можно установить дополнительные условия, которым должна соответствовать запись объекта, для того чтобы ПБ запустился (к примеру тип активности = "задача", ответственный = "Антон Петрович"). Далее, создайте новую активность, значение по умолчанию установите из элемента чтения данных, который вычтет ту активность, по которой был запущен БП.

Если создавать подчиненную активность нужно в "рандомных" случаях, добавьте кнопку "Создать подчиненную активность", перейдите на событие OnClick - при этом откроется дизайнер процессов, и далее добавьте элемент под-процесс, и выберите, какой процесс Вам нужно запустить.

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

И еще вопрос: По OnClick кнопки создался процесс, после начального сообщения ставлю скрипт, где беру ID выбранной записи и передаю его в следующий элемент "Подпроцесс", с помощью которого запускаю созданный ранее процесс. Но при сохранении пишет: "Элемент "ProcessCreateNewTask" не может быть сериализован в БД, т.к. не сериализуется процесс". Что это означает?

Для лучшего представления скриншоты:

1) Процесс на OnClick действия:

2) Сам процесс создания новой активности:

"Беляков Дмитрий" написал:

И еще вопрос: По OnClick кнопки создался процесс, после начального сообщения ставлю скрипт, где беру ID выбранной записи и передаю его в следующий элемент "Подпроцесс", с помощью которого запускаю созданный ранее процесс. Но при сохранении пишет: "Элемент "ProcessCreateNewTask" не может быть сериализован в БД, т.к. не сериализуется процесс". Что это означает?


Это означает, что Вы не установили признак "Сериализовать в БД" в свойствах процесса. Если хоть один элемент процесса требует сериализации (в Вашем случае - подпроцесс), то весь процесс тоже необходимо отметить как сериализуемый в базу данных.

"Беляков Дмитрий" написал:

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


Для колонки "Контрагент" реестре колонок элемента "Открыть карточку редактирования" устанавливаете "значение из другого параметра или свойства" (как описано выше), находите в дереве элементов соответствующее "Чтение данных". У этого элемента есть параметр "Результат выборки". Справа будет список колонок прочитанной записи, отфильтрованный по подходящим типам данных. Находите там "Контрагент".

Mapping

"Дмитрий Логвиненко" написал:
Беляков Дмитрий пишет:

И еще вопрос: По OnClick кнопки создался процесс, после начального сообщения ставлю скрипт, где беру ID выбранной записи и передаю его в следующий элемент "Подпроцесс", с помощью которого запускаю созданный ранее процесс. Но при сохранении пишет: "Элемент "ProcessCreateNewTask" не может быть сериализован в БД, т.к. не сериализуется процесс". Что это означает?

Это означает, что Вы не установили признак "Сериализовать в БД" в свойствах процесса. Если хоть один элемент процесса требует сериализации (в Вашем случае - подпроцесс), то весь процесс тоже необходимо отметить как сериализуемый в базу данных.


Да но это свойство нельзя выставить, если процесс создан в событии OnClick (речь не о дизайнере процессов).

"Дмитрий Логвиненко" написал:

Для колонки "Контрагент" реестре колонок элемента "Открыть карточку редактирования" устанавливаете "значение из другого параметра или свойства" (как описано выше), находите в дереве элементов соответствующее "Чтение данных". У этого элемента есть параметр "Результат выборки". Справа будет список колонок прочитанной записи, отфильтрованный по подходящим типам данных. Находите там "Контрагент".

Вот, пытаюсь выбрать, но почему-то выборка не активна:

Что я не так сделал? Вот настройки для элемента "Чтение данных":

"Беляков Дмитрий" написал:

Да но это свойство нельзя выставить, если процесс создан в событии OnClick (речь не о дизайнере процессов).


Да, как я написал выше, это все касается только бизнес-процессов. Во встроенных процессах страниц нельзя включить сериализацию и использовать элементы с обязательной сериализацией. У Вас есть такой элемент: "Открыть карточку редактирования". Его нельзя применить во встроенных процессах.

"Беляков Дмитрий" написал:

Что я не так сделал? Вот настройки для элемента "Чтение данных":

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

С чтением данных разобрался, спасибо.

Если "Открыть карточку редактирования" нельзя использовать в моем случае, то что же тогда надо использовать, пошел по такому пути: читаем родительскую активность --> создаем новую задачу --> а дальше ее надо открыть, как лучше это сделать? (что должно быть на месте обведенного элемента?)

Процесс:

"Беляков Дмитрий" написал:

С чтением данных разобрался, спасибо.

Если "Открыть карточку редактирования" нельзя использовать в моем случае, то что же тогда надо использовать, пошел по такому пути: читаем родительскую активность --> создаем новую задачу --> а дальше ее надо открыть, как лучше это сделать? (что должно быть на месте обведенного элемента?)


Именно этот элемент и нужно использовать. В качестве действия у него укажите "Открыть страницу".
Во встроенном процессе Вам придется использовать механизм, который Вы обсуждали с Дмитрием Олейником выше. После "Создать подчиненную задачу" необходимо вставить задание-сценарий с подготовкой параметров для элемента "Выполнить действие процесса 1". В коде в комментарии #4 переменной recordId присвойте Id записи, созданной в элементе "Создать подчиненную задачу". Он находится в параметре RecordId этого элемента.

Ох, что-то не создается задача

Схема скрипта:

Вот настройки создания задачи:

Дмитрий, есть ли возможность из вне подключится к Вашей системе BPMonline - посмотреть на БП?

Отправил в личку

Что нибудь удалось выяснить?

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

1

2

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

Жду с нетерпением)

Задачу уже создает. Осталось решить как открыть эту самую задачу

А все вроде получилось!
Создается задача и открывается

Еще вопрос: можно ли сделать так, чтобы при нажатии на кнопку "Отмена" в карточке новой задачи, удалялась эта задача?

Вот процесс:

Дмитрий,
попробуйте в обработчике события кнопки "Отмена" выполнить DELETE запрос к БД:

var delete = new Delete(UserConnection).From("Activity").Where("Id").IsEqual(Column.Parameter(new Guid("<Id задачи>")));
delete.Execute();
Показать все комментарии
redis
очистка Redis
Технические вопросы
5.x

Всех приветствую!

Часто возникает вопрос, как очистить redis (актуально для владельцев on-site).

Для очистки redis’a необходимо запустить файл redis-cli.exe в директории с сервером redis.

В открывшейся командной строке следует вписать команду: flushall

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

Приятной работы!

С уважением,

Белецкий Арсений

Группа компаний Terrasoft

Нравится

Поделиться

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

К чистке редиса по словам Саши Крынько следует относиться "очень взвешенно и осторожно", т.к. информация о сессии пользователя хранится и в базе данных и в редисе. При очистке редиса соответствующие данные о сессии в базе данных так и зависают незавершенными.

Кроме этого, совершенно не обязательно чистить все. Можно например очистить только одну базу с помощью flushdb. Для более полного изучения возможностей, ссылка на команды Redis клиента

Что делать, если redis-cli.exe вообще не принимает команды? Показывает черную панель без подсказки.

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

Скорее всего клиент не был установлен, либо служба Redis не запущена.

Как это проверить? Такое происходит, начиная со второго запуска redis-cli.

Попробуйте переустановить (версию 3.0 или 3.2, доступна для скачивания на сайте производителя).

надо клиента редиса запускать с параметром подключения

redis-cli.exe -h 172.28.1.199 -p 6379

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

А подскажите, уважаемые гуру, как можно создать представление?
Я так понимаю алгоритм таков - создаем Объект, в нем ставим галочку "Представление в базе данных" в свойствах (кстати, а что такое галочка "Виртуальный"? совсем не понятно).
Указываем родительский объект (например тот, откуда большинство полей мне в представлении пригодиться) и публикуем.
Теперь вот самое интересное и неожиданное - у меня не появилось в БД нового представления, хотя должно было... как его редактировать? как вписать в него хитрый запрос для расчета значения поля?
BPMOnline 5.3

Нравится

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

что такое галочка "Виртуальный"?
Она означает, что объект физически не создается в БД.
Например есть BaseAddress от которого наследуется ContactAddress и AccountAddress, но в базе присутствуют только последние 2 таблицы.

у меня не появилось в БД нового представления
А откуда системе узнать что туда должно было попасть? :wink:

как его редактировать?
Вручную создать view с таким же именем и alias на колонках как они названы в объекте.

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

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

"Булавин Владислав Геннадиевич" написал:у меня не появилось в БД нового представления
А откуда системе узнать что туда должно было попасть? :wink:

Таблицы попадают при создании объекта. Логично предположить... ну да ладно:smile:

"Булавин Владислав Геннадиевич" написал:как его редактировать?
Вручную создать view с таким же именем и alias на колонках как они названы в объекте.

А вот здесь самое интересное. Если доступ к системе клиента только через браузер и в базу напрямую никто не пускает? Ответ знаю, готовим скрипты и отсылаем тем полноправным, что имеют доступ к базе.
Выходим на старый добрый уровень прямой работы в БД, что имхо не совсем красиво.
В любом случае спасибо за ответы!

"Александр Кудряшов" написал:Таблицы попадают при создании объекта. Логично предположить... ну да ладно

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

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