on 05-31-2016 6:25 AM
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)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Mike,
What is the INTERNAL_TYPE for I_AMT?
Regards,
Sunil Dabburi
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Mike,
We are looking into the issue. We will get back as soon as we have an update for you.
Thanks,
Kranti
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
87 | |
10 | |
10 | |
10 | |
7 | |
6 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.