Добрый день. Только начинаю работу с bpm'online, есть задача сделать на нескольких контролах формы подгрузку данных из стороннего сервиса. Т.е. надо запустить ajax запрос, заблокировать и показать крутилку на контролах, а потом выставить значения.

Вот с крутилкой и блокировкой я что-то подвис. Как я понимаю прямого доступа к контролам нет.

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

Нравится

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

А что вы имеете ввиду под контролами?

Попробуйте в вашем коде вызывать методы showBodyMask() и hideBodyMask() в соответствующих местах. Они как раз и показываются крутилку и блокируют карточку.

Спасибо за ответ. Задача прогрузить данные из сторонней системы в ридонли поля, например остаток денег на счету, дату, т.е. какие-то простые типы. Методы showBodyMask/hideBodyMask, как я понимаю, блокируют всю карточку и в принципе могут решить задачу, но если сторонняя система подвиснет, карточка будет вечно заблокирована, что нехорошо, есть ли возможность показать крутилку рядом с конкретными контролами или секцией?

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

Добрый день

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

var phoneNumberEdit = Ext.getCmp("PhoneNumber");
var maskId = Terrasoft.Mask.show({
	selector: phoneNumberEdit.selectors.wrapEl,
	frameVisible: false,
	caption: ""
});
this.callExternalService(function(response) {
	Terrasoft.Mask.hide(maskId)
}.bind(this));

 

Артем Гура,

Спасибо, то что надо! а в форме селектор какой-то не такой красивый как у вас. У меня он получается типа "AccountPageV2UsrAddDescriptionContainer_Control", так и должно быть, или можно как-то красивее выйти на контрол?

Артем Гура,

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

Я начал описывать так:

{
	"operation": "insert",
	"values": {
		"layout": {
			"colSpan": 12,
			"rowSpan": 1,
			"column": 0,
			"row": 2,
			"layoutName": "CategoriesControlGroupContainer"
		},
		"enabled": true,
		"contentType": 0,
		"caption" : "UnBindedField",
		"className": "Terrasoft.MemoEdit"
	},
	"parentName": "CategoriesControlGroupContainer",
	"propertyName": "items",
	"index": 4
}

но получаю ошибку "Невозможно найти колонку по конфигурации", метка прорисовывается, контрол нет. Явно делаю что-то не то))), но примера подобного найти не могу. Пробовал играться с className, разными itemType, и дочерними items, но не смог подобрать комбинацию, когда мне и Label и контрол покажутся без ошибок. Описания использования этого функционала нигде в итене не нашел, куда посмотреть, и как решить задачу?

Вопрос: а имя не давали этому контролу? Если дать имя, то генератор будет пытаться сделать bind на одноименный атрибут модели. Далее, если вы используете свой атрибут, то вам нужно прописать данный атрибут в схеме

Артем Гура,

Создал отдельную ветку 

https://community.terrasoft.ru/questions/sozdanie-kontrola-bez-privazki… и решил сложным способом - через добавления контейнеров метки и контрола, и простым - через виртуальное поле, теперь с гридом пытаюсь сделать аналогичную манипуляцию )

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

Здравствуйте! Такой вопрос, возможно ли общение между деталью, и её мини-карточкой. Например при нажатии кнопки на мини-карточке, происходил update детали (для отображения актуальной информации), через sandbox знаю как сделать, но он не работает.

Отсюда вопрос он вообще способен работать при общении "деталь - миникарточка детали"

Нравится

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

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

А под мини-карточкой вы понимаете карточку детали, которая появляется при нажатии на +?

Покажите код, как вы это пытаетесь делать, возможно у вас там ошибка.

Нет, я имею ввиду именно миникарточку. 

https://academy.terrasoft.ru/documents/technic-sdk/7-11/sozdanie-mini-k…

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

То что со страницей редактирования можно общаться через sandbox, это понятно, легко делается

Аналогичный вопрос. Как в модуль передать Sandbox родительской схемы чтобы при этом сохранилась возможность публиковать сообщения родительской схемы? 

Дульский Александр,

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

Добрый вечер. Да возможно – миникарточка может опубликовать сообщение, а деталь может подписаться на него. Реализацию можно посмотреть -  https://academy.terrasoft.ru/documents/technic-sdk/7-11/soobshcheniya-s…

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

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

Версия 7.11.

Есть типовой фильтр периода:

var periodFilter = this.Terrasoft.createFilterGroup();
periodFilter.logicalOperation = Terrasoft.LogicalOperatorType.AND;
periodFilter.add("UsrDueDate", this.Terrasoft.createColumnFilterWithParameter(
	this.Terrasoft.ComparisonType.GREATER_OR_EQUAL, "UsrDueDate",
	UsrFilterStartDate));
periodFilter.add("UsrStartDate", this.Terrasoft.createColumnFilterWithParameter(
	this.Terrasoft.ComparisonType.LESS_OR_EQUAL, "UsrStartDate",
	UsrFilterDueDate));
if (fixedFilters.contains("PeriodFilter")) {
	fixedFilters.removeByKey("PeriodFilter");
}
fixedFilters.add("PeriodFilter", periodFilter);

Здесь UsrFilterStartDate, UsrFilterDueDate - значения даты начала и конца периода, указанные в фильтре (например, такой фильтр используется в разделе Активности), UsrStartDate, UsrDueDate - соответственно, даты начала и завершения в некотором объекте. В результате находятся все записи, которые хоть каким-нибудь "боком" попадают в заданный диапазон.

Проблема в том, что есть записи, в которых указана только дата начала UsrStartDate, т.к. запись ещё не "закрыта", то UsrDueDate пока пуста. Как сделать, чтобы такие записи тоже попадали в фильтр? Сейчас они не попадают, т.к. в колонке UsrDueDate пусто.

Нравится

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

Добрый вечер.

Дело в том, что при фильтрации на сервер посылается не совсем очевидный запрос, а именно: выбираются записи, в которых дата закрытия больше указанной даты начала, и соответственно, записи в которых дата начала меньше указанной даты конца периода. Поэтому, когда вы не ставите дату завершения будет происходить сравнение с null, и элемент не выбирается. Можете перехватить фильтры и удалить ненужный(«PeriodFilter») и установить свой. В ActivitySection это можно сделать в методе getFilters.

Нашёл способ, может кому понадобится:

 

var periodFilter = this.Terrasoft.createFilterGroup();
				periodFilter.logicalOperation = Terrasoft.LogicalOperatorType.AND;
 
 
				periodFilter.add("UsrStartDate", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.LESS_OR_EQUAL, "UsrStartDate",
					UsrStartDate));
 
				var dueDateFilter = this.Terrasoft.createFilterGroup();
				dueDateFilter.setLogicalOperation(1);
 
				dueDateFilter.add("NotUsrDueDate", this.Terrasoft.createColumnIsNullFilter("UsrDueDate"));
				dueDateFilter.add("UsrDueDate", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.GREATER_OR_EQUAL, "UsrDueDate",
					UsrDueDate));
 
				periodFilter.add("dueDateFilter", dueDateFilter);

То есть задаётся ещё одна группа фильтров, объединённых логической операцией ИЛИ, которая подключается внутрь группы фильтров.

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

Доброго времени суток!

Каким-то образом после создания детали, при добавлении детали на раздел в списке выбора две детали с одинаковым именем. Решил удалить через конфигуратор и потом создать заново.

Итог. Теперь 4 детали с одинаковым именем зарегестрировано + выдают ошибку при заполнении детали и дальнейшем сохранении.

Как пофиксить?

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

Нравится

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

Сергей, здравствуйте!

Инструкцию по удалению детали Вы найдете на Академии: https://academy.terrasoft.ru/documents/sales-enterprise/7-11/chasto-zadavaemye-voprosy-po-masteru-razdelov

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

Одеяненко Юлия,

Спасибо, со справочником, да, накосячил frown

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

Добрый день!

в письме, которое отправляется пользователю, есть ссылка на конфигурационный сервис следующего вида



http://xxx:83/0/rest/UsrLogisticVariantsService/ApproveLogistic/330ed31…

если пользователь не авторизован  в системе, то выходит ошибка .

 

401 - Unauthorized: Access is denied due to invalid credentials.

если авторизован, то ссылка отрабатывает корректно.

можно ли как-то настроить систему так, чтобы 

1) прокидывало на страницу авторизации, как в случае со ссылкой на карточку записи

2) возможно есть возможность явно прописать учетные данные для работы данного сервиса

 

Нравится

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

Добрый день.

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

а можно делать анонимными отдельные сервисы внутри системы?

это же конфигурационный сервис, его кодом просто внутри можно настроить? потому что в iis другая настройка стоит 

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

.\Terrasoft.WebApp\ServiceModel\http\services.config

                add section:

                               <service name="Terrasoft.Configuration.MandrillService.MandrillService">

                                               <endpoint name="MandrillServiceEndPoint"

                                                               address=""

                                                               binding="webHttpBinding"

                                                               behaviorConfiguration="RestServiceBehavior"

                                                               bindingNamespace="http://Terrasoft.WebApp.ServiceModel"

                                                               contract="Terrasoft.Configuration.MandrillService.MandrillService" />

                               </service>

 

.\Terrasoft.WebApp\ServiceModel\https\services.config

                add section:

                               <service name="Terrasoft.Configuration.MandrillService.MandrillService">

                                               <endpoint name="MandrillServiceEndPoint"

                                                               address=""

                                                               binding="webHttpBinding"

                                                               behaviorConfiguration="RestServiceBehavior"

                                                               bindingNamespace="http://Terrasoft.WebApp.ServiceModel"

                                                               contract="Terrasoft.Configuration.MandrillService.MandrillService" />

                               </service>

 

.\Terrasoft.WebApp\Web.config

                "ServiceModel/MandrillService.svc" append into <add key="AllowedLocations" value="

                               exsample: <add key="AllowedLocations" value="ServiceModel/MandrillService.svc" />

                add section:

                               <configuration>

                                               <location path="ServiceModel/MandrillService.svc">

                                                               <system.web>

                                                                              <authorization>

                                                                                              <allow users="*" />

                                                                              </authorization>

                                                                              <httpRuntime requestValidationMode="2.0" />

                                                                              <pages validateRequest="false" />

                                                               </system.web>

                                               </location>

Terrasoft.WebApp\ServiceModel

                create file MandrillService.svc

                paste text:

                               <%@ ServiceHost Language="C#" Debug="true" Service="Terrasoft.Configuration.MandrillService.MandrillService" %>

Больше спасибо! буду пробовать

Кот Владимир Владимирович,



нужно после настройки что-то делать?

какой тип аутентификации должен стоять в IIS? 

iis и redis перезапускала - ошибка 401 сохраняется/

ошибка есть и для CaseRatingManagementService. 

в конфиге пробовала и   <allow users="?" /> и <allow users="*" />

 

поменяла и файл C:\Windows\System32\inetsrv\config\applicationHost.config.

значение 

      <sectionGroup name="authentication">

                    <section name="anonymousAuthentication" overrideModeDefault="Allow" />

 

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

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

Здравствуйте. Скажите пожалуйста как реализовать сумму прописью в ворде через макросы. 

По инструкции, которая находится в академии 

 // Метод возвращает текущую дату.
                return _userConnection.CurrentUser.GetCurrentDateTime().Date.ToString("d MMM yyyy");

а что требуется прописать в модуле что бы сумма прописью 

Нравится

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

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

Для числовых колонок используйте базовый макрос [#NumberRU#] - https://academy.terrasoft.ru/documents/technic-sdk/7-11/bazovye-makrosy…

Вильшанский Дмитрий,

скажите пожалуйста, а нужно создавать модуль. Если нужно то что в нем прописать

Никульшина Алёна

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

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

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

Установлен bpm'online на сервере 2012 R2, в папке temp нет папки BPMonline. Вопрос - куда пишутся логи и пишутся ли они?

Нравится

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

Добрый день! По умолчанию путь для Log-файлов следующий:

C:\Windows\Temp\BPMonline\site x, где x - номер сайта в iis.

Обращаю Ваше внимание, что папка [Temp], находится в папке [Windows].

Также можете проверить, включено ли логирование в файле log4net.config в папке приложения. 

Большое спасибо!

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

Добрый день!

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

Нравится

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

Марат, добрый день.

Вы можете настроить отображение в дизайнере системы - Настройка рабочих мест.

Добрый день, Марат!

Добрый день!

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

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

И как его скрыть в этом случае?

 В разделе "Настройка рабочих мест" убрать данный раздел для той роли, которая не должна его видеть (в некоторых случаях может понадобиться создать два рабочих  места: 1 - с этим разделом для одной группы пользователей и 2 - без этого раздела).

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

Добрый день!



Подскажите, пожалуйста, как при смене статуса вручную на ActionsDashboard запустить валидацию на заполненность определенных полей?

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

Нравится

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

Владимир, добрый день.

Для примера рассмотрим реалзиацию для объекта Обращения.

Одним из возможных вариантов реализации будет следующий:

1.На странице [Обращения], открыть мастер раздела и во вкладке [Решение и закрытие], добавить новое текстовое поле типа "Строка"

Например с названием "Причина перехода на следующую стадию" http://prntscr.com/i97vb7

2.Перейдя в мастере раздела на [Бизнес правила], создадим новое БП  http://prntscr.com/i97viu

Это правило говорит, что при изменении состояния обращения с "Новое" на "В работе",

поле "Причина перехода на следующую стадию" является обязательным к заполнению.

Обращаем Ваше внимание, что при создании БП в графе [Какое поле делать обязательным] следует указать название требуемой к заполнению строки из БД http://prntscr.com/i97vvk

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

он будет получать уведомление о том, что не заполнено обязательное поле указания причины http://prntscr.com/i97w4x&nbsp;

При переходе по actiondashboard'у выполняется сохранение записи и валидация заполненных полей.

Спасибо, Андрей!



При реализации возникла проблема в связи с различиями в поведении ActionsDashboard и lookup-поля:



Имеется справочник QualifyStatus, он выведен на страницу LeadPageV2 через ActionDashboard, в разделе attributes страницы указаны дополнительные колонки кроме id и value:

"QualifyStatus": {

    lookupListConfig: {

        columns: ["Name", "StageNumber", "UsrIsTaken", "UsrIsOpportunity", "UsrIsDisqualified"]

    }

}

Но они не доступны в коде страницы работы через this.get("QualifyStatus"). Если же добавить на страницу Lookup с QualifyStatus и работать со справочником через него то данные поля становятся доступны

Кроме того, при неудачной валидации статус на ActionsDashboard перескакивает обратно, что не совсем логично

Добрый вечер.

Т.е. this.get("QualifyStatus") возвращает объект в котором нет указанных колонок?

Именно 

Добрый вечер.

Мне не удалось воспроизвести ваш кейс все корректно отрабатывает. Так что проблема не в коробке. Рекомендую проанализировать состояние объекта сразу после инициализации схемы и в момент вашего вызова, может «по пути» затираются его свойства.

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

Мне нужно в разделе продажи создать деталь "фильтр".

Деталь должна иметь такой же внешний вид, как у группы полей. 

Этими полями будут 4 справочника.  Необходимо отловить события изменения этих справочников.   

 

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

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

1. Хотя создал объект для детали,  поместил в него справочник привязанный к справочнику продаж с автозаполенением на уровне приложения. А также сделал связи по остальным своим 4-ым. справочникам.

2. Создал деталь, наследуя от "Базовая деталь".

3. Зарегистрировал эту деталь, через SQL

4. Добавил ее как обычную деталь, по Продажи и Id

 

 

Нравится

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

Под вторым пунктом Вы имеете в виду, что создали "Схему модели представления детали с реестром" и в ней унаследовались от "Базовая схема детали с реестром ( NUI )"?

Alex Zaslavsky,  "Базовая схема детали с реестром ( NUI )"  нет, посчитал, что это нужно именно для реестра. А мне нужно сделать по внешнему виду деталь аналогично как у группы полей, только, чтобы это была деталь. (Ответил из под второго акк)

atyurin,

А, я Вас неправильно понял. Даже не знаю чем помочь. У меня такое было, когда я однажды неправильно сделал регистрацию детали при помощи SQL запроса. Нужны хоть какие-то скрины схемы, детали, запроса.

Добрый день. Судя по описанию вы выбрали неверного родителя для схемы детали. Попробуйте создать деталь согласно статьи https://academy.terrasoft.ru/documents/technic-sdk/7-11/sozdanie-polzov…. Если у вас возникнут затруднения, пожалуйста, напишите на support@terrasoft.ru с предоставлением доступа к вашей среде для проведения отладки.

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