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

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

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

Нравится

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

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

 

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

 

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

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

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

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

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

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

 

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

 

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

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

Добрый день! Создал по инструкции веб-сервис, опубликовал его на проде, так же по той же инструкции тех. поддержка Terrasoft зарегистрировала мне этот анонимный веб-сервис, т.к. прод находится в облаке. После отправки запроса на сервис, заметил, что параметры, которые я передаю в итоге оказываются пустыми (в случае, если передаю Guid, то в сервисе обрабатывается пустой Guid, если передаю строку, то обрабатывается пустая строка)

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

Код сервиса:

 

namespace Terrasoft.Configuration.UsrUnsubscribeFromNewslettersService
{
	using System;
	using System.IO;
	using System.Net;
	using System.Collections.Generic;
	using System.ServiceModel;
	using System.ServiceModel.Web;
	using System.ServiceModel.Activation;
	using Terrasoft.Web.Common;
	using Terrasoft.Common;
	using Terrasoft.Core.Entities; 
	using Terrasoft.Core;
	using Terrasoft.Core.Process;
	using Terrasoft.Core.Process.Configuration;
	using Newtonsoft.Json;
 
	[ServiceContract]
	[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
	public class UsrUnsubscribeFromNewslettersService: BaseService
	{
		private SystemUserConnection _systemUserConnection;
        private SystemUserConnection SystemUserConnection {
            get {
                return _systemUserConnection ?? (_systemUserConnection = (SystemUserConnection)AppConnection.SystemUserConnection);
            }
        }
		[OperationContract]
		[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
		ResponseFormat = WebMessageFormat.Json)]
		public UnsubscribeRequest UnsubscribeFromNewsletters(UnsubscribeRequest request){
            SessionHelper.SpecifyWebOperationIdentity(HttpContextAccessor.GetInstance(), SystemUserConnection.CurrentUser);
			ProcessSchema schema = SystemUserConnection.ProcessSchemaManager.GetInstanceByName("UsrUnsubscribeUserFromNewsletters");
 
			var flowEngine = new FlowEngine(SystemUserConnection);
			var param = new Dictionary<string, object>();
			param["ContactId"] = request.ContactId;
			param["NewslettersId"] = request.NewslettersId;
			flowEngine.RunProcess(schema, param);
			return request;
		}
 
	}
	public class UnsubscribeRequest {
		public Guid ContactId {get; set;}
		public Guid NewslettersId {get; set;}
	}
}

Если переделать POST на GET, то сервис работает.

Нравится

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

Сергей, при регистрации в системе веб-сервиса он должен так же само работать, как и вне сайта 7.Х.

Попробуйте создать в Visual Studio отдельный проект и создать аналогичный сервис в нём.

Если там будет такая же ошибка, в Visual Studio можно будет произвести отладку.

Возможно, Вы неправильно оформили метод и параметры.



Также обратите внимание на тему с похожими симптомами:

https://stackoverflow.com/questions/6835872/wcf-rest-post-of-json-parameter-is-empty

 

Сергей, при регистрации в системе веб-сервиса он должен так же само работать, как и вне сайта 7.Х.

Попробуйте создать в Visual Studio отдельный проект и создать аналогичный сервис в нём.

Если там будет такая же ошибка, в Visual Studio можно будет произвести отладку.

Возможно, Вы неправильно оформили метод и параметры.



Также обратите внимание на тему с похожими симптомами:

https://stackoverflow.com/questions/6835872/wcf-rest-post-of-json-parameter-is-empty

 

Спасибо за ответ, проблема была в том, что для класса UnsubscribeRequest и пропертей внутри него не были добавлены атрибуты DataContract и DataMember соответственно

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

Коллеги подскажите пожалуйста.

Где найти информацию по web сервису GeneratedObjectWebFormService?

Нравится

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

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

Спасибо, Я понял в конфигурации Sales этого сервиса нет. Александр я правильно понял, что он предназначен для приема данных с посадочных страниц отправленных web-формой лендинга?

Яблонский пишет:

Спасибо, Я понял в конфигурации Sales этого сервиса нет.

Не совсем. Попробуйте его вывести, как упомянуто в той же статье:

Для работы с лендингами в Creatio предусмотрен раздел [Лендинги и web-формы]. Этот раздел входит во все продукты Creatio, однако он может быть не включен по умолчанию в рабочие места некоторых продуктов (например, данный раздел не включен в рабочие места линейки продуктов Sales Creatio).

 

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

Коллеги, добрый день

Вопрос по событиям сайта. На сайте Заказчика, в ЛК хранятся контакты с персональными данными. Стоит задача импорта контактов в Creatio, и после импорта дополнительно с перс. данными у контактов должны отражаться события сайта. Подскажите, пожалуйста, какой набор данных требуется для принудительного отображения событий сайта в карточке Контакта без создания лида/обращения? И есть ли такая возможность?

Нравится

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

что подразумевается под "событиями сайта" ?

 

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

События сайта на вкладке [История] страницы связанного с лидом контакта

chapter_tracking_website_events_example.png

Юрий, из коробки события доступны для лидов. Деталь события сайта будет синхронизировать данные, только если в системе есть лид с таким BpmSessionId, как событие в облаке. Трекинг к контакту не привязывается, а привязывается к лиду. Инструкции по доработке у нас нет.

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

Спасибо

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

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



При скрытии поля механизмом бизнес-правил (условие на отображение) в карточке контрагента в левом контейнере (ProfileContainer) остаются пустые строки - http://joxi.ru/l2ZK46BtEgkNDA



Пробовал через css - сработало только для центрального блока (которые внутри вкладок на карточке). Свойство collapseEmptyRow выставленное у контейнера также не помогло.



Есть ли способ решить данную проблему?



Спасибо

Нравится

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

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

 

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

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

 

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

Мотков Илья,



Спасибо за ваш ответ. Надеюсь решение данной проблемы войдет в список изменений следующего релиза.

Идею зарегистрировали в апреле 2019 году. в августе 2020 напоминали про неё. На носу уже 2022 год, версия системы 7.18.5, а воз и ныне там....

Придумал для себя обходное решение. Мне надо было на страницу обращения добавить новые поля. Причем видные только при определенном сервисе. Естественно при скрытии полей оставалось пустое место. Тогда я решил спраятать эти поля в отдельный контейнер.

получилось так:

Контейнер_для_множества_полей_на_CardContentContainer
	Контейнер_для_поля1_ на_Контейнер_для_множества_полей
		Поле1_на_Контейнер_для_поля1
	Контейнер_для_поля2_ на_Контейнер_для_множества_полей
		Поле2_на_Контейнер_для_поля2

Потом создал бизнес-правила для Поля1 и Поля2. Сохранил, зашел в код страницы и заменил в секции businessRules Поле1 и Поле2 на Контейнер_для_поля1 и Контейнер_для_поля2 соответсвенно. + еще есть общее бизнес правило для Контейнер_для_множества полей, которое скрывает контейнер со страницу, когда поля совсем не нужны.

понимаю, что мое решение не для всех случае подойдет, но все же лучше чем ничего).

Очень надеюсь, что в версии 8.1. (именно 1, а не 8.0 - на неё уже нет надеджды) мы сможем это все делать на заявленном и распиареном LowCodeNoCode.

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

Приветствую! 



Недавно занялся изучением и работой с платформой Creatio. По тому по коду прошу не ругать ;) 

 

Задача популярная: выбрать из таблицы записи по фильтру, посчитать кол-во совпадений и сравнить с системной настройкой. 

Код реализации с getEntity:

var message;
 
var recordId = this.get("Id");
 
if(recordId) {
		var esq1 = this.Ext.create("Terrasoft.EntitySchemaQuery", {
						rootSchemaName: "UsrSwimmProgramm"
		});
 
		var filterA = esq1.createColumnFilterWithParameter(
					Terrasoft.ComparisonType.EQUAL, "UsrSPBooleanActive" , 1);
		var filterP = esq1.createColumnFilterWithParameter(
					Terrasoft.ComparisonType.EQUAL, "UsrSPLookupPeriod.Name" , "Ежедневно");
		esq1.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
		esq1.filters.add("filterA",filterA);
		esq1.filters.add("filterP",filterP);
 
		esq1.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, 
						"NumberDayLesson", Terrasoft.AggregationEvalType.ALL);
 
 
				esq1.getEntity(recordId, function(result) {
					if (!result.success) {
						this.showInformationDialog("Ошибка запроса");
						return;
					}
					message = result.entity.get("NumberDayLesson") + "\n";
				this.showInformationDialog(message);
				}, this);
 
				}

Код реализации с getEntityCollection:

var message;
var recordId = this.get("Id");
 
if(recordId) {
			var esq1 = this.Ext.create("Terrasoft.EntitySchemaQuery", {
						rootSchemaName: "UsrSwimmProgramm"
				});
 
				var filterA = esq1.createColumnFilterWithParameter(
					Terrasoft.ComparisonType.EQUAL, "UsrSPBooleanActive" , 1);
				var filterP = esq1.createColumnFilterWithParameter(
					Terrasoft.ComparisonType.EQUAL, "UsrSPLookupPeriod.Name" , "Ежедневно");
				esq1.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
				esq1.filters.add("filterA",filterA);
				esq1.filters.add("filterP",filterP);
 
				esq1.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, 
						"NumberDayLesson", Terrasoft.AggregationEvalType.ALL);
 
				esq1.getEntityCollection( function(result){
					message = result.collection.getByIndex(0).get("NumberDayLesson");
					this.showInformationDialog(message);
				},this);
 
	}



 

Так вот, почему при всех равных метод getEntity выдает не определенной значение, а вот с getEntityCollection все работает норм ? 

 

 

Нравится

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

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

 

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

И в Вашем случае этот метод не срабатывает, потому что в заданном наборе данных не находит запись по этому recordId. Фактически, при использовании этого метода Вы добавляете ещё один фильтр по полю Id записи.

 

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

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

 

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

И в Вашем случае этот метод не срабатывает, потому что в заданном наборе данных не находит запись по этому recordId. Фактически, при использовании этого метода Вы добавляете ещё один фильтр по полю Id записи.

 

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

Спасибо большое, Алла. Уже смотрю.

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

Добрый день. Столкнулись с проблемой - после обновления с 7.13 на 7.16.2 появилось предупреждение при компиляции

Изображение удалено.Также не получается удалить расширение (еще со времен 7.13). Выдается ошибка при удалении "невозможно удалить".

Нравится

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

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

 

На скриншоте в сообщении отображается название кастомной схемы.

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

Если Вы хотите удалить это расширение, а система выдает сообщение о том, что это невозможно, то нужно проверить: 1) нет ли в конфигурации схем, которые унаследованы от схем пакета с расширением, в других пакетах;

2) нет ли других кастомных пакетов, которые зависят от пакета расширения.

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

Во втором зависимость от данного пакета у другого пакета.

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

Сергей, добрый день!

 

передала информацию о появившемся сообщении ответственной команде.

 

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

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

Обновление не помогло. Ошибка осталась. Связанных пакетов нет. Зависимостей не наблюдаю.

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

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

Сергей, добрый день!

 

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

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

Получилось ли реализовать исправление?

Сергей, добрый день!

 

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

 

Как только получу обновления по решению, дополнительно уведомлю.

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

Я так понимаю поддержка приложения прекращена? После обновления на 7.17.2 предупреждений стало еще больше а проблемы, озвученные ранее, не решились

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

Извините за причиненные неудобства.

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

Добрый день!

 

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

Нужно поменять 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);

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

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

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

Установил приложение из маркетплейса Multiple choice field setup for Creatio

https://marketplace.terrasoft.ru/app/multiple-choice-field-setup-creatio

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

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

Как при смене таба подгружать отображение значений данного поля ?

Нравится

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

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

 

уточните, пожалуйста, продукт и версию Creatio. И сориентируйте пожалуйста по кейсу: отображение сбрасывается ранее сохраненных значений поля или только добавленных значений и еще не сохраненных?

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

 sales creatio enterprise edition cloud 7.16.2.1600

Поле отображено в группе полей во вкладке JobTabContainer

{
                "operation": "insert",
                "name": "CallTabGroupFunctionalPractice",
                "values": {
                    "itemType": 15,
                    "markerValue": "added-group",
                    "items": []
                },
                "parentName": "JobTabContainer",
                "propertyName": "items",
                "index": 1
            },
            {
                "operation": "insert",
                "name": "FunctionalPracticeTabs",
                "values": {
                    "itemType": 0,
                    "items": []
                },
                "parentName": "CallTabGroupFunctionalPractice",
                "propertyName": "items",
                "index": 0
            },
Само поле
{
            "operation": "insert",
            "parentName": "FunctionalPracticeTabs",
            "propertyName": "items",
            "name": "ContactAndFunctionalPractice",
            "values": {
                        "className": "Terrasoft.MultiChoiceCombobox",
                        "bindTo": "ContactAndFunctionalPractice",
                        "dataValueType": Terrasoft.DataValueType.ENUM,
                        "layout": {
                            "colSpan": 18,
                            "rowSpan": 1,
                            "column": 0,
                            "row": 1
                        },
                        "labelConfig": {
                        "caption":{
                            "bindTo": "Resources.Strings.FunctionalPracticeCaption"
                        }
                    }
                }
            },



Кейс:

1)В случае если parentName не Header.



- Заходим страницу редактирования ->переключаем таб-> Ранее установленные значения не отобразились (Хотя в атрибуте они есть)

- Переключаем табы->Ранее установленные значения не отобразились (Хотя в атрибуте они есть)



2)В случае если parentName = Header и так же есть такое же поле на тот же атрибут но с другим названием.



пример:

{
            "operation": "insert",
            "parentName": "FunctionalPracticeTabs",
            "propertyName": "items",
            "name": "ContactAndFunctionalPractice",
            "values": {
                        "className": "Terrasoft.MultiChoiceCombobox",
                        "bindTo": "ContactAndFunctionalPractice",
                        "dataValueType": Terrasoft.DataValueType.ENUM,
                        "layout": {
                            "colSpan": 18,
                            "rowSpan": 1,
                            "column": 0,
                            "row": 1
                        },
                        "labelConfig": {
                        "caption":{
                            "bindTo": "Resources.Strings.FunctionalPracticeCaption"
                        }
                    }
                }
            },
            {
            "operation": "insert",
            "parentName": "Header",
            "propertyName": "items",
            "name": "ContactAndFunctionalPracticeHeader",
            "values": {
                        "visible": {
                            "bindTo": "HidingAdditionalColumn"
                        },
                        "className": "Terrasoft.MultiChoiceCombobox",
                        "bindTo": "ContactAndFunctionalPractice",
                        "dataValueType": Terrasoft.DataValueType.ENUM,
                        "layout": {"column": 0, "row": 5},
                        "labelConfig": {
                            "caption":{
                                "bindTo": "Resources.Strings.FunctionalPracticeCaption"
                            }
                    }
                }





-- Заходим страницу редактирования ->Ранее установленные значения отобразились->Переключаем на нужную вкладку ->в ней так же Ранее установленные значения  отобразились ->переключаем  на любую вкладку и возвращаемся обратно ->Ранее установленные значения на вкладке не отобразились (А в поле на Header они остались)



На добавление, удаление итд отображение и функционал работает штатно

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

В случае если поле одно и 

parentName = Header  то весь функционал работает корректно, но заказчика это не устроит.



Все это происходит на замещающей ContactPageV2

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

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

Удалось воспроизвести ?

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

 

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

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

 

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

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

 

https://yadi.sk/d/GMI8yJxthi2XbA

Дмитрий, спасибо!

 

Передала схему ответственной команде.

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

 

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

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

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

 

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

Нравится

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

Поясните пожалуйста где находятся подписки?

Кисловский Михаил Андреевич,

вызывают из схемы детали "Schema5Detail", передают в схему открываемой страницы "...1Page"

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

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