7.3
доступ
права
Технические вопросы
7.x

Добрый день!
Система BPMOnline 7.3
Стоит такая задача: Пользователь, который входит в группу менеджеры должен видеть в разделе контакты свои записи(в кот. он ответственный) и контакты из группы руководителей отдела продаж(т.е. контакты своих руководителей). Если с первым пунктом проблем нет, то со вторым есть...
Подскажите пожалуйста, есть ли возможность реализовать это без программной доработки или нет?

Нравится

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

Добрый день!

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

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

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

В принципе может этим и обойдемся, спасибо!

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

Подскажите, где я могу посмотреть логи ошибок системы?
Меня интересуют в частности ошибки "отвала" системы по таймауту.
Я использую BPMOnline, Версия 5.4.

Нравится

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

Для того чтобы посмотреть куда сохраняется лог необходимо посмотреть файл log4net.config, который находится в каталоге ..\Terrasoft.WebApp.

Путь лога указывает подобным образом:

<conversionPattern value="${TEMP}\BPMonline\Site_%AspNet{SiteId}\%AspNet{ApplicationPath}\Log\" />
Показать все комментарии
5.x
http
web
web-запрос
Технические вопросы

bpm 5.4 on-site

Как сделать в скрипте HTTP запрос без открытия нового окна?

Например. Мне надо при нажатии на кнопку на некий сервер отправить HTTP GET/POST запрос, чтобы, например, отправилось КП.
http://myserver:4055?exec=sendemail&email=cc-sib@yandex.ru

Как такое сделать?

Нравится

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

Илья, эту тему смотрели?
Дополнительно ознакомиться с отправкой GET и POST запросов в C# Вы можете по этой ссылке, пример есть в конфигурации (схема GoogleMapsToolsSchema).

Как подключить библиотеку?

Не удалось найти имя типа или пространства имен "ActiveXObject" (пропущена директива using или ссылка на сборку?)
AccountEditPage.cs

Илья, думаю проще будет использовать код, приведенный во втором варианте(здесь). Так как в случае первого варианта потребуется скачивать и подключать стороннюю библиотеку. Как подключить библиотеку в версии 5.4 описано в этой статье

Написал вот этот код:

System.Net.WebRequest reqGET = System.Net.WebRequest.Create("http://127.0.0.1:4059/callto?number="+Page.PhoneEdit.Text);
System.Net.WebResponse resp = reqGET.GetResponse();
System.IO.Stream stream = resp.GetResponseStream();
System.IO.StreamReader sr = new System.IO.StreamReader(stream);
string s = sr.ReadToEnd();
Console.WriteLine(s);

На некоторых компьютерах код работает, на каких-то нет.
Там где не работает код пробовал запуск с разных браузеров.
Так же там где не работает в браузер вбивал http://127.0.0.1:4059/callto?number=8913....... - запрос выполняется.

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

Илья, как проявляется неработоспособность кода (выводятся ошибки, предупреждения)?

ничего не происходит

Илья, значит при выполнении кода на какой-то из строк происходит свал. Нужно пройти пошагово отладчиком скриптов и тогда будет понятна причина.
Либо альтернатива - заключить код в try - catch с выводом в блоке catch Exception.

Показать все комментарии
FastReport
Windows 8
Технические вопросы
Разработка

Добрый день!
Столкнулся со странным поведением отчетов Fastreport на Windows 8.
Прикрепляю две картинки (вторая этот же отчет на Windows 7).
Кто-нибудь сталкивался с подобным? и как с этим можно бороться?

Нравится

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

Здравствуйте, Валентин!

С подобной проблемой еще не сталкивались. Для первичного анализа сложившейся ситуации, необходимо локализовать проблему, а именно прошу, Вас, уточнить следующую информацию - воспроизводится ли еще данная ошибка на других отчетах Fastreport в Win 8? Если ошибка повторяется, то проблема в OS, если же нет - тогда сам отчет является проблемным. Если воспроизводится только на одном отчете, прошу прислать его сервисы для анализа.

Приятного дня!

Эта ошибка у меня воспроизводится на 2 компьютерах с установленной ОС Windows 8 и 8.1.
Она присутствует только в тех отчетах где используется компонент TfrxRichView. Добавляю сервисы отчетов.

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

Приятного дня!

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

Проблему воспроизвести удалось.

Обращение передано в департамент разработки для анализа и возможного исправления.

По результату анализа сообщим отдельным постом в данной теме.

Здравствуйте, Валентин!

Ошибка связана с таблицей, которая используется в компоненте TfrxRichView.

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

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

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

Для более глубокого анализа данной проблемы необходимо понимать, каким образом в компонент TfrxRichView была добавлена таблица и где она была создана (программный продукт и его версия).

А что за таблица?

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

Например:

[URL=http://fastpic.ru/][IMG]http://i66.fastpic.ru/big/2014/0714/6e/80378b6d…]

и

[URL=http://fastpic.ru/][IMG]http://i67.fastpic.ru/big/2014/0714/51/0068493e…]

Вероятнее всего, эти таблицы были скопированы из Word или Excel.

Попробуйте добавить нужные данные в отчет вручную:

[URL=http://fastpic.ru/][IMG]http://i65.fastpic.ru/big/2014/0714/b5/383b9ae6…]

Т.е. вы имеете ввиду форматирование а не какую-то определенную таблицу БД?

Валентин, да.

Я имею ввиду, что данные таблицы были, вероятно, скопированы Вами из Excel, Word в элемент RichText отчета.

Windows 8, по какой-то причине, некорректно воспринимает теги таблицы.

Потому в данный момент решением является использовать в элементе RichText не таблицу, а просто форматирование элементов.

Для корректного отображения отчета под Windows 8 подобных таблиц быть не должно.

Я понял, спасибо, попробую...

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

bpm 5.4 on-site

В базе данных хранится, например, 11 ч 41 мин, а в карточке отображается 18 ч 41, т.е. не учитывает мой часовой пояс. Как это исправить?

Нравится

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

о да)
это вечная проблема всех версий ТС
Даже тут, на форуме, часовой пояс сообщений не учитывается
я пишу по московскому времени, а отображается на форуме киевское время ...)
простите за флуд

мы у себя в ТС 3.х решали это тем, что просто использовали везде серверное время
плюс у SQL есть удобный формат даты с UTC

но у нас еще и проблема была в том, что у террасофт 3.х не разделено, где какое время будет использоваться с часовым поясом, а где без
и в результате, если использовать часовые пояса, то у нас, например, даты рождения контактов у некоторых людей становились не, допустим, 09.01.01 (00:00), а 08.01.01 22:00 )))
мило было)

Версия 5.4, а не 3.х

Здравствуйте, Илья.

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

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

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

Например, следующим скриптом мы принудительно установим часовой пояс GMT+06:00 Новосибирск пользователю Supervisor:

update SysAdminUnit
set TimeZoneId = 
(select Id from TimeZone where Name = '(GMT+06:00) Новосибирск')
where Name = 'Supervisor'

"Соколов Илья Андреевич" написал:Версия 5.4, а не 3.х

"Калинин Иван" написал:мы у себя в ТС 3.х

я лишь привел пример и поделился опытом. я прекрасно видел, что ваша версия не 3.х

Так же отображает другой часовой пояс.

Здравствуйте, Илья.

Если проблема справедлива для раздела "Активности", прошу применить исправления ниже, предварительно выполнив резервную копию базы данных (!).

1. В схеме «ActivityUtils» найти статический метод «TryGetActivityPeriod» и заменить его содержимое, чтобы получилось так:

public static bool TryGetActivityPeriod(UserConnection userConnection, NameValueCollection queryString, HttpServerUtility server, out DateTime startDate, out DateTime dueDate) {
bool result = false;
                var currentDateTime = userConnection.CurrentUser.GetCurrentDateTime();
                startDate = currentDateTime;
                dueDate = currentDateTime;
                string startDateString = queryString[StartDateKey];                                     
                string dueDateString = queryString[DueDateKey];
                if (!string.IsNullOrEmpty(startDateString) && !string.IsNullOrEmpty(dueDateString)) {
                                result = DateTime.TryParse(server.UrlDecode(startDateString), CultureInfo.InvariantCulture, DateTimeStyles.None, out startDate) &&
                                DateTime.TryParse(server.UrlDecode(dueDateString), CultureInfo.InvariantCulture, DateTimeStyles.None, out dueDate);
                }
                return result;
}

2. Сохранить изменения (НЕ ПУБЛИКОВАТЬ)
3. В процессе схемы «CallEditPage» найти ScriptTask «ChildPageLoadCompleteAfterBaseScript» (событие «PageLoadComplete» вызов после базового). В этой схеме заменить содержимое ScriptTask на:

if (IsNew) {
                var startDate = UserConnection.CurrentUser.GetCurrentDateTime();
                var dueDate = UserConnection.CurrentUser.GetCurrentDateTime();
                var periodFromQueryString = Terrasoft.Configuration.ActivityUtils.TryGetActivityPeriod(UserConnection, Page.Request.QueryString, Page.Server, out startDate, out dueDate);
 
                var defValues = Terrasoft.Configuration.ActivityUtils.GetActivityDefValues(UserConnection);
 
                var dataSource = Page.DataSource;
                dataSource.ActiveRow.SetColumnValue("StartDate", !periodFromQueryString ? startDate : defValues.StartDate);
                dataSource.ActiveRow.SetColumnValue("DueDate", !periodFromQueryString ? dueDate : defValues.DueDate);
                dataSource.ActiveRow.SetColumnValue("OwnerId", defValues.OwnerId);
                dataSource.ActiveRow.SetColumnValue("AuthorId", defValues.AuthorId);
                Page.StartDateEdit.SetValue(!periodFromQueryString ? startDate : defValues.StartDate);
                Page.DueDateEdit.SetValue(!periodFromQueryString ? dueDate : defValues.DueDate);
                Page.OwnerEdit.SetValueAndText(defValues.OwnerId, defValues.OwnerName);
 
                if (Page.Request.QueryString[Terrasoft.Configuration.ActivityUtils.ShowInScheduleKey] == bool.TrueString) {
                               dataSource.ActiveRow.SetColumnValue("ShowInScheduler", true);
                               Page.ShowInShedulerEdit.Checked = true;
                }              
}
 
if (!(IsNew || IsCopy) && Page.DataSource.Rows[0].GetTypedColumnValue<bool>("Status_Finish")) {
                Page.ResultEdit.Enabled = true;
                Page.DetailedResultEdit.Enabled = true;
}
var allowedResult = Page.DataSource.ActiveRow.GetTypedColumnValue<string>("AllowedResult");
AllowedResults = string.IsNullOrEmpty(allowedResult) ? new Dictionary<Guid, string>() : 
                JsonConvert.DeserializeObject<Dictionary<Guid, string>>(allowedResult);
 
if (Page.DataSource.Rows.Count > 0) {
                Page.RemindToAuthorDateEdit.Enabled = Page.DataSource.Rows[0].GetTypedColumnValue<bool>("RemindToAuthor");
                Page.RemindToOwnerDateEdit.Enabled = Page.DataSource.Rows[0].GetTypedColumnValue<bool>("RemindToOwner");
}
return true;

4. Сохраняем изменения и сохраняем (НЕ ПУБЛИКУЕМ) схему процесса.
5. В процессе схемы «TaskEditPage» найти ScriptTask «ChildPageLoadCompleteAfterBaseScript» (событие «PageLoadComplete» вызов после базового). В этой схеме заменить содержимое ScriptTask на:

if (IsNew) {
                var startDate = UserConnection.CurrentUser.GetCurrentDateTime();
                var dueDate = UserConnection.CurrentUser.GetCurrentDateTime();
                var periodFromQueryString = Terrasoft.Configuration.ActivityUtils.TryGetActivityPeriod(UserConnection, Page.Request.QueryString, Page.Server, out startDate, out dueDate);
 
                var defValues = Terrasoft.Configuration.ActivityUtils.GetActivityDefValues(UserConnection);
 
                var dataSource = Page.DataSource;
                dataSource.ActiveRow.SetColumnValue("StartDate", !periodFromQueryString ? startDate : defValues.StartDate);
                dataSource.ActiveRow.SetColumnValue("DueDate", !periodFromQueryString ? dueDate : defValues.DueDate);
                dataSource.ActiveRow.SetColumnValue("OwnerId", defValues.OwnerId);
                dataSource.ActiveRow.SetColumnValue("AuthorId", defValues.AuthorId);
                Page.StartDateEdit.SetValue(!periodFromQueryString ? startDate : defValues.StartDate);
                Page.DueDateEdit.SetValue(!periodFromQueryString ? dueDate : defValues.DueDate);
                Page.OwnerEdit.SetValueAndText(defValues.OwnerId, defValues.OwnerName);
 
                if (Page.Request.QueryString[Terrasoft.Configuration.ActivityUtils.ShowInScheduleKey] == bool.TrueString) {
                               dataSource.ActiveRow.SetColumnValue("ShowInScheduler", true);
                               Page.ShowInSchedulerEdit.Checked = true;
                }
}
 
if (!(IsNew || IsCopy) && Page.DataSource.Rows[0].GetTypedColumnValue<bool>("Status_Finish")) {
                Page.ResultEdit.Enabled = true;
                Page.DetailedResultEdit.Enabled = true;
}
var allowedResult = Page.DataSource.ActiveRow.GetTypedColumnValue<string>("AllowedResult");
AllowedResults = string.IsNullOrEmpty(allowedResult) ? new Dictionary<Guid, string>() : 
                JsonConvert.DeserializeObject<Dictionary<Guid, string>>(allowedResult);
Page.CategoryEdit.Enabled = (AllowedResults as Dictionary<Guid, string>).Count == 0;
if (Page.DataSource.Rows.Count > 0) {
                Page.RemindToAuthorDateEdit.Enabled = Page.DataSource.Rows[0].GetTypedColumnValue<bool>("RemindToAuthor");
                Page.RemaindToOwnerDateEdit.Enabled = Page.DataSource.Rows[0].GetTypedColumnValue<bool>("RemindToOwner");
}
return true;

6. Сохраняем изменения и сохраняем (НЕ ПУБЛИКУЕМ) схему процесса.
7. В процессе схемы «EmailEditPage» найти ScriptTask «EnableSendButton»/« Set Default Values, Activate Mail Send Button» (событие «PageLoadComplete» вызов после базового). В этой схеме заменить содержимое ScriptTask на:

if (IsNew) {
                var startDate = UserConnection.CurrentUser.GetCurrentDateTime();
                var dueDate = UserConnection.CurrentUser.GetCurrentDateTime();
                var periodFromQueryString = Terrasoft.Configuration.ActivityUtils.TryGetActivityPeriod(UserConnection, Page.Request.QueryString, Page.Server, out startDate, out dueDate);
 
                var defValues = Terrasoft.Configuration.ActivityUtils.GetActivityDefValues(UserConnection);
 
                var dataSource = Page.DataSource;
                dataSource.ActiveRow.SetColumnValue("StartDate", !periodFromQueryString ? startDate : defValues.StartDate);
                dataSource.ActiveRow.SetColumnValue("DueDate", !periodFromQueryString ? dueDate : defValues.DueDate);
                dataSource.ActiveRow.SetColumnValue("OwnerId", defValues.OwnerId);
                dataSource.ActiveRow.SetColumnValue("AuthorId", defValues.AuthorId);
 
                Page.StartDateEdit.SetValue(!periodFromQueryString ? startDate : defValues.StartDate);
                Page.DueDateEdit.SetValue(!periodFromQueryString ? dueDate : defValues.DueDate);
                Page.OwnerEdit.SetValueAndText(defValues.OwnerId, defValues.OwnerName);
 
                if (Page.Request.QueryString[Terrasoft.Configuration.ActivityUtils.ShowInScheduleKey] == bool.TrueString) {
                               dataSource.ActiveRow.SetColumnValue("ShowInScheduler", true);
                               Page.ShowInSchedulerEdit.Checked = true;
                }
 
                var parameterContactId = GetIdFromParameter("ContactId");
                if (!parameterContactId.Equals(Guid.Empty)) {
                               dataSource.ActiveRow.SetColumnValue("Recepient", GetRecipientByContact(parameterContactId));
                }
 
                var parameterTemplateId = GetIdFromParameter("TemplateId");
                if (!parameterTemplateId.Equals(Guid.Empty)) {
                /*
                               Activity activity = GetActivity();
                               var condition = new Dictionary<string, object>() {
                                                                                                                             { "Activity", activity.Id },
                                                                                                                             { "EmailTemplate", parameterTemplateId }
                                                                                                              };
 
                               var link = new EmailTemplateActivity(UserConnection);
 
                               bool isFetched = false;
                               try {
                                               isFetched = link.FetchFromDB(condition);
                               } catch { continue; }
 
                               if (!isFetched) {
                                               link.SetDefColumnValues();
 
                                               link.ActivityId = activity.Id;
                                               link.EmailTemplateId = parameterTemplateId;
 
                                               link.Save();
                               }
                               */
                               AddTemplateToEmailBody(parameterTemplateId, true);                                                           
                }
}
 
if (!IsNew && !IsCopy) {
                var emailStatusId = Page.DataSource.Rows[0].GetTypedColumnValue<Guid>("EmailSendStatusId");
                var emailStatus_Sended = new Guid("8074FFC0-6107-E011-A646-16D83CAB0980");
                var emailStatus_InProgress = new Guid("603BA6AF-6107-E011-A646-16D83CAB0980"); 
                if(emailStatusId.Equals(emailStatus_Sended) || emailStatusId.Equals(emailStatus_InProgress)) {
                               Page.EmailButton.Enabled = false;
                }
 
                if(emailStatusId.Equals(emailStatus_Sended)) {
                               Page.SenderEdit.Enabled = false;
                               Page.RecepientEdit.Enabled = false;
                               Page.CopyRecepientEdit.Enabled = false;
                               Page.BlindCopyRecepientEdit.Enabled = false;
                               Page.TitleEdit.Enabled = false;
                               Page.OwnerEdit.Enabled = false;
                               Page.StatusEdit.Enabled = false;
                               Page.BodyEdit.Enabled = false;
                }
}
 
Page.AddTemplateButton.Enabled = !IsNew && !IsCopy;
Page.CreateMessageFromTemplatesButton.Enabled = !IsNew && !IsCopy;
if (Page.DataSource.Rows.Count > 0) {
                Page.RemindToAuthorDateEdit.Enabled = Page.DataSource.Rows[0].GetTypedColumnValue<bool>("RemindToAuthor");
                Page.RemindToOwnerDateEdit.Enabled = Page.DataSource.Rows[0].GetTypedColumnValue<bool>("RemindToOwner");
}
return true;

8. Сохраняем изменения, и ПУБЛИКУЕМ схему. (Подтянется публикация измененных схем при компилировании конфигурации).
9. Проверяем.
Все.

Нет, это не раздел активности. Я создал свой раздел.

Нет, это не раздел активности. Я создал свой раздел.

Нет, это не раздел активности. Я создал свой раздел.

Илья, проблемы со временем только в Вашем разделе или во всех разделах системы?

Только в моём разделе.

Илья,

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

В Ваш раздел данные попадают напрямую SQL-запросом и уже в базу они сохраняются со смещением согласно Вашему часовому поясу.

Решением является писать записи в Ваш раздел в формате UTC. Для этого существуют функция SQL:

GETUTCDATE()

http://msdn.microsoft.com/en-us/library/ms178635.aspx

Працюю з версією 5.4

Намагаюсь розібратися з часовим поясом.
Формую в SQL вибірку для формування звіту.
В базі дати зберігаються як UTC.
Витягую значення

var offSet=UserConnection.CurrentUser.TimeZone.BaseUtcOffset.TotalMinutes

яке в SQL-запиті підставляю в дати:

DATEADD(MINUTES,offSet,<дата>)

Все добре, окрім одного:
UserConnection.CurrentUser.TimeZone.DisplayName =>
displayName : (UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius
але по карточці звернення бачу, що зміщення не +2:00, а +3:00

Поки що не знайшов, як вийти на +3:00

Видимо, ещё один час даёт летнее время.

"Зверев Александр" написал:

Видимо, ещё один час даёт летнее время.


Може й так, але яким чином та година враховується ?
В одному скрипті я отримую значення:

var respondedOn = activeRow.GetTypedColumnValue<DateTime>("RespondedOn");

та

var	offSet = UserConnection.CurrentUser.TimeZone.BaseUtcOffset.TotalMinutes;

respondedOn враховує +3:00
а
offSet = 120

Тут пишут, что для часового пояса можно получить, переводят ли часы:


Use TimeZoneInfo.IsDaylightSavingTime Method (DateTimeOffset) to find if it is currently Daylight saving for your Timezone.

var info = TimeZoneInfo.FindSystemTimeZoneById("Greenwich Standard Time");
DateTimeOffset localServerTime = DateTimeOffset.Now;
bool isDaylightSaving = info.IsDaylightSavingTime(localServerTime);

There are further examples here

А тут упоминают такое свойтво:

DateTimeOffset.Now.Offset.TotalMinutes

Оно даёт 2 или 3?

offSet : 180

Те, що треба. Дякую

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

Подскажите можно ли раскрасить в разные цвета строки реестра в bpm 5.4 on-site?

Нравится

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

Доброе утро, Илья. Ознакомьтесь с примером.

На PageLoad подписываемся на событие:

Page.DataSource.Loaded += Page.TreeGrid.DataLoaded;
Page.TreeGrid.GetRowConfigHandler += GetRowConfig;

Пример метода, который реализует подсветку в зависимости от Статуса контрагента:

public virtual DataSourceRowConfig GetRowConfig(Entity row) {
    string primaryColumnName = row.Schema.PrimaryColumn.Name;
    string primaryColumnValue = row.GetColumnValue(primaryColumnName).ToString();
    Dictionary<Guid,string> Colors = new Dictionary<Guid,string>();
    Colors = (Dictionary<Guid,string>)objColors;
    var config = new DataSourceRowConfig(primaryColumnValue);
    string backgroundColor = string.Empty;
    var statusId = row.GetTypedColumnValue<Guid>("AccountStatusId");
    if(statusId != Guid.Empty && Colors.Count > 0){
        backgroundColor = Colors[statusId];
    }
    if(!string.IsNullOrEmpty(backgroundColor)){
        config.AddConfig(new DataSourceRowBackgroundColorConfigValue(backgroundColor));
    }
    string[] dropTags = new string[] {Page.DataSource.Schema.Name};
    config.AddConfig(new DataSourceRowDragTagsConfigValue(dropTags));
    return config;                          
}

backgroundColor можно присваивать значения в таком виде:

Показать все комментарии
7.3
Группы
карточка редактирования
Технические вопросы
7.x

Добрый день.
BPMOnline 7.3
Интересует следующее:
1. Как расположить новое поле на карточке перед уже существующими, не переопределяя положение всех этих полей(row)?
2. Как менять порядок расположения групп и деталей на карточке? Создается впечатление что положение меняется хаотично, при перемещении строк с описанием групп в коде.
3. Так же проблема с добавлением на новую деталь, уже поднималась на форуме но пока без ответа..

Нравится

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

Здравствуйте, Иван.

Задачи по перемещению элементов на странице необходимо решать при помощи мастера разделов.
Касательно добавления на деталь, единственным условием для отображения кнопки Добавить является наличие карточки редактирования зарегистрированной в SysModuleEdit. Были проблемы в ранних сборках, в последнем релизе (745) проблем быть не должно.

Спасибо, будем обновляться!

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

Добрый день!

BPM 7.2

Есть типизированный раздел Запросы и две страници редактирования (А, Б)
img1

Раздел создан согласно SDK.
Страницы отображаются и работают нормально.

Проблема в том что страниц нет в списке элемента процесса Страница редактирования
img2

В чем может быть причина?

Нравится

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

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

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

Посмотрите, пожалуйста, есть ли Ваши созданные страницы в таблице VwSysClientUnitSchema. Посмотреть можно напрямую запросом в БД. Также на "Странице редактирования параметров действия", есть фильтрация, которая накладывается на поле "Страница" выбора страниц, посмотреть её можно в из процесса страницы в скрипте CreateControlsScriptTask. Обратите, пожалуйста, внимание заполнены ли все необходимые колонки у Ваших страниц во VwSysClientUnitSchema, которые необходимы для фильтрации, а именно:

var workSpaceFilter = new Dictionary<string, object> {
	{ "comparisonType", FilterComparisonType.Equal },
	{ "leftExpressionColumnPath", "SysWorkspace" },
	{ "useDisplayValue", false },
	{ "rightExpressionParameterValues", new object[] { UserConnection.Workspace.Id } }
};
var packageFilter = new Dictionary<string, object> {
	{ "comparisonType", FilterComparisonType.Equal },
	{ "leftExpressionColumnPath", "SysPackageUId" },
	{ "useDisplayValue", false },
	{ "rightExpressionParameterValues", new object[] { processSchema.PackageUId } }
};
var schemaFilter = new Dictionary<string, object> {
	{ "comparisonType", FilterComparisonType.Equal },
	{ "leftExpressionColumnPath", "UId" },
	{ "useDisplayValue", false },
	{ "rightExpressionParameterValues", null }
};
var extendParentFilter = new Dictionary<string, object> {
	{"comparisonType", FilterComparisonType.Equal},
	{"leftExpressionColumnPath", "ExtendParent"},
	{"useDisplayValue", false},
	{"rightExpressionParameterValues", new object[] {false}}};
Page.PageEdit.PrepareLookupFilter += delegate (object sender, LookupEditEventArgs e) {
	var lookupFilters = (Collection<Dictionary<string, object>>)e.Filters;
	schemaFilter["rightExpressionParameterValues"] = entitySchemaUIds == null ? null : newentitySchemaUIds.Keys.ToArray();
	lookupFilters.Add(packageFilter);
	lookupFilters.Add(schemaFilter);
	lookupFilters.Add(workSpaceFilter);
	lookupFilters.Add(extendParentFilter);
};

"Резниченко Сергей" написал:

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

Посмотрите, пожалуйста, есть ли Ваши созданные страницы в таблице VwSysClientUnitSchema. Посмотреть можно напрямую запросом в БД. Также на "Странице редактирования параметров действия", есть фильтрация, которая накладывается на поле "Страница" выбора страниц, посмотреть её можно в из процесса страницы в скрипте CreateControlsScriptTask. Обратите, пожалуйста, внимание заполнены ли все необходимые колонки у Ваших страниц во VwSysClientUnitSchema, которые необходимы для фильтрации...

Страницы есть в таблице VwSysClientUnitSchema и колонки все заполнение.
Но страницы все равно не отображаютса в списке

Решено.

Проблема была в разделе.

Таблица SysModule, колонка CardSchemaUId должена содержать значение UId страници раздела з таблици VwSysClientUnitSchema.

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

Рад, что проблема решилась. Если будут вопросы, пожалуйста, обращайтесь.

Приятного дня!

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

bpm 5.4 on-site

не присваивается идентификатор полю в карточке

В Карточке Есть поле "Контрагент". В объекте системы это соответствует "Account", в базе "AccountID".

Пишу код

Page.DataSource.ActiveRow.SetColumnValue("AccountID", firma);

либо

Page.DataSource.ActiveRow.SetColumnValue("Account", firma);

получаю следующую ошибку:

Exception Message: Значение с именем "AccountID" не найдено
Exception Type: Terrasoft.Common.ItemNotFoundException
Exception Source: Terrasoft.Core

Подскажите, пожалуйста, как исправить ошибку.

Нравится

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

Здравствуйте, Илья!
Название справочного поля в БД формируется как название поля в объекте + постфикс "Id". Именно "Id", а не "ID". То есть, правильно писать так:

Page.DataSource.ActiveRow.SetColumnValue("AccountId", firma);

если в объекте поле называется "Account".

Нет, так не работает.

Здравствуйте, Илья!
Как Вы поняли, что функция не работает? Если Вы ожидаете, что на странице изменится значение справочного поля, то Вы этого не увидите, так как Id меняется, но отображаетмое значение остается старое, новое нужно подгружать вручную, например так:

Page.DataSource.ActiveRow.SetColumnValue("AccountId", new Guid("8F2E3098-932C-49A8-8D06-B40462DA98CD"));
Page.DataSource.ActiveRow.LoadLookupDisplayValues("Account");
Показать все комментарии
5.x
единое окно
страница реестра
Технические вопросы

BPM 5.4 on-site

Сделал "страницу реестра заявок в едином окне" на основе страницы реестра заявок. Проверил, что источник данных подключается к объекту "Заявка".
Вставил "страницу реестра заявок в едином окне" в единое окно.

После компиляции никаких данных не выводится и кнопка "Добавить" не активная.
Задача вывести не просто заявки, а заявки отфильтрованные по определенному состоянию, например, состояние = "в расчете".

Помогите настроить данную возможность.

Нравится

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

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

var dataSource = Page.InvoicePageContainer.FindPageControlByName("DataSource") as Terrasoft.UI.WebControls.Controls.EntityDataSource;
var currentStructure =  dataSource.CurrentStructure;
currentStructure.Filters.Add(currentStructure.CreateFilterWithParameters(dataSource.Schema, FilterComparisonType.Equal, "Owner.Id", currentUserContactId));
currentStructure.Filters.Add(currentStructure.CreateFilterWithParameters(dataSource.Schema, FilterComparisonType.Equal, "Stage.End", 0));
dataSource.LoadRows();
Показать все комментарии