cancel
Showing results for 
Search instead for 
Did you mean: 
Subscribe

Hi Guru's,

I am having issues with validating input fields, hopefully someone can explain to me what is going wrong because clearly I am doing something wrong .

I have table in the Hana database which allows to enter materials, some of the fields contain weights and these must be entered in whole or decimal values with a maximum of two decimals. so in my hdbdd file I have an entry like this: "NET_DECL_WEIGHT: numbericDecimal;". This numbericDecimal type is defined as an decimal (type numbericDecimal: Decimal(8,2);).

So enough about the table definition, in my controller file I attached the validation handlers as follows:

      // Attaching validation handlers

      sap.ui.getCore().attachValidationError(function (oEvent) {

        oEvent.getParameter("element").setValueState("Error");

        alert("attachValidationError");

      });

      sap.ui.getCore().attachValidationSuccess(function(oEvent){

        oEvent.getParameter("element").setValueState("None");

        alert("attachValidationSuccess");

      });

      sap.ui.getCore().attachFormatError(function(oEvent){

        oEvent.getParameter("element").setValueState("Error");

        alert("attachFormatError");

      });

      sap.ui.getCore().attachParseError(function(oEvent){

        oEvent.getParameter("element").setValueState("Error");

        alert("attachParseError");       

      });

And in my XML view I created an input field as follows:

        <Input value="{

          path: 'NET_DECL_WEIGHT',

          type:'sap.ui.model.odata.type.Decimal',

          formatOptions: {

            minIntegerDigits: 1,

            minFractionDigits: 2,

            maxFractionDigits: 2,

            decimals: 2,

            decimalSeparator: '.',

            roundingMode: 'HALF_CEILING',

            groupingEnabled: false

          }

        }" textAlign="Right" placeholder="{i18n>assignmentPlaceholderWeight}" description="{i18n>assignmentMaterialWeightDesc}" />

The problem is however that the "attachValidationError" event is raised as soon as I type an decimal value in the input field. A comma is seen as a separator and a dot as a decimal. so when I type "1234,5678" then the "attachValidationSuccess" event is raised and the data is converted into "12345678.00". But when I type "1234.5678" the "attachValidationError" event is raised.

Previously I tried the type "sap.ui.model.type.Float" and that one works fine, however, I couldn't save the data back into the database which is caused (I assume) by the fact that the datafield in Hana is a Decimal and I Could not find a way to define it as a Float value.

I don't know if you need any more information, if so please let me know. I am still quiet new with these binding techniques but love to learn how to do this in a correct way since in the past I wrote seperate "onChange" functions for this which I like to avoid if possible.

Kind Regards,

Nico

0 Likes
View Entire Topic
Former Member
0 Likes

Ok I think my original question was not entirely clear, so let me try to rephrase it.

I have a database field which is of type edm.Decimal(8,2), I don't see an option to use Float on Hana so therefore this Decimal type was used.

In sapui5 I use binding to my form, for the decimal fields I want to format them and only allow the correct decimal input. When I only use  <Input value="{ path: 'NET_DECL_WEIGHT' }" /> for the decimal field then it goes fine but it does not save the decimal value. I tried using "type: 'sap.ui.model.type.Float'" then I can use the formatters but as soon as I save the data I get the error:

The serialized resource has an invalid value in member 'NET_DECL_WEIGHT'."

This error is caused (I assume) due to the fact that edm.decimal is not compatible with the sap.ui.model.type.Float type. So I looked around and found that you could use the sap.ui.model.odata.type.Decimal type. But when I use that I get the following issue:

- typing decimals in this input field (e.g. 2.1212) will always generate a validation error (although strangely enough 2.00 works fine...)

So my question is how can I use a decimal input field with validation on the binding and save it back into the database as as edm.Decimal type..