Коллеги, подскажите, как в преднастроенной странице, которая в бизнес-процессах сделать зависимость полей?

Есть два поля "Страны" и "Города" оба поля лукапы. Как при выборе Страны фильтровать значения в поле "Города"?

 

Нравится

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

Евгений, здравствуйте!

Настройка бизнес-правил для преднастроенных страниц реализована в версии 7.12.0. Вы можете настроить бизнес - правила для добавления фильтрации по аналогии с настройкой в мастере раздела.

Для Вашей задачи правило будет выглядеть примерно следующим образом: Если - то.

Показать все комментарии
Есть атрибут: 

"Amount": {
    dataValueType: Terrasoft.DataValueType.FLOAT,
    type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
}

Поле: 

{
    "operation": "insert",
    "name": "Amount",
    "values": {
        "layout": {
            "column": 0,
            "row": 2,
            "colSpan": 12
        },
        "bindTo": "Amount"
    },
    "parentName": "FinApplicationContent",
    "propertyName": "items"
}

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

Проблема: нельзя ввести с клавиатуры никакие символы, только ctrl+v.

Примечание: Если установить contentType: Terrasoft.ContentType.TEXT - то можно ввести символы. На странице есть одноименный параметр типа "Дробное число"

Как решить проблему с вводом в данное поле? Что не так?

 

Нравится

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

скорее всего вы обнаружили "дефект", надо бы отписать о нем в ТП

Тем временем, в вашем случае,:

1) попробуйте использовать

Terrasoft.DataValueType.MONEY

в сути то же самое FLOAT (может прокатить laugh)

2) попробуйте не задавать у атрибута явно тип

Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN

 

PS: Если что-то из этого Вам поможет, отпишитесь пожалуйста что именно.



 

 

Первое помогло! Огромная вам благодарность! Все еще стоит писать об этом в ТП?

Рад что удалось помочь.

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

"Amount": {
    dataValueType: Terrasoft.DataValueType.FLOAT,
    type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    precision: 2,
    size: 18
}

говорим спасибо вот этому куску в генераторе

if (column) {
	Ext.apply(floatEdit, {
		decimalPrecision: column.precision
	});
}

В очередной раз ломаем ноги о код террасофта и его "универсальность" и идем дальше

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

Добрый вечер.
Каким образом передавать параметры из БП в преднастроенную страницу? Требуется передавать, как значение справочника, так и какие-то текстовые/логические данные.
Видео, на которое постоянно ссылаются (https://community.terrasoft.ru/img/video/lms/28/story.html) по-моему уже не является актуальным. По-крайней мере я, повторив все шаги, результата не получил. Есть ли ещё материал, тема на форуме (не нашёл) с более подробным рассмотрением данного вопроса?

Нравится

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

Добрый день!

В структуре преднастроенной страницы определяете параметры в ветке "Параметры", потом в элементе бп присваиваете им значения из парамеров процесса.

Также рекомендую ознакомиться с следующей темой http://www.community.terrasoft.ru/forum/topic/25237

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

Добрый день!

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

Сейчас показывается, что у страницы нет параметров:

http://shot.qip.ru/00SkLf-415RJco7V2/

Заранее спасибо за совет.

Нравится

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

Насколько я помню в схеме страницы, справа (где localizableStrings), есть пункт Parameters. Накидайте туда переменных, сохраните страницу и попробуйте заново добавить её в бп

Здравствуйте! Инструкция по использованию элемента и созданию страницы: https://academy.terrasoft.ru/documents/technic-sdk/7-10/sozdanie-detali…

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

В бизнес процессе вызываю преднастроенную страницу со своей логикой. Но после ее вызова в БП висит "Выполняется" на преднастроенной страницы. Как сделать чтобы преднастроенная страница считалась "Выполненной" и продолжить выполнение бизнес процесса?

Нравится

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

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

Для того, чтобы элемент [Преднастроенная страница] считался выполненным и процесс перешел к выполнению следующего элемента необходимо – в схеме страницы вызывать метод completeExecution().
Пример можно найти схеме страницы распределения лида - LeadManagementDistributionPageV2

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

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

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

БП работает корректно, но когда мы идем по ветке с преднастроенной страницей, то она не отображается в разделе активности. В журнале процессов она отображается.
Как сделать так, чтобы преднастроенные и автогенерируемые страницы отображались в разделе Активности?
При этом открытие страницы редактирования отображается в активностях корректно.

Версия 7.10.0.1742

Нравится

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

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

Базовая логика приложения - элемент "Страница редактирования" создает в системе техническую активность. Элемент "Преднастроенная страница"/"Автогененрируемая страница" активность не создает. По этой причине при выполнении этих элементов активность создана не будет.

"Демьяник Алексей" написал:Базовая логика приложения - элемент "Страница редактирования" создает в системе техническую активность. Элемент "Преднастроенная страница"/"Автогененрируемая страница" активность не создает. По этой причине при выполнении этих элементов активность создана не будет.

Нужно менять логику, конечно. А то большие проблемы с ходом БП из-за этого.

"Демьяник Алексей" написал:

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

Базовая логика приложения - элемент "Страница редактирования" создает в системе техническую активность. Элемент "Преднастроенная страница"/"Автогененрируемая страница" активность не создает. По этой причине при выполнении этих элементов активность создана не будет.


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

"Zaitova Liubov" написал:а нет никакой возможности сделать так, чтобы активность все таки появлялась?

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

"Максим Шевченко" написал:Нет, но можете не использовать преднастроенная\автогенерируемая,

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

"Владимир Соколов" написал:Да, иногда необходимо ввести дату. Или выбрать сотрудника из списка. Или ввести число. Для каждой такой страницы создавать свой раздел?

Можете сделать один универсальный, с множеством страниц редактирования. В любом случае зарегистрируем проблему, что пользователям хочется видеть служебную активность и для "преднастроенная\автогенерируемая" возможно реализуем её в следующих версиях, но технической необходимости в этом нет.

С другой стороны, вы так же можете создать обычную активность в рамках вашего БП, а открываемую "преднастроенная\автогенерируемая" страницу, привязать к ней, тогда в самой записи будет кнопка продолжения процесса:

И далее по процессу данную активность можно будет завершить. Как вариант.

Проблему зарегистрировали.

"Максим Шевченко" написал:

С другой стороны, вы так же можете создать обычную активность в рамках вашего БП, а открываемую "преднастроенная\автогенерируемая" страницу, привязать к ней, тогда в самой записи будет кнопка продолжения процесса:


а как страницу можно привязать к активности?

"Максим Шевченко" написал:В любом случае зарегистрируем проблему, что пользователям хочется видеть служебную активность

Вопрос не только в "видеть", а в том, что на этот шаг процесса никак не повесить ограничение по правам доступа. И любой может взять и заполнить данные в этой странице

"Владимир Соколов" написал:И любой может взять и заполнить данные в этой странице

В любом из вышеописанных обходных путей, будь-то с созданием активности, либо кастомного объекта, на данную активность или объект можно раздать права.
Если вопрос только в правах на использование "преднастроенная\автогенерируемая" страницы, то указывайте конкретного пользователя в "Кому отобразить страницу?".

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

Добрый день, подскажите пожалуйста как передать параметры в преднастроенную страницу в бизнеспроцессе, и как их потом прочитать дальше в БП?

Нравится

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

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

Возникла следующая проблема: создали преднастроенную страницу (добавили нужные поля и кнопки). На странице должно быть 4 LOOKUP поля и 1 TEXT. Лукап поля должны заполняться автоматически и быть недоступными для редактирования. Заполнение полей должно происходить в процессе из объекта Юр. Лиц, но не получается заполнить эти поля (не отображаются на странице).

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

Можете подсказать, как решить данную проблему?

С уважением,
Дмитрий

 

define("RefillManagerPageV2", ["CustomProcessPageV2Utilities", "ConfigurationEnums"],
        function(ProcessPageUtilities, Enums) {
                return {
                        mixins: {
                                BaseProcessViewModel: "Terrasoft.CustomProcessPageV2Utilities"
                        },
                        attributes: {
                                "Account": {
                                        dataValueType: Terrasoft.DataValueType.LOOKUP,
                                        referenceSchemaName: "Account"
                                },
                                "Category": {
                                        dataValueType: Terrasoft.DataValueType.LOOKUP,
                                        referenceSchemaName: "AccountCategory"
                                },
                                "CurrentManager": {
                                        dataValueType: Terrasoft.DataValueType.LOOKUP,
                                        referenceSchemaName: "Contact"
                                },
                                "NewManager": {
                                        dataValueType: Terrasoft.DataValueType.LOOKUP,
                                        referenceSchemaName: "Contact"
                                },
                                "RefillReason": {
                                        name: "Reason",
                                        dataValueType: Terrasoft.DataValueType.TEXT
                                }
                        },
                        methods: {
        /*                      onEntityInitialized: function() {
                                        this.callParent(arguments);
                                        var processData = this.get("ProcessData");
                                        var processParameters = processData.parameters;
                                        if (processParameters) {
                                                this.set("CurrentManager", processParameters.CurrentManager);
                                                this.set("NewManager", processParameters.NewManager);
                                                this.set("Account", processParameters.Account);
                                                this.set("Category", processParameters.Category);
                                                this.set("RefillReason", processParameters.RefillReason);
                                        }
                                },*/

                               
                                getHeader: function() {
                                        return this.get("Resources.Strings.HeaderLcz");
                                },
                                initHeaderCaption: Ext.emptyFn,
                               
                                onNextButtonClick: function() {
                                        this.acceptProcessElement("NextCode");
                                },
                                onDiscardChangesClick: function() {
                                        this.cancelProcessElement("CancelCode");
                                },
                                loadVocabulary: function(args, tag) {
                                        var column = this.getColumnByName(tag);
                                        args.schemaName = column.referenceSchemaName;
                                        this.callParent(arguments);
                                }
                        },
                        diff: /**SCHEMA_DIFF*/[
                                {
                                        "operation": "remove",
                                        "name": "CloseButton"
                                },
                                {
                                        "operation": "remove",
                                        "name": "actions"
                                },
                                {
                                        "operation": "remove",
                                        "name": "SaveButton"
                                },
                                {
                                        "operation": "remove",
                                        "name": "DelayExecutionButton"
                                },
                                {
                                        "operation": "remove",
                                        "name": "ViewOptionButton"
                                },
                                {
                                        "operation": "insert",
                                        "parentName": "LeftContainer",
                                        "propertyName": "items",
                                        "name": "SendToApproveButton",
                                        "values": {
                                                caption: { bindTo: "Resources.Strings.SendToApproveButtonCaption" },
                                                itemType: Terrasoft.ViewItemType.BUTTON,
                                                classes: {textClass: "actions-button-margin-right"},
                                                style: Terrasoft.controls.ButtonEnums.style.GREEN,
                                                click: {bindTo: "onNextButtonClick"}
                                        }
                                },
/*                              {
                                        "operation": "insert",
                                        "parentName": "LeftContainer",
                                        "propertyName": "items",
                                        "name": "NotSendToApproveButton",
                                        "values": {
                                                caption: { bindTo: "Resources.Strings.NotSendToApproveButtonCaption" },
                                                itemType: Terrasoft.ViewItemType.BUTTON,
                                                classes: {textClass: "actions-button-margin-right"},
                                                style: Terrasoft.controls.ButtonEnums.style.RED,
                                                click: {bindTo: "onDiscardChangesClick"}
                                        }
                                },*/

                                {
                                        "operation": "insert",
                                        "parentName": "Header",
                                        "propertyName": "items",
                                        "name": "CurrentManager",
                                        "values": {
                                                "caption": { "bindTo": "Resources.Strings.CurrentManagerLcz" },
                                                "contentType": Terrasoft.ContentType.LOOKUP,
                                                "bindTo": "CurrentManager",
                                                "layout": { "column": 0, "row": 2, "colSpan": 12 },
                                                "enabled": true
                                        }
                                },
                                {
                                        "operation": "insert",
                                        "parentName": "Header",
                                        "propertyName": "items",
                                        "name": "NewManager",
                                        "values": {
                                                "caption": { "bindTo": "Resources.Strings.NewManagerLcz" },
                                                "contentType": Terrasoft.ContentType.LOOKUP,
                                                "bindTo": "NewManager",
                                                "layout": { "column": 0, "row": 3, "colSpan": 12 },
                                                "enabled": true
                                        }
                                },
                                {
                                        "operation": "insert",
                                        "parentName": "Header",
                                        "propertyName": "items",
                                        "name": "Account",
                                        "values": {
                                                "caption": { "bindTo": "Resources.Strings.AccountLcz" },
                                                "contentType": Terrasoft.ContentType.LOOKUP,
                                                "bindTo": "Account",
                                                "layout": { "column": 0, "row": 0, "colSpan": 12 },
                                                "enabled": true
                                        }
                                },
                                {
                                        "operation": "insert",
                                        "parentName": "Header",
                                        "propertyName": "items",
                                        "name": "Category",
                                        "values": {
                                                "caption": { "bindTo": "Resources.Strings.CategoryLcz" },
                                                "contentType": Terrasoft.ContentType.LOOKUP,
                                                "bindTo": "Category",
                                                "layout": { "column": 0, "row": 1, "colSpan": 12 },
                                                "enabled": true
                                        }
                                },
                                {
                                        "operation": "insert",
                                        "parentName": "Header",
                                        "propertyName": "items",
                                        "name": "RefillReason",
                                        "values": {
                                                "caption": { "bindTo": "Resources.Strings.RefillReasonLcz" },
                                                "contentType": Terrasoft.ContentType.LOOKUP,
                                                "bindTo": "RefillReason",
                                                "layout": { "column": 0, "row": 4, "colSpan": 12 },
                                                "enabled": true
                                        }
                                }
                        ]/**SCHEMA_DIFF*/,
                        userCode: {}
                };
        });

 

Нравится

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

Добрый день.

Для решения Вашей задачи необходимо:

1) Заполнить свойство Parameters в структуре схеме необходимыми Вам атрибутами.
2) Добавить элемент "Преднастроенная страница" в БП.
3) Убедиться, что у элемента появились необходимые параметры.
3) Заполнять в БП параметры элемента (пункт 2).

При открытии карточки атрибуты уже будут присутствовать.

"Мотков Илья" написал:

1) Заполнить свойство Parameters в структуре схеме необходимыми Вам атрибутами.


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

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

Наглядно показал на скриншоте.

Примеры работы с параметрами в js коде, Вы можете посмотреть в схеме LeadManagementDistributionPageV2

Тёскин Дмитрий Валерьевич,

Вы прикалываетесь? серьезно? в 

LeadManagementDistributionPageV2 нет параметров.

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

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

Добрый день.
Прошу помочь в решении следующей задачи.
Есть преднастроенная страница, в которой необходимо реализовать заполнение виртуального поля по условию.
При выполнении скрипта, указанного в dependencies, атрибут "OwnersString" заполняется , но в поле карточки значение не отображается.

Предоставляю упрощённый пример моего кода:

define("SxAssignmentPreconfiguredPageV2", ["CustomProcessPageV2Utilities"],
    function() {
        return {
            messages: {},
            mixins: {
                BaseProcessViewModel: "Terrasoft.CustomProcessPageV2Utilities"
            },
            attributes: {
                "IsAssignment": {
                    type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                    dataValueType: Terrasoft.DataValueType.BOOLEAN,
                    caption: { bindTo: "Resources.Strings.IsAssignmentCaption" }
                },
               "OwnersString": {
                   type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                   dataValueType: Terrasoft.DataValueType.String,
                   dependencies: [{
                       columns: ["IsAssignment"],
                       methodName: "onIsAssignmentChanged"
                   }]
               }

            },
            methods: {
                onIsAssignmentChanged: function(){
                    debugger;
                  if(this.get("IsAssignment"))
                      this.set("OwnersString", "Поле заполнено");
                },
                                        /**
                                 * @overridden
                                 * @returns {string}
                                 */
                                getHeader: function() {
                                        return "PreconfiguredPageV2";
                                },
                                /**
                                 * @overridden
                                 */
                                onEntityInitialized: function() {
                                        this.callParent();
                                },
                                /**
                                 * @overridden
                                 */
                                initHeaderCaption: Ext.emptyFn,
                                /**
                                 * @protected
                                 * @overridden
                                 */
                                initPrintButtonMenu: Ext.emptyFn,
                                /**
                                 * @overridden
                                 * @param {Object} args Параметры
                                 * @param {Object} tag Тег
                                 */
                                loadVocabulary: function(args, tag) {
                                        args.schemaName = this.model.attributes[tag].referenceSchemaName;
                                        this.callParent(arguments);
                                },
                                /**
                                 * @overridden
                                 */
                                onCloseCardButtonClick: function() {
                                        this.sandbox.publish("BackHistoryState");
                                },
                                /**
                                 * @protected
                                 */
                                onNextButtonClick: function() {
                                        this.acceptProcessElement("NextButton");
                                }
            },
            diff:[
                {
                    "operation": "remove",
                    "name": "CloseButton"
                },
                {
                    "operation": "remove",
                    "name": "actions"
                },
                {
                    "operation": "remove",
                    "name": "SaveButton"
                },
                {
                    "operation": "remove",
                    "name": "DelayExecutionButton"
                },
                {
                    "operation": "remove",
                    "name": "ViewOptionsButton"
                },
                {
                    "operation": "insert",
                    "parentName": "Header",
                    "propertyName": "items",
                    "name": "HeaderLabel",
                    "values": {
                        layout: {column: 0, row: 0, colSpan: 12},
                        "itemType": Terrasoft.ViewItemType.LABEL,
                        "caption": { "bindTo": "Resources.Strings.HeaderLabelCaption" },
                        "labelClass": ["new-record-header-caption-label"]

                        /*"classes": {
                            "labelClass": [
                                "t-label "
                            ],
                            "wrapClass": [
                                "label-wrap"
                            ]
                        }*/

                    }
                },
                {
                    // Метаданные для добавления кнопки [Следующий]
                    "operation": "insert",
                    "parentName": "LeftContainer",
                    "propertyName": "items",
                    "name": "NextButton",
                    "values": {
                        caption: {bindTo: "Resources.Strings.NextButtonCaption"},
                        itemType: Terrasoft.ViewItemType.BUTTON,
                        classes: {textClass: "actions-button-margin-right"},
                        style: Terrasoft.controls.ButtonEnums.style.GREEN,
                        click: {bindTo: "onNextButtonClick"}
                    }
                },
                {
                    "operation": "insert",
                    "name": "IsAssignment",
                    "parentName": "Header",
                    "propertyName": "items",
                    "values":{
                        bindTo: "IsAssignment",
                        caption : {bindTo: "Resources.Strings.IsAssignmentCaption"},
                        layout: {column: 0, row: 1, colSpan: 6}
                    },
                    "index": 0
                },
                {
                    "operation": "insert",
                    "name": "OwnersString",
                    "parentName": "Header",
                    "propertyName": "items",
                    "values":{
                        bindTo: "OwnersString",
                        caption :  {
                            "bindTo": "Resources.Strings.OwnersStringCaption"
                        },
                        layout: {column: 0, row: 2, colSpan: 6},
                        "contentType": 0,
                        "controlConfig": {
                            "className": "Terrasoft.TextEdit"
                        }
                    }
                }


            ]
        };
    });

Заранее спасибо.

Нравится

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

Ошибка в типе атрибута, у системного перечисления DataValueType нет значения "String", но есть значение TEXT.

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

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

Здравствуйте!
Пытаюсь создать преднастроенную страницу, содержащую справочники. Поля на странице относятся к разным объектам. Делал аналогично примеру из конфигурации (PreconfiguredPageV2)
При открытии справочник не получает верный конфиг.
При использовании примера из конфигурации ситуация в точности повторяется.
Подскажите пожалуйста, как побороть данную проблему?

Нравится

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

Уже разобрался.
Если кому-то понадобится, то необходимо переопределить 2 метода: LoadVocabulary и getLookupPageConfig

 loadVocabulary: function(args, tag) {
                        var column = this.getColumnByName(tag);
                        args.schemaName = column.referenceSchemaName;
                        this.callParent(arguments);
                    },
 
                    /**
                     * Возвращает настройки страницы выбора из справочника.
                     * @private
                     * @param {Object} args Параметры.
                     * @param {String} columnName Название колонки.
                     * @return {Object} Настройки страницы выбора из справочника.
                     */
                    getLookupPageConfig: function(args, columnName) {
                        var config = {
                            entitySchemaName: args.schemaName,
                            multiSelect: false,
                            columnName: columnName,
                            columnValue: this.get(columnName),
                            searchValue: args.searchValue,
                            filters: this.getLookupQueryFilters(columnName)
                        };
                        this.Ext.apply(config, this.getLookupListConfig(columnName));
                        return config;
                    }

Возник еще один вопрос. Как сделать,чтобы в преднастроенной странице работала вся логика справочных полей?
Не работает фильтрация "на лету", когда пишешь в поле справочника и подтягиваются отфильтрованные данные (именно на странице, а не в окне лукапа)

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

Думаю, что по картинке станет понятна задача.
В БП используется преднастроенная страница. Кажется, что в ней не выполнилась подписка на базовые события для полей типа LOOKUP, либо я не подключил какой-то базовый модуль. Не могу понять, что именно. В обычных страницах при нажатии стрелок или начав писать текст в поле справочника мы получаем подсказку по наполнению, а в моем случае такой функционал не работает.

Полный код во вложении
preconfuguredpage.txt

Посмотрите в сторону схемы автогенерируемой страницы (AutoGeneratedPageV2) и ее реализаций loadVocabulary и остальных.
В автогенерируемых страницах фильтрация происходит.
/

И еще одну старую тему попробую оживить...

Может приходилось кому делать преднастроенную страницу с набором кнопок быстрого выбора даты, как в фильтре раздела активности (см аттач)?

"Александр Кудряшов" написал:

И еще одну старую тему попробую оживить...

Может приходилось кому делать преднастроенную страницу с набором кнопок быстрого выбора даты, как в фильтре раздела активности (см аттач)?

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

filter.jpg10.46 кб

Александр, а то, что на SDK описано не подходит? Если вы хотите не в шапке страницы реализовать, то возможно для примера подходит страница "Отчет о проделанной работе" (раздел "Активности").

"Мотков Илья" написал:то, что на SDK описано

Илья, за ссылку спасибо! Посмотрел, но это не мой вариант, так как у меня не раздел (и соответственно нет базовой логики, способной подцепить предлагаемый модуль). А в преднастроенной странице (наследуемой от страницы редактирования) такой блок просто так не добавится... надо писать именно контролы и именно ручками, а еще обработчики событий на них... либо как то уж очень исхитриться и прицепить готовый модуль, но методика должна быть более изощренная, чем в sdk

А страница фильтра отчета о проделанной работе не подходит, так как в ней добавить два блока фильтров по периоду (ну вот нужно мне по двум датам разным иметь возможность фильтровать...) нельзя без переписывания ReportFilterModule, поэтому решил, что легче сделать свою страницу с параметрами. Ну и для самообразования полезно :)

"Александр Кудряшов" написал:
Мотков Илья пишет:

то, что на SDK описано

Илья, за ссылку спасибо! Посмотрел, но это не мой вариант, так как у меня не раздел (и соответственно нет базовой логики, способной подцепить предлагаемый модуль). А в преднастроенной странице (наследуемой от страницы редактирования) такой блок просто так не добавится... надо писать именно контролы и именно ручками, а еще обработчики событий на них... либо как то уж очень исхитриться и прицепить готовый модуль, но методика должна быть более изощренная, чем в sdk

А страница фильтра отчета о проделанной работе не подходит, так как в ней добавить два блока фильтров по периоду (ну вот нужно мне по двум датам разным иметь возможность фильтровать...) нельзя без переписывания ReportFilterModule, поэтому решил, что легче сделать свою страницу с параметрами. Ну и для самообразования полезно :)

Но фильтры же правильней использовать для раздела или детали :wink:
Если уже для самообразования. то можно попробовать следующий алгоритм:

1. Модуль фильтров можно подключить как обычный модуль. Другой вопрос, что в раздел и деталь это сделать можно легко.
2. Как это примерно сделать – загрузить модуль и поддержать сообщения для работы с ним.

Сперва нужно поддержать сообщения

Потом на них сделать такую логику:

Для добавления фиксированных фильтров нужно сообщение

Его код должен возвращать конфиг, из статьи - http://www.academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/AddFix…

Загрузка самого модуля фильтров стандартная -

this.sandbox.loadModule("QuickFilterModuleV2", {
               renderTo: "SectionFiltersContainer",// куда рисовать, контейнер в diff
               id: this.getQuickFilterModuleId()// тут уникальный id модуля
});

Для получения фильтров нужно подписаться на сообщение:

На 7.8 необходимо на преднастроенную страницу добавить справочное поле.
Добавляю в attributes:

 "Contact": {
                dataValueType: this.Terrasoft.DataValueType.LOOKUP,
                type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                referenceSchemaName: "Contact",
            },

Добавляю элемент в diff.
Поле появляется, но при нажатии на лупу появляется ошибка:
Ошибка
на строчке:

 args.schemaName = this.model.attributes[tag].referenceSchemaName;

в методе:

loadVocabulary: function(args, tag) {
  args.schemaName = this.model.attributes[tag].referenceSchemaName;
  this.callParent(arguments);
},

Здравствуйте, Игорь.

Попробуйте добавить свойство usLookup к атрибуту Contact:

isLookup: true,

"Мотков Илья" написал:Здравствуйте, Игорь.

Попробуйте добавить свойство usLookup к атрибуту Contact:

isLookup: true,


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

Игорь, для исправления данного поведения, необходимо добавить зависимость от LookupUtilities. А также переопределить метод loadVocabulary аналогично схеме AutoGeneratedPageV2.

Полный листинг кода схемы:

define("UsrSome", ["LookupUtilities", "CustomProcessPageV2Utilities"],
	/**
	 * @class Terrasoft.configuration.PreconfiguredPageV2
	 * Пример преднастроенной страницы без EntitySchema по процессу
	 */
	function(LookupUtilities) {
		return {
			mixins: {},
			attributes: {
				"UsrContact": {
					dataValueType: this.Terrasoft.DataValueType.LOOKUP,
					type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					isLookup: true,
					referenceSchemaName: "Contact",
				},
			},
			rules: {},
			details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
			methods: {
				findEntityColumn: function(columnName) {
					var column = this.callParent(arguments);
					if (!column) {
						column = this.getColumnByName(columnName);
					}
					return column;
				},
				loadVocabulary: function(args, tag) {
					var column = this.findEntityColumn(tag);
					if (!column || !column.isLookup) {
						return;
					}
					var entitySchemaName = column.referenceSchemaName;
					var config = {
						entitySchemaName: entitySchemaName,
						multiSelect: false,
						columnName: tag,
						columnValue: this.get(tag),
						searchValue: args.searchValue
					};
					var handler = function(args) {
						var columnName = args.columnName;
						var collection = args.selectedRows.collection;
						if (collection.length > 0) {
							this.set(columnName, collection.items[0]);
						}
					};
					LookupUtilities.Open(this.sandbox, config, handler, this, null, false, false);
				},
				init: function(){
					this.callParent(arguments);
					document.scope = this;
				},
			},
			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "remove",
					"name": "TextParameter1"
				},
				{
					"operation": "insert",
					"parentName": "GeneralInfoBlock",
					"propertyName": "items",
					"name": "UsrContact",
					"values": {
						caption: "UsrContact",
						contentType: Terrasoft.ContentType.LOOKUP,
						bindTo: "UsrContact",
						layout: {column: 0, row: 0, colSpan: 12}
					}
				}
			]/**SCHEMA_DIFF*/,
			userCode: {}
		};
	});
Показать все комментарии