Уважаемые коллеги из Dev Labs!

подскажите, пожалуйста, по использованию приложения Phone lookup for Creatio (Дополнение для облегчения последующей обработки звонка и поиска данных в клиентской базе). Приложение было бы для нас очень полезно (испольpetv Asterisk)

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

1. Установила приложение

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

3. Все время получаю пустой результат, в консоли ошибка Cannot read property 'call' of undefined .

В связи с этим вопросы:

1. Можно ли использовать (тестировать) приложение, как пробую я, т.е. вводя вручную номер телефона в браузерную строку по требуемому адресу

2. Можно ли его использовать, если не настроен Глобальный поиск в системе?

Благодарю за помощьИзображение удалено.

Нравится

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

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

 

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

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

 

работу решения можно проверять, вводя вручную номер телефона в браузерную строку по требуемому адресу.  Функциональность решения не зависит от настроек глобального поиска.

 

Ошибку воспроизвела и направила на исправление ответственной команде. По готовности уведомлю в отдельном комментарии.

Лазоренко Ирина,

 

Ирина, большое спасибо! ожидаю

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

 

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

Лазоренко Ирина,

 

Добрый день, Ирина! да, спасибо большое. Ошибка ушла

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

Подскажи, как можно сделать массовое добавление записей?

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

Код выполняется на сервере, в конфигурационном сервисе.

Нравится

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

Александр, у элемента вставки в БП есть возможность вставлять выборку из другого объекта с нужным фильтром.

Из того, что Вы хотите, нет разве что указания количества. Возможно, получится через view с привязанным объектом, там в SQL-запросе можно сразу прописать и фильтр, и количество.

 

Ну или всю логику и считывания, и вставки реализовать в C#-скрипте с использованием классов ESQ или Select и Insert.

Зверев Александр, Реализовать надо в сервисе, выходит только через Select

Query selectQuery = new Select(UserConnection).Top(numberCountForNumberPool)
	.Column(Column.Parameter(request)).Column(Column.Parameter(currentUserContactId))
	.Column(Column.Parameter(currentUserContactId))
	.Column("KtSimManagementInitialPoolNumbers", "KtIccid")
	.Column("KtSimManagementInitialPoolNumbers", "KtImsi")
	.Column("KtSimManagementInitialPoolNumbers", "KtMsisdn")
	.Column("KtSimManagementInitialPoolNumbers", "KtName")
	.Column(Column.Parameter(cityAndCountNumbersEntity.GetTypedColumnValue<Guid>(city.Name)))
	.Column(Column.Parameter(cityAndCountNumbersEntity.GetTypedColumnValue<string>(note.Name)))
	.Column(Column.Parameter(DateTime.UtcNow.Date))
	.Column(Column.Parameter(DateTime.UtcNow.Date
		.AddDays((int)Core.Configuration.SysSettings.GetValue(UserConnection,
			"DayCountForDedicatedPoolNumbers") + 1).AddSeconds(-1)))
	.From("KtSimManagementInitialPoolNumbers")
	.OrderByAsc("KtSimManagementInitialPoolNumbers", "KtName")
	.Join(JoinType.LeftOuter, "KtJasperFullNumberPool")
	.On("KtSimManagementInitialPoolNumbers", "KtName")
	.IsEqual("KtJasperFullNumberPool", "KtName")
	.Where("KtJasperFullNumberPool", "KtName")
	.IsNull()
	.And("KtSimManagementInitialPoolNumbers", "KtMarketCodeId")
	.IsEqual(Column.Parameter(cityForMarketCode));
InsertSelect insertSelectQuery = new InsertSelect(UserConnection)
	.Into("KtJasperFullNumberPool")
	.Set("KtRequestId", "ModifiedById", "CreatedById", "KtIccid", "KtImsi", "KtMsisdn", "KtName", "KtCityId", "KtNote", "KtReserveDate", "KtReserveToDate")
	.FromSelect(selectQuery);
int numberCountInserted = insertSelectQuery.Execute();

И все работает отлично, но на PostgreSQL, при установке на версию для Oracle ругается 

"ERROR IIS APPPOOL\CreatioCRMOracle Terrasoft.Web.Common.ServiceModel.ErrorHandler ProvideFault - Псевдоним колонки запроса не может быть пустым".

 

Что бы понятно было - конфигурации полностью одинаковые, просто dev среда на PostgreSQL а Prod на Oracle. И вот найти проблему тут уже не как не выходит

А на какое именно место в коде ругается? Если просто Select, без Insert, то тоже? Попробуйте последовательно запускать Select без разных колонок, чтобы выяснить, в какой из них дело.

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

Добрый день!

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

Спасибо!

Нравится

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

Здравствуйте! Через БП, воспользовавшись элементом раздать права. Создаёте БП со стартовым сигналом по объекту после добавления записи и раздаёт нужные права, это для новых пользователей, а для существующих через БП с простым стартом, используйте тот же элемент раздать права доступа и задаёте в нем объект о фильтры.

Здравствуйте! Через БП, воспользовавшись элементом раздать права. Создаёте БП со стартовым сигналом по объекту после добавления записи и раздаёт нужные права, это для новых пользователей, а для существующих через БП с простым стартом, используйте тот же элемент раздать права доступа и задаёте в нем объект о фильтры.

Нигрескул Алексей,

 

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

Потом еще как вариант - плокировка страницы

 

https://academy.terrasoft.ru/documents/technic-sdk/7-16/kak-polnostyu-z…

https://academy.terrasoft.ua/documents/technic-sdk/7-16/mehanizm-blokir…

 

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

Александр Тыра,

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

Александр Тыра пишет:

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

Насколько понимаю, нет, не перетрут. Пишут:

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

 А если Вы пробовали и именно затирает, пожалуйста, напишите в поддержку подробности, как воспроизвели.

 

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

Александр Тыра пишет:

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

Мы просто запрещаем пользователям менять права вручную. И автоматизируем распределение прав полностью. 

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

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

 

Подключил Zoom Meeting connector for Creatio в систему, зарегистрировал все ка кположено, но при создании активности галочка создать встречу в Zoom засерена. 

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

Нравится

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

У меня было такое когда установил на сервер у которого не было прямого доступа в интернет, и система не могла скачать списки контактов с сервера zoom, потому и не становилось доступным для редактирования

Стас, добрый день!

 

Признак Create Zoom Meeting доступен только пользователям, которые указаны на детали Zoom Account User в разделе Zoom Accounts. 

Заполнение этой детали и сопоставление с пользователями Creatio по email выполняется автоматически. Проверьте данные на детали Zoom Account User и заполните поле Contact в проимпортированном списке пользователей Zoom.

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

Установил темплейт из маркетплейса https://marketplace.terrasoft.ru/template/smena-otvetstvennogo-sotrudnika

Зашел в БП, хотел внести правки, пытаюсь открыть преднастроенную страницу и вижу вечную загрузку.

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

Версия Creatio 7.15.3.1649

Нравится

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

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

 

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

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

Приветствую, подскажите как сделать множественный выбор в LookUp?

 

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

Нравится

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

Доброго дня, имеется bpm которая при GET запросе 0/ServiceModel/EntityDataService.svc/ContactColletion возвращает xml с контактами, можно ли GET запросом возвращать JSON и если да, то где про это написанно? Если нельзя, то как вернуть JSON для oData 3?

Нравится

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

Добавьте header к запросу

Accept: application/json;odata=verbose

Добавьте header к запросу

Accept: application/json;odata=verbose

я смог сделать это в постмане, но все же не понятно, мб подскажете возможно ли в террасофте возвращать json по обращению к uri, если можно сделать это не переписывая сервис, буду благодарен за подсказку)

условно я иду по адресу /0/ServiceModel/EntityDataService.svc/ContactCollection и мне падает 

 

{

    "d": {

        "results": [

            {

                "__metadata": {

                    "id": "http://localhost:85/0/ServiceModel/EntityDataService.svc/ContactCollect…",

                    "uri": "http://localhost:85/0/ServiceModel/EntityDataService.svc/ContactCollect…",

                    "type": "Terrasoft.Configuration.Contact"

                },

                "Photo": {

                    "__deferred": {

                        "uri": "http://localhost:85/0/ServiceModel/EntityDataService.svc/ContactCollect…"

                    }

                },

                "Owner": {

                    "__deferred": {

                        "uri": "http://localhost:85/0/ServiceModel/EntityDataService.svc/ContactCollect…"

                    }

...и т.д.

Насколько понял, только заголовком. Такой формат здесь не поддерживается: «ContactCollection?$format=json». А в OData 4 по умолчанию идёт JSON.

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

А как передвинуть вкладки? Например, расположить показатели после сводной?

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

Если я нажимаю "изменить", то изменяю текущую вкладку.

Нравится

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

Алексей-Карягин,

 

Начиная с версии 7.16.2 появилась возможность для каждого пользователя выбрать, какие вкладки должны идти в начале списка (нам это немного облегчило жизнь):

 

Они расположены по алфавиту. Поэтому мы вводим в  начале названия цифру - номер для расположения

Владимир Соколов,

Жесть какая :)

Алексей-Карягин пишет: 

посмотрите видео про Roadmap 7.17. Там эту ситуацию исправляют понемногу 

Алексей-Карягин,

 

Начиная с версии 7.16.2 появилась возможность для каждого пользователя выбрать, какие вкладки должны идти в начале списка (нам это немного облегчило жизнь):

 

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

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

Добрый день!

 

Помогите разобраться.

Нужно поменять status code на 422 при ответе на вебсервис в блоке else.

 

[ServiceContract]

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

    public class ilayNewTerminalService: BaseService

    {

        [OperationContract]

        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,

        ResponseFormat = WebMessageFormat.Json)]

        public AuthorizationCodeResponse authorization_code(AuthorizationCodeRequest request) {

            var resultNew = new AuthorizationCodeResponse();

            var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Contact");

            var colId = esq.AddColumn("Name");

            var colName = esq.AddColumn("ilayMainPhine");

            var esqFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ilayMainPhine", "+" + request.phone);

            esq.Filters.Add(esqFilter);

            var entities = esq.GetEntityCollection(UserConnection);

            if (entities.Count > 0)

            {

                resultNew.debug_text = entities[0].GetColumnValue(colId.Name).ToString();

                resultNew.phone = "+" + request.phone;

            } else {

                

            }

            return resultNew;

        }

    }

 

Нравится

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

Сергей Хоменко пишет:

Через WebFaultException работает, правда нужного кода 422 нет в этом перечислении.

Тут пишут, что в старых версиях .NET такого значения не было, потом добавили, назвали «UnprocessableEntity». Как обходной вариант, предлагают вместо константы указывать «(HttpStatusCode)422».

 

По поводу тела, а разве такое вообще подходит по смыслу ошибки 422?

 

Сам сейчас на NetCore с WebInvoke бадаюсь.

Я генерирую ошибки через

WebFaultException error = new WebFaultException(HttpStatusCode.BadRequest);

throw error;

Но я там не вижу ошибки 422.

Еще в положительном иногда меняю через HttpContext.Current.Response.StatusCode = 201;

 

HttpStatusCode.UnprocessableEntity

Судя по документации https://docs.microsoft.com/ru-ru/dotnet/api/system.net.httpstatuscode?view=netcore-3.1 возвращает 422 ошибку.

Казанцев Андрей Юрьевич,

Андрей, спасибо! Через WebFaultException работает, правда нужного кода 422 нет в этом перечислении.

Ответ от сервера получаю с пустым Body. Может знаете, как при отправке такой ошибки в тело ответа объект вставить?

Сергей Хоменко пишет:

Через WebFaultException работает, правда нужного кода 422 нет в этом перечислении.

Тут пишут, что в старых версиях .NET такого значения не было, потом добавили, назвали «UnprocessableEntity». Как обходной вариант, предлагают вместо константы указывать «(HttpStatusCode)422».

 

По поводу тела, а разве такое вообще подходит по смыслу ошибки 422?

 

Зверев Александр,

В нашем API так прописали товарищи, теперь я должен ему следовать. Нашел вариант как это делать. Можно типизировать Эксепшн и в параметры вкладывать нужный объект:

throw new WebFaultException<AuthorizationCodeResponseEr>(body,HttpStatusCode.UpgradeRequired);

Александр, спасибо! Работает.

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

Добрый день.

Есть очень большой цикл который выполняется на протяжении 2-3 недель реального времени.

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

Кто-нибудь делал что то подобное например как с командой в консоле:

Terrasoft.SysSettings.postPersonalSysSettingsValue("IsDebug", true)

Нравится

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

Андрей, не вполне понятно, что вообще подразумеваете под «остановкой через кэш» и «изменением кэша через консоль» и зачем такое нужно.

 

В логике БП при помощи элемента чтения данных можно читать значения в том числе и из таблицы SysSettingsValue, отфильтровав по Id настройки и пользователя. Узнать Id настройки по коду можно из таблицы SysSettings.

 

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

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