cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

binding type with decimal

Former Member
0 Likes
9,289

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

View Entire Topic
Former Member
0 Likes

Hi,

Please take a look on this on how to use the Odata Types : OData Types - User Interface Add-On for SAP NetWeaver - SAP Library

Might be adding constraints solves your problem.

Thanks

Viplove

Former Member
0 Likes

Thanks for your reply but it would sounds strange that adding constraints would remove my validation errors? Anyway I gave it a quick try by changing the xmlview to:

value="{ path: 'NET_DECL_WEIGHT', type: 'sap.ui.model.odata.type.Decimal', constraints: {maximum: 3000} }"

but even when I add more then 3000 it still validates successfully while typing 21.21 immediately validates with an error...

Former Member
0 Likes

Hi Viplove,

I continued to struggle and found out that under the constraints area in the API guide SAP mentions the following:

{int|string}oConstraints.precision?, Default: Infinitythe maximum number of digits allowed in the property’s value
{int|string}oConstraints.scale?the maximum number of digits allowed to the right of the decimal point; the number must be less than precision (if given). As a special case, "variable" is supported.

The number of digits to the right of the decimal point may vary from zero to scale, and the number of digits to the left of the decimal point may vary from one to precision minus scale.

The number is always displayed with exactly scale digits to the right of the decimal point (unless scale is "variable").

Although the question marks (as far as I know) mean that they are optional I did find the message saying that the scale should be less  then the precision interesting since the precision has a default value while the scale does not.

So I tried to add the scale constraint to e.g. 50 (since the formatting already takes care of reducing the amount of decimals) and all of a sudden it works :-). So thanks for your answer because although it didn't immediately solve my issue it put me in the right direction..I still wonder though if this isn't simply a bug because I still do not understand why I should use a scale constraint if I don't even want one.

Kind Regards,

Nico van der Linden