Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 2801

HCI OData Provisioning function import call: String index out of range: 0

$
0
0

I'm developing a bespoke Fiori app which is consuming an OData service on ECC via HCI OData provisioning.  I am already calling function imports successfully but when I try to call a function import with an amount parameter (set to 3 decimal places) I get the following message:

 

String index out of range: 0

 

I am passing the amount as a JavaScript number type:

 

incrementTotal: function(path) {

  var dataModel = this.getModel("data");

        if (dataModel) {

             var item = dataModel.getProperty(path);

        }  

     

        if (item) {

        var amount = parseFloat(item.newCount).toFixed(this.INTERNAL_DECIMAL_PLACES);

        this.callIncrementTotal(item.DocNo, item.FiscalYear,item.ItemNo, amount, item.Unit);

        }

  },

 

  callIncrementTotal: function(docNo, fiscalYear, itemNo, amount, unit) {

 

      var oComponentController = this;

 

      var urlParams = {   I_DOC_NO: docNo,

                 I_YEAR: fiscalYear,

                 I_ITEM_NO: itemNo,

                 I_AMT: amount,

                 I_UNIT: unit };

               

  this.getModel().callFunction( "/IncrementTotal",

      { urlParameters: urlParams,

      async: true,            

                     success: function(oData) {

                   

                  },

                 error: function(oResult) {

 

 

                 } 

      });              

  },

 

You can see that the screen fields are mapped to a JSON model. My function import parameters look like this:

 

FunctionImportParameters.jpg

 

Now, if I change the I_AMT parameter from a Double to an Int32, and set the JavaScript value to zero-decimals it works fine.  However, I need 2 decimal places for this field.  Of course I could multiply the value by 100 before the call but I don't want to have to do that.  I like to do things properly.

 

I have tried lots of combinations of Double, Decimal and Float types (always clearing the HCI metadata cache in between) and none seem to work.  As soon as I switch it back to Int32 it works.

 

I have already tested this function import on the gateway client (on ECC with service maintained there) and it worked.

 

I have very tight timescales so if anyone can help I would be very grateful.

 

Here is the complete error from HCI

Service Details

Backend HTTP Status

500

Backend System

DEV

Backend HTTP Status

500

Backend System

DEV

Service Name

Z_INV_SRV

Service Namespace

SAP

Service Version

1

Log Entry

Transaction ID

c0827039-7112-4952-988f-223f4abf88f8

Log Level

ERROR

Text

String index out of range: 0

Long Text

Request URL: https://gwaas-c0ad1b2ff.ap1.hana.ondemand.com/odata/SAP/Z_INV_SRV/$batch

Time Stamp

31 May 2016, 14:48:51

Error Category

 

Language

en

 

java.lang.StringIndexOutOfBoundsException: String index out of range: 0

  at java.lang.String.charAt(String.java:711)

  at com.sap.gateway.core.bep.xml.AbapType.getType(AbapType.java:77)

  at com.sap.gateway.core.bep.o4sap.Utils.getKeyConverter(Utils.java:19)

  at com.sap.gateway.core.bep.request.RequestInfo.addParameterToMaps(RequestInfo.java:750)

  at com.sap.gateway.core.bep.request.RequestInfo.setFunctionImport(RequestInfo.java:727)

  at com.sap.gateway.core.bep.request.RequestInfo.initialize(RequestInfo.java:488)

  at com.sap.gateway.core.bep.request.RequestInfo.<init>(RequestInfo.java:153)

  at com.sap.gateway.core.bep.dp.DataProvider.createRequestInfo(DataProvider.java:452)

  at com.sap.gateway.core.bep.dp.DataProvider.getExecuteFunctionImportRequestInfo(DataProvider.java:787)

  at com.sap.gateway.core.bep.dp.DataProvider.createBatchInfos(DataProvider.java:687)

  at com.sap.gateway.core.bep.dp.DataProvider.executeBatch(DataProvider.java:604)

  at com.sap.gateway.core.api.provider.data.GenericODataProcessor.executeBatch(GenericODataProcessor.java:1922)

  at org.apache.olingo.odata2.core.Dispatcher.dispatch(Dispatcher.java:190)

  at org.apache.olingo.odata2.core.ODataRequestHandler.handle(ODataRequestHandler.java:130)

  at org.apache.olingo.odata2.core.rest.ODataSubLocator.handle(ODataSubLocator.java:164)

  at org.apache.olingo.odata2.core.rest.ODataSubLocator.handlePost(ODataSubLocator.java:86)

  at sun.reflect.GeneratedMethodAccessor300.invoke(Unknown Source)

  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

  at java.lang.reflect.Method.invoke(Method.java:606)

  at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)

  at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)

  at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:198)

  at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:261)

  at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100)

  at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)

  at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94)

  at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)

  at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)

  at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)

  at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)

  at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203)

  at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)

  at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)

  at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243)

  at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:163)

  at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)

  at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219)

  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)

  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

  at com.sap.gateway.core.service.servlet.OpenSearchFilter.doFilter(OpenSearchFilter.java:42)

  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

  at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

  at com.sap.core.communication.server.CertValidatorFilter.doFilter(CertValidatorFilter.java:151)

  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

  at com.sap.core.js.csrf.RestCsrfPreventionFilter.doFilter(RestCsrfPreventionFilter.java:95)

  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

  at com.sap.gateway.core.service.filter.ProxyFilter.doFilter(ProxyFilter.java:48)

  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)

  at org.eclipse.virgo.web.enterprise.security.valve.OpenEjbSecurityInitializationValve.invoke(OpenEjbSecurityInitializationValve.java:44)

  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614)

  at com.sap.core.jpaas.security.auth.service.lib.AbstractAuthenticator.invoke(AbstractAuthenticator.java:168)

  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)

  at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)

  at com.sap.core.tenant.valve.TenantValidationValve.invokeNextValve(TenantValidationValve.java:168)

  at com.sap.core.tenant.valve.TenantValidationValve.invoke(TenantValidationValve.java:94)

  at com.sap.js.statistics.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:38)

  at com.sap.core.js.monitoring.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:27)

  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)

  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)

  at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)

  at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)

  at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)

  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

  at java.lang.Thread.run(Thread.java:812)


Viewing all articles
Browse latest Browse all 2801

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>