Как использовать ответ в HTTP-адаптере шлюза SAP Netweaver?

Я интегрирую SAP и IBM MobileFirst с помощью HTTP-адаптера SAP Netweaver Gateway. Мне удается успешно подключиться к серверной системе SAP, и я получаю данные в формате xml. Это ответ, который я получаю:

{
"RETURN": "<?xml version=\"1.0\" encoding=\"utf-8\"?><app:service xml:base=\"http:\/\/sapecc.mss.com:8000\/sap\/opu\/sdata\/iwfnd\/SampleUserProcessing\/\" xmlns:app=\"http:\/\/www.w3.org\/2007\/app\" xmlns:atom=\"http:\/\/www.w3.org\/2005\/Atom\" xmlns:sap=\"http:\/\/www.sap.com\/Protocols\/SAPData\" xmlns:gp=\"http:\/\/www.sap.com\/Protocols\/SAPData\/GenericPlayer\" xmlns:m=\"http:\/\/schemas.microsoft.com\/ado\/2007\/08\/dataservices\/metadata\"><app:workspace sap:semantics=\"things\"><atom:title>Things<\/atom:title><\/app:workspace><app:workspace sap:semantics=\"data\"><atom:title>Data<\/atom:title><app:collection href=\"RoleCollection\" sap:creatable=\"true\" sap:updatable=\"true\" sap:deletable=\"true\"><atom:title>RoleCollection<\/atom:title><sap:member-title>Role<\/sap:member-title><\/app:collection><app:collection href=\"ImageCollection\" sap:creatable=\"true\" sap:updatable=\"true\" sap:deletable=\"true\"><atom:title>ImageCollection<\/atom:title><sap:member-title>Image<\/sap:member-title><\/app:collection><app:collection href=\"EmailCollection\" sap:creatable=\"true\" sap:updatable=\"true\" sap:deletable=\"true\"><atom:title>EmailCollection<\/atom:title><sap:member-title>Email<\/sap:member-title><\/app:collection><app:collection href=\"ActivitygroupCollection\" sap:creatable=\"true\" sap:updatable=\"true\" sap:deletable=\"true\"><atom:title>ActivitygroupCollection<\/atom:title><sap:member-title>Activitygroup<\/sap:member-title><\/app:collection><app:collection href=\"UserCollection\" sap:creatable=\"true\" sap:updatable=\"true\" sap:deletable=\"true\"><atom:title>UserCollection<\/atom:title><sap:icon>icon<\/sap:icon><sap:member-title>User<\/sap:member-title><atom:link href=\"SubscriptionCollection\" rel=\"http:\/\/www.sap.com\/Protocols\/SAPData\/rel#subscribe\"\/><\/app:collection><app:collection href=\"UserXnotificationCollection\" sap:creatable=\"false\" sap:updatable=\"false\" sap:deletable=\"false\"><atom:title>UserxnotificationCollection<\/atom:title><sap:member-title>UserXnotification<\/sap:member-title><\/app:collection><app:collection href=\"SubscriptionCollection\" sap:semantics=\"subscriptions\" sap:creatable=\"true\" sap:updatable=\"false\" sap:deletable=\"true\"><atom:title>Subscriptions<\/atom:title><sap:icon>\/sap\/public\/opu\/resources\/sap\/iwfnd\/subscription\/icon_subscription.png<\/sap:icon><sap:member-title>Subscription<\/sap:member-title><gp:collectionLayout display-order=\"1000\" top-level=\"true\"\/><\/app:collection><\/app:workspace><app:workspace sap:semantics=\"subscriptions&amp;notifications\"><atom:title>Subscriptions &amp; Notifications<\/atom:title><\/app:workspace><\/app:service>",
    "isSuccessful": true,
    "responseHeaders": {
      "content-type": "application\/xml",
      "dataserviceversion": "2.0",
      "server": "SAP NetWeaver Application Server \/ ABAP 731",
      "x-sap-odata-extension-version": "0.9;gp=0.8"
    },
    "statusCode": 200,
    "statusReason": "OK"
    }

Теперь я хочу выбрать конкретное значение из xml. Может ли кто-нибудь помочь мне в этой области?

function retrieveTravelAgencyProperty() {
var request = {
    CollectionName: "SampleUserProcessing",

};
return WL.Server.fetchNWBusinessObject(request);
}

person Venkatesh Voona    schedule 22.05.2015    source источник


Ответы (1)


Итак, вернемся к вашей клиентской логике: в обратном вызове успешного вызова адаптера вы получаете объект JSON. Этот объект JSON содержит ответ.

Итак, я думаю, что вы должны сделать следующее:

  1. Либо извлечь в другую переменную, либо работать непосредственно с клавишей «ВОЗВРАТ» из ответа и
  2. Снова преобразуйте его в удобочитаемый формат JSON, например: http://davidwalsh.name/convert-xml-json
  3. Переберите обновленный ответ, чтобы найти ключ: значение, которое вы ищете. Например:

    for (i = 0; i < resultSet.length; i++) {
        if (resultSet[i].name == "some-value") { // assumed that you know what you're lookign for.
            alert (resultSet[i].name);
    }
    

Шаг 2 - сложная часть... не уверен в этом.

person Idan Adar    schedule 22.05.2015
comment
По умолчанию я получил этот код, когда создал Adapter , здесь мы не знаем, как проанализировать этот XML-ответ с помощью этих ключей /*code*/ var request = { CollectionName: TravelAgencies, Keys: [{Name: TravelAgencyID, value: параметры .keys.TravelAgencyID}, ], Выберите: parameters.select || [], Расширить: параметры.развернуть || [] }; - person Venkatesh Voona; 22.05.2015