मैं SAPUI5 के साथ OData V4 का उपयोग करने का प्रयास कर रहा हूं। हालांकि यह काफी सीधा लगता है, मुझे कुछ मुद्दों का सामना करना पड़ रहा है।

मैं डेमोकिट से sap.ui.layout.sample.SimpleFormToolbar नमूना का उपयोग कर रहा हूं। डेटा को सरल रूप में प्रदर्शित करने के लिए OData V4 सेवा लागू की।

मैंने इस ऐप में जो बदलाव किए हैं:
1. मेनिफेस्ट.जेसन और
2. प्रपत्र नियंत्रण के संदर्भ बंधन के लिए Page.view.xml
3. कंट्रोलर और index.html
. में मॉकडेटा का कोड संदर्भ हटा दिया गया है

हालांकि, मैं निम्नलिखित त्रुटियों के साथ डेटा प्राप्त करने में सक्षम नहीं हूं:

2019-07-07 08:58:23.736110 Failed to update path /Suppliers(12345)/Country - **Error: Must not change a property before it has been read**

**Uncaught Error: Must not change a property before it has been read**

एक अन्य त्रुटि संबंधित बैच मोड है। मैंने ओडाटा इंप में कोई बैच प्रोसेसिंग लागू नहीं की है।

2019-07-07 08:58:24.279114 **$batch failed** - Error: Network error
2019-07-07 08:58:24.281175 Failed to read path /Suppliers(12345) - Error: **HTTP request was not processed because $batch failed**

Kode yang saya gunakan adalah:

// मेनिफेस्ट.जेसन

{
    "_version": "1.12.0",
    "sap.app": {
        "id": "sap.ui.layout.sample.SimpleFormToolbar",
        "applicationVersion": {
            "version": "1.0.0"
        },
        "dataSources": {
          "supplierOData": {
            "uri": "https://supplierappp1014576trial.hanatrial.ondemand.com/SupplierApp/SupplierService.svc/",
            "type": "OData",
            "settings": {
              "odataVersion": "4.0"
            }
          }
        }
    },
    "sap.ui5": {
        "rootView": {
            "viewName": "sap.ui.layout.sample.SimpleFormToolbar.Page",
            "type": "XML",
            "async": true
        },
        "dependencies": {
            "libs": {
                "sap.ui.layout": {}
            }
        },
        "models": {
            "": {
                "dataSource": "supplierOData",
                "settings" : {
                    "synchronizationMode" : "None"
                }
            }
        },
        "config": {
            "sample": {
                "files": [
                    "Page.view.xml",
                    "Page.controller.js",
                    "manifest.json"
                ]
            }
        }
    }
}

// पेज.व्यू.एक्सएमएल

<mvc:View
    controllerName="sap.ui.layout.sample.SimpleFormToolbar.Page"
    xmlns:l="sap.ui.layout"
    xmlns:f="sap.ui.layout.form"
    xmlns:mvc="sap.ui.core.mvc"
    xmlns:core="sap.ui.core"
    xmlns="sap.m">
    <VBox class="sapUiSmallMargin">
        <f:SimpleForm id="SimpleFormToolbar"
            binding="{/Suppliers(12345)}"
            editable="true"
            layout="ResponsiveGridLayout"
            labelSpanXL="4"
            labelSpanL="3"
            labelSpanM="4"
            labelSpanS="12"
            adjustLabelSpan="false"
            emptySpanXL="0"
            emptySpanL="4"
            emptySpanM="0"
            emptySpanS="0"
            columnsXL="2"
            columnsL="1"
            columnsM="1"
            singleContainerFullSize="false"
            ariaLabelledBy="Title1" >
            <f:toolbar>
                <Toolbar id="TB1">
                    <Title id="Title1" text="Address" level="H4" titleStyle="H4"/>
                    <ToolbarSpacer />
                    <Button icon="sap-icon://settings"/>
                    <Button icon="sap-icon://drop-down-list" />
                </Toolbar>
            </f:toolbar>
            <f:content>
                <Toolbar ariaLabelledBy="Title2">
                    <Title id="Title2" text="Office" level="H5" titleStyle="H5"/>
                    <ToolbarSpacer />
                    <Button icon="sap-icon://settings"/>
                </Toolbar>
                <Label text="Name" />
                <Input value="{SupplierName}" />
                <Label text="Street/No." />
                <Input value="{Street}">
                </Input>
                <Input value="{HouseNumber}">
                    <layoutData>
                        <l:GridData span="XL2 L1 M3 S4" />
                    </layoutData>
                </Input>
                <Label text="ZIP Code/City" />
                <Input value="{ZIPCode}">
                    <layoutData>
                        <l:GridData span="XL2 L1 M3 S4" />
                    </layoutData>
                </Input>
                <Input value="{City}" />
                <Label text="Country" />
                <Select id="country" selectedKey="{Country}">
                    <items>
                        <core:Item text="England" key="England"/>
                        <core:Item text="Germany" key="Germany"/>
                        <core:Item text="USA" key="USA"/>
                    </items>
                </Select>
                <Toolbar ariaLabelledBy="Title3">
                    <Title id="Title3" text="Online" level="H5" titleStyle="H5"/>
                    <ToolbarSpacer />
                    <Button icon="sap-icon://settings"/>
                </Toolbar>
                <Label text="Web" />
                <Input value="{Url}" type="Url" />
                <Label text="Twitter" />
                <Input value="{Twitter}" />
            </f:content>
        </f:SimpleForm>
    </VBox>
</mvc:View>

// पेज.कंट्रोलर.जेएस

sap.ui.define([
        'jquery.sap.global',
        'sap/ui/core/mvc/Controller',
        'sap/ui/model/json/JSONModel',
        'sap/ui/model/odata/v4/ODataModel'
    ], function(jQuery, Controller, JSONModel, ODataModel) {
    "use strict";

    var PageController = Controller.extend("sap.ui.layout.sample.SimpleFormToolbar.Page", {

        onInit: function (oEvent) {
            console.log("hello");

            jQuery.get({
                url: "/SupplierService/SupplierService.svc/Suppliers(12345)",
                success: function(data) {
                    console.log( "Recieved data: " + data);
                },
                error: function(error) {
                    // your error logic
                    console.log("Error while requesting odata: " + error);
                }
            });


        }

    });


    return PageController;

});

//index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="expires" content="0">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Fullscreen – with toolbar</title>

    <script id="sap-ui-bootstrap"
        src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
        data-sap-ui-theme="sap_belize"
        data-sap-ui-resourceroots='{
            "sap.ui.layout.sample.SimpleFormToolbar": "./",
            "sap.ui.demo.mock": "mockdata"
        }'
        data-sap-ui-compatVersion="edge"
        data-sap-ui-async="true"
        data-sap-ui-preload=""
        data-sap-ui-frameOptions="trusted"
        data-sap-ui-oninit="module:sap/ui/core/ComponentSupport">
    </script>
</head>

<body class="sapUiBody" id="content">
    <div data-sap-ui-component
        data-name="sap.ui.layout.sample.SimpleFormToolbar"
        data-height="100%"
        data-id="container"
        data-settings='{"id" : "sap.ui.layout.sample.SimpleFormToolbar"}'
        style="height: 100%">
    </div>
</body>
</html>

ओडाटा काम कर रहा है या नहीं, यह देखने के लिए मैंने सिर्फ jQuery कॉल जोड़ा है।

CORS समस्या के लिए प्रयुक्त कमांड: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --disable-gpu --user-data-dir=~/chromeTemp

मैं वास्तव में उसी परियोजना में ओडाटा सेवा की ओर इशारा कर रहा हूं। इसे सैप क्लाउड पर तैनात किया गया है: https://supplierappp1014576trial.hanatrial.ondemand.com /SupplierApp/SupplierService.svc/

आपके समय के लिए धन्यवाद।

  • संपादित करें:

समाधान को नीचे दिए गए उत्तर के रूप में जोड़ा गया।

1
Gana 7 जुलाई 2019, 06:59

1 उत्तर

सबसे बढ़िया उत्तर
  • त्रुटि:

    "किसी संपत्ति को पढ़ने से पहले उसे नहीं बदलना चाहिए" को CORS समस्या समझा जाता है। सर्वर साइड पर क्रॉस ओरिजिनल अनुरोधों को स्वीकार करना web.xml को कॉन्फ़िगर करके किया जा सकता है। ध्यान दें कि उत्पादन के उपयोग के लिए इसका पुनर्मूल्यांकन किया जाना चाहिए।

<filter>
          <filter-name>CorsFilter</filter-name>
          <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>CorsFilter</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
  • त्रुटि:

    "$batch विफल - त्रुटि: नेटवर्क त्रुटि" का समाधान groupId को $direct में बदलकर किया जाता है। इसका मतलब है कि हम अलग-अलग नेटवर्क कॉल्स ओडाटा सर्विस को भेज रहे हैं।


"models": {
            "": {
                "dataSource": "supplierOData",
                "settings" : {
                    "synchronizationMode" : "None",
                    "groupId": "$direct"
                }
            }
        },

इसने उन त्रुटियों को दूर कर दिया और मुझे लगता है कि डेटा फॉर्म फ़ील्ड में प्रस्तुत किया गया है।

ध्यान देने के लिए आपको धन्यवाद।

1
Community 20 जून 2020, 12:12