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

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

出力: ここに画像の説明を入力

于 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

次の 2 つのビューがあるとします。

  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 に答える