Мобільний
додаток
Бізнес-правила
Studio_Creatio
8.0

Добрий день. 



Допоможіть, будь ласка,  його інтегрувати бізнес-правило дял мобільного додатку у сторінку. 

1. В який файл та в який модуль програми необхідно вставити код, та чи коректно він написаний



Умова:

Якщо   UsrBoolIsRppa має значення true і  UsrLkpStatus має значення або a61c3050-373e-472c-aac4-26f9a8c70e51, або fa7aeed0-6ae4-465a-b3ee-baf2288a7170.



Робити колонку UsrTextSolutionDescription  обов'язковою для заповнення. 

 

Terrasoft.sdk.Model.addBusinessRule("UsrAppNewTasks", {

    ruleType: Terrasoft.RuleTypes.Visibility,

    conditionalColumns: [

        {

            name: "UsrBoolIsRppa",

            value: true

        },

        {

            name: "UsrLkpStatus",

            value: ["a61c3050-373e-472c-aac4-26f9a8c70e51", "fa7aeed0-6ae4-465a-b3ee-baf2288a7170"]

        }

    ],

    triggeredByColumns: ["UsrBoolIsRppa", "UsrLkpStatus"],

    dependentColumnNames: ["UsrTextSolutionDescription"]

});

Нравится

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

Доброго дня!

Не впевнений, що в новому інтерфейсі мобільного застосунку вдасться створити саме таке правило, в будь-якому випадку, ось невелика інструкція по їх створенню:

На даний момент відмінність між правилами на карточці і моделі незначні. А саме відмінність полягає в тому, що у карточки є Visibility rules, які можуть показувати або ховати елементи карточки. Тому розглянемо саме цей приклад, спробуємо ховати якусь колонку за умови.

1) Налаштовуємо правила у вебі.

2) Назви контролів (“Code” та “Element code”) треба давати згідно назв колонок. Тобто, якщо колонка UsrText, то і контрол має так називатися (бо в вебі назви генеряться автоматом по замовчуванню).

3) Налаштовуємо правило, яке ховає поле UsrText.

4) Додаємо новий (або існуючий розділ) в майстрі мобільного додатку і налаштовуємо карточку належним чином.

5) Переходимо в Конфігурацію (WorkspaceExplorer) і шукаємо схему налаштування карточки (формат назви схеми: Mobile[Назва об'єкта]RecordPageSettings[Назва робочого місця]):

6) Відкриваємо цю схему. Відкриваємо її метадані (Actions → Open metadata) і дивимося її метадані (секцію Metadata (Read-Only)) і копіюємо її Uid, PackageUid та CreatedInPackageUId.

7) Експортуємо налаштовані в п.3 правила: аддон [Назва об'єкта]_FormPageBusinessRule.

8) Ці метадані треба трохи адаптувати під мобільну платформу. Відкриваємо отриманий файл метаданих і вносимо наступні правки:

а) Змінюємо Uid. Його можна або згенерувати, або просто змінити декілька цифр\символів в поточному значенні. Старий UId треба змінити по всій схемі (мінімум 2).

б) Даємо нову назву Addon-а у Name та A2. Формат буде такий: [Назва об'єкта]RecordPageSettingsBusinessRule (наприклад, RulesRecordPageSettingsBusinessRule).

в) Замінюємо всі “EntitySchemaManager” на “ClientUnitSchemaManager”, якщо такі є.

г) В B6 прописуємо PackageUId з п.6.

д) В AD1 та TargetSchemaUId прописуємо UId з п.6.

е) В A5 прописуємо CreatedInPackageUId з п.6.

є) Замінюємо всі згенеровані в вебі назви контролів на відповідні імена колонок. Шукати їх можна приблизно за такими масками: LookupAttribute_, Input_, ComboBox_.

Наприклад, замість LookupAttribute_6wy705z має бути UsrContactType.

ж) Зберігаємо зміни.

9) Імпортувати цю змінену схему. Обираємо в Конфігурації потрібний пакет, натискаємо “Add” і в списку обираємо пункт “Import“ (на даний момент він останній в списку).

В результаті в пакеті, в якому цей розділ додавався в майстрі мобільного додатка, має з'явитися Addon-схема з правилами, які прив'язані до схеми налаштування карточки в мобільному додатку.

10) Після цього треба просинхронізувати мобільний додаток з Creatio і перевірити роботу правила.

 

Показать все комментарии
Изменение
значения
колонки
в
детали
js
javascript
EntitySchemaQuery
Studio_Creatio
7.16

Добрый день, как можно 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,

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

Показать все комментарии
установка
значений
колонок
через
ESQ
на
клиентской
части
Studio_Creatio
7.16

Добрый день, есть такая задача:

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

Я реализовала кнопку у детали "Документы по заказу", при нажатии на которую, обновляется значение определенной колонки у этой детали и должно обновляться значение определенной колонки (имя колонки прописано в коде, пусть будет "NameColumn") в детали "Позиции заказа".

Вопрос: Как обновить значение колонки (какой-либо) в первой детали "позиции заказа"? 

Пыталась сделать это так:

Колонка в детали "Документы по заказу" обновляется через UpdateQuery, нашла инструкцию в документации.

С обновлением колонок детали в первой вкладке наткнулась на трудность. 

Я пыталась сделать коллекцию через esq по позициям заказа. Устанавливаю значение через инструкцию this.set("NameColumn",value);

Однако это не работает. Подскажите, пожалуйста, как правильно в такой ситуации заполнить значение колонки? И возможно ли так вообще сделать?

Нравится

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

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

 

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

var value = this.get('UsrChange') – новое значение, которое вы хотите записать в необходимую колонку;

updateQuery.setParameterValue("Name", value, this.Terrasoft.DataValueType.TEXT) – в значение "Name" ("Notes" во втором запросе) подставьте название поля из объекта, в которое хотите записать изменения;

Удостоверьтесь, что вы добавили в дизайнере нужные поля на страницу. "detailColumn" - “Where detail column”, "masterColumn" - “Equals to page column”, "entitySchemaName"  - “Detail”.

 

...
details: /**SCHEMA_DETAILS*/{"UsrTabSecond": {
        "schemaName": "OpportunityHistoryActivityDetail",
        "entitySchemaName": "Activity",
        "filter": {
        "detailColumn": "Priority",
        "masterColumn": "UsrLookup2"
        }
    },
    "UsrTabFirst": {
        "schemaName": "AccountContactsDetailV2",
        "entitySchemaName": "Contact",
        "filter": {
        "detailColumn": "Job",
        "masterColumn": "UsrLookup1"
        }
    }
}/**SCHEMA_DETAILS*/,
    businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
        methods: {
             onMyButtonClick: function() {
                   var value = this.get('UsrChange');
                   var IdValue = this.get('UsrLookup1');
                   var updateQuery = Ext.create("Terrasoft.UpdateQuery", {
                       rootSchemaName: "Contact"});
                   var filters = updateQuery.filters;
                   filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
                       this.Terrasoft.ComparisonType.EQUAL, "Job", IdValue));
                   updateQuery.setParameterValue("Name", value, this.Terrasoft.DataValueType.TEXT);
                   updateQuery.execute(function(result){
                       if(result.success) this.updateDetail({detail: "UsrTabFirst"});}, this);                                 
                                                          
                   var value1 = this.get('UsrChange');
                   var IdValue1 = this.get('UsrLookup2');
                   var updateQuery1 = Ext.create("Terrasoft.UpdateQuery", {
                       rootSchemaName: "Activity"});
                   var filters1 = updateQuery1.filters;
                   filters1.addItem(this.Terrasoft.createColumnFilterWithParameter(
                       this.Terrasoft.ComparisonType.EQUAL, "Priority", IdValue1));
                   updateQuery1.setParameterValue("Notes", value1, this.Terrasoft.DataValueType.TEXT);
                   updateQuery1.execute(function(result){
                       if(result.success) this.updateDetail({detail: "UsrTabSecond"});}, this);
        }
},
...

 

С уважением,

Ангелина

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

 

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

var value = this.get('UsrChange') – новое значение, которое вы хотите записать в необходимую колонку;

updateQuery.setParameterValue("Name", value, this.Terrasoft.DataValueType.TEXT) – в значение "Name" ("Notes" во втором запросе) подставьте название поля из объекта, в которое хотите записать изменения;

Удостоверьтесь, что вы добавили в дизайнере нужные поля на страницу. "detailColumn" - “Where detail column”, "masterColumn" - “Equals to page column”, "entitySchemaName"  - “Detail”.

 

...
details: /**SCHEMA_DETAILS*/{"UsrTabSecond": {
        "schemaName": "OpportunityHistoryActivityDetail",
        "entitySchemaName": "Activity",
        "filter": {
        "detailColumn": "Priority",
        "masterColumn": "UsrLookup2"
        }
    },
    "UsrTabFirst": {
        "schemaName": "AccountContactsDetailV2",
        "entitySchemaName": "Contact",
        "filter": {
        "detailColumn": "Job",
        "masterColumn": "UsrLookup1"
        }
    }
}/**SCHEMA_DETAILS*/,
    businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
        methods: {
             onMyButtonClick: function() {
                   var value = this.get('UsrChange');
                   var IdValue = this.get('UsrLookup1');
                   var updateQuery = Ext.create("Terrasoft.UpdateQuery", {
                       rootSchemaName: "Contact"});
                   var filters = updateQuery.filters;
                   filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
                       this.Terrasoft.ComparisonType.EQUAL, "Job", IdValue));
                   updateQuery.setParameterValue("Name", value, this.Terrasoft.DataValueType.TEXT);
                   updateQuery.execute(function(result){
                       if(result.success) this.updateDetail({detail: "UsrTabFirst"});}, this);                                 
                                                          
                   var value1 = this.get('UsrChange');
                   var IdValue1 = this.get('UsrLookup2');
                   var updateQuery1 = Ext.create("Terrasoft.UpdateQuery", {
                       rootSchemaName: "Activity"});
                   var filters1 = updateQuery1.filters;
                   filters1.addItem(this.Terrasoft.createColumnFilterWithParameter(
                       this.Terrasoft.ComparisonType.EQUAL, "Priority", IdValue1));
                   updateQuery1.setParameterValue("Notes", value1, this.Terrasoft.DataValueType.TEXT);
                   updateQuery1.execute(function(result){
                       if(result.success) this.updateDetail({detail: "UsrTabSecond"});}, this);
        }
},
...

 

С уважением,

Ангелина

Anhelina, 

большое спасибо за помощь!

Показать все комментарии
#LDAP_#авторизация_#Технические_вопросы
Studio_Creatio
#7.18

Проблема заключается в том что мы отзеркалили Систему на другой домен. и со второго домена не получается зайти через LDAP

Нравится

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

Добрый день,

 

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



С уважением, 

Мария

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

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

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

 

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



Например, есть действие в разделе "Обновить доступность" и это действие, должно быть доступно только если выбранная конкретная группа.

Нравится

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

Добрый день!

В коде вы можете прописать this.$CurrentFolder, что покажет в какой группе вы сейчас находитесь. Если группа не выбрана, то строка вернёт null. 

Добрый день!

В коде вы можете прописать this.$CurrentFolder, что покажет в какой группе вы сейчас находитесь. Если группа не выбрана, то строка вернёт null. 

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

Добрый день.

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

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

Нравится

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

Добрый день, Нафиса!

 

Проверку можно выполнить в методе init необходмой Вам [Name]SectionV2 схемы. Далее в методе loadGridData написать проверку (true/false) и сделать замещение, переписав esq, в зависимости от результата.

Так же есть второй вариант: в gridDataLoad запускается метод addItemsToGridData, возвращает коллекцию записей, которые хочет загрузить система в реестр. addItemsToGridData добавляет записи в коллекцию записей реестра при загрузке реестра и непосредственно добавляет в колекцию gridData результат. По аналогии в dataCollection.eachKey вставить необходимые Вам данные.

 

Прилагаю статью с описанием методов: https://academy.creatio.com/docs/7-16/developer/interface_elements/deta…

 

С уважением,

Ангелина

Добрый день, Нафиса!

 

Проверку можно выполнить в методе init необходмой Вам [Name]SectionV2 схемы. Далее в методе loadGridData написать проверку (true/false) и сделать замещение, переписав esq, в зависимости от результата.

Так же есть второй вариант: в gridDataLoad запускается метод addItemsToGridData, возвращает коллекцию записей, которые хочет загрузить система в реестр. addItemsToGridData добавляет записи в коллекцию записей реестра при загрузке реестра и непосредственно добавляет в колекцию gridData результат. По аналогии в dataCollection.eachKey вставить необходимые Вам данные.

 

Прилагаю статью с описанием методов: https://academy.creatio.com/docs/7-16/developer/interface_elements/deta…

 

С уважением,

Ангелина

Показать все комментарии
сповіщення
Studio_Creatio
8.0

Підкажіть будь-ласка, як налаштувати сповіщення відповідального по контактах при будь-якій зміні іншим співробітником?

Нравится

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

Доброго дня

В клієнта на продуктивному середовищі в один і той же час створилися дві Заявки під з одним номером, типи продуктів - різні. У зв'язку з чим виникла дана помилка? Як виправити? 

Нравится

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

Доброго дня,

 

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

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

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

на данный момент мы добавили вывод поля ввода и кнопки, но непонятно как вывести деталь с колонкой сообщения и даты отправки

 

Нравится

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

Добрый день!

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

Если у вас деталь имеет привязку, например, к контакту, то можете настроить деталь в мастере раздела и привязать СontactId детали с ContactId записи нового сообщения, деталь добавить сможете по инструкции:

https://academy.creatio.com/docs/user/customization_tools/ui_and_busine…

Показать все комментарии
Обмеження
доступу
Studio_Creatio
8.0

Добрий день.

Використовую майстер розділів.

При натисканні на кнопку "Додати" відкриваються записи довідника процесів. До кожного запису у довіднику прикріплена окрема сторінка редагування. 

Допоможіть налаштувати доступи, так щоб, користувач порталу при натисканні "Додати" бачив не усі записи довідника, а лише вибрані

Нравится

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

Добрий день!



На жаль, на даний момент у базовій версії системи немає можливості користувацькими засобами створити правило фільтрації за умовою.

Для реалізації вашої задачі ви можете підключити засоби розробки.

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