Добрий день. 



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

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 і перевірити роботу правила.

 

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

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

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

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

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

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

Я реализовала кнопку у детали "Документы по заказу", при нажатии на которую, обновляется значение определенной колонки у этой детали и должно обновляться значение определенной колонки (имя колонки прописано в коде, пусть будет "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

Нравится

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…

 

С уважением,

Ангелина

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

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

Нравится

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

Доброго дня

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

Нравится

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

Доброго дня,

 

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

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

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

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

 

Нравится

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

Добрый день!

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

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

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

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

Добрий день.

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

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

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

Нравится

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

Добрий день!



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

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

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