SAP UI5 рдФрд░ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рд╡рд┐рдВрдбреЛрдЬ: рдлрд┐рд░ рд╕реЗ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдЪрдорддреНрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ - рдХреЛрдИ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ред (рдПрдкрд┐рдЧреНрд░рд╛рдл рдХреЗ рдмрдЬрд╛рдп)

рд╢реБрдн рджреЛрдкрд╣рд░!

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕рд░рд▓ рд╣реЛрдЧрд╛ред

рдПрдХ рджреГрд╢реНрдп рд╣реИ:

<mvc:View 
    controllerName="MyController" 
    xmlns="sap.m" 
    xmlns:core="sap.ui.core" 
    xmlns:mvc="sap.ui.core.mvc">
    <Button text="!" press="handlePress" />
    <Table 
        items="{view>/list/items}" 
        mode="MultiSelect" 
        selectionChange="handleTableSelection">
        <columns>
            <Column>
                <Text text="" />
            </Column>
            <Column>
                <Text text="" />
            </Column>
        </columns>
        <items>
            <ColumnListItem>
                <cells>
                    <ObjectIdentifier title="{view>id}" />
                    <Text text="{view>description}" />
                </cells>
            </ColumnListItem>
        </items>
    </Table>
</mvc:View>

рдФрд░ рдПрдХ рд╣реА "рдмрд╛рд╣рд░ рдЫрд▓" рдирд┐рдпрдВрддреНрд░рдХ:

sap.ui.controller("MyController", {
        
    onInit: function () {
        this.__oViewModel = new sap.ui.model.json.JSONModel({
            list: {
                items: [
                    { id: 1, description: 'one' },
                    { id: 2, description: 'two' },
                    { id: 3, description: 'three' }
                ],
                selected: []
            }
        });
        this.getView().setModel(this.__oViewModel, "view");
    },

    handlePress: function (oEvent) {
        sap.m.MessageToast.show(this.__oViewModel.getProperty('/list/selected').join(', '));
    },

    handleTableSelection: function (oEvent) {
        const aSelectedCtx = oEvent.getSource().getSelectedContexts(),
            aSelected = aSelectedCtx.map(o => o.getObject().id);
        this.__oViewModel.setProperty('/list/selected', aSelected);
    }

});

рджреЗрдЦрдиреЗ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдм рдХрд╛рдлреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛:

рдЫрд╡рд┐

рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ, рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде рд╕реВрдЪреАрдмрджреНрдз рдЪрдпрдирд┐рдд рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкреЙрдк рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рд╣рдо рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рдмрд╛рд╣рд░ рдЧреИрд░-рдЦрд╛рд▓реА рд╕рд░рдгреА рдФрд░ рдЕрдиреНрдп рдпреВрдЖрдИ-trifles рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ)ред

рд▓реЗрдХрд┐рди рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ "рдЪрд▓реЛ рдЪрд▓реЗрдВ!" рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдЪрдпрдирд┐рдд рддрддреНрд╡реЛрдВ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреА рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╖реНрдЯрд┐ рдХреЗ рдмрд╛рдж рд╣реА рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рддреБрдЪреНрдЫ рдмрд╛рдд - рдкреБрд╖реНрдЯрд┐ рд╕рдВрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рдЯреБрдХрдбрд╝рд╛ рдЬреЛрдбрд╝реЗрдВ:

ConfirmDialog.fragment.xml

<core:FragmentDefinition
    xmlns='sap.m'
    xmlns:core='sap.ui.core' >
    <Dialog
        id='confirmDialog'
        title=''
        type='Message'
        state='Warning'>
        <content>
            <Label text='  ?' />
        </content>
        <beginButton>
            <Button
                text=''
                press='handleConfirmBtn'/>
        </beginButton>
        <endButton>
            <Button
                text=''
                press='handleCancelBtn'/>
        </endButton>
    </Dialog>
</core:FragmentDefinition>

рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ:

ConfirmDialog.controller.js

sap.ui.define([
    "sap/ui/base/ManagedObject"
], function (ManagedObject) {
    "use strict";

    return ManagedObject.extend("project.ConfirmDialog", {

        constructor: function (oView, fnConfirmBtn) {
            this.__oView = oView;
            this.__fnConfirmBtn = fnConfirmBtn;
        },

        exit: function () {
            delete this.__oView;
            delete this.__fnConfirmBtn;
        },

        open: function () {
            const oView = this.__oView;
            let oDialog = oView.byId("confirmDialog");

            if (!oDialog) {
                const oFragmentController = {
                    handleConfirmBtn: () => {
                        this.__fnConfirmBtn();
                        oDialog.close();
                    },
                    handleCancelBtn: () => {
                        oDialog.close();
                    }
                };
                oDialog = sap.ui.xmlfragment(oView.getId(), "project.view.fragment.ConfirmDialog", oFragmentController);
                oView.addDependent(oDialog);
            }
            oDialog.open();
        }

    });
});

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, SAP UI5 SDK рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╢рд╛рд╕реНрддреНрд░реАрдп рд╣реИред
рдЕрдм, рдЗрд╕ рдбрд╛рдпрд▓реЙрдЧ рдмреЙрдХреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдореБрдЦреНрдп рдмрдЯрди рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

handlePress: function (oEvent) {
    const aSelected = this.__oViewModel.getProperty('/list/selected');
    this.__confirmDialog = new ConfirmDialog(this.getView(), () => {
        aSelected.forEach(o => {
            //    
        });
        this.__confirmDialog.exit();
    });
    this.__confirmDialog.open();
}

рдпрд╣реА рд╣реИ, рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдирд╛ рд╕рдВрд╡рд╛рдж рдмрдирд╛рддреЗ рд╣реИрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ "рдореБрдЦреНрдп" рджреГрд╢реНрдп рдЬрд┐рд╕ рдкрд░ рдпрд╣ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛, рдФрд░ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рдиред

рдпрд╣рд╛рдВ рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЖрдПред

рдкрд░ рдлрд╝реНрд▓рд┐рдк рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдбрд╛рдпрд▓реЙрдЧ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛрдб рдХреА рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВред

рджреЗрдЦрд┐рдП рдХреБрдЫ рдЕрдЬреАрдм?

рдирд╣реАрдВ?

рдлрд┐рд░, рдЯреНрд░реЗрд╕ рдореЛрдб рдЪрд╛рд▓реВ рдХрд░реЗрдВ рдФрд░, рдкрд╣рд▓реЗ рджреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рдмрд╛рдж, рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

        handlePress: function (oEvent) {
            const aSelected = this.__oViewModel.getProperty('/list/selected');  
            // aSelected = [1,2], ,  
            this.__confirmDialog = new ConfirmDialog(this.getView(), () => {
                aSelected.forEach(o => {
                    //   aSelected = [1,2]
                });
                this.__confirmDialog.exit();
            });
            this.__confirmDialog.open();
        }

рд╣реБрд░реНрд░реЗ, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдкрдХрдбрд╝ рд╣реИ? рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрддреБрд▓рдиреАрдп рд╣реЛ рдФрд░ рдХреБрдЫ рдФрд░ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реЛред рдЖрдЗрдП рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ: рддреАрд╕рд░реЗ рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ "рд▓реЗрдЯреНрд╕ рдЧреЛ!" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:

        handlePress: function (oEvent) {
            const aSelected = this.__oViewModel.getProperty('/list/selected');  
            // aSelected = [3]
            this.__confirmDialog = new ConfirmDialog(this.getView(), () => {
                aSelected.forEach(o => {
                    //   aSelected = [1,2] ???

рдХреНрдпреЛрдВ [1,2], рдореБрдЭрд╕реЗ рддреБрдо рдкреВрдЫреЛред рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреЛрдИ рдкреВрдЫрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

рдФрд░ рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рдРрд╕рд╛ рдХреБрд░реВрдк рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦрд╛, рддреЛ рдореИрдВ рдЪреБрдкрдЪрд╛рдк рдЕрдкрдиреЗ рдЖрдк рдкрд░ рд╕рдВрджреЗрд╣ рдХрд░рдиреЗ рд▓рдЧрд╛ред рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХрднреА рднреА рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛: рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдХреЙрдиреНрд╕реНрдЯ рдЕрдкрдиреЗ рдкреВрд░реЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдЕрдкрд░рд┐рд╣рд╛рд░реНрдпрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдПрд▓реЗрдХреНрдЯреЗрдб рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд╣реАрдВ рдФрд░ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рджрд┐рдЦрд╛рдпрд╛, рд╡рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред

рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЖрдкрдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкреАрдбрд╝рд╛ рдирд╣реАрдВ рджреАред

рдпрд╣ рд╕рднреА рд╕рдВрджрд░реНрднреЛрдВ рдФрд░ рдХреНрд▓реЛрдЬрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рд╕рднреА рдЬреЗрдПрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкрд╕рдВрдж рд╣реИред

рдпрд╣реА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрднрд╛рд▓ рдХреЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ, ConfirmBtn, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЗрд╕рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рдкреВрд░реЗ рд╕рдВрджрд░реНрдн (aSelected рд╕рд╣рд┐рдд) рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рд╣реИред рдФрд░ рд╡рд┐рд▓реЛрдкрди рдХреА рдмрд╛рдж рдХреА рдкреБрд╖реНрдЯрд┐ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЗрддрдирд╛ рд╕рд░рд▓ рдФрд░ рдЕрд╕рдВрджрд┐рдЧреНрдз рдирд╣реАрдВ рдерд╛ред рдпрд╣ рдХреЗрд╡рд▓ рдУрдлреНрд░реИрдЧрдореЗрдВрдЯрдХрдВрдЯреНрд░реЛрд▓рд░ рдШреЛрд╖рдгрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ (1 рдХреЙрд▓ рдХреЗ рдмрд╛рдж, рд╕рдВрджрд░реНрдн рдЦреЛ рдЧрдпрд╛ рдерд╛)ред рдФрд░ рд╕рдмрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддрд░реАрдХрд╛ рдерд╛ (рдореИрдВ рдХреЗрд╡рд▓ рдЦреБрд▓реА рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдб рджреВрдВрдЧрд╛):

open: function () {
    const oView = this.__oView;
    let oDialog = oView.byId("confirmDialog");

    if (!oDialog) {
        const oFragmentController = {
            handleConfirmBtn: function () {
                this.__fnConfirm();
                oDialog.close();
            },
            handleCancelBtn: function () {
                oDialog.close();
            }
        };
        oDialog = sap.ui.xmlfragment(oView.getId(), "project.view.fragment.ConfirmDialog", oFragmentController);
        oDialog.controller = oFragmentController;
        oView.addDependent(oDialog);
    }
    oDialog.controller.__fnConfirm = this.__fnConfirmBtn.bind(this);
    oDialog.open();
}

рдЕрдВрддрд┐рдо 4 рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ: рдЗрд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рд╕рд╣реА рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рд╣реИрдВрдбрд▓рд░ рдХреЛ "рд░реЛрд▓" рдХрд░рддрд╛ рд╣реВрдВред

рджреНрд╡рд╛рд░рд╛ рдФрд░ рдмрдбрд╝реЗ, рдХреЗрд╡рд▓ рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдерд╛ред

рдПрдХ рд╕реЗ рдорд┐рд▓рдирд╛ рд╕рдВрднрд╡ рдерд╛
oDialog.setBeginButton(new sap.m.Button({ text: '', press: this.__fnConfirmBtn }));

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рд╕рдВрд╡рд╛рдж рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдирдпрд╛ рдмрдЯрди рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╣ рдареАрдХ рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ oDialog.getBeginButton ()ред AttachPress рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓рдмреИрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рдЯрдХрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рд▓рд╛рдЗрди рдореЗрдВ .detachPress рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╕рднреА рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдШреГрдгрд┐рдд рдерд╛ред

рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд░реЛрдорд╛рдВрдЪ рд▓рдЧрднрдЧ рдиреАрд▓реЗ рд░рдВрдЧ рд╕реЗ рдмрд╛рд╣рд░ рдЖрдпрд╛ (рдкрд╣рд▓реЗ рд╕реЗ ... рдЖрд╣, ui5!)

PS рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рджреНрд╡рд╛рд░рд╛ рдФрд░ рдмрдбрд╝реА, рд╡рд░реНрдгрд┐рдд рд╕реНрдерд┐рддрд┐ рднрд╛рд╖рд╛ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ UI5 рд░реВрдкрд░реЗрдЦрд╛ рдмрд╕ рдЗрд╕реЗ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред

All Articles