Установить значение поля карточки в совмещённом режиме

Добрый день. Есть такая задача:  в совмещённом режиме продублировать кнопку, которая будет устанавливать дату в поле в карточке. Кнопку я добавил, но не могу установить значение в поле карточки. Пытался сделать через sandbox следующим образом:

В Section:

 messages: {

            "MessagePublish": {

                mode: Terrasoft.MessageMode.BROADCAST,

                direction: Terrasoft.MessageDirectionType.PUBLISH

            }

        },

............

        methods: {

            //обработчик кнопки

            onSetDateTimeForPageClick: function () {

                this.sandbox.publish("MessagePublish");

            }

         }

В Page:

 messages: {

            "MessagePublish": {

                mode: Terrasoft.MessageMode.BROADCAST,

                direction: Terrasoft.MessageDirectionType.SUBSCRIBE

            },

        },

        init: function () {

            this.callParent(arguments);

            this.sandbox.subscribe("MessagePublish", this.methods.onSetDateTimeClick, this);

        },

Что я упустил или неправильно делаю?

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

 

Нравится

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

Добрый день.

Если дату вы передаете, то в publish нужно указать передаваемый аргумент. В subscribe callback-метод нужно записывать без «methods» (this.onSetDateTimeClick) – и соответственно он должен быть задан в methods страницы, и принимать параметр(в который придёт передаваемый аргумент). Больше примеров на академии https://academy.terrasoft.ru/documents/technic-sdk/7-11/sandbox-obmen-s…

VladKapitanchyk,

Добрый день, метод onSetDateTimeClick имеет следующее определение 

        onSetDateTimeClick:function(){

                this.set("UsrDateTime",(new Date).toString());

            }

Где UsrDateTime текстовое поле карточки. То есть, вызов происходит без аргументов, из Section я всего лишь хочу дать сигнал, чтобы на Page вызвался метод. Исправил в subscribe callback-метод на (this.onSetDateTimeClick), но это не помогло. Также попробовал переделать на способ с передачей аргументов, и тоже не помогло(

Полный листинг способа без передачи аргумента:

В Section:

define("UsrClientModule21Section", [], function () {

    return {

        entitySchemaName: "UsrClientModule2",

        details: /**SCHEMA_DETAILS*/ {} /**SCHEMA_DETAILS*/ ,

        messages: {

            "MessagePublish": {

                mode: Terrasoft.MessageMode.BROADCAST,

                direction: Terrasoft.MessageDirectionType.PUBLISH

            }

        },

        diff: /**SCHEMA_DIFF*/ [{

            "operation": "insert",

            "parentName": "CombinedModeActionButtonsCardLeftContainer",

            "propertyName": "items",

            "name": "SetDateTimeButton",

            "values": {

                "itemType": Terrasoft.ViewItemType.BUTTON,

                "caption": {

                    bindTo: "Resources.Strings.SetDateTime"

                },

                "click": {

                    bindTo: "onSetDateTimeClick"

                },

                "style": Terrasoft.controls.ButtonEnums.style.GREEN,

            }

        }] /**SCHEMA_DIFF*/ ,

        methods: {

            onSetDateTimeClick: function () {

this.sandbox.publish("MessagePublish");

//Способ с передачей аргумента.

//this.sandbox.publish("MessagePublish",(new Date).toString());

            }

        }

    };

});

В Page:

define("UsrClientModule21Page", [], function() {

    return {

        entitySchemaName: "UsrClientModule2",

        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,

        modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,

        messages: {

            "MessagePublish": {

                mode: Terrasoft.MessageMode.BROADCAST,

                direction: Terrasoft.MessageDirectionType.SUBSCRIBE

            },

        },

        init: function () {

            this.callParent(arguments);

            this.sandbox.subscribe("MessagePublish", this.onSetDateTimeClick, this);

//При передаче аргумента

// this.sandbox.subscribe("MessagePublish", function(arg)..{this.set("UsrDateTime",arg)}, this);

        },

        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,

        methods: {

            onSetDateTimeClick:function(){

                this.set("UsrDateTime",(new Date).toString());

            }

        },

        rules: {},

        businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/

    };

});

Добрый день.

Метод "init" должен быть в блоке "methods".

Так же рекомендую открывать консоль (F12) и читать ошибку, если будет что то наподобе "Cannot read property 'entitySchemaName'" значит проблема с неправильной структурой схемы.

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