1

我正在构建一个通过 REST 与 IBM 软件通信的应用程序。问题是我在 NewTicket.controller 中有一个 POST 方法,但我需要在此方法上使用用户和密码才能打开票证。如何将我在 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);

先感谢您。

4

4 回答 4

1

索引.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>

登录.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);
    },

输出: 在此处输入图像描述

于 2015-01-21T17:13:24.963 回答
0

在 Login.controller 的控制器作用域下定义一个变量。例如:在 Login.controller 中有一个变量this.myValue

在 MyTicket.controller 中:

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

只要您的登录视图/控制器没有被破坏,这将起作用。

于 2015-01-20T16:18:36.490 回答
0

假设有两个视图:

  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"
        },

希望这可以说清楚。请注意,您的登录视图不应被破坏。

于 2015-01-20T18:13:52.037 回答
0

取决于您存储用户名和密码的位置。正确的方法是将它们实际存储在模型中。在 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
于 2015-01-21T11:20:26.017 回答