SAPUI5 — Страница входа

Я создаю приложение, которое взаимодействует с программным обеспечением IBM через REST. Дело в том, что у меня есть метод POST в NewTicket.controller, но мне нужно использовать пользователя и пароль в этом методе, чтобы открыть билет. Как я могу отправить переменные (или другие вещи), которые у меня есть в моем Login.controller, в NewTicket.controller?

Это мой метод публикации:

enviar:function() {
        var description = this.byId("desc").getValue(); //Recebe o resumo
        var long_description = this.byId("long_desc").getValue(); //Recebe a descrição
        jQuery.sap.require("sap.m.MessageToast");
        sap.m.MessageToast.show(user);
        jQuery.sap.require("sap.m.MessageBox");
        // open a fully configured message box
        sap.m.MessageBox.show("Confirmar a abertura do chamado?",
                sap.m.MessageBox.Icon.QUESTION,
                "Confirmar",
                [sap.m.MessageBox.Action.YES, sap.m.MessageBox.Action.NO], 
                function(sResult) {
            if(sResult == sap.m.MessageBox.Action.YES)    //Se clicar em SIM (popup com numero do chamado e tela com lista) 
            {
                var oModel = new sap.ui.model.json.JSONModel();
                var url = "http://xxx.xxx.xxx.xx:xxxx/maxrest/rest/mbo/sr/?_lid=" + **user** + "&_lpwd=" + **password** +"&description="+ description +"&description_longdescription=" + long_description + "&_format=json&_compact=true&_verbose=true";
                var aData = jQuery.ajax({
                    type : "POST",
                    contentType : "application/json",
                    url : url,
                    dataType : "json",
                    async: false, 
                    success : function(data,textStatus, jqXHR) {
                        oModel.setData({modelData : data}); 
                        sap.m.MessageBox.show("ABRIU");
                    },
                    error : function(data,textStatus, jqXHR) {
                        oModel.setData({modelData : data}); 
                        sap.m.MessageBox.show(textStatus);
                    }
            })}
            else  // Se clicar em NÃO
           {
           }
        },
                sap.m.MessageBox.Action.YES);

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


person Daniel Gregory    schedule 20.01.2015    source источник


Ответы (4)


index.html

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/>
        <script src="resources/sap-ui-core.js"
                id="sap-ui-bootstrap"
                data-sap-ui-libs="sap.m"
                data-sap-ui-theme="sap_bluecrystal">
        </script>
        <script>
                sap.ui.localResources("app");
                var app = new sap.m.App({initialPage:"idinitial1"});
                var page = sap.ui.view({id:"loginPage", viewName:"app.login", type:sap.ui.core.mvc.ViewType.XML});
                app.addPage(page);
                app.placeAt("content");
        </script>
    </head>
    <body class="sapUiBody" role="application">
        <div id="content"></div>
    </body>
</html>

login.view.xml

<core:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m"
        controllerName="app.login" xmlns:html="http://www.w3.org/1999/xhtml">
    <Page title="Title">
        <content>
            <Panel headerText = "example" expandable = "true" expanded = "true">
              <content>  
                  <Input id="userID" value="User123"/>
                  <Button text="Login" press="btnClicked"/>
             </content>
             </Panel>
        </content>
    </Page>
</core:View>

login.controller.js

sap.ui.controller("app.login", {
    btnClicked: function(){
        this.userName = this.byId('userID').getValue();
        //loading the second view but not placed anywhere, just for showing code usage
        sap.ui.view({id:"myTickePage", viewName:"app.ticket", type:sap.ui.core.mvc.ViewType.JS});
    }
});

ticket.view.xml может быть чем угодно, только не внутри ticket.controller.js:

onInit: function() {
        var user = sap.ui.getCore().byId('loginPage').getController().userName;
        console.log(user);
    },

Вывод: введите здесь описание изображения

person chillvivek    schedule 21.01.2015
comment
Я получаю сообщение об ошибке: не удалось загрузить «NewTicket.view.js» из ресурсов/NewTicket.view.js: 404 — ошибка. Это моя функция btnClicket: this.userName = this.byId('userID').getValue(); //загружаем второе представление, но никуда не помещаем его, просто для демонстрации использования кода sap.ui.view({id:myTickePage, viewName:NewTicket, type:sap.ui.core.mvc.ViewType.JS}); var router = sap.ui.core.UIComponent.getRouterFor(this); router.navTo(Главная страница); - person Daniel Gregory; 22.01.2015
comment
Изменен тип просмотра на sap.ui.core.mvc.ViewType.XML, и он не работает. - person Daniel Gregory; 22.01.2015
comment
Ошибка: ресурс NewTicket.view.xml не может быть загружен из resources/NewTicket.view.xml. Проверьте наличие ошибок «файл не найден» или синтаксического анализа. - person Daniel Gregory; 22.01.2015
comment
это похоже на ошибку пути. Я использовал «app.login» в качестве имени представления, потому что мой файл login.view.xml находится в папке «приложение» в веб-контенте. В ваших случаях он не может найти ваше представление. - person chillvivek; 23.01.2015
comment
Теперь моя проблема в том, что undefined не является объектом (оценка 'sap.ui.getCore().byId(loginPage).getController'). Я уже не знаю, что делать... - person Daniel Gregory; 23.01.2015
comment
Это означает, что нет элемента управления с идентификатором «loginPage». - person chillvivek; 23.01.2015

Определите переменную в области контроллера Login.controller. Например: в Login.controller есть переменная this.myValue

В MyTicket.controller:

sap.ui.getCore().byId('loginViewID').getController().myValue

Это будет работать до тех пор, пока ваш логин/контроллер не будет уничтожен.

person chillvivek    schedule 20.01.2015

Предположим, два представления:

  1. представление входа в систему, соответствующее Login.controller (viewid_login)
  2. представление билета, соответствующее NewTicket.controller (viewid_ticket)

В Login.controller:

onInit: function() {
        this.userName= "User123";
    },

В NewTicket.controller:

onInit: function() {
        var user = sap.ui.getCore().byId('viewid_login').getController().userName;
//this will return "User123"
        },

Надеюсь, это проясняет. Обратите внимание, что ваш вход в систему не должен быть уничтожен.

person chillvivek    schedule 20.01.2015
comment
Дело в том, что я не могу установить такое имя пользователя, я получу его с клавиатуры. Итак, могу ли я использовать в представлении что-то вроде this.byId(user).getValue();< /б>?? - person Daniel Gregory; 21.01.2015
comment
Это будет работать до тех пор, пока вы находитесь в контроллере представления, содержащего элемент управления, идентификатор которого равен «пользователь». Но не будет работать в других контроллерах или других JsViews - person chillvivek; 21.01.2015
comment
Но, как я уже сказал, мне нужно использовать пользователя и пароль в методе Post, который находится на контроллере NewTicket... Возможно ли это? - person Daniel Gregory; 21.01.2015
comment
Использование: sap.ui.getCore().byId('user').getValue(). Убедитесь, что используемый вами идентификатор совпадает с идентификатором DOM. - person chillvivek; 21.01.2015
comment
Мой вид входа в систему выглядит следующим образом: ‹Тип ввода=текстовый дизайн=полужирный идентификатор=пользователь/›. Мой контроллер входа: onInit: function() {this.userName = sap.ui.getCore().byId(user).getValue(); } Мой новый контроллер билетов: var user = sap.ui.getCore().byId(loginPage).getController().userName; Он еще не работает... - person Daniel Gregory; 21.01.2015
comment
Ваш идентификатор элемента управления вводом - «пользователь», но при отображении представления идентификатор остается прежним? Это может быть префикс идентификатора представления, например: loginPage-user. Пожалуйста, используйте свой идентификатор DOM, т.е. визуализированный идентификатор. - person chillvivek; 21.01.2015
comment
Извините, но не знаю, что такое DOM id - person Daniel Gregory; 21.01.2015
comment
Когда вы проверяете элемент в браузере в режиме отладки. Вы увидите идентификатор, присвоенный отображаемому элементу управления. Например: ‹div id=loginPage--user....›...‹/... - person chillvivek; 21.01.2015
comment
Понятно. Мой идентификатор: __xmlview4--user-inner. Я поместил его в NewTicket.controller следующим образом: var user = this.byId(__xmlview4--user-inner).getController().userName; И я получаю [Ошибка] TypeError: undefined не является объектом (оценка 'this.byId(__xmlview4--user-inner).getController') - person Daniel Gregory; 21.01.2015
comment
Поскольку это сгенерированный идентификатор, он может не всегда быть одинаковым, и ваш код не будет работать, если вы жестко закодируете сгенерированный идентификатор. Опубликовали еще один ответ со всем необходимым кодом и рабочим результатом. Надеюсь, это поможет. Наслаждайтесь! - person chillvivek; 21.01.2015
comment
this.byId(__xmlview4--user-inner).getController().userName... это совершенно неверно. У вас не может быть контроллера для div. getController() можно использовать только с представлением. Правильным будет sap.ui.getCore().byId(__xmlview4--user).getValue()... но я предлагаю не использовать сгенерированные идентификаторы в вашем коде - person chillvivek; 21.01.2015

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

onInit: function() {
..
 var data = {user: 'bla', password: 'ble'};
 var oModel = new sap.ui.model.json.JSONModel();
 oModel.setData(data);
 sap.ui.getCore().setModel(oModel);
..
}

то в представлении вы можете получить значения с помощью:

var oModel = sap.ui.getCore().getModel();
var data = oModel.getData();
//data.password
//data.user
person Tiago A.    schedule 21.01.2015
comment
Но если я храню в модели, как я могу получить к ним доступ в NewTicket.controller (который не связан с login.view)?? - person Daniel Gregory; 21.01.2015
comment
Модели, установленные в ядре, являются глобальными для всех представлений/контроллеров и т. д. - person Tiago A.; 21.01.2015