четверг, 23 мая 2013 г.

Корректировка введенного пользователем значения до сохранения в BC

Задача, при вводе пользователем кривой(некорректной) даты рождения скорректировать ее и отобразить пользователю на экран без сохранения записи.


Чтобы это сделать, необходимо на поле БК(BusinessComponent) установить параметр Immediate Post Change = TRUE
Затем добавить ServerScript на эту компоненту на событие BusComp_PreSetFieldValue.
Скрипт должен подменять значение на корректное.
Пример скрипта по исправлению даты рождения:
function BusComp_PreSetFieldValue (FieldName, FieldValue)
{
//свойство поля Birth Date: Immediate Post Change = TRUE, иначе пользователь не увидит изменений
    var s:String=FieldValue;
    var d:Date=new Date();
    var fR:float=ContinueOperation;
    if (FieldName=="Birth Date")
    {
        if (s.substr(s.length-4,4)==d.getFullYear())
        {
        this.SetFieldValue("Birth Date",s.replace(d.getFullYear(),"1900"));
        fR=CancelOperation;
        }
        else if (s.substr(s.length-4,4)>d.getFullYear())
        {
        this.SetFieldValue("Birth Date",s.substr(0,s.length-4)+"19"+s.substr(s.length-2,2));
        fR=CancelOperation;
        }    
    }    
    d=null;
    s=null;
    return (fR);
} 
Данный код подменяет дату на 1900, если пользователь не указал год (т.е. там указан текущий год) и заменяет первые два символа года, если год в дате находится в будущем, например:
Скажем сегодня 2013 год,
вы ввели: 17.04.2013 или просто 17.04 в результате получаем 17.04.1900
вы ввели: 17.04.2083 в результате получаем 17.04.1983

Данный код позволяет исправить такую неприятную особенность:
При обычном вводе даты в Siebel с неполным годом, он дополняет год текущим веком
например 17.04.38 в результате даст 17.04.2038
при использовании данного скрипта мы получим 17.04.1938, что нам и требуется.


2 комментария:

  1. Более точно, дополняет не текущим веком - а от 1950 до 2050.
    http://docs.oracle.com/cd/E16348_01/books/eScript/methods_reference55.html

    ОтветитьУдалить
  2. Не могу ни подтвердить не опровергнуть ваш комментарий, т.к. автоматическая подмена даты осуществляется не в eScript, а на уровне ActiveX контрола использующегося в HighInteractivity

    ОтветитьУдалить