Работа с SAPUI5 и SOAP запрос и ответ от веб-службы - PullRequest
0 голосов
/ 06 июня 2018

Мой вопрос заключается в том, что я работаю над проектом рефакторинга, который был сделан во флэш-памяти, и мне нужно конвертировать его в SAUI5, и для этого я использую мыльный веб-сервис.Он состоит из нескольких частей веб-службы.Вызов Ajax выглядит следующим образом:

`var oAppSettings = sap.ui.getCore().getModel("appSettings").getData();
        var response;
        var oData;
        var oXMLModel = new sap.ui.model.xml.XMLModel();

        var sReq = "<soapenv:Envelope 
        xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" 
        xmlns:web=\"http://webservice.cpb.dqw.sap.com\">\n" +
            "   <soapenv:Header/>\n" +
            "   <soapenv:Body>\n" +
            "      <web:boeLogonWithToken>\n" +
            "         <!--Optional:-->\n" +
            "         <web:args0>"+oAppSettings.loginToken+"</web:args0>\n" 
            +
            "      </web:boeLogonWithToken>\n" +
            "   </soapenv:Body>\n" +
            "</soapenv:Envelope>";

        $.ajax({
            url: oAppSettings.serverPath + ".AdminHttpSoap11Endpoint/",
            method: "POST",
            dataType: "xml",
            data: sReq,
            //processData:false,
            contentType: "text/xml; charset=\"utf-8\"",
            success: function (data, textStatus, jqXHR) {
                response = data;
                console.log(response);
                console.log("Is a success!");
            },
            error: function (xhr, status) {
                console.log("Error: : " + status);
            },
            complete: function (xhr, status) {
                console.log(response);
                setUpData();
            }
        });

        function setUpData(){
            oXMLModel.setData(response);

            console.log(oXMLModel.getXML());
        }`

Ответ, который я получаю, таков:

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <ns:boeLogonWithTokenResponse 
         xmlns:ns="http://webservice.cpb.dqw.sap.com">
            <ns:return xmlns:ax22="http://shared.cpb.dqw.sap.com/xsd" 
             xmlns:ax21="http://types.cpb.dqw.sap.com/xsd" 
             xmlns:ax24="http://types.sdk.boe.dqw.sap.com/xsd" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:type="ax21:CPBAdminResult">
                <ax21:contentUpgradeVersion>0</ax21:contentUpgradeVersion>
                <ax21:cpInfo xsi:nil="true" />
                <ax21:errorData xsi:nil="true" />
                <ax21:intValue xsi:nil="true" />
                <ax21:projectInfo xsi:nil="true" />
                <ax21:reservedData xsi:nil="true" />
                <ax21:status>OK</ax21:status>
                <ax21:stringArray xsi:nil="true" />
                <ax21:stringValue xsi:nil="true" />
            </ns:return>
        </ns:boeLogonWithTokenResponse>
    </soapenv:Body>
</soapenv:Envelope>`

Я хотел бы знать, как проанализировать XML, возвращенный с помощью XML-модели SAPUI5.

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Похоже, ваш вопрос хотел знать, как использовать XMLModel (и вы должны были выдержать этот ответ;)), поскольку он проще, чем кажется на первый взгляд, и означает, что вам не нужно конвертировать в JSON.

Создайте экземпляр вашей XMLModel с помощью XML, поставляемого в:

var oModel = new XMLModel();
oModel.loadData("response.xml");

Перейдите к элементу, к которому вы хотите добраться:

var path = "/soapenv:Body/ns:boeLogonWithTokenResponse/ns:return";
oModel.attachRequestCompleted(function(){
        var status = oModel.getProperty(path + "/ax21:status"); 
});
0 голосов
/ 07 июня 2018

Вы можете использовать: (jQuery будет загружен уже с SAPUI5)

var xmlContent =
    `<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <ns:boeLogonWithTokenResponse 
         xmlns:ns="http://webservice.cpb.dqw.sap.com">
            <ns:return xmlns:ax22="http://shared.cpb.dqw.sap.com/xsd" 
             xmlns:ax21="http://types.cpb.dqw.sap.com/xsd" 
             xmlns:ax24="http://types.sdk.boe.dqw.sap.com/xsd" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:type="ax21:CPBAdminResult">
                <ax21:contentUpgradeVersion>0</ax21:contentUpgradeVersion>
                <ax21:cpInfo xsi:nil="true" />
                <ax21:errorData xsi:nil="true" />
                <ax21:intValue xsi:nil="true" />
                <ax21:projectInfo xsi:nil="true" />
                <ax21:reservedData xsi:nil="true" />
                <ax21:status>OK</ax21:status>
                <ax21:stringArray xsi:nil="true" />
                <ax21:stringValue xsi:nil="true" />
            </ns:return>
        </ns:boeLogonWithTokenResponse>
    </soapenv:Body>
</soapenv:Envelope>`;
var res = jQuery.parseXML(xmlContent)
var values = res.getElementsByTagName("ns:return")[0];
var result = {};
for (var i = 0; i < values.children.length; i++) {
    var key = values.children[i].nodeName.replace("ax21:", "");
    result[key] = values.children[i].innerHTML;
}
console.log(result);

Обратите внимание, что это немного грубый способ.

Вы можете преобразовать это в универсальный.

Мое предложение было бы получить сам JSON с сервера вместо этого цирка на UI.

Приветствия!

...