Добрый день
Пытаюсь создать Инцидент из активности типа Email . Делаю кнопку в странице карточки Email, обработчик. В БП:

При компиляции выходит ошибка:

Нравится

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

Судя по сообщениям об ошибке, что-то неправильно написано в Вашем коде.

По первой, вы используете обращение к Terrasoft.Core.UserConnection.UserContext. А надо Page.UserConnection.UserContext.

По второй, вы обращаетесь к необъявленной переменной. Нужно сначала её объявить, а потом с ней работать. Или же создать одноимённый параметр в БП нужного типа.

Я смотрела тут: http://www.community.terrasoft.ru/forum/topic/9208
Там тоже подобная ошибка была, а сам процесс у меня правильный?

1) первую ошибку устранила.
2) по второй ошибке: создала новый параметр в БП: myParam.
В скрипте подготовки процесса действия открыть карточку пишу:
myParam = IncidentId;
В скрипте Генерации номера Инцидента пишу:
Page.DataSource.ActiveRow.SetColumnValue("IncidentId", myParam);

var entitySchemaManager = Page.Schema.SchemaManagerProvider.GetManager("EntitySchemaManager") as EntitySchemaManager;
var TargetScemaQuery = new EntitySchemaQuery(entitySchemaManager, "ServiceRequest");
var primaryColumn = TargetScemaQuery.AddColumn(TargetScemaQuery.RootSchema.GetPrimaryColumnName());
TargetScemaQuery.AddColumn("Number");
TargetScemaQuery.Filters.Add(TargetScemaQuery.CreateFilterWithParameters(
FilterComparisonType.Equal,
"Id",
myParam));
var incidentCollection = TargetScemaQuery.GetEntityCollection(UserConnection);
if(incidentCollection.Count != 0){
Page.IncidentEdit.SuspendAjaxEvents();
Page.IncidentEdit.SetValueAndText(incidentCollection[0].GetTypedColumnValue(primaryColumn.Name), incidentCollection[0].GetTypedColumnValue("Number"));
Page.IncidentEdit.ResumeAjaxEvents();

}

return true;

При опубликовании ошибка:

....исправила тип на Уникальный идентификатор.... Опубликовалось без ошибок

В итоге: при нажатии на кнопку в Е-мейл активности "Создать инцидент" - у меня создалась Активность с типом Задача. А мне нужно создать именно Инцидент. Подскажите, пожалуйста, где ошибка ?

ВСЕ!!! ПОЛУЧИЛОСЬ!!!!

Еще вопрос: Не подскажете, как сделать так, чтобы при нажатии на ОК в созданным таким образом Инциденте, закрывалось не только окно Инцидента, но и окно Е-мейл Активности (из к-го и был создан этот Инцидент)

Нет, простыми средствами такое невозможно.

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

Добрый день
Есть ли видео урок, как делать отчеты-диаграммы ?

Нравится

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

Может, это (где-то в середине ролика) поможет?
Также посмотрите другие ролики этого пользователя, особенно старые. В основном там 7.Х, но есть и 5.Х.

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

Добрый день

Пытаюсь сделать отчет. При сохранении - выдало ошибку:

Нравится

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

Татьяна, а как Вы делали отчёт, по этой инструкции (стр. 524)?
Может, что-то не заполнили?

я делала по видеоинструкции (Город-Страна)

А что, напр., я могла не заполнить?

Татьяна, а можете дать ссылку на эту инструкцию?
Расскажите подробнее, что именно делали?
Вы создавали отчёт с нуля или правили уже существующий?
Сохраняли в файл или в базу?

Такое воспроизводится каждый раз на любом отчёте или только на одном конкретном?

Сделала все заново - получилось! но ошибка так и осталась непонятной...

Скажите, пжста, каким образом мне сделать выборку еще и по Состоянию активности (по прооисхождению Инцидента - уже сделано)?
Т.е. в отчете мне нужно сгруппировать Активности так:

Инцидент.Происхождение
Активность.Состояние
А здесь уже список активностей, попадающих под данную выборку

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

И еще вопрос - как сделать отчет за заданный период ?

"TatianaM" написал:

Сделала все заново - получилось! но ошибка так и осталась непонятной...


Вероятно, какой-то случайный сбой.

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

По поводу периода, код на скриншоте очень похож на обычную работу с EntitySchemaQuery в системе.
Может, там и подойдёт обычное наложение фильтра методом CreateFilterWithParameters?

Да, лучше так:

Инцидент.Происхождение
Инцидент.Номер
здесь уже список активностей с типом Задача, привязанных с этому номеру Инцидента.

Только мне нужно суммировать трудозатраты (это поля в активностях) по конкретному номеру Инцидента. Не пойму, как сделать эти итоги.

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

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

Чтобы выглядело примерно так:

Происхождение - Е-мейл
Номер Инцидент 1
активность
активность
активность
активность
активность
Номер Инцидент 2
активность
активность
активность
Происхождение - Звонок
Номер Инцидент 3
активность
активность
активность
активность
активность
Номер Инцидент 4
активность
активность
активность

"По поводу периода, код на скриншоте очень похож на обычную работу с EntitySchemaQuery в системе".
- а как сделать так,чтобы период можно было выбрать, напр.:


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

Может, Вы хотите построить отчёт с деталью? См. стр. 525 по этой инструкции.

Да, я строю отчет с Деталью.
В инструкции на стр 527 написано:

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

- это где? потому что у меня что-то вывод активностей получается не связанным по группам.

По поводу выбора периода, в том отчёте, что Вы смотрите, есть 2 схемы:
Первая, «Статистика работы службы поддержки», редактируется в дизайнере отчётов.
Вторая, «Страница настройки отчета "Статистика работы Службы поддержки"», унаследована от «Базовая страница параметров отчета» и редактируется в браузере, как обычная страница.

Посмотрите в этом отчёте, как происходит взаимодействие отчёта и страницы и попробуйте аналогично.

ок, посмотрю

ок, посмотрю

ок, посмотрю

#14 TatianaM 17 ноября 2015 – 16:37
Да, я строю отчет с Деталью.
В инструкции на стр 527 написано:

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

- это где? потому что у меня что-то вывод активностей получается не связанным по группам.

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

это я поставила.

Подскажите пожалуйста, как на С# написать условие в скрипте отчета:
если в Инциденте поле "Происхождение" - такое-то, то далее выполняется вывод активностей.

Происхождение - Е-мейл
Номер Инцидент 1
активность
активность
активность
активность
активность

Татьяна, работа с отчётами описана в PDF-инструкции и видео-уроках, также в конфигурации можно посмотреть исходники уже существующих отчётов.
Если Вы хотите получить какую-то новую логику и не знаете, как её разработать самостоятельно, можете обратиться к Terrasoft или к кому-то из их партнёров и заказать такую доработку.

"Мария Ватулина" написал:

Татьяна, работа с отчётами описана в PDF-инструкции и видео-уроках, также в конфигурации можно посмотреть исходники уже существующих отчётов.

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


Мария ! а где их взять ?(

Кого, партнёров?
Есть страница, где они перечислены.

Мария уроки и инструкции по отчетам версии 5.2

Александр его делали.. только не понятно что там он не работает

У меня ссылка открывается.

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

Добрый день

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

Нравится

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

Пользовательскими средствами такое сделать нельзя.
Нужно либо сделать отдельный бизнес-процесс, проводящий необходимые вычисления, либо логику на объекте «Активность» на события добавления, удаления активности или её сохранения с новым значением поля. Ещё один вариант реализации — триггер на таблицу Activity, делающий то же самое на уровне БД (см. пример).

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

Здравствуйте.
У меня есть страница для ввода параметров поиска. Страница не привязана ни к какому объекту. Значения из её полей передаются в параметры бизнес-процесса, выполняющего поиск. Как мне с помощью функции asyncValidate из BasePageV2 проверить, что на моей странице поиска заполнены все поля?

Нравится

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

Здравствуйте, Евгений!

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

Алексей, у меня в ТЗ указано, в частности, условие, что заполнение любого из полей не обязательно. Поэтому, я и прошу показать мне как проверить заполнение полей с помощью asyncValidate. Моя страница унаследована от модуля "Базовая схема карточки" из пакета NUI. К этому посту я прикрепил текстовый файл, содержащий Javascript страницы.

Евгений, добрый день!

Рекомендую Вам посмотреть реализацию данного метода в DocumentPageV2. Вы можете реализовать необходимый функционал по аналогии. Сначала необходимо реализовать метод проверки заполненности полей (по аналогии с validateAccountOrContactFilling), который принимает в качестве входящих параметров функцию обратного вызова и контекст выполнения, потом вызвать его в asyncValidate. Например:

asyncValidate: function(callback, scope) {
	this.callParent([function(response) {
		if (!this.validateResponse(response)) {
			return;
		}
		Terrasoft.chain(
			function(next) {
				this.myValidationMethod(function(response) {
					if (this.validateResponse(response)) {
						next();
					}
				}, this);
			},
			function() {
				callback.call(scope, response);
			},
			this);
		}, this]);
},

Спасибо.

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

Займався створенням нового розділу за принципом розділу "Пользователи" (того, що в робочих місцях не відображено).
Потрібно було в процесі відладки подивитись, як веде себе "Страница реестра вхождения в роли" (AdministrativeUserInRoleGridPage).
В дизайнері схеми був присутній пул з доріжкою й субпроцесом, в якому шаблонами були внесені "Начальное сообщение" зв"язане з "Промежуточным генерирующим сообщением", причому обидва не проініціалізовані. При збереженні схеми в такій ситуації видається помилка на обидва елементи.
Як на мене, весь цей пул з доріжкою, субпроцесом і пустипи елементами був зайвий і я його зтер.
Схему опублікував.
Після цього, при спробі відкрити розділ "Администрирование.Пользователи" отримую помилку в
AdministrationUnitsGridPageEventsProcess.ScriptChildDataSourceLoadRowsResponseRegisteredExecute
в коді:

var buttonMenu = Page.AddButton.Menu;
var organizationMenuItem = buttonMenu.Find(item => item.Name.Contains(new Guid("DF93DCB9-6BD7-DF11-9B2A-001D60E938C6").ToString("N")));
var unitMenuItem = buttonMenu.Find(item => item.Name.Contains(new Guid("B659F1C0-6BD7-DF11-9B2A-001D60E938C6").ToString("N")));
var chiefMenuItem = buttonMenu.Find(item => item.Name.Contains(new Guid("B759F1C0-6BD7-DF11-9B2A-001D60E938C6").ToString("N")));
var teamMenuItem = buttonMenu.Find(item => item.Name.Contains(new Guid("462E97C7-6BD7-DF11-9B2A-001D60E938C6").ToString("N")));

Власне помилку генерує наступний код:
organizationMenuItem.Enabled = true;
unitMenuItem.Enabled = true;
chiefMenuItem.Enabled = !hasUnitChief;
teamMenuItem.Enabled = true;

По тій причині, що всі означені об'єкти = NULL.

(Зауважу, що дану схему я не чіпав)

Я не схильний новоотриману помилку пов'язувати із знищенням того самого пулу з доріжкою (хоча й не буду це категорично заперечувати).

Я ще попередньо спочатку створив вже існуючий розділ "Администрирование", потім вилучив його, далі виявив, що він і в таблиці [SysModule] зник, тому запис імпортував з оригінальної БД.
Потім я так само створив вже існуючий розділ "Пользователи", який відобразився зо всім пакетом деталей.
Вже після цього я вилучав порожні елементи й публікував схему.

На даний момент ще не вдається розібратися, в чому ж справа ...

Нравится

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

Якщо потрібен скан помилки - можу відправити в приват

Посмотрел на коробке эту страницу, там только 3 подпроцесса по сообщениям: «OpenRoles», «DeleteButtonClick» и «PageLoad».

процесс

Возможно, Вы смотрите на версию страницы с чьими-то доработками.

Шукаю зараз, де формується меню для кнопки "Добавить" для розділу "Администрирование.Элементы организационной структуры"
(те, що читається в AdministrationUnitsGridPageEventsProcess.ScriptChildDataSourceLoadRowsResponseRegisteredExecute)

Игорь, это стандартный механизм для раздела с несколькими карточками для разных типов. В BaseGridPage в скрипте ScriptTaskBaseGridPageInit:

var editPages = GetEditPages();
if (TypeColumnUId != Guid.Empty && Page.DataSource.CurrentStructure.Columns.FindByMetaPath(TypeColumnUId.ToString()) == null) {
	var typeColumn = Page.DataSource.Schema.Columns.GetByUId(TypeColumnUId);
	var column = Page.DataSource.CurrentStructure.AddColumnByPath(typeColumn.Name);
	column.IsVisible = false;
	column.IsAlwaysSelect = true;
}
foreach (var item in editPages) {
	var addMenuItem = CreateAddButtonMenuItem(item.Value, item.Key);
	Page.AddButton.Menu.Add(addMenuItem);
	if (!IsContextHelpButtonInitialized) {
		string formatString = "{0}.on('click', function(el) {{ {1} }}, this)";
		var parameters =  item.Key.Split('&');
		var typeEditPageUId = new Guid(parameters[0]);
		var typeEntityId = new Guid(parameters[1]);
		var typeEditPageUIds = TypeEditPageUIds as Dictionary<Guid, Dictionary<string, Guid>>;
		string script = GetRegisterAddPageScript(typeEditPageUId, typeEditPageUIds[typeEntityId]["SysModuleEditId"], typeEntityId);
		Page.AddScript(string.Format(formatString, addMenuItem.ClientID, script));		
	}
}

Я вже теж дійшов висновку, що щось не так з типами карточок.
Перевірив запис розділу [Пользователи], - виявилось, що в результаті маніпуляцій з розділами (в робочих місцях) збилися параметри
[Использовать отдельные карточки для работы с записями разного типа]
[Тип записи указан в колонке]

При спробі відновити значення через стандартну форму виходило повідомлення:

Необходимые элементы конфигурации не найдены
Для использования групп необходимы следующие объекты: AdministrativeUsersFolder, AdministrativeUsersInFolder

Подивився на робочій - відсутні такі об'єкти, тому відновив значення через SQL - все запрацювало.
Дякую за підказку :smile:.

Цікаво, а як формувався запис розділу [Пользователи], зважаючи на те, що в оригінальній версії він відсутній у списку робочих місць, і навіть якщо його добавити, то для збереження все одно ще треба створювати два додаткових об'єкти
[AdministrativeUsersFolder] та [AdministrativeUsersInFolder]
які, як видно, насправді не були створені і тим не менше, розділ чудово функціонує без вказаних об'єктів.

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

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

Добрый день.
Есть задача отобразить рабочий телефон отвтетственного по продаже в ПФ Word. Телефон хранится в детали Средства связи контакта. Как мне получить данные детали Ответственного и отфильтровать их по типу.
Пытался добавить:
1. Через вкл. "Поля печатной формы" -> Системные связи. Однако, там отображается только агрегированные данные (количество, сумма).
2. Через вкладку "Табличные части печатной формы", но добавить туда новые объекты не представляется возможным (ошибка:Невозможно обновить представление или функцию "dbo.VwSysSchemaInfo", так как изменение влияет на несколько базовых таблиц.)

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

Нравится

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

Игорь, а какая используется версия системы?

Я использую BPMOnline Cargo 5.4.0.1555. Но данная проблема является общей для всех версий BPMOnline в части формирования отчётов Word

Может, стоит пойти другим путём?
В карточке контакта есть поле «рабочий телефон»?
Если есть, брать оттуда.
Если нет — добавить поле в объект «контакт» (можно в карточку не выводить) и заполнять его при добавлении-изменении-удалении средства связи на уровне объекта детали или триггером.

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

Добрый день

Есть колонка в активности, имеющая тип целое число.
При занесении числа в это поле мне нужно поставить ограничение: чтобы занесенное в это поле число было не больше 59. Подскажите, каким образом это можно реализовать на С#? Заранее спасибо.

Нравится

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

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

Данную логику лучше реализовать не на C# (на стороне сервера), а на Java Script (на стороне клиента). Пример реализации валидации поля Вы можете найти на Академии по этой ссылке.

В случае, если Вы хотите это делать на стороне сервера, Вам необходимо добавить в объект "Активность" обработчик события "Перед сохранением".

Тем не менее более правильно и красиво Вы можете реализовать данную задачу на Java Script.

Можете при изменении поля или при нажатии ОК считать текущее значение, и если оно больше 59, то:

Page.DataSource.ActiveRow.SetColumnValue("MyField", 59);

Есть в объекте две колонки с типом целое число. Подскажите, пожалуйста, как на С# написать условие:
если значения обоих колонок =0, то выводить сообщение об ошибке и карточку не закрывать. Заранее спасибо

Пример такого поведения приведен тут.

Подскажите, пожалуйста, как на C# считать текущее значение поля, к-ое имеет тип целое число?

Page.DataSource.ActiveRow.GetTypedColumnValue<int>("MyField")
Показать все комментарии

Добрый день.
BPMOnline Cargo 5.4.0.1555 не отрабатывает событийный подпроцесс при изменении значения элемента "поле Дата/время" на странице редактирования раздела при нажатии на кнопку "Сегодня" данного поля.
В иных случаях событие происходит.
Какое событи отвечает за нажатие указанной кнопки

Нравится

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

О каком разделе идёт речь?
Можете приложить скриншот?

Я смотрю раздел Перевозки. Но есть подозрение, что данная проблема не привязана к разделу

Пожалуйста, покажите скриншот, чтобы понять, о каком поле речь. О наличии глобальной проблемы со всеми полями типа «дата» информация не встречалась, но надо проверить.

Немного ошибся, раздел Заявки.
Поле стандартное.

На скриншоте ничего не видно.

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

Какая версия вашей тестовой платформы?
Для этого компонента использую тип Дата.

"Зверев Александр" написал:Событие происходит не прямо в момент изменения, а при переходе к другому полю или кнопке и это нормально.

Да я в курсе

У меня 5.4.0.2465 CRM+SD. Контрол типа «дата-время» и не привязан к датасорсу.

А на BPMOnline Cargo 5.4.0.1555 вы пробовали?
EditChange не отрабатывает при нажатии на "Вчера", "Сегодня", "Завтра"

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

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

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

Маю задачу розробити інструмент для надання полям форми статусу "обов'язковий" для учасників певних ролей. Іншими словами, треба створити інструмент, який на формі присвоював би атрибуту обов'язковості для визначених полів значення true.
Сам по собі інструмент передбачає певний ступінь універсальності, тому я спробував продумати можливість керування не тільки атрибутом обов'язковості.

Приблизно склав собі архітектуру даних:
[RulesSchema] - правила для схем, фіксують схеми (на основі BaseEditPage), для яких встановлюються правила
[RulesRoleInSchema] - ролі, долучені до правила схеми
[RulesOperatedFields] - керовані поля схеми
[RulesAttribute] - атрибути, для яких мають виконуватись дії правил (присвоєння значень)

І спостеріг наявність у списку таблиць наступні:
[Attribute] - Признак
[AttributeValue] - Значение признака
[AttributeReferenceSchema] - Схема для признака

Структура таблиць дає можливість зберігати значення різних типів атрибутів по схемах.
Я якраз збирався сам щось подібне створювати для своєї задачі.

Отже, зараз потрібно визначитися, що це за таблиці і чи можна ними скористатися для своїх цілей.

Нравится

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

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

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

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