cancel
Showing results for 
Search instead for 
Did you mean: 

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

MikeDoyle
Active Contributor
0 Kudos

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:

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)

Accepted Solutions (0)

Answers (3)

Answers (3)

Vlado
Advisor
Advisor
0 Kudos

Moved to proper space:

Former Member
0 Kudos

Hi Mike,

What is the INTERNAL_TYPE for I_AMT?

Regards,

Sunil Dabburi

MikeDoyle
Active Contributor
0 Kudos

Hi Sunil, which field are you referring to exactly?  Are you talking about something in the Gateway Builder (SEGW)? I'm not referencing an ABAP type for the function import parameter and I'm trying to use EDM Core Type EDM.Double.

kranti_khilari
Participant
0 Kudos

Hi Mike,

We are looking into the issue.  We will get back as soon as we have an update for you.

Thanks,

Kranti