zoukankan      html  css  js  c++  java
  • 如何给SAP Cloud for Customer UI上的字段添加自定义校验逻辑

    There is a good blog SAP Cloud for Customer Phone Number Parsing and Formatting which gives a detail explanation about the parse logic of phone number parse logic in C4C. By default it allows the Alphanumeric Value to be entered, the reason of this behavior is explained in note 2525818 – In an Account and Contact, the Phone Number Allows Alphanumeric Value.

    However, at least in China, a valid mobile phone number only consists of pure numeric values. The requirement of local customer is whenever the value other than pure number is maintained, the error message will be popped up and the save is terminated.

    The fulfilled scenario is: for example if I input an “A” character in Mobile field and press save button, error message is raised:

    And save is prevented.

    Here below is how to achieve this custom validation logic in Cloud Application Studio.
    Create an extension field phoneInvalidRel in BO BusinessPartnerRelationship, and declare the error message to be raised when invalid digit is detected.

    Implement BeforeSave event. This event is responsible to check whether the mobile phone number consists of pure numeric value and set the check result into extension field phoneInvalidRel, which will be used by onSave Validation later.

    import ABSL;
    
    var phone;
    this.phoneInvalidRel = false;
    
    var BPRelationship = this;
    if ( !BPRelationship.ContactPerson.IsSet())
    	return;
    var contact = BPRelationship.ContactPerson;
    if( !contact.ContactPersonWorkplaceAddressInformation.IsSet())
    	return;
    var workplaceAddress = contact.ContactPersonWorkplaceAddressInformation;
    
    if( !workplaceAddress.ContactPersonWorkplaceAddress.DefaultMobilePhone.IsSet())
    	return;
    phone = workplaceAddress.ContactPersonWorkplaceAddress.DefaultMobilePhone;
    if( phone.FormattedNumberDescription.IsInitial())
    	return;
    if( phone.FormattedNumberDescription.FindRegex("1\d{10}") < 0){
       // raise "Invalid mobile phone number!";
       this.phoneInvalidRel = true;
       raise Error_phone_msg_rel.Create("E", phone.FormattedNumberDescription );
    }
    

    Implement OnSave validation, and simply use the check result stored in extension field phoneInvalidRel.

    import ABSL;
    return !this.phoneInvalidRel;
    

    In the runtime, when I enter “A” in mobile phone field and save, first the BeforeSave event is triggered,

    And then the onSave Validation is called.

    The above implementation could only cover the scenario that end user directly changes the mobile phone number which is technically modelled in BO BusinessPartnerRelationship. There is another possibility that end user will also changes the field on Root node of BO BusinessPartner, as a result the same logic should be done again on BO BusinessPartner as well.

    BeforeSave implementation on BusinessPartner Root node:

    import ABSL;
    
    var phone;
    var common = this.Common.GetFirst();
    common.phoneInvalid = false;
    
    if( !this.CurrentDefaultIsContactPersonFor.IsSet())
    	return;
    var currentDefaultContact = this.CurrentDefaultIsContactPersonFor;
    
    var BPRelationship = currentDefaultContact.BusinessPartnerRelationship;
    if ( !BPRelationship.ContactPerson.IsSet())
    	return;
    var contact = BPRelationship.ContactPerson;
    if( !contact.ContactPersonWorkplaceAddressInformation.IsSet())
    	return;
    var workplaceAddress = contact.ContactPersonWorkplaceAddressInformation;
    
    if( !workplaceAddress.ContactPersonWorkplaceAddress.DefaultMobilePhone.IsSet())
    	return;
    phone = workplaceAddress.ContactPersonWorkplaceAddress.DefaultMobilePhone;
    if( phone.FormattedNumberDescription.IsInitial())
    	return;
    if( phone.FormattedNumberDescription.FindRegex("1\d{10}") < 0){
       // raise "Invalid mobile phone number!";
       common.phoneInvalid = true;
       raise Error_phone_msg.Create("E", phone.FormattedNumberDescription );
    }
    

    OnSave Validation on BusinessPartner Root node:

    import ABSL;
    
    var common = this.Common.GetFirst();
    return !common.phoneInvalid;
    

    要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  • 相关阅读:
    nodejs 文件拷贝
    MySQL linux二进制安装
    【Android工具类】验证码倒计时帮助类CountDownButtonHelper的实现
    JAVA一些基础概念
    程序猿生存定律-公司选择上的方法论
    Leetcode 第 2 题(Add Two Numbers)
    SpringMVC学习记录(五)--表单标签
    算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS
    CentOS 7 virt-manager 无法连接本地的hypervisor
    Android自己定义View画图实现拖影动画
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/13577037.html
Copyright © 2011-2022 走看看