Skip to Content
Author's profile photo Venkatesh Nagarajan

SAP UI5 – Simplified Utility Framework APIs – Input LiveChange Validate and Update

Generic Livechange Event for SAPUI5 Input control

Use cases of this blog/codebase –

  • Validate and Update each character as and when the end-user types each character/digit
  • The need for a generic framework/APIs
  • Re-usable and Scalable codebase

Category: SAPUI5 Development

Code: XML and JavaScript

Files: *.view.xml and *.controller.js or any other utility.js

UI5 Controls:

  • sap.m.Input

Events:

  • Change, liveChange

Advantages:

  • Generic API to Validate and Update Input field as and when the end-user types each character
  • Re-usable and Scalable API

 

Generic LiveChange Event for SAPUI5 Input control – In View.xml Code

<!-- important to add xmlns:customData -->
<core:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m"
xmlns:customData="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"
controllerName="zlocal.view1" xmlns:html="http://www.w3.org/1999/xhtml">
<Page title="Title">
<content>

<Label text="Account Number (Expected: Number only; max length = 6)" />
<Input value="" tooltip="tooltip text"
customData:liveChangeAllow="digits" customData:liveChangeMsgOnInvalidInput="# is not allowed" customData:liveChangeMaxLength="6" liveChange="onLiveChangeInputValidate"/>
			
<Label text="Account Name (Expected: Alphabets only; max length = unlimited)"/>
<Input value="" tooltip="tooltip text"
customData:liveChangeAllow="characters" customData:liveChangeMsgOnInvalidInput="# is not allowed" customData:liveChangeMaxLength="" liveChange="onLiveChangeInputValidate"/>
						
<Label text="5 characters - Uppercase Only" />
<Input value="" tooltip="tooltip text"
customData:liveChangeAllow="uppercase" customData:liveChangeMsgOnInvalidInput="# is not allowed" customData:liveChangeMaxLength="5" liveChange="onLiveChangeInputValidate"/>			
			
<Label text="5 characters - Lowercase Only" />
<Input value="" tooltip="tooltip text"
customData:liveChangeAllow="lowercase" customData:liveChangeMsgOnInvalidInput="# is not allowed" customData:liveChangeMaxLength="5" liveChange="onLiveChangeInputValidate"/>

</content>
</Page>
</core:View>			

Generic LiveChange Event for SAPUI5 Input control – In Controller.js Code

onLiveChangeInputValidate: function(oEvent){
        var inputValue = oEvent.getParameter('value').trim();
	var newValue = inputValue;
						
	//determine the value range that should be allowed
	var sCondition = oEvent.getSource().data()["liveChangeAllow"];
	sCondition = sCondition? sCondition: "";
												
	switch (sCondition){
	    case 'digits':
		newValue = newValue.replace(/[^\d]/g, '');
		break;
	case 'characters': //  /^[A-Za-z]+$/;
		newValue = newValue.replace(/[\d]/g, '');
		break;
	case 'uppercase':
		newValue = newValue.toUpperCase().replace(/[\d]/g, '');
		break;
	case 'lowercase':
		newValue = newValue.toLowerCase().replace(/[\d]/g, '');
		break;								
	case 'signfloat':
	        var firstchar = newValue[0];							
		newValue = newValue.replace(/[^\d.]/g, '');
		if(firstChar == '-' || firstChar == '+'){
		   newValue = firstChar + newValue;
		}
		break;
	case 'CUSTOM_RULE':
		break;
	default: 
		break;							
	}
						
        //determine max length to be allowed
	var maxLength = oEvent.getSource().data()["liveChangeMaxLength"];
	if(maxLength){
		newValue = newValue.substring(0,maxLength);
	}
						
	//warn on invalid input
	var msgOnInvalidInput = oEvent.getSource().data()["liveChangeMsgOnInvalidInput"];
	if(msgOnInvalidInput && (newValue != inputValue)){
		for(var i=0;i<inputValue.length; i++){
			if(newValue[i] != inputValue[i]){
                                msgOnInvalidInput = msgOnInvalidInput.replace('#', inputValue[i]);
				if((sCondition == "uppercase" || sCondition == "lowercase") && newValue[i] && (newValue[i].toString().toUppercase == inputValue[i].toString().toUppercase)){
					msgOnInvalidInput = "auto-converted to " + sCondition;
				}
				if(i == maxLength){
					msgOnInvalidInput = 'Exceeds max length:' + maxLength;
				}
				//alert(msgOnInvalidInput);
				oEvent.getSource().setValue(newValue);								oEvent.getSource().setValueState("Warning");
				oEvent.getSource().setValueStateText(msgOnInvalidInput);
					break;
			}								
	          }
	}else{
		oEvent.getSource().setValue(newValue);
		oEvent.getSource().setValueState("None");
		oEvent.getSource().setValueStateText("");
	}
},

 

Assigned Tags

      1 Comment
      You must be Logged on to comment or reply to a post.
      Author's profile photo Jamie Cawley
      Jamie Cawley

      Hi Venkatesh,

      You can also use the model type class to do the same.

      https://sapui5.hana.ondemand.com/#/topic/91f06be06f4d1014b6dd926db0e91070

      https://sapui5.hana.ondemand.com/#/sample/sap.m.sample.InputChecked/code/C.controller.js

      Regards,

      Jamie