Добрый день. 

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

Нравится

7 комментариев
Лучший ответ

Очистка редиса в первую очередь и выйти зайти в систему. Так же советую проверить все настройки телефонии согласно статьи в академии, может чтото зацепили

А какие при этом сообщения в консоли возникают?

Алла Савельева,

только эту ошибку видно

file: undefined

 line: undefined

 column: undefined

 message: Cannot read property 'value' of undefined 

 date: Fri Oct 19 2018 16:45:09 GMT+0300 (Москва, стандартное время)

 moduleId: ViewModule_RightSideBarModule_CtiPanelModule

 moduleName: CtiPanelModule

Уточните, вносились ли какие-то изменения в конфигурацию bpm'online?

Алла Савельева,

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

Серков Игорь Владимирович,

Сгенерируйте исходные коды для всех схем и перекомпилируйте все приложение.

Если сайт развернут on-site, тогда ещё очистите Redis.

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

 

Очистка редиса в первую очередь и выйти зайти в систему. Так же советую проверить все настройки телефонии согласно статьи в академии, может чтото зацепили

Игорь, здравствуйте!

Проблема в том что у Вас on-site и самоподписанный сертификат. 

По проблеме on-site. В bpm'online базовая интеграция с телефонией Webitel Collaboration есть только для cloud.

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

Для включения интеграции необходимо следующее:

1) Доступность вашего сайта "из вне"

2) Временный доступ к системе для сотрудников тех. поддержки Террасофт

3) Валидный сертификат SSL из официального центра сертификации. Либо Вы можете настроить сайт по http

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

Добрый день!

 

Есть две таблицы:

1) ListObject с колонками ObjectName(строка), ObjectType(Lookup), ObjectRule(Lookup на RulesList )

2) RulesList с колонками NameRule(строка),  ObjectType(Lookup)

Нужно реализовать фильтр, для колонки ObjectRule, таблицы ListObject. 

Фильтр должен выводить доступными только те записи ObjectRule, ObjectType которых соответствует ObjectType таблицы ListObject.

 

rules: {
  "typeObjectFilter": {
	 lookupListConfig: {
	   filters: [
	     function() {
		   var ruleToObject = this.get("ObjectRule");
		   var filterGroup = Ext.create("Terrasoft.FilterGroup");
		   if (ruleToObject) {
			  var filterByTypeRule = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"[RulesList:ObjectType].value", ruleToObject.value);
			  filterGroup.add("filterByTypeRule", filterByTypeRule);
			  return filterGroup;
		   }
		 }
	   ]
    }
  }
}

В настоящий момент фильтр не работает, страница не загружается.

Нравится

4 комментария
Лучший ответ

engineer7,

По первому пункту рекомендую ознакомиться со статьей по построению путей к колонкам относительно корневой схемы на академии:

https://academy.terrasoft.ru/documents/technic-sdk/7-13/postroenie-putey-k-kolonkam-otnositelno-kornevoy-shemy

Изначально Вы писали о том, что хотите фильтровать поле ObjectRule, а в коде реализуете фильтрацию для поля ObjectType.

Дальше Вы реализуете её в блоке rules, но, если делать через  lookupListConfig, то реализовывать нужно через блок attributes.

На мой взгляд, в данном случае Вы сильно усложнили себе задачу.

Ваш запрос на sql выглядит таким образом:

select Id

from RuleList

where RuleList.ObjectTypeId = @ObjectTypeId

где @ObjectTypeId - это значение ObjectType из таблицы ListObject

Реализовать такую фильтрацию можно легко с помощью мастера бизнес-правил https://academy.terrasoft.ru/documents/administration/7-13/nastroyka-biznes-pravil либо внести изменения в страницу редактирования на уровне конфигурации https://academy.terrasoft.ru/documents/technic-sdk/7-13/primer-primeneniya-pravila-filtration

1. Почему в выражении "[RulesList:ObjectType].value" Вы указали "value"?

Вместо value нужно указать поле, по которому будет фильтрация.

Например: "[RulesList:ObjectType].ObjectRule"

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

Алла,  добрый день! Спасибо за ответ!

1. Не знал этот момент.

2. Sql запрос выглядит таким образом:

SELECT ObjectRule

  FROM ListObject INNER JOIN RulesList ON

  ListObject.ObjectTypeId =  ListObject.ObjectRule.ObjectTypeId

только мне не совсем понятно, в том плане, что запрос выполняется для данных, которые уже находятся в таблице, в моем случае, я сначала выбираю ObjectType в ListObject  для нового объекта, но выбранные данные в таблицу еще не добавляю, потому что хочу сначала выбрать правило из RulesList для нового объекта, но данное правило должно иметь точно такой же тип который я выбрал...

Возможно мне нужно идти по другому пути и для начала получить значение из поля "Тип объекта"(ObjectRule таблицы ListObject), которое я добавляю первым? 

engineer7,

По первому пункту рекомендую ознакомиться со статьей по построению путей к колонкам относительно корневой схемы на академии:

https://academy.terrasoft.ru/documents/technic-sdk/7-13/postroenie-putey-k-kolonkam-otnositelno-kornevoy-shemy

Изначально Вы писали о том, что хотите фильтровать поле ObjectRule, а в коде реализуете фильтрацию для поля ObjectType.

Дальше Вы реализуете её в блоке rules, но, если делать через  lookupListConfig, то реализовывать нужно через блок attributes.

На мой взгляд, в данном случае Вы сильно усложнили себе задачу.

Ваш запрос на sql выглядит таким образом:

select Id

from RuleList

where RuleList.ObjectTypeId = @ObjectTypeId

где @ObjectTypeId - это значение ObjectType из таблицы ListObject

Реализовать такую фильтрацию можно легко с помощью мастера бизнес-правил https://academy.terrasoft.ru/documents/administration/7-13/nastroyka-biznes-pravil либо внести изменения в страницу редактирования на уровне конфигурации https://academy.terrasoft.ru/documents/technic-sdk/7-13/primer-primeneniya-pravila-filtration

Алла, огромное спасибо!

Получилось реализовать, рабочий вариант: 

	// Набор правил для колонки [ObjectRule] модели представления.
			"ObjectRule": {
				// Правило фильтрации колонки [ObjectRule] по значению колонки [ObjectType].
				"FiltrationObjectRuleByObjectType": {
					// Тип правила FILTRATION.
					"ruleType": BusinessRuleModule.enums.RuleType.FILTRATION,
					// Будет выполняться обратная фильтрация.
					"autocomplete": true,
					// Будет выполняться очистка значения при изменении значения колонки [ObjectType].
					"autoClean": true,
					// Путь к колонке для фильтрации в справочной схеме [ObjectRule],
					// на которую ссылается колонка [ObjectRule] модели представления
					// страницы редактирования.
					"baseAttributePatch": "ObjectType",
					// Тип операции сравнения в фильтре.
					"comparisonType": Terrasoft.ComparisonType.EQUAL,
					// В качестве значения при сравнении выступает колонка (атрибут)
					// модели представления.
					"type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
					// Имя колонки модели представления страницы редактирования,
					// по значению которой будет выполняться фильтрация.
					"attribute": "ObjectType"
				}
			}

 

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

Добрый день. 

выполнил вес шаги инструкции https://academy.terrasoft.ru/documents/common/7-10/kak-nastroit-integra… . Не могу понять почему не появляется трубка в BPM'Online  для осуществления звонков. как это происходит при интеграции между BPM'Online и webitel. Кто может подсказать что я упускаю. Или нужно что то настроить еще в BPMonline Messaging Service Install?

Нравится

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

Да, для интеграции с телефонией Infinity нужно ещё установить и настроить на своём сервере bpm'online Messaging Service. А если уже установили, обратите внимание на ремарку о https.

да я уже из https настройку делал и без. не появляется трубка для звонка. может что то еще нужно выполнить? нужно настройку самого  BPMonline Messaging Service делать? или дефолтных настроек достаточно? 

Если версия Infinity X, то её поддержку добавили совсем недавно и нужно вносить изменения в конфигах. Опубликованной инструкции ещё нет, обратитесь в службу поддержки.

См. предыдущий ответ.

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

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

В общем размер файлов по непонятным мне причинам ограничен.

Методы  GetStreamValue GetColumnValue возвращают файл не больше 512 kb.

Каким образом можно сделать чтобы возвращался весь файл, а не 512 kb сначала файла ?

 

Мне нужен весь файл так как я его собираюсь отправлять в файловое хранилище !

string iin1;	
iin1=Get<string>("iin");
int nomer1;		
nomer1=Get<int>("nomer");
Guid fileid1;	
fileid1=Get<Guid>("fileid");
 
string filename;
filename = "/public/Письма БПМ/";
filename = filename + iin1 +"/" + nomer1.ToString() +"/";
 
 
 
var userConnection = Get<UserConnection>("UserConnection");
var esqResult = new EntitySchemaQuery(userConnection.EntitySchemaManager, "SubsidiesFile");
esqResult.AddColumn("Name");
esqResult.AddColumn("Data");
 
var entity = esqResult.GetEntity(userConnection, fileid1);
 
 
//var data = entity.GetColumnValue("Data") as byte[]; послу получения размер массива 512288
//MemoryStream stream = new MemoryStream(data);
 
 
// Тут тоже 512288
MemoryStream stream = entity.GetStreamValue("Data");
 
fileexported = SftpService.SftpService.UploadFile(stream, filename);

 

Нравится

12 комментариев
Лучший ответ

Но все равно остается вопрос почему БП неправильно сигнализирует добавление файла 

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

var data = entity.GetBytesValue("Data");

MemoryStream stream = new MemoryStream(data);

GetBytesValue тоже возвращает 512 кб

Судя по тому, что раздел самодельный, дело может быть в неверных свойствах поля «Data» в его объекте. Попробуйте проверить такую же логику для другого раздела.

Если и с ним то же самое, то нужно смотреть, как в этих случаях работает стандартный сервис скачивания /0/rest/FileService/GetFile/ и в чём отличие от Вашей логики.

 

А если попробовать так....

var userConnection = Get&lt;UserConnection&gt;("UserConnection");
var esqResult = new EntitySchemaQuery(userConnection.EntitySchemaManager, "SubsidiesFile");
esqResult.AddColumn("Name");
var colData = esqResult.AddColumn("Data");
 
var entity = esqResult.GetEntity(userConnection, fileid1);
 
using (MemoryStream stream = entity.GetStreamValue(colData.Name)){
if (stream != null) {
                                               stream.Position = 0;
//UploadFile....
stream.Flush();
                               }
}

И какой тип данных в конфигураторе установлен для колонки Data ????

 

объект наследуется от базового !

Нет Григорий Ваш код не помог до сих пор 512 кб. Видимо придется эскалировать на службу поддержки !

string iin1;    
iin1=Get&lt;string&gt;("iin");
int nomer1;        
nomer1=Get&lt;int&gt;("nomer");
Guid fileid1;    
fileid1=Get&lt;Guid&gt;("fileid");
 
string filename;
filename = "/public/Письма БПМ/";
filename = filename + iin1 +"/" + nomer1.ToString() +"/";
 
var userConnection = Get&lt;UserConnection&gt;("UserConnection");
var esqResult = new EntitySchemaQuery(userConnection.EntitySchemaManager, "SubsidiesFile");
 
 
esqResult.AddColumn("Name");
var colData = esqResult.AddColumn("Data");
 
var entity = esqResult.GetEntity(userConnection, fileid1);
 
 
string[] lines = { fileid1.ToString(),filename };
System.IO.File.WriteAllLines(@"C:\Users\Public\TestFolder\WriteLines.txt", lines);
 
string name1 = entity.GetTypedColumnValue&lt;string&gt;("Name");
filename = filename + name1;
 
bool fileexported=false;
 
using (MemoryStream stream = entity.GetStreamValue(colData.Name)){
    if (stream != null) {
        stream.Position = 0;
        fileexported = SftpService.SftpService.UploadFile(stream, filename);
        string[] lines2 = { filename ,name1 , stream.Length.ToString() };
        System.IO.File.WriteAllLines(@"C:\Users\Public\TestFolder\WriteLines2.txt", lines2);
        stream.Flush();
        }
}
 
Set("fileexported", fileexported);
Set("path", filename);
Set("filename", name1);
 
return true;

 

Проверьте на файлах других разделов, есть ли ограничение там.

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

В общем ситуация такая. Нетривиальная.

Там есть событие на добавление записи.

При добавление файла, файл отправляется на сервер по 512 кб.

Когда срабатывает событие, загружены только первые 512 кб.

Событие на изменение записи не работает!

В итоге для того чтобы отправить файл в файловое хранилище нужно ждать 10-15 сек, в зависимости как быстро закачается весь файл в Bpmonline! 

 

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

В стандартном объекте «Файл» есть обработчики событий «Saving» и «Saved». В первом вычисляется версия и размер (и на тот момент его считает верно), второй пустой. Может, завязаться на второе и привязать туда запуск нужного БП. Или сразу на первое и обрабатывать данные файла ещё до его сохранения в базу.

Еще как вариант можно в FileDetail

перезгрузить событие и отсюда вызывать бизнес процесс параметрами 

onFileComplete: function(error, xhr, file, options) {

                if (!error) {

                    this.loadGridDataRecord(options.data.fileId);

                } else {

                    this.onFileCompleteError(error, file);

                }

                alert("Hie_dias");

                console.log(options);

            },

Но все равно остается вопрос почему БП неправильно сигнализирует добавление файла  ?

Может, на момент срабатывания события вся логика на стороне системы уже отработала и по 512 КБ асинхронно грузит сама база? Интересно, если смотреть в SQL-профайлере, завершился ли в тот момент Insert/Update-запрос?

возможно, но дальше разбираться нет желания...

Но все равно остается вопрос почему БП неправильно сигнализирует добавление файла 

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

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

Задача: 

Сохранить данные в таблице, по кнопке Save при добавлении новой записи вызывать соответствующий процесс и передавать ему необходимые параметры из новой записи.

Нравится

2 комментария
Лучший ответ

В БП есть возможность указать запуск по сигналу при добавлении объекта или изминении определенного поля/полей объекта. Id этого объекта получает процесс как параметр стартового сигнала. Думаю это соответствует вашей задаче. Подробности смотри в документации по БП

 

 

 

В БП есть возможность указать запуск по сигналу при добавлении объекта или изминении определенного поля/полей объекта. Id этого объекта получает процесс как параметр стартового сигнала. Думаю это соответствует вашей задаче. Подробности смотри в документации по БП

 

 

 

Григорий Чех,

спасибо большое, то что нужно!

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

Доброе утро!

Странная проблема у меня, создаю в «Мастер раздела» объект с именем UsrBePVM

Далее перехожу в JS скрипт, где описываю логику работы этого объекта, сохраняется удачно, все как бы хорошо.

Далее почему-то ничего не происходит на странице, такое ощущение, что не видит значения UsrBePVM или ему просто ничего не передается.

Что не так? Что-то забыл заполнить? Где смотреть?

 

Нравится

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

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

Как это сделать, подробно описано в статье.

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

Алла Савельева пишет:

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

Как это сделать, подробно описано в статье.

Проблема в том, что ошибок нет, ничего выводило. Сам JS кода был описан в бизнес процессе. Помогла только эта статья.

Странно, что из бизнес процесса не работает.

Процессы отрабатывают на сервере, а JS — на странице в браузере. Соответственно, при работе процесса клиентская логика отрабатывать не будет.

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

Добрый день!

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

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

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

Нравится

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

Добрый день, Дмитрий!



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

Пробовали удалить из процесса и добавить заново элемент с данной преднастроенной страницей?

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

Добрый день!

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

Terrasoft.Common.ItemNotFoundException: Элемент с идентификатором "00000000-0000-0000-0000-000000000000" не найден
   в Terrasoft.Core.ManagerItemCollection`1.GetByUId(Guid uid)
   в Terrasoft.Core.Manager`2.GetInstanceByUId(Guid uid)
   в Terrasoft.Core.Process.GetGoldWarrantyAmountProcess.get_ProductConditionCollection()
   в Terrasoft.Core.Process.GetGoldWarrantyAmountProcess.ScriptTask1Execute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Насколько я понимаю, это именно ошибка чтения параметра - коллекции объектов. 

В связи с этим у меня возникает вопрос: как корректно передавать параметр с типом коллекция объектов в другой БП, чтобы цикл его жизни не был равен одному запуску дочернего БП, а был доступен на всем протяжении работы данного БП?

Нравится

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

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

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

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

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

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

Нравится

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

Как работать с утилитой WorkspaceConsole, см. справку.

Откуда берётся файл, можно понять по его названию и содержимому.

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

Добрый день. 

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

Прикрепленные файлы

Нравится

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

Попробуйте зайти сразу в менеджер лицензий:

kkm-crm/Lic/LicManager.aspx

А если нужно зайти сразу в конфигурацию и опубликоваться, можно после логина ввести kkm-crm/0/dev

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

Добавить комментарий

Блинов Герман пишет:

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

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

 kkm-crm/0/dev, после чего нажмите Скомпилировать все. После этого у вас все должно заработать в штатном режиме.

Литвинко Павел,

Всё это было сделано вчера ещё. Я тоже надеялся, что после компиляции всё заработает в штатном режиме, но нет - не помогло.

Если лицензии перезагрузили, конфигурацию опубликовали не помогло, попробуйте сайт и пул перезапустить в IIS и очистить Redis.

Если и это не поможет, лучше обратиться в поддержку.

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