Если у Вас не запускаются стандартные Бизнес-процессы, при нажатии на кнопку Квалифицировать на карточке Лида ничего не происходит, или не запускается процесс Корпоративная продажа, необходимо проверить на сервере доступность порта 2011, который необходим для работы WebSockets и работы процессов в целом. Для корректной работы процессов необходимо для него сделать доступным порт 2011. Проверить, открыт порт или нет, можно командой telnet [hostname] 2011.

Нравится

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

Если наименование детали слишком длинное и строка поиска съехала. Необходимо изменить длинный заголовок раздела для корректного отображения названия и строки поиска.
Необходимым условием для этого является доступ к базе данных для выполнения SQL скрипта.

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

update SysModule
set Caption = 'новое название'
where Caption = 'текущее название'

select * from SysModuleLcz

update SysModuleLcz
set Value = 'новое название'
where Value = 'текущее название'

Далее необходимо почистить redis и кеш браузера.

Нравится

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

Добрый день!

Подскажите, пожалуйста, продукт Marketing умеет делать рассылку:
1. без сторонних сервисов (если правильно понял, по-умолчанию это некий сервис mandrillapp)?
2. отправлять письма со ссылками добавляя в каждую ссылку (кроме заложенных в базовую логику UTM-меток) идентификатор получателя (возможно потребуются доп.настройки), который при клике считывается сайтом и возвращается обратно в CRM для анализа переходов и итогов рассылки?
3. Формировать количество Доставленых/Не доставленых/Открытых/Спам или это анализирует так же сервис mandrillapp?

Нравится

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

Добрый день!
Если я не ошибаюсь, то все эти действия как раз делаются через Mandrill. От идеи реализации рассылки на стороне bpm'online отказались вроде бы после версии 7.3.

"Андрей Каспаревич" написал:делаются через Mandrill

Одно дело делаются, а другое - уже сделаны и отображение результатов плюс вызовы действий уже есть в коробочном варианте bpmonline, вопрос вроде об этом...
Мне тоже интересно стало:) функционал то хороший описан

"Андрей Каспаревич" написал:От идеи реализации рассылки на стороне bpm'online отказались вроде бы после версии 7.3

ЖАЛЬ. Можно было и оставить, как альтернативу!

"Александр Кудряшов" написал:уже сделаны

Вроде сделано, но надо тестить. Начал мастера тестить - всё сразу рушиться стало. Видимо пора ждать версию 7.6!

"Александр Кудряшов" написал:интересно стало:) функционал то хороший описан

Функционал рассылок был и в v3 неплохой. Мандрилл хорош тем что только ключик получить надо и можно рассылать и получать статистику (то есть удобно для мелкой конторы). А классическая рассылка (как в v3) требует значительной настройки web-сервера на сбор статистики и передачу в CRM.

"AlexLS" написал:Функционал рассылок был и в v3 неплохой

Не назвал бы его неплохим, он скорее просто был. Неплохого было только то, что он работал и работал стабильно, еще и бесплатно :)
Как бы это просто механизация формирования писем и все, вместо ручного режима.

Вы там тестируйте, Александр, и рассказывайте :) как раз к списку багов выйдет 7.6...

"Александр Кудряшов" написал:Вы там тестируйте, Александр, и рассказывайте

Да, потестирую. Кому-то ведь это всё равно делать надо :biggrin:
Вендору ошибки высылаю, с надеждой на их исправление хотя бы в v7.6.

Вот только еще надежда на то что с v7.5 на v7.6 переход будет не слишком сложный.

"AlexLS" написал:с v7.5 на v7.6 переход будет не слишком сложный

Слово модное есть - бесшовный!

"Александр Кудряшов" написал:бесшовный

ДАЙ БОГ!!!

Алекс, отвечу чуть подробнее:
1. В качестве транспорта используется сервис mandrill. Альтернативные варианты транспорта делать не планировали, как и организовывать собственный транспорт сообщений. Интеграция с mandrill очень бесшовная :smile: - никакой выгрузки списков, просто отправка напрямую в рассыльщик и получение откликов по всей ЦА.
2. Это делает mandrill, отклики мы всем клиентам мы забираем в CRM и тут уже используем для: а. актуализации адресов контактов/статуса подписки; b. для работы с кампаниями - если отправляем серию писем. Дополнительно к каждому контакту (с версии 7.6) будет крепиться еще одна метка - для анализа всего цикла до конверсии через лендинг на сайте (с версии 7.6).
3. Эта статистика уже есть в базе - забираем через API mandrill.

BTW, платить дополнительно за mandrill не нужно - стоимость отправки уже входить в стоимость лицензий.

"Евгений Лемеш" написал:платить дополнительно за mandrill не нужно

Евгений, большое спасибо за ответ! А платить, может не за мандрилл а за что-то еще, НУЖНО (хоть это и не существенные деньги в рамках компании):
138000 руб в год (у нас около 10000 контактов для рассылки: "1150 руб. за 1000 активных контактов* / месяц" ).

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

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

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

Работаем с Манго-телеком, но можем поставить после нее Астериск или Октелл.
Спасибо!

Нравится

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

Добрый день, Андрей!
Эту задачу можно решить простым БП со стартовым сигналом, если у Вас уже настроена интеграция с телефонией в bpm'online. При поступлении звонка в системе создается запись в разделе "Звонки".

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

Для решения данного вопроса в продукте Customer engagement center существует механизм запуска процессов по звонку, а также коробочное наполнение, которое позволяет по звонку запустить процесс создания новой записи или консультации по существующему обращению.
Более детально можно ознакомиться в документации на Академии по следующей ссылке:
http://academy.terrasoft.ru/documents/?product=customer%20engagement%20…
в разделе [Единое окно].

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

Добрый день!
Возникла проблема с добавлением через OData объектов, а конкретно при создании объекта присвоения им значений в поля которые ссылаются на другие объекты. Текстовые поля заполняются без проблем, а поля с внешними ключами выдают ошибку. На прошлом вебинаре "Разработка BPMOnline 7.5" задавал аналогичный вопрос, обещали выслать пример, но уже три недели прошло, участникам вебинара ничего не выслали. Кто сталкивался с подобной задачей скиньте пример добавления какого нибудь объекта с полем которое ссылается на другой объект, заранее спасибо

Нравится

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

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

Я передаю xml запрос, но в нем не хватает описания для внешних ключей, поэтому и прошу пример

При обработке этого запроса произошла ошибка.При обработке этого запроса произошла ошибка.System.Data.Services.DataServiceException at System.Data.Services.Serializers.ODataMessageReaderDeserializer.Deserialize(SegmentInfo segmentInfo)
at System.Data.Services.Serializers.Deserializer.HandlePostRequest()
at System.Data.Services.DataService`1.HandlePostOperation(RequestDescription description, IDataService dataService)
at System.Data.Services.DataService`1.ProcessIncomingRequest(RequestDescription description, IDataService dataService)
at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)
at System.Data.Services.DataService`1.HandleRequest()В элементе {http://schemas.microsoft.com/ado/2007/08/dataservices/metadata}:properties обнаружено свойство "LeadType" типа "Terrasoft.Configuration.Lead", объявленное как свойство навигации. Свойства навигации в ATOM должны быть представлены элементами {http://www.w3.org/2005/Atom}:link.Microsoft.Data.OData.ODataException at Microsoft.Data.OData.Atom.ODataAtomPropertyAndValueDeserializer.ReadPropertiesImplementation(IEdmStructuredType structuredType, List`1 properties, DuplicatePropertyNamesChecker duplicatePropertyNamesChecker, Boolean epmPresent)
at Microsoft.Data.OData.Atom.ODataAtomEntryAndFeedDeserializer.ReadAtomContentElement(IODataAtomReaderEntryState entryState)
at Microsoft.Data.OData.Atom.ODataAtomEntryAndFeedDeserializer.ReadAtomElementInEntry(IODataAtomReaderEntryState entryState)
at Microsoft.Data.OData.Atom.ODataAtomEntryAndFeedDeserializer.ReadEntryContent(IODataAtomReaderEntryState entryState)
at Microsoft.Data.OData.Atom.ODataAtomReader.ReadAtEntryStartImplementation()
at Microsoft.Data.OData.ODataReaderCore.ReadImplementation()
at Microsoft.Data.OData.ODataReaderCore.InterceptException[T](Func`1 action)
at System.Data.Services.Serializers.EntityDeserializer.ReadEntry(ODataReader odataReader, SegmentInfo topLevelSegmentInfo)
at System.Data.Services.Serializers.EntityDeserializer.Read(SegmentInfo segmentInfo)
at System.Data.Services.Serializers.ODataMessageReaderDeserializer.Deserialize(SegmentInfo segmentInfo)

Т.е. внешние ключи (поля содержащие guid других объектов) должны описываться через тег link, как его описать для нового объекта?
Для уже созданных он описывается с guid, но при создании guid'a еще нет

<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/LeadType" type="application/atom+xml;type=entry" title="LeadType" href="LeadCollection(guid'40d83682-7ee5-4f1f-a387-12bb43373b5b')/LeadType" />

Олег, подобный вариант подойдет?

//...
            var content = new XElement(dsmd + "properties",
                          new XElement(ds + "Name", "Тестов Тест Тестович"),
                          new XElement(ds + "Dear", "Тест Тестович"),
                          new XElement(ds + "TypeId", Guid.Parse("806732ee-f36b-1410-a883-16d83cab0980")), // Тип
                          );
            var entry = new XElement(atom + "entry",
                        new XElement(atom + "content",
                        new XAttribute("type", "application/xml"), content));
//...

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

<entry xmlns="http://www.w3.org/2005/Atom">
  <content type="application/xml">
    <properties xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
      <Name xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">Тестов Тест Тестович</Name>
      <Dear xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">Тест Тестович</Dear>
      <TypeId xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">806732ee-f36b-1410-a883-16d83cab0980</TypeId>
    </properties>
  </content>
</entry>

тем не менее обязательный тег link все так же отсутствует и ошибка остается прежней

Также есть вопрос как добавлять файлы через OData? Например необходимо загружать фотографии для контактов - как добавить файл в таблицу SysImage?

Олег, этот вопрос уже поднимался:
http://www.community.terrasoft.ru/forum/topic/10486

Спасибо, вопрос по добавлению объектов со справочными полями все еще актуален

Олег, для того, чтобы сервер стал возвращать ответ в виде JSON, необходимо добавить http заголовок (Accept: application/json;odata=verbose).
Список рекомендуемых http заголовков:
MaxDataServiceVersion: 3.0
Content-Type: application/json;odata=verbose
DataServiceVersion: 1.0
Accept: application/json;odata=verbose

Далее, пример POST запроса с указанием справочной колонки. Создается запись, которая ссылается на контакта с (Id = 62f1494a-1205-45a4-b211-7ab974df6e7e). Обращаем внимание, что это будет работать только в том случае, если запись справочника уже создана. OData позволяет добавлять запись с указанием справочного значения, которого еще нет. Но такой запрос намного сложнее и ситуации, когда он необходим, довольно ограничены:

{"Id":"de303d33-e3c2-4dbd-905a-f46d220140c8","Name":"Test","Contact":{"__metadata":{"uri":"ContactCollection(guid'62f1494a-1205-45a4-b211-7ab974df6e7e')"}}}

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

Добрый день!
Есть задача создать Вкладку "История филиалов", в которой отображать стандартные детали филиалов данного контрагента (из детали Взаимосвязи).
В принципе добавить детали по филиалам ясно. Переопределить return в AccountPageV2, и возвращать значение функции, которая добавит в структуру страницы нужные детали(в detailes) и элементы страницы (в diff).
Загвоздка заключается, в том, что если пользователь захочет внести изменения в структуру страницы через "Мастер раздела", то мастер сформирует стандартную структуру страницы, затерев функцию динамического формирования Вкладку "История филиалов".
Может кто-нибудь сталкивался с подобной задачей или может подсказать в какую сторону двигаться, чтобы обойти эту проблему.
Спасибо.

Нравится

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

Здравтсвуйте, Игорь!
Если я правильно понял, то замещать таким образом модуль некорректно. Все замещающие модули должны иметь идентичную структуру с маркерными комментариями, чтобы мастер разделов мог с ними работать. Можно предпринять 2 вещи:
1) динамику отображения вкладки реализовать с помощью методов и зависимостей таким образом, чтобы сохранилась структура модуля. Хотя я может быть неверно понял то, как Вы хотите замещать страницу. На всякий случай приведите код.
2) разместить свой замещающий модуль страницы в отдельном пакете, чтобы мастер разделов создавал свой модуль и не "затирал" Ваш.

Здравствуйте!
Схема такая:

define('AccountPageV2', ['AccountPageV2Resources', 'GeneralDetails', 'BusinessRuleModule'],
function(resources, GeneralDetails, BusinessRuleModule) {
	var pageConfig =  {
		entitySchemaName: 'Account',
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		attributes: {},
		methods: {},
		rules: {},
		userCode: {}
	}
	function UpdateBaseConfig(pageConfig){
	//Здесь делаю запрос к таблице Relations. получаю все филиалы текущего контрагента
	// Обновляю структуру baseConfig.diff и baseConfig.details - добавляю детали для каждого филиала на на вкладку "история филиалов"
		return pageConfig;
	}
	return UpdateBaseConfig(pageConfig);
});

Очень интересно Ваше мнение. Спасибо.

Здравствуйте, Игорь!
В целом, это некорректный подход, но трюк с выносом этой схемы в другой пакет может сработать. Но опять же, мастер раздела, скорее всего "не увидит" Вашего автогенерированного конфига и может возникнуть конфликт при отрисовке контролов.

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

Вы можете унаследоваться от карточки контрагента и назвать её таким же именем.

"Олейников Владимир Владимирович" написал:Вы можете унаследоваться от карточки контрагента и назвать её таким же именем.

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

Думаю, что мастер раздела её просто не откроет даже, так как не распознает вашу структуру

"Олейников Владимир Владимирович" написал:Думаю, что мастер раздела её просто не откроет даже, так как не распознает вашу структуру

Открывает, ведь структура возвращается стандартная.

Тогда и перезатирать не должен

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

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

Игорь, в самом первом комментарии я Вам написал рекомендацию по этому поводу:

"Андрей Каспаревич" написал:2) разместить свой замещающий модуль страницы в отдельном пакете, чтобы мастер разделов создавал свой модуль и не "затирал" Ваш.

Вы пробовали так сделать? Есть ли какие-то результаты?

"Андрей Каспаревич" написал:Вы пробовали так сделать? Есть ли какие-то результаты?

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

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

Игорь, добрый день.
Проанализировав Ваш код, можем сказать что весь массив details дублироваться не будет.
Отвечая на второй вопрос, для выполнения синхронного запроса, нужно реализовать метод, одним из параметров которого, будет callback-функция:
syncRequest: function(callback, scope) {
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: this.entitySchemaName
});
// добавляем в запрос нужные колонки
esq.addColumn("Id");
// объявляем необходимые фильтры
esq.filters.add("primaryColumnFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.NOT_EQUAL, "Id", this.get("PrimaryColumnValue")));
esq.filters.add("nameFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Name", this.get("Name")));
esq.getEntityCollection(function(response) {
if (response && response.success) {
if (response.collection.getCount() > 0) {
result.message = “Текс ошибки”;
result.success = false;
}
// непосредственно вызов callback-метода, который будет обрабатывать результат запроса
callback.call(scope || this, response);
}
}, this);
}
}
Спасибо.

Не совсем понятно, какую функцию передавать в callback, если нам необходимо в итоге получить дополненную структуру AccountPageV2? и где выполнять перебор связанных филиалов?

Игорь, добрый день.
Проанализировали еще раз Вашу задачу, и предлагаем использовать вариант вызова запросов цепочкой :
onPreviousElementChanged: function() {
Terrasoft.chain(
function(next) {
//запрос
/*this.getPreviousElementData(function(response) {
if (this.validateResponse(response)) {
next();
}
}, this);*/
},
function(next) {
//обработка данных запросов

/*this.set("isElementChanged", true);
this.onDelayTypeChanged();
this.set("isElementChanged", false);*/
next();
},
this);
},
Спасибо.

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

Здравствуйте!
Есть ли какие-то тонкости при переезде пакетом с 7.4 на 7.5?
На семинаре для разработчиков упоминалась инструкция, можно ли её получить?

Нравится

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

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

Инструкция во вложении.

instrukciyapoobnovleniyusversii7.4.1na7.5.0.doc

Сергей, спасибо!
Если я верно понял инструкцию, то 7.5 накатывается поверх 7.4?

с процессами, которые были запущенные под 7.4, после обновления можно будет продолжать работать?

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

Добрый день! Пробовала обновиться способом, указанным в инструкции. Обновление прошло быстро, но при компиляции схем в системе возникло множество ошибок в базовых схемах (в основном, это были элементы бизнес-процессов).
Пришлось пойти обходным и более длинным путем:
1. Выгрузить пакеты с доработками из 7.4 и загрузить их в 7.5
2. Скомпилировать все
3. Выгрузить все пакеты из 7.5 и загрузить их в 7.4 с очисткой конфигурации
В результате все получилось скомпилировать без ошибок в базовых схемах.

С уважением,
Кочеванова Анастасия
Инженер-программист
ООО «Программные технологии»
Центр разработки и внедрения Terrasoft Поволжье

А есть ли возможность обновить 7.2 до 7.5?
И будут ли корректно работать при таком обновлении собственные доработки?

D.T., это будет сложный путь 7.2->7.3.->7.4->7.5. Начиная с 7.3 кардинально изменилась структура клиентских схем, эти доработки точно не будут работать, нужно будет переносить вручную.
БП и процессы объектов, скорее всего, будут работать.

"Кочеванова Анастасия Николаевна" написал:
Пришлось пойти обходным и более длинным путем:

1. Выгрузить пакеты с доработками из 7.4 и загрузить их в 7.5

2. Скомпилировать все

3. Выгрузить все пакеты из 7.5 и загрузить их в 7.4 с очисткой конфигурации

В результате все получилось скомпилировать без ошибок в базовых схемах.

Анастасия, интересный способ.
Спасибо что поделились.

"Вильшанский Дмитрий" написал:

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

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

К примеру, я так же обновлял систему с 7.4 к 7.5 то процесс (процесс работы с лидом, не коробочный) давал сбой, в ходе отлажывания понял что из-за того что у объекта Лид изменилась структура.

Добавлю пару нюансов о переезде:

1. Справочники и папки, привязанные к пакету переезжают некорректно
2. Невозможно добавить собственный справочник в определенную группу, а также перенести из одной группы в другую (в новом интерфейсе)
3. Изменено добавление/скрытие кнопок в действиях детали

Добрый день, Александр!

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

Здравствуйте!
После переезда на 7.5 перестал синхронизироваться мобайл со следующей ошибкой:

Тип: Terrasoft.SyncException
Сообщение: В процессе синхронизации произошла ошибка 
 
Тип: Terrasoft.ODataSecurityException
Сообщение: Для схемы "SysModuleEntity" определено несколько одинаковых позиций по распределению прав по операциям Дополнительная информация: 
{"error":{"code":"5","message":{"lang":"","value":"Для схемы \"SysModuleEntity\"" определено несколько одинаковых позиций по распределению прав по операциям""}

Александр Сергеевич!

Нужно выполнить следующие действия в системе:

1. Раздать права на объекты мобильного приложения;
2. Актуализировать организационную структуру.

Выполнил данную операцию, не помогло.

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

В таком случае нужно проверять права доступа на список объектов в манифествх мобильного приложения: MobileApplicationManifestMobile;MobileApplicationManifestLead;MobileApplicationManifestOpportunity

Проверил, доступ на объекты есть. В чем ещё может быть проблема?

Для указанного объекта в выделенной детали было 2 записи, одну из которых нужно было удалить. Оставили права только для группы пользователей Mobile. Скриншот:

Спасибо, работает!

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

Добрый день!
Подскажите, пожалуйста, как для одного поля применить несколько правил отображения (в каждом правиле будет по несколько условий в массиве conditions). Т.к. если объявлено несколько правил отображения, то применяется только последнее правило.
И как реализовать правила отображения групп полей, Деталей и вкладок?

Нравится

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

Здравствуйте, Игорь!
В таком случае, наверное лучше биндить параметр видимости на метод, который будет проводить необходимые вычисления и возвращать true или false. См. пример: http://www.community.terrasoft.ru/forum/topic/11983#comment-51919
У групп полей и деталей также есть свойство "visible".
Со вкладками сложнее - у них свойства "visible" нет, нужно либо добавлять css-свойство "display: none", либо динамически удалять/добавлять элементы коллекции "TabsCollection".

Нашел) только это 7.4.1

"Result": {
	"BindParameterEnabledResultToStatus": {
		"ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
		"property": BusinessRuleModule.enums.Property.ENABLED,
		"conditions": [
			{
				"leftExpression": {
					"type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
					"attribute": "Status",
					"attributePath": "Finish"
				},
				"comparisonType": Terrasoft.ComparisonType.EQUAL,
				"rightExpression": {
					"type": BusinessRuleModule.enums.ValueType.CONSTANT,
					"value": true
				}
			}
		]
	},
	"BindParameterRequiredResultToStatus": {
		"ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
		"property": BusinessRuleModule.enums.Property.REQUIRED,
		"logical": Terrasoft.LogicalOperatorType.AND,
		"conditions": [
			{
				"leftExpression": {
					"type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
					"attribute": "Status",
					"attributePath": "Finish"
				},
				"comparisonType": Terrasoft.ComparisonType.EQUAL,
				"rightExpression": {
					"type": BusinessRuleModule.enums.ValueType.CONSTANT,
					"value": true
				}
			},
			{
				"leftExpression": {
					"type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
					"attribute": "IsProcessMode"
				},
				"comparisonType": Terrasoft.ComparisonType.EQUAL,
				"rightExpression": {
					"type": BusinessRuleModule.enums.ValueType.CONSTANT,
					"value": true
				}
			}
		]
	}
}

чтобы правило работало на деталь или вкладку - вместо названия поля ("Result") пишите название детали

Спасибо, но в моём случае необходимы несколько
BusinessRuleModule.enums.Property.VISIBLE.
И к сожалению отрабатывает только последнее правило из массива.

так вы не несколько правил добавляйте, а несколько условий - как в правиле BindParameterRequiredResultToStatus

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

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

Вот это, к сожалению, и есть проблема, хотя при применении нескольких правил фильтрации поля, они вместе прекрасно отрабатывают. Придётся отказаться от использования rules и обратить свой взор на свойство visible. Спасибо за оказанное внимание

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

Т.к. в каждом из правил есть по несколько condition'ов, объединённых
logical: Terrasoft.LogicalOperatorType.AND. Два параметра "logical" в одном правиле не применить. А в разных правилах присутствует условия, которые строятся на разных значениях одного поля + другое условие.

Единственное, что не пробовал - это передать в качестве элемента conditions массив условий.
Но думаю это ничего не даст.

да проще тогда методом)

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

Добрый день!
Каким образом можно сделать сложный справочник в BPMOnline 7.5.0 или как привязать С#-вую страницу редактирования к вновь зарегистрированному справочнику?
Мне нужен справочник наподобие справочника "Результаты активностей по категориям".
Спасибо.

Нравится

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

Хороший вопрос. Я в последних доработках не решился потратить время на такой справочник, тоже интересно будет увидеть пример реализации на будущее.

PS Посмотрел справочник... я то думал что там двухъярусный справочник на новом интерфейсе:sad: а там на старом... такая страница несложно делается - посмотрите в конфигурации "ActivityResultGridPage", она все наследует от родителя "Базовая страница реестра со связью многие ко многим ( Base )". В процессе на init задаются uid схем и страниц... разобраться можно в общем :)
А прицеплена страница к самому справочнику похоже скриптом, сначала просто справочник зарегистрировали при имеющемся объекте штатным методом, а потом через update прописали в таблицу SysLookup значение поля SysGridPageSchemaId = '229cae6b-11e9-4c84-8264-c8359cbbaf47' (это как раз uid вышеуказанной страницы)

"Александр Кудряшов" написал:Посмотрел справочник... я то думал что там двухъярусный справочник на новом интерфейсе а там на старом... такая страница несложно делается - посмотрите в конфигурации

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

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

И ещё несколько "интересных" вещей при работе со справочниками в 7.5.0:

1. После регистрации нескольких новых справочников, начинаю заполнять их данными, в итоге все значения всех созданных справочников создаются в первом справочнике, остальные пустые. Помогло F5 перед наполнением очередного справочника.
2. Выбираю группу справочников для регистрации в ней нового справочника. После регистрации справочник регистрируется в корневой группе. решение только Update запрос к таблице SysLookup.

Игорь,

в будущих версиях планируется.

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

"Коновалов Игорь" написал:нужно регистрировать в табл. SysLookup, а не Lookup?

Такой таблицы "Lookup" вроде бы нету...


В этой таблице хранятся пользовательские справочники. В SysLookup зарегистрированы только системные справочники.

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

Попробуйте! Вам понравится :)

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

Игорь, к сожалению, такой возможности нет приложении.

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

Добрый день,
Возникла следующая проблема в 7.5 не отрабатывает BusinessRuleModule, в define объявлен. Код в rules использовался аналогичный как в 7.4, при просмотре ошибок в консоли не появляется, но не работает

define('EventPageV2', ['EventPageV2Resources', 'GeneralDetails', 'BusinessRuleModule'],
function(resources, GeneralDetails, BusinessRuleModule) {
...
rules: {
"SxWebPublish": {
        "SxTaskVisibleByType":{
                ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
                property: BusinessRuleModule.enums.Property.VISIBLE,
                logical: Terrasoft.LogicalOperatorType.AND,
                "conditions": [
                        {
                                "leftExpression": {
                                        "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                                        "attribute": "Type"
                                },
                                "comparisonType": Terrasoft.ComparisonType.EQUAL,
                                "rightExpression": {
                                        "type": BusinessRuleModule.enums.ValueType.CONSTANT,
                                        "value": "c5822cf8-1e61-45bf-bb76-3b90e68d75f5"
                                }
                        }
                ]
        }
}
},

Нравится

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