Публикация

Передача данных из карточки в деталь через sandbox

Вопрос

Как передать идентификатор контрагента, из карточки заказа, на страницу редактирования детали "Продукт в заказе" через сообщения sandbox?

Ответ

Код замещающей схемы страницы Заказа:

define("OrderPageV2", ["OrderPageV2Resources", "GeneralDetails"],
function(resources, GeneralDetails) {
    return {
        entitySchemaName: "Order",
        details: /**SCHEMA_DETAILS*/{
        }/**SCHEMA_DETAILS*/,
        diff: /**SCHEMA_DIFF*/[
        ]/**SCHEMA_DIFF*/,
        attributes: {},
        methods: {
            onEntityInitialized: function() {
                this.callParent(arguments);
                this.sandbox.subscribe("OrderProductPageAsksForData", function(arg) {
                    console.log("OrderProductPageV2 запрашивает данные прямо сейчас,");
                    console.log("по Id песочницы: " + arg.sandboxId);
                    // Высылаем данные.
                    this.sendDataToOrderProductPage(arg.sandboxId);
                }, this, [this.sandbox.id]);
                console.log("Мы(OrderPageV2) подписались на сообщение: OrderProductPageAsksForData.");
                console.log("Id песочницы в этой карточке(OrderPageV2) следующий:");
                console.log(this.sandbox.id);
            },
            sendDataToOrderProductPage: function(sandboxId) {
                this.sandbox.publish("DataToOrderProductPage", { accountId: this.get("Account").value }, [sandboxId]);
                console.log("AccountId отправлен сообщением для OrderProductPageV2 по Id: " + sandboxId);
            }
        },
        rules: {},
        messages: {
            "DataToOrderProductPage": {
                mode: Terrasoft.MessageMode.PTP,
                direction: Terrasoft.MessageDirectionType.PUBLISH
            },
            "OrderProductPageAsksForData": {
                mode: Terrasoft.MessageMode.PTP,
                direction: Terrasoft.MessageDirectionType.SUBSCRIBE
            }
        },
        userCode: {}
    };
});

Код замещающей схемы страницы детали Продукт в заказе:

define("OrderProductPageV2", ["BusinessRuleModule", "OrderUtilities"],
    function(BusinessRuleModule) {
        return {
            entitySchemaName: "OrderProduct",
            mixins: {},
            attributes: {},
            methods: {
                onEntityInitialized: function() {
                    this.callParent(arguments);
                    this.sandbox.subscribe("DataToOrderProductPage", function(arg) {
                        console.log("OrderPageV2 передает нам данные!");
                        alert("accountId: " + arg.accountId);
                    }, this, [this.sandbox.id]);
                    console.log("Мы(OrderProductPageV2) подписались на сообщение: DataToOrderProductPage.");
                    console.log("По нашему(OrderProductPageV2) Id песочницы:");
                    console.log(this.sandbox.id);
                    this.sandbox.publish("OrderProductPageAsksForData", {
                        sandboxId: this.sandbox.id
                    }, [this.getOrderPageSandboxId()]);
                    console.log("Запросили данные у OrderPageV2, по её Id песочницы: " + this.getOrderPageSandboxId());
                },
                getOrderPageSandboxId: function() {
                    var index = this.sandbox.id.indexOf("_detail_ProductInProducts");
                    return this.sandbox.id.substring(0, index);
                }
            },
            messages: {
                "DataToOrderProductPage": {
                    mode: Terrasoft.MessageMode.PTP,
                    direction: Terrasoft.MessageDirectionType.SUBSCRIBE
                },
                "OrderProductPageAsksForData": {
                    mode: Terrasoft.MessageMode.PTP,
                    direction: Terrasoft.MessageDirectionType.PUBLISH
                }
            },
            diff: /**SCHEMA_DIFF*/[
            ]/**SCHEMA_DIFF*/,
            rules: {
            }
        };
    }
);

 

Нравится

Поделиться

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