поле
Технические вопросы
5.x

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

Добавила поле "признак" на карточку детали раздела. Хотелось бы, что бы, после того как поставила галочку на поле "признак" и нажала на кнопку "OK", невозможна было бы менять карточку. То есть убрать галочку с поля "признак". Не могли бы подсказать, как я могу, все это настроит?
Заранее Спосиба.

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

Нравится

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

Гюнель, здравствуйте.

На событии PageLoadComplete можно проверить, заполнено ли поле признак, и в зависимости от этого установить доступность контрола:

if(Page.PriznakEdit.Value)
{
       Page.PriznakEdit.Ebanled = false;
}
else
{
       Page.PriznakEdit.Ebanled = true;
}

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

Я добавила на EditPage следующий скрипт.
if (Page.DepartmentConfirmEdit.Value)
{
Page.DepartmentConfirmEdit.Enabled = false;
}
else
{
Page.DepartmentConfirmEdit.Enabled = true;
}

#DepartmentConfirmEdit - Название поля#

Но во время компиляции выдает следующую ошибку.

Cannot implicitly convert type "object" to "bool". An explicit conversion exists (are you missing a cast?)

В чем ошибка не понимаю. Не могли бы помочь.

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

Не совсем понял. Вы хотите блокировать какое поле в зависимости от какого значения?

На карточку деталь добавила логическое поле "признак". Если возможна, хочу добавит следующую функцию. Если пользователь поставит галочку на это поле, в дальнейшем не смог его поменять (убрать галочку).

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

Тогда просто:

Page.DepartmentConfirmEdit.Enabled = !Page.DepartmentConfirmEdit.Checked;

Этот скрипт - на изменение поля и после базового PageLoadComplete.

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

Компилятор говорит Вам, что не может неявно конвертировать значение с типом объект в булевский тип. Page.DepartmentConfirmEdit.Value - это объект, но во время проверки Вы обращаетесь к нему, как к булевому значению.

Попробуйте изменить условие на: if (Page.DepartmentConfirmEdit.Value == string.IsEmpty)

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

К сожелению у меня ничего не получилас.

>Олейник Дмитрий

if (Page.DepartmentConfirmEdit) {
Page.DepartmentConfirmEdit.Enabled = false;
} else {
Page.DepartmentConfirmEdit.Enabled = true;
}
return true;

Выдает следуюшую ошибку (прик. файл error01.jpg)

>Maxim Gritsenko

if (Page.DepartmentConfirmEdit.Value == string.IsEmpty) {
Page.DepartmentConfirmEdit.Enabled = false;
} else {
Page.DepartmentConfirmEdit.Enabled = true;
}
return true;

Выдает следуюшую ошибку (прик. файл error02.jpg)

>Зверев Александр

Page.DepartmentConfirmEdit.Enabled = !Page.DepartmentConfirmEdit.Checked;

Выдает следуюшую ошибку (прик. файл error03.jpg)

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

Гюнель, сделайте так:

if(Page.PriznakEdit.Checked)
{
       Page.PriznakEdit.Ebanled = false;
}
else
{
       Page.PriznakEdit.Ebanled = true;
}

либо проще:

Page.PriznakEdit.Enabled = !Page.DepartmentConfirmEdit.Checked;

Спосиба, получилось.

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

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

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

Page.DepartmentConfirmEdit.Enabled = !Page.DepartmentConfirmEdit.Checked;

Этот код также нужно добавить и в скрипт после базового PageLoadComplete.

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

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

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

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

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

Да уверенна. (Прик. файлы, Объект и карточка деталь раздела)

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

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

А в дизайнере карточки Вы вынесли колонку в DataSource и связали с контролом?
Понимаю, что наводящие вопросы утомляют, но это самая вероятная причина.

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

Думаю что нет (Прик. файлы,)

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

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

В дизайнере карточки добавляете колонку:

И затем в настройках контрола связываете контрол с ней:

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

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

Гюнель,

Выложите, пожалуйста, схемы - будем проверять.

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

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

Необходимо в BPMOnline OnDemand, начать бизнес процесс по факту квалификации лида, причем передать в него ид лида в качестве параметра.

Подскажите пожалуйста как это правильно сделать.

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

  1. При попытке сохранить процесс карточки с добавленным элементом "Подпроцесс" система выдает ошибку "Ошибка сохранения: Элемент "SubProcess2" не может быть сериализован в БД, т.к. не сериализуется процесс".
  2. Не понятно как передать параметры в процесс, ведь кнопка привязки данных (с молнией) в процессе карточки недоступна (вообще отсутствует).

Нравится

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

"Валерий Орлов" написал:

Необходимо в BPMOnline OnDemand, начать бизнес процесс по факту квалификации лида, причем передать в него ид лида в качестве параметра.


Валерий, решить задачу можно используя начальный элемент "Сигнал". Заполните свойства элемента подобным образом:
/system/files/1_118.png

Наталия, добрый день!

"Бондарь Наталия" написал:Валерий, решить задачу можно используя начальный элемент "Сигнал"

Попробовал применить предложенное решение в своем БП, в двух вариантах:
БП1
и обернутый в событийный подпроцесс:
БП2
Ни один из вариантов не работает.
Возможно есть настройка которая регулирует срабатывание таких сигналов?
Или я что то не то делаю?

Добрый день!
Поэксперементировал немного с сигналами от объектов (Лид, Контакт):
Сигнал "После изменения записи" срабатывает только если не задавать условий на содержание объекта ("Объект должен соответствовать условиям") и/или на изменяемую колонку ("Должна быть изменена любая колонка из списка").

BPMOnline CRM OnDemand Версия 5.4.0.195

Ознакомьтесь, также, с темой http://www.community.terrasoft.ru/forum/topic/9178

"Валерий Орлов" написал:
Поэксперементировал немного с сигналами от объектов (Лид, Контакт):

Сигнал "После изменения записи" срабатывает только если не задавать условий на содержание объекта ("Объект должен соответствовать условиям") и/или на изменяемую колонку ("Должна быть изменена любая колонка из списка").

BPMOnline CRM OnDemand Версия 5.4.0.195

Валерий, это ошибка ядра системы, она исправлена в более новых версиях. Версия 195 - уже весьма "древняя".

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

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

Возник вопрос по BPM Online:

Мне нужно брать определенные значения полей объекта при удалении записи, на событии [Deleting] (перед удалением записи) объекта прописываю так:

Guid DirectionId = Entity.GetTypedColumnValueGuid>("DirectionId");

Но, ошибка. К сожалению не могу сказать какая именно, так как отладчик не работает, а сам BPM выводит только то, что не может удалить запись...

Пробовал еще так:

var IdGuidUId = new Guid("59fbe2a2-8df3-4deb-941d-f378fff55c6e");
var IdGuidColumnName = Entity.Schema.Columns.FindByUId(IdGuidUId).Name;
var IdGuidobj = Entity.GetColumnValue(IdGuidColumnName);
string DirectionId = Convert.ToString(IdGuidobj);

Результат тот же.

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

Нравится

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

Вопрос все еще актуален!

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

Разобрался. Если кому то понадобиться , то решение такое: согласно базовому объекту, там есть проверка на то что загружена колонка или нет. Вероятнее все при удалении через Entity доступно только Entity.PrimaryColumnValue. Остальное все еще можно вытащить запросом из базы данных , поскольку сама запись еще не удалена.

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

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

Нужно в одной детали сделать такой же функционал реестра, как в [Администрирование] - [Доступ к объектам], т.е. чтобы имя менять было нельзя, а можно было только галки переключать из реестра. Был бы очень рад примерам такой реализации (нужно одну галку в реестре детали менять из реестра без использования карточки).

Нравится

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

Посмотрите пример реализации во вложенном файле.

Извиняюсь. Забыл указать, что речь идет о BPM Online

В BPMOnline Вы тоже можете это реализовать.
На событии Init реестра необходимо привязать обработчики нажатия.
Вот пример кода:

Page.TreeGrid.AjaxEvents.CellIconClick.Event += CellIconClickHandler;
Page.TreeGrid.AjaxEvents.CellIconClick.ExtraParameters.Add(
 new Terrasoft.UI.WebControls.Controls.Parameter("nodeId", "nodeId", 
 Terrasoft.UI.WebControls.Controls.ParameterMode.Raw));
Page.TreeGrid.AjaxEvents.CellIconClick.ExtraParameters.Add(
 new Terrasoft.UI.WebControls.Controls.Parameter("iconId", "iconId", 
 Terrasoft.UI.WebControls.Controls.ParameterMode.Raw));
Page.TreeGrid.ImageList = "Terrasoft.WebApp";
Page.DataSource.Loaded += Page.TreeGrid.DataLoaded;
Page.TreeGrid.AjaxEvents.CellIconClick.ShowLoadMask = true;
Page.TreeGrid.AjaxEvents.CellIconClick.ShowOpaqueMask = true;
Page.DataSource.PrepareFilters += delegate (object sender, DataSourceEventArgs e)
{
 var dataSource = Page.DataSource;
 var currentStructure = dataSource.CurrentStructure;
 var sysSolutionFilter = currentStructure.Filters.FindByName("SysSolutionFilter");
 if(sysSolutionFilter == null) {
  sysSolutionFilter = currentStructure.CreateFilterWithParameters(dataSource.Schema, FilterComparisonType.Equal, "SysSolution", Page.UserConnection.Solution.Id);
  sysSolutionFilter.Name = "SysSolutionFilter";
  currentStructure.Filters.Add(sysSolutionFilter);
 }
};
Page.DataSource.SaveError +=
delegate(object sender, DataSourceEventArgs e) {
 Guid redactedId = e.Request == null ? Guid.Empty : e.Request.PrimaryColumnValue;
 if (redactedId != Guid.Empty) {
  Page.DataSource.LoadRow(redactedId);
 }
 ShowErrorMessage(e.Exception.Message);
 e.IsHandled = true;
};
Page.DataSource.LoadRowsResponseRegistered += delegate(object sender, DataSourceEventArgs e) {
 context.ThrowEventArgs = e;
 ThrowEvent(context, "DataSourceLoadRowsResponseRegistered");
};

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

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

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

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

Это можно сделать следующим образом:

1. Выберите элемент Реестр
2. Переключитесь на События
3. Создайте обработчик события OnDoubleClick

griddoubleclick

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

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

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

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

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

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

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

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


"Сражаюсь" с аналогичной проблемой - свой обработчик сделал, но все равно каким-то образом событие ловит базовый скрипт... А если удалить проброс события в базовом скрипте, я так понимаю, двойной клик вообще работать перестанет везде, или я не прав?

Добрый день.

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

return String.Empty;
Показать все комментарии
Runtime error
Windows Server 2008
ошибка
Технические вопросы
Разработка

На Windows Server 2008 R2 x64, после установки компонентов терминального сервера,
перестает запускаться Terrasoft. Вылетает ошибка "Runtime error 216 at 020B9DB3".

Если же компоненты удалить, то программа запускается корректно.

Дополнительная информация об ошибке

Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: TSClient.exe
Версия приложения: 3.3.1.53
Отметка времени приложения: 2a425e19
Имя модуля с ошибкой: TSComponents.bpl
Версия модуля с ошибкой: 1.0.0.0
Отметка времени модуля с ошибкой: 2a425e19
Код исключения: c0000005
Смещение исключения: 00229db3
Версия ОС: 6.1.7600.2.0.0.18.10
Код языка: 1049
Дополнительные сведения 1: aadc
Дополнительные сведения 2: aadcf780b83aa5dac0d13107b229d5ba
Дополнительные сведения 3: 6210
Дополнительные сведения 4: 6210d8eb5a620ca076385fc4fa602512

Нравится

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

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

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

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

Объясните пожалуйста, как можно воспользоваться порталом самообслуживания из демо-версии BPMonline SD?

Нравится

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

Добрый день!

В зависимости от версии демо, стандартным логином для входа на портал может быть:
1. PortalDemo
2. Зарянская Виктория

Для того, что бы проверить это, зайдите в рабочее место [Инструменты], раздел [Администрирование] - [Пользователи портала]:

Откройте карточку логина и поменяйте ему пароль.

После изменений, перейдите на стартовую страницу демо-версии и введите логин с приставкой Portal/, например:
Логин: Portal/Зарянская Виктория
Пароль: ************

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

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

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

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

Арсений, и какова стоимость этих лицензий?

Акмаль, ознакомиться со стоимостью лицензий Вы можете тут.

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

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

Есть файл, например с писателями. При редактировании конкретного писателя, открывается окно дял редактирования. В окне ве страницы. На первой странице все основные данные. На второй странице грид с книгами. Через базу данных ввелись некоторые данные. И отображение данных "писатель - его книги" в гриде с книгами правильное. Грид с книгами создавался стандартными средства (с кнопками "Добавить", "Изменить", "Копировать", "Удалить"). Но при попытке добавить книгу, не происходит связь между конкретным писателем (в карточке которого я нахожусь) и добавляемой книгой. Книга добавляется, но ID автора - пустое. Как, где и в какой момент это надо обрабатывать?
Грид с книгами добавлен как window container из раздела книг.

Нравится

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

посмотрите тему http://www.community.terrasoft.ua/forum/topic/3820, там похожий случвй.
Вам нужно передать ИДшку записи в атрибуты грида книг. примерно так:

var ID = dlData.Dataset.ValAsGUID('ID');
SetAttribute(wndGrid.Window, 'ParentItemID', ID);

при инициализации грида.

Я указала. В функции pcPagesOnChangeActivePage, при переключении на окно, содержащее грид с книгами, указано

SetAttribute(wndBooks.Window, 'ParentItemID', dlData.Dataset.Values('ID'));

И данные в гриде отображаются корректно (если в базе данных им вручную присвоить ID писателя). А сохранение не работает.

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

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

Нет. Я не указываю автора. Как раз таки, если я добавляю поле с автором (в форму редактирования книги) и указываю автора, то все корректно сохраняется. Но разве в таком случае автор не должен проставляться автоматом? Ведь я захожу в грид и вызываю создание новой книги из карточки автора. Я новичок в ТерраСофте. И допускаю, что я где-то чего-то не указала. Но в другом проекте я видела именно такие примеры. Что родительное поле автоматом заполнялось при создании новой записи для "ребенка".

Что бы автоматом проставлялось значение поля Автор при добавлении книги с вкладки, Вам необходимо добавить проверку наличия атрибута ParentItemID (его не будет, если карточка редактирования книги будет открыта из "родного" раздела) на событии OnDatasetAfterAppend:

var ParentItemID = GetAttribute(Self, 'ParentItemID');
  if (!IsEmptyValue(ParentItemID)) {
  AddDataDefaultValues('AuthorID') = ParentItemID;
  }
Показать все комментарии
Технические вопросы
5.x

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

Подскажите пожалуйста, как правильно установить параметры App Domains и Site URL (при выборе Website with Facebook Login) при регистрации нового приложения на FaceBook, если приложение развернуто на собственных серверах и доступно только по IP-адресу?

Спасибо

Нравится

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

Добрый день!
нет никакой разницы, при интеграции на fascebook при использовании ваших серверов, либо наших.
Возможно, Вас смутило то, что вместо привычных символов названия сайта (например crm.bpmonline.com) у Вас вписан IP адрес, не смущайтесь, просто вписывайте его и настраивайте соединение!

Сергей, спасибо за ответ. Но при указании IP в поле Site URL (App Domains приходится оставлять пустым, т.к. значение IP оно не принимает) и последующей авторизации через BPM система выдаёт следующую ошибку:

URL не соответствует настройкам приложения: One or more of the given URLs is not allowed by the App's settings. It must match the Website URL or Canvas URL, or the domain must be a subdomain of one of the App's domains.

простите, дезинформировал Вам, действительно, facebook требует использование Alias на IIS
детальной можете почитать тут: https://support.gearhost.com/KB/a465/add-a-domain-alias-in-iis-7.aspx

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

Этого не совсем достаточно, необходимо зарегистрировать данный домен в сети, после чего настроить корректно DNS. Конечный результат должен быть таков, что при вводе команды nslookup ИмяСайта выводился Ваш IP

Пример ниже:

В Вашем же случае, вы ввели незарегистрированое имя сайта.

Сергей, значит ли это, что для интеграции с ФБ в обязательном порядке необходимо покупать доменное имя?

Так работает сама интеграция с facebook и это не зависит от BPMonline, информации как использовать просто внешний IP, я , к сожалению, не нашел на ресурсе http://developers.facebook.com/ пользователи BPM (OnDemand) не сталкиваются с такой проблемой, так как используют домен bpmonline.com

"Салихов А" написал:

значит ли это, что для интеграции с ФБ в обязательном порядке необходимо покупать доменное имя?


Можно где-то и бесплатно зарегистрировать.

Показать все комментарии
textarea
создание форм
Технические вопросы
Разработка

Собственно в заголовке и весть вопрос.

Увеличила для поля TextDataControl высоту. Но ввод данных, все равно, в одну строку.

Нравится

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

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

Нравится

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