Вопрос

Как выполнить SQL запрос (чтение, запись, удаление) в базе данных On-demand?

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

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

Ответ

Импортировать схему из вложения к этой статье.

Опубликовать. Запустить. Пользоваться. 

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

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

Нравится

Поделиться

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

1. В код страницы, на которой мы будем добавлять нашу кнопку, добавляем зависимость страницы от модуля ProcessModuleUtilities. Пример:

define("ContractPageV2", ["RightUtilities","ProcessModuleUtilities"], function(RightUtilities,ProcessModuleUtilities)

2. Добавляем в блок diff[] страницы редактирования раздела следующий код:

{
    "operation": "insert",
    "name": "YourButtonName", // название нашей кнопки (используется в коде, пользователь не видит)
    "values": {
        "itemType": 5,
        "style": "green", //цвет кнопки. Выбор из наших стандартных
        "classes": {
            "textClass": ["actions-button-margin-right"], //чтобы при добавлении еще одной кнопки был отступ справа
            "wrapperClass": ["actions-button-margin-right"]
        },
        "caption": { // заголовок вашей кнопки (который отображается пользователю)
            "bindTo": "Resources.Strings.YourButtoncaptionLocalizableString"    // можно задать явно. Например, "caption": "Красивая кнопка"
        },
        "click": {
            "bindTo": "onYourButtonClick" // Название метода, который будет отрабатывать при клике на кнопку
        },
        "visible": true, //Отвечает за видимость кнопки
        "enabled": true    //для ознакомления, можно удалить. Отвечает за активность кнопки
    },
    "parentName": "LeftContainer",
    "propertyName": "items",
    "index": 10 //следующая кнопка будет иметь индекс 11 и т.д.
}

3. Добавляем в блок methods{} страницы редактирования раздела следующий код:

onYourButtonClick: function() { //название метода, указанное при добавлении кнопки
    ProcessModuleUtilities.executeProcess({
        sysProcessName: "YourProcessName", //имя вашего процесса
        parameters: {
            ParamName: this.get("Id"), //слева название параметра процесса, в который мы передаем то, что справа
        },
        callback: function(item) { //этот блок не обязательнен
            this.onReloadCard(); //перезагружает страницу после окончания БП
            this.hideBodyMask(); //не выводит заглушку загрузки на карточке
        }.bind(this)
    });
}

4. Дублируем код для кнопки из пункта 2 в блок diff[] секции раздела. Все тоже самое, кроме атрибута "click": и нового "tag" (в блоке "values"):

"click": { "bindTo": "onCardAction" },
"tag": "onYourButtonClick",             //название метода, указанное при добавлении кнопки

 

Нравится

Поделиться

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

Вопрос

Есть ли возможность создать BusinessRule, которое будет отрабатывать изменения атрибута колонки (например, обязательность) по двум колонкам? 

Ответ

Вот пример бизнес правила, которое делает поле “UsrRequired” обязательным для заполнения только в случае, если поля “UsrText0” и “UsrText1” являются не заполненными:

rules: {
    "UsrRequired": {
        BindParameterRequiredAccountByType: {
            ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
            property: BusinessRuleModule.enums.Property.REQUIRED,
            logical: Terrasoft.LogicalOperatorType.AND,
            conditions: [
                {
                    leftExpression: {
                        type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                        attribute: "UsrTest0",
                    },
                    comparisonType: Terrasoft.ComparisonType.EQUAL,
                    rightExpression: {
                        type: BusinessRuleModule.enums.ValueType.CONSTANT,
                        value: ""
                    }
                },
                {
                    leftExpression: {
                        type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                        attribute: "UsrTest1",
                    },
                    comparisonType: Terrasoft.ComparisonType.EQUAL,
                    rightExpression: {
                        type: BusinessRuleModule.enums.ValueType.CONSTANT,
                        value: ""
                    }
                }
            ]
        }
    }
},

 

Нравится

Поделиться

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

Вопрос

Как можно создать ComboBox и заполнить его программно значениями...

Ответ

Пример кода:

define("CasePage", ["CasePageResources", "terrasoft"],
    function(resources, Terrasoft) {
    return {
        entitySchemaName: "Case",
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        attributes: {
            "myEnum": {
                "dataValueType": Terrasoft.DataValueType.ENUM,
                "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                "caption": "myEnum"
            },
            "myList": {
                "dataValueType": Terrasoft.DataValueType.ENUM,
                "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                "isCollection": true
            }
        },
        diff: /**SCHEMA_DIFF*/[
            {
                "operation": "insert",
                "name": "myEnum",
                "values": {
                    "caption": "myEnum",
                    "dataValueType": this.Terrasoft.DataValueType.ENUM,
                    "bindTo": "myEnum",
                    "layout": { "colSpan": 24, "rowSpan": 1, "column": 0, "row": 4 },
                    "controlConfig": {
                        "className": "Terrasoft.ComboBoxEdit",
                        "list": {
                            "bindTo": "myList"
                        },
                        "change": {
                            "bindTo": "onMyValueChange"
                        },
                        "prepareList": {
                            "bindTo": "prepareMyList"
                        }
                    }
                },
                "parentName": "SolutionTab_gridLayout",
                "propertyName": "items",
                "index": 1
            }
        ]/**SCHEMA_DIFF*/,
        methods: {
            onPageInitialized: function(callback, scope) {
                if (!this.get("myList")) {
                    this.set("myList", this.Ext.create("Terrasoft.Collection"));
                }
 
                if (callback) {
                    callback.call(scope || this);
                }
            },
            onEntityInitialized: function() {
                this.callParent(arguments);
 
                // and just for debug:
                document.scope = this;
            },
            prepareMyList: function(filter, list) {
                if (list === null) {
                    return;
                }
                list.clear();
                var columns = {};
 
                var value1 = {
                    displayValue: "a123",
                    value: "1"
                };
                var value2 = {
                    displayValue: "b234",
                    value: "2"
                };
                var value3 = {
                    displayValue: "c345",
                    value: "3"
                };
 
                columns[1] = value1;
                columns[2] = value2;
                columns[3] = value3;
 
                list.loadAll(columns);
            },
            onMyValueChange: function(val) {
                if (val && val.displayValue) {
                    console.log("you pick: ", val.displayValue);
                }
            }
        },
        rules: {}
    };
});

 

Нравится

Поделиться

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

Вопрос

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

И где нужно писать обработку при выборе этого пункта.

Ответ

Для добавления или изменения элементов в меню "Действия" детали, Вам необходимо смотреть в сторону замещения метода addToolsButtonMenuItems в схеме детали.

Базовую реализацию данного метода, Вы можете увидеть в схеме BaseGridDetalV2(NUI).

Нравится

Поделиться

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

Вопрос

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

Ответ

Для этого необходимо переопределить метод getCreatedOnText() модуля SocialFeedUtilities. Поскольку модули в системе bpm'online расширять нельзя (можно только полностью заместить), необходимо создать замещающий клиентский модуль в пользовательском пакете, указать в качестве родительского модуля SocialFeedUtilities, полностью скопировать текст из аналогичного модуля в пакете ESN (вкладки "Исходный код" и "LESS") и заменить текст метода getCreatedOnText на такой:

getCreatedOnText: function() {
    var cultureSetting = Terrasoft.Resources.CultureSettings;
    var value = this.get("CreatedOn");
    if (value) {
        var datePart = Ext.Date.dateFormat(value, cultureSetting.dateFormat);
        var timePart = Ext.Date.dateFormat(value, cultureSetting.timeFormat);
        return Ext.String.format("{0} {2} {1}", datePart, timePart,
            FormatUtilsResources.localizableStrings.In);
        }
    return "";
}

Также необходимо в самом начале текста исходного кода добавить зависимость модуля от FormatUtilsResources, чтобы иметь доступ к локализированной строке FormatUtilsResources.localizableStrings.In модуля FormatUtils:

define("SocialFeedUtilities", ["FormatUtilsResources", "ESNFeedUtils", "ESNFeedModuleResources", 
    "FormatUtils", "ESNConstants", "NetworkUtilities", "ModalBox", "ServiceHelper", "MaskHelper", 
    "performancecountermanager", "css!SocialFeedUtilities"],
    function(FormatUtilsResources, ESNFeedUtils, resources, FormatUtils, ESNConstants, 
        NetworkUtilities, ModalBox, ServiceHelper, MaskHelper, performanceManager) {...

 

Нравится

Поделиться

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

Вопрос

Как реализовать поиск по нескольким колонкам в разделе в мобильном приложении. Например, в разделе Контакты через поле поиска искать и по фио, и по zip-коду (существующая в объекте Contact колонка) 

Ответ

- Запустить мастер мобильного приложения

- Открыть рабочее место по умолчанию («Основное рабочее место»)

- Перейти к настройкам раздела

- Нажать «Сохранить»

- Создать ClientUnit-схему

- Добавить в нее след. код:

Terrasoft.sdk.GridPage.setSearchColumns("Contact", [“Name”, “Zip”]);

- Открыть MobileApplicationManifestDefaultWorkplace в пакете Custom

- Прописать свою схему для раздела «Контакты»:

{
    “Models”: {
        “Contact”: {
            "PagesExtensions": [
                "Имя_созданной_схемы"
            ]
        }
    }
}

 

Нравится

Поделиться

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

Вопрос

Как добавить в мобильное приложение стандартную деталь и вывести в нее специфичную колонку?

Ответ

1. Переходим в "Мастер мобильного приложения" (/0/Nui/ViewModule.aspx#SectionModuleV2/SysMobileWorkplaceSection)

2. Открываем нужное рабочее местое (по умолчанию DefaultWorkplace) нажимаем кноку ##RU=Настроить разделы;EN=Set up sections##

3. Выбираем нужный раздел, например "Контакты", и нажимаем кнопку "##RU=Настроить детали;EN=Details setup##"

4. Добавляем деталь:

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

5. Переходим в раздел "Конфигурация" (/0/WorkspaceExplorerModule.aspx)

6. Добавляем новую схему типа "Module" с именем UsrContactCareerModuleConfig

7. Пишем в ней примерно такой код:

Terrasoft.sdk.GridPage.setPrimaryColumn("ContactCareer", "JobTitle");
Terrasoft.sdk.RecordPage.addColumn("ContactCareer", {
        name: "JobTitle",
        position: 1
    }, "primaryColumnSet");
Terrasoft.sdk.RecordPage.removeColumn("ContactCareer", "Contact", "primaryColumnSet");

Где ContactCareer - имя таблицы, которая соответствует нашей детали;

      JobTitle - имя колонки, которую нужно тобразить

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

8. Подключаем данную схему в манифесте мобильного приложения MobileApplicationManifestDefaultWorkplace:

Находим блок модели ContactCareer и там в PagesExtensions добавляем наш модуль UsrContactCareerModuleConfig

Примерно так:

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

 

Нравится

Поделиться

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

Вопрос

На странице редактирования активности типа email нужно включить возможность редактирования заголовка, но она в режиме disabled и мы не видим, где это можно включить.

Ответ

Для возможности редактирования заголовка для активностей типа “email”, нужно создать “замещающий клиентский модуль” и указать родительским объектом схему  “EmailPage” из пакета NUI.

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

Скопировать в созданный модуль код из схемы “EmailPage”. И закомментировать бизнес-правило отвечающее за возможность редактирования поля “Заголовок”.

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

Сохранить и опубликовать модуль. В результате поле “Заголовок” стает редактируемым.

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

 

Нравится

Поделиться

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

Вопрос

С помощью мастера разделов был создан раздел в пакете Coustom. Есть ли способ перенести схемы данного раздела в другой пользовательский пакет? (работаем на on-demand).

Ответ

В меню [Конфигурация], вкладка [Действия] Вы можете выбрать “Экспорт в файл”. После чего, на вкладке [Пакеты] выбрать интересующий пакет и выполнить действие “Импорт из файла”.

Нравится

Поделиться

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