Не раз уже сталкивался с такой ошибкой http://prntscr.com/flgkb0, может кто-нибудь пояснить куда смотреть и в чем разбираться, когда возникает такая проблема?

Нравится

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

Добрый день, Михаил!

Как следует из названия, ошибка связана с тем, что Вы повторно пытаетесь добавить элемент, который уже есть, допустим, на странице. Такое чаще всего происходит после копирования участков кода, из-за чего он дублируется в нескольких местах. Самый верный способ найти ошибку - поискать данный ключ в консоли через Ctrl+Shift+F(речь о Chrome).

Спасибо, попробуем.

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

Добрый день! Нужен триггер, который запускается 1 раз в неделю по вс в 1:00:00. Создан процесс, первым элементом котрого идет элемент скрипт, в котором следующее:

IJobDetail job = AppScheduler.CreateProcessJob("MoveDemoActivitiesJob", "TestCronGroup", "MoveDemoActivitiesProcess",
    "CurrentWorkspace", "CurrentUserName");
ICronTrigger trigger = new CronTriggerImpl("MoveDemoActivitiesTrigger", "TestCronGroup", "0 0 1 ? * SUN *");
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

далее идет обычный процесс с нужной логикой. Результат:

1. В таблице QRTZ_CRON_TRIGGERS он есть
2. В таблице QRTZ_JOB_DETAILS он есть
3. В таблице QRTZ_TRIGGERS он есть

Регулярное выражение делали на http://www.cronmaker.com
вот оно: 0 0 1 ? * SUN *

Вот только ничего не работает. Почему?

Нравится

3 комментария
string schedulerJobGroupName = "CheckOtkJob";
string jobProcessName = "CheckOtkProcess";
string schedulerJobName = "CheckOtkProcessGroup";
 
DateTime startDate = currentDateTime;
startDate = startDate.AddDays(-currentDateTime.Day + MonthDay);
if(currentDateTime.Day > MonthDay)
    startDate = startDate.AddMonths(1);
 
int startOffset = 60;
currentDateTime = startDate; 
 
AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, UserConnection.Workspace.Name, UserConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, startDate.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

Я добавляю в расписание свой БП вот таким образом. Только естественно вам нужно расчёт времени организовать согласно вашей логике.
Необходимые библиотеки:
Quartz.Impl
Quartz
Quartz.Impl.Triggers
Terrasoft.Core.Scheduler

Приветствую! Не то :( у вас там SimpleTriggerImpl. Интересно же именно с CronTriggerImpl. Хотя можно и так...

Добавьте следующие строчки кода перед строкой AppScheduler.Instance.ScheduleJob(job, trigger); :

trigger.TimeZone = TimeZoneInfo.Utc;
trigger.MisfireInstruction = MisfireInstruction.CronTrigger.FireOnceNow;

Удалите старый триггер из таблиц, после чего запустите повторное создание триггера.

P.S.
   Возможно кому-то пригодится статья.

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

Добрый день, Коллеги.
Есть некоторые вопросы по сабжу. Интеграцию делаю через тестовый кабинет маркетплейса.

1. CDR

  • Как задать результат звонка(отвечен/упущен/занято и тд)? Какой аттрибут коллекции для этого использовать
  • Как добавить это аттрибут на форму в истории(если это необходимо?)?
  • В каком объекте фиксировать пропущенные от неизвестных контрагентов? Если это Лид, то какой статус предпочтительнее?

2. Файл с записью разговора.

  • Какие типы файлов может проиграть встроенные плеер?
  • Возможно ли указать ссылку на файл?

Нравится

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

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

Касательно заданных вопросов.

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

2. Касательно плеера, он точно поддерживет MP3 и WAV. Работает обычно именно получая ссылку на сервер с АТС, с которого и берет запись. Примеры можно посмотреть в схемах интеграции с Webitel или Oktell.

Добрый день, Илья.
По статусу звонка - понятно.
Что делать со звоноком с неизвестного номера?

По второму вопросу - нужен пример, тк отправка cdr осуществляется бекендом АТС.

Коллеги, есть примеры?
или хотя бы куда вставлять)

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

Посмотреть пример выбора плеера с параметрами, если не ошибаюсь, можно в CallSectionGridRowViewModel пакета CTIBase.

Илья, подскажите плз.
Плеер по идеи должен парсить звонки по integrationId (фактичческо id звонка) и показывать для них "проиграть" и скачать.
Не могу понять почему не появляются.
Возможно из за ограничения лицензии?

Спасибо

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

Всем доброго времени суток.
Версия 7.10.

Возможно ли реализовать перенаправление на страницу без перезагрузки? Также, как в системе работают ссылки. Допустим, известно, что это страница контакта и известен id.

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

Нравится

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

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

Нравится

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

Попробуйте в консоли браузера.

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

Отладить Javascript можно в консоли браузера, отдельных инструментов для этого в bpm`online не предусмотрено. Об отладке более подробно можно прочитать здесь:
https://developers.google.com/web/tools/chrome-devtools/console/
И здесь:
https://academy.terrasoft.ua/documents/technic-sdk/7-10/otladka-klients…

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

Всем привет!

Коллеги, подскажите, пожалуйста, можно ли в модальном окне отобразить данные в виде таблицы? Если кто-то сталкивался с такой задачей и есть пример реализации буду очень благодарен)

Нравится

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

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

Лучше не в BaseSection а BaseLookupPageV2 т.к. она и с гридом, и в модальном окне.

Спасибо за совет!

Мы воспользовались примером из BaseLookupPageV2, там используется контрол "itemType": Terrasoft.ViewItemType.GRID. В итоге мы получаем ошибку "Ошибка entitySchemaName of undefined". Если мы убираем этот контрол из схемы модального окна, то ошибка пропадает.
Возможно не совсем корректно описал проблему - мы хотим выводить в Грид не данные какого-то объекта, а произвольный набор данных, получаемый через произвольный запрос из разных объектов, возможно ли это?

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

А как поступить в случае если нет возможности сфоримровать данные с помощью запроса, например если данные нужно вычислить или с провести сложное форматирование, тоесть запросом не возможно получить эти данные?

Грид умеет рабоать не только напрямую с таблицей бд. Вам стоит смотреть в сторону работы с атрибутом GridData, который отвечает за данные грида и имеет тип Terrasoft.DataValueType.COLLECTION.

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

Добавил рабочее место,в него несколько разделов. Система выводит раб. место на странице "Настройка рабочих мест", но в меню его нету. Удалил рабочее место, создал новое, привязал к нему нужные разделы - ничего не изменилось, раб. место так же не выводится в меню. Буду признателен за любую помощь/подсказки!

Нравится

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

Выйти из системы, сбросить кэш (ctrl+r) и зайти снова.

"Сидоров Александр Валерьевич" написал:

Выйти из системы, сбросить кэш (ctrl+r) и зайти снова.


Чистил кешы, заходил с приватного режима браузера - не помогает

Помогает подождать часик... Наверное, что-то на сервере надо перегружать

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

"Владимир Соколов" написал:

Помогает подождать часик... Наверное, что-то на сервере надо перегружать


Это началось вчера вечером, я тогда тоже подумал, что подождать надо, но сегодня все та же ситуация

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

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

Так же необходимо проверить настройки прав доступа к данному рабочему месту.

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

Спасибо всем за помощь, проблема была в правах доступа

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

Добрый день!

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

первая проблема это скрытие через бизнес - правила. скрытие работает, но на форме остается "дыра", поля вставлены не через layout. Об этом я писала(https://community.terrasoft.ru/forum/topic/25552) , но результата нет, поэтому эту проблему я решила костылями - через document.getElementById("xxx").style.display = "xx"

вторая проблема: после добавления полей миникарточка стала некорректно отображаться на экранах ноутбука, а именно верхнее поле не видно. причем при открытии миникарточки скрываются ненужные поля на onEntityInitialized() . то есть при открытии миникарточки всего 5 полей, тем не менее она располагается наверху экрана, как будто в ней есть все 13 полей.

если сравнивать стиль элемента через консоль, то на большом экране top=68px , а на ноутбуке = top=-8px

как решить эту проблему? есть ли лимит на количество поле в миникарточке?

Нравится

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

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

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

Добрый день,

Хочу использовать фичу элемента Выполнить задачу выполнения кода после сохранения активности.
Например хочу взять последнюю созданную задачу и изменить значение колонки:

var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Activity");
esq.AddColumn("CreatedOn").OrderByDesc();
esq.AddAllSchemaColumns();
esq.RowCount = 1;
esq.AddColumn("isDetailedResultRequired");
var entities = esq.GetEntityCollection(UserConnection);
        foreach(var entity in entities){
    entity.SetColumnValue("isDetailedResultRequired", true);
        }
entities.Save();

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

Может кто подскажет в чем может быть проблема и как работать с этой фичей ?

Второй вопрос:

В исходниках видно, что в этот метод передается параметр в виде экземпляра созданной активности Entity activity. Можно ли поменять значения некоторых колонок и сохранить эту активность еще раз?
Если да, кто где взять доступные методы работы с Entity?

С уважением.

Нравится

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

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

Проверил на своей конфигурации - код в данном окошке выполняется. Попробуйте посмотреть в базе, возможно, по какой-то причине изменения применяются не к той Активности, к которой нужно? Если Ваш код действительно рабочий, и не выполняется только с использованием данного элемента, нужно писать в официальный support, так как это реальный баг.

Касательно второго вопроса не совсем понял, про какой конкретно метод идет речь. Информацию касательно ядровых методов можно найти на SDK:
https://academy.terrasoft.ru/api/SDKNETAPI/7.10.0/NetCoreAPI_Help.html#…
Или же поискать по конфигурации готовые примеры.

Илья, добрый день!

Спасибо за ответ.
Уже разобрался - код почему-то не работал именно в этом БП. Сделал тоже самое в другом БП и всё заработало.

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

Помогите решить тривиальную проблему новичку:

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

Задача: при очистке значения "ПОЛЕ1" автоматически очищать "ПОЛЕ2". Данные поля хранят в себе ссылки на значения разных таблиц.

С чего начинать? Куда смотреть?

Нравится

4 комментария
attributes: {
	"ChangeManager": {   //название колонки "менеджер изменения"
		dependencies: [
			{
				columns: ["ChangePath"],     //Название колонки "Направление изменения"
				methodName: "onPathChanged"
			}
		]
	}
},
methods: {
	onPathChanged: function {
		if (Ext.isEmpty(this.get("ChangePath"))) {
			this.set("ChangeManager", null);
		}
	}
}

а параметр "autoClean": true не работает?

Владимир, здравствуйте.

Данный параметр применяется в бизнес-правилах типа FILTRATION. Допустим, фильтрация города по стране. autoClean при смене страны очищает значение поля город, autocomplete при заполнении города автоматически заполняет страну. Отдельно от данного правила они вроде не работают.

Отработало! Спасибо огромное...

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