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

Возник вопрос - можно ли использовать кастомные параметры в url с целью заполнения эти данными определенные поля формы ?

Пример - у нас есть запись типа контакт. На форме контакта мы нажимаем кнопку "Создать звонок" и у нас открывается форма создания звонка с предзаполненным лукапом контакта. При этом запись еще фактически не сохранена в бд. В некоторых CRM это реализуемо следующим образом:

1. В обработчике кнопки "Создать звонок", в урл, который отвечает за открытие формы записи, мы добавляем хвост вида "?contact=x&phone=yyy"

2. В самой форме звонка, на методе, который отвечает за то, что форма загружен, мы смотрим урл и уже по самописному алгоритму заполняем поля.

Нравится

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

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

 

Настроить данную логику можно с помощью функционала Бизнес Правил.

Больше об этом вы можете узнать в этой статье на Академии.

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

Добрый день, как можно c помощью entitySchemaQuery изменить значение колонки в детали на странице.

Есть страница, и на ней две детали в разных вкладках. Одна деталь - "позиции заказа", другая "Документы по заказу". В деталь "документы по заказу" добавила кнопку, при нажатии на которую, происходит update значения выбранной колонки(сделала через updateQuery по инструкции из документации). В этом же методе с помощью entitySchemaQuery создаю коллекцию с корневой схемой "позиции заказа". При обработке этой коллекции я пытаюсь поменять значение колонки с помощью инструкции this.set("NameColumn",value);

Однако это не работает, и значение колонки не меняется. 

Подскажите, пожалуйста, что я делаю не так и можно ли изменить значение колонки в детали через front-end?

Нравится

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

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

 

Метод this.set("NameColumn",value) лучше заменить на обновление поля с помощью колл-бэк функции. Ниже представлен метод:

methodName: function() {
	var updateQuery = Ext.create("Terrasoft.UpdateQuery", {
	rootSchemaName: "YourSchemaName"});
	var filters = updateQuery.filters;
	filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
	  this.Terrasoft.ComparisonType.EQUAL, "YourDetailColumnName", "YourColumnNameFromPageDesigner",));
	updateQuery.setParameterValue("YourColumnNameToUpdate",
"ValueToWriteInUpdate", this.Terrasoft.DataValueType.TEXT);
	updateQuery.execute(function(result){ 
	if(result.success) this.updateDetail({detail: "YourDetailCodeName"});}, this);  
}

Более подробное описание вы можете найти тут: https://community.terrasoft.ua/questions/ustanovka-znacheniy-kolonok-cherez-esq-na-klientskoy-chasti#comment-88853

 

С уважением,

Ангелина!

Добрый день,

Пожалуйста, предоставьте пример entitySchemaQuery, который вы настраиваете.

Viktoriia Hrynchuk,

Ниже код метода, который вызывается при нажатии кнопки. С таким подходом ошибок не возникает, но и значение StatusComponentOrder не проставляется. При отладке коллекция формируется. 

setStatusDetail:function()
{
    /* Получает массив идентификаторов выбранных записей. */
                var selectedRows = this.get("SelectedRows");
                /* Обработка запускается в случае, если выбрана хотя бы одна запись. */
                if (selectedRows.length > 0) {
                    /* Создает экземпляр класса пакетных запросов. */
                    var batchQuery = this.Ext.create("Terrasoft.BatchQuery");
                    /* Обновляет каждую из выбранных записей. */
                    selectedRows.forEach(function(selectedRowId) {
                        /* Создает экземпляр класса UpdateQuery с корневой схемой Activity. */
                        var update = this.Ext.create("Terrasoft.UpdateQuery", {
                            rootSchemaName: "DocumentComponent" // DocumentComponent - схема отвечающая за документы по заказу 
                        });
            //Далее я пытаюсь создать ещё одну коллекцию, на основе другой схемы и получить по связям колонку, которую также необходимо обновить, но уже в другой детали.
            var esq = this.Ext.create("Terrasoft.EntitySchemaQuery",{
                rootSchemaName: "OrderPosition"
            });
            esq.addColumn("StatusComponentOrder","StatusComponent");
            esq.addColumn("RowDocumentComponent.DocumentId","DocMoving"); 
            esq.esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
            "RowDocumentComponent.DocumentId", selectedRowId);
            esq.filters.add("esqFirstFilter",esqFirstFilter);
                esq.getEntityCollection(function(result)
            {
                if(result.success)
                {
                    result.collection.each(function(item)
                    {
                        this.set("StatusComponentOrder",ConstantJS.StatusComponent);
                    }
                    
                )}
            },this);
 
                        /* Применяет фильтр для определения записи для обновления. */
                        update.enablePrimaryColumnFilter(selectedRowId);
                        /* Для колонки [Status] устанавливается значение из файла с константами */
                        update.setParameterValue("Status", "ConstantJS.DocShipped", this.Terrasoft.DataValueType.GUID);
                        /* Добавляет запрос на обновление записи в пакетный запрос. */
                        batchQuery.add(update);
                    }, this);
                    /* Выполняет пакетный запрос к серверу. */
                    batchQuery.execute(function() {
                        /* Обновляет реестр. */
                        this.reloadGridData();
                    }, this);
                }

}

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

 

Метод this.set("NameColumn",value) лучше заменить на обновление поля с помощью колл-бэк функции. Ниже представлен метод:

methodName: function() {
	var updateQuery = Ext.create("Terrasoft.UpdateQuery", {
	rootSchemaName: "YourSchemaName"});
	var filters = updateQuery.filters;
	filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
	  this.Terrasoft.ComparisonType.EQUAL, "YourDetailColumnName", "YourColumnNameFromPageDesigner",));
	updateQuery.setParameterValue("YourColumnNameToUpdate",
"ValueToWriteInUpdate", this.Terrasoft.DataValueType.TEXT);
	updateQuery.execute(function(result){ 
	if(result.success) this.updateDetail({detail: "YourDetailCodeName"});}, this);  
}

Более подробное описание вы можете найти тут: https://community.terrasoft.ua/questions/ustanovka-znacheniy-kolonok-cherez-esq-na-klientskoy-chasti#comment-88853

 

С уважением,

Ангелина!

Anhelina,

спасибо за помощь! Помогло)

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

Необходимо изменить цвет подсказки к кнопке (поле hint)

{
	"operation": "insert",
	"name": "clipboardButton",
	"parentName": "CodeContainer",
	"propertyName": "items",
	"values":{
		"itemType": Terrasoft.ViewItemType.BUTTON,
		"click":{
			bindTo: "clipboardClick"
		},
		"visible":{
			bindTo: "HasCode"
		},
		"imageConfig": {
			"bindTo": "Resources.Images.CopyButton"
		},
		"hint": { 
			"bindTo": "Resources.Strings.CopyButtonTooltip",	
		},
	},
	bindTo: "clipboardButtonElement"
}

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



 

"hint": {
            "style": Terrasoft.controls.TipEnums.style.BLUE,
 
            "bindTo": "Resources.Strings.CopyButtonTooltip",    
 
        },

 

Нравится

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

я бы попробовал создать css файл с кастомным стилем для hint конкретного поля и объекта

Добрый день,

 

Единственный вариант сейчас это добавить кастомный css к основной странице и изменить стили для всех подсказок:

 

1) Создать модуль с названием UsrContactCSS и следующим контентом во вкладке LESS:

.tip-content {
	color: red;
	background-color: black;
}

 

2) Подключить модуль к карточке:

 

define("ContactPageV2", ["css!UsrContactCSS"], function () {

В результате получим: 

Но такой стиль применится ко всем подсказкам на странице.

Добрый день!

Мне нужно изменить цвет самой стрелки(он сейчас зеленый).

Можно как-то добавить класс-обертку чтобы применять стили к моему классу, а не переопределять стили Terrasoft

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

Добрый день.

Хотел бы узнать, почему я не могу заместить схему ConditionalSequenceFlowPropertiesPage.



Пакет
CrtProcessDesigner добавлен в зависимости, однако в окне выбора замещаемой клиентской схемы не могу найти нужную.



p.s. Другие схемы из пакета CrtProcessDesigner для замещения достпуны

p.p.s Проверил на нескольких средах

 

Нравится

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

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

 

Проверили на базовой версии сайта:

1. Создали пакет, добавили зависимости.

2. Выбрали Replacing View Model.

3. В Parent object есть возможность выбрать схему ConditionalSequenceFlowPropertiesPage:

 

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

 

 

 



Kalymbet Anastasia,

Добрый день!

Мне нужно заместить не CampaignConditionalSequenceFlowPropertiesPage, которую вы выделили, а ConditionalSequenceFlowPropertiesPage, находящуюся в пакете CrtProcessDesigner. 

Зависимость добавлена, другие схемы из пакета можно заместить, например SequenceFlowPropertiesPage, однако нужная мне недоступна.

Способ замещения стандартный, такой же как и у вас, описанный во 2 шаге.

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

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

Нравится

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

Добрый день!

Проблема в контексте отрисовки вашей таблицы, который не видит функций родительской схемы.

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

clientsInfo += '<script>---

Дима Вовченко,

Спасибо Дима , помогло

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

Не виходить керувати видимістю елементів на сторінці редагування об'єкта.

Встановлюю для IsModelItemsEnabled значення false в методі сторінки onEntityInitialized, значення змінюється, але доступність елементів не блокується. Права обмежені, не суперадмін. Сторінка звичайна, не Freedom UI. Версія платформи 8.0.6. На сторінці схожого об'єкта все відпрацьовує, а тут ні. Пробував створювати нову сторінку з мінімумом коду - не працює.

Хтось може порадити як побороти проблему?

Нравится

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

Доброго дня!

 

Схоже, подібне питання вже обговорювалося ан форумі: https://community.terrasoft.ua/questions/redaktiruemyy-reestr-zablokiro…

 

У цьому випадку проблема пов'язана з блокуванням колонок в редагованому реєстрі. Підхід, описаний у запиті, не блокує всі поля на сторінці, включаючи ті, що пов'язані з правилами.

 

Повідомте, якщо лишаться питання, будь ласка.

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

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

мой код выглядит сейчас вот так

}/**SCHEMA_BUSINESS_RULES*/,

        methods: {

            init: function() 

            {

              this.callParent(arguments);

              this.sandbox.subscribe("NeedUpdatedGrid", this.myNameMethod, this);

            },

            myNameMethod: function(arguments) {

                if(this.get("Id") === arguments){

                    alert("все сработало");

                    this.reloadEntity();

                    var D = new Date(this.get("UsrDatetimeStart"));

                      D.setDate(D.getDate() + 31);

                      alert(D);

                }

                

            }

        }, 

Нравится

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

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

 

Представим, что есть колонка типа Date с кодом UsrCustomDate. Представим, что есть задача при открытии страницы проставлять в этой колонке (вне зависимости от текущего значения в этой колонке) дату 15.02.2022. Тогда код будет такой:

onEntityInitialized: function() {
				this.callParent(arguments);
				this.set("UsrCustomDate", new Date(2022,1,15));
			},

Все дело в конструкции new Date(2022,1,15) - она создаст объект в котором запишет дату, которую мы передали аргументом в конструктор. Если в Вашем случае это нужно делать после получения сообщения от бизнес процесса, то в сообщении можно передать необходимые параметры строкой (или несколькими строками), а потом в методе-обработчике полученного сообщения на клиенте распарсить полученное с сервера в результате БП сообщение и в конструктор Date записать нужные данные, а потом через this.set проставить их колонке типа Date.

 

С уважением,

Олег

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

или подскажите где посмотреть ивенты доступные, я искал в доке не нашел!

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

Добрый день. Может кто сталкивался с таким вопросом о применении ES6 в проекте? Думаю, что всем известно о ситуации с поддержкой браузеров новых форматов ES. То, что IE тяжело работает с ES6 и т.д., в связи с чем возникает вопрос о использовании такой штуки, как Babel, который так сказать конвертнет в поддерживаемый синтаксис.

Пытался ли кто прикрутить Babel в проекте?

Или же может есть идеи какие-то, как сделать это?

Нравится

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

Добрый день!

E11 не поддерживает стандарт ES6.

Для того чтобы код написанный с применением фич ES6 работал, выполняются следующие приемы: добавление полифилов и транспайлинг.

Полифилы имитируют классы и дополнительные методы к существующим классам (например добавляют класс Promise).

Транспайлинг - процесс преобразования кода в формате ES6 в формат ES5 (например дает поддержку таких конструкций как лямбды, импорты, экспорты и т.д.)

В ядровой части системы (которая потом собирается в all-combined) используется библиотека полифилов corejs и транспайлинг с помощью инструмента babel. Соответственно в коде для ядра могут использоваться фичи ES6. 

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

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

Добрый день! Пытаюсь реализовать маску ввода телефона при помощи jQuery и InputMask, т.к. MultiMaskEdit некорректно отрабатывает на смартфонах Android. Подключил клиентские модули с кодом библиотек. Вне Creatio данные библиотеки проверены и работают. В Creatio же получаю следующую ошибку: Uncaught TypeError: $(...).inputmask is not a function

Использую следующий код:

define("HbkNewTrustNumberPage", ["HbkjQuery","HbkInputMask"], function() {
	$(document).ready(function() {
		$("#HbkNewTrustNumberPageHbkNewTrustNumberTextEdit-el").inputmask("+\\9\\96 999999999");
	});
	return {
		entitySchemaName: "",
		attributes: {},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/



 

Нравится

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

Здраствуйте, рекомендую для реализации валидации поля воспользоваться инструкцией по ссылке:https://academy.terrasoft.ru/docs/developer/interface_elements/page/pol…

Алёна Доля,

Добрый день! Валидация и маска ввода, это немного разные вещи. Меня интересует конкретно маска ввода.

Шарафутдинов Фаиль Русланович,

Здраствуйте, в таком случае реализацию рекомендую рассмотреть через DOMNodeInserted.

Добавить метод, в котором будет указываться маска для поля, и добавить его вызов в Init, например:

    setPhoneMask: function(that) {

                            $(document).bind("DOMNodeInserted", function(e) {

                        if ( $("#HbkNewTrustNumberPageHbkNewTrustNumberTextEdit-el")) {

                        $("#HbkNewTrustNumberPageHbkNewTrustNumberTextEdit-el").on("focus", function() {

                        $("#HbkNewTrustNumberPageHbkNewTrustNumberTextEdit-el").mask("+7(999)999-99-99", { autoclear: false, placeholder: "_" });

                          });

                        $(document).unbind("DOMNodeInserted");                      

                        }

                    });

                },

 

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

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

 

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

Нравится

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

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

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