on 06-22-2016 3:11 PM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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...
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: Infinity | the 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 The number is always displayed with exactly |
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
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..
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
What's issue? what u want to achieve?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Jun Wu,
I want these fields to check that only numeric values are added and when more then 2 decimals are entered it should round the second decimal up or down. I don't know how sapui5 handles locales because the app will be used in different countries of which some use 'comma's' and some use 'dots' as a decimal notation.
But my main issue at the moment is that an error in the validation is raised as soon as I enter a decimal value which I don't understand since the type is an odata Decimal type?
actually, what I noticed is that I can write any number ending on .00 and is gives a 'success' message e.g. 1234.00 validates successfull. But when I increase the decimal e.g. to 1234.01 then it gives an validation error... And I have no idea why?
User | Count |
---|---|
86 | |
10 | |
10 | |
9 | |
6 | |
6 | |
6 | |
5 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.