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

RowIdNumToRowId и Base36

Все идентификаторы в Siebel хранятся в 36-ричной системе счисления.
В Siebel, есть стандартная функция RowIdToRowIdNum (<Id>), она преобразует Id из 36-ричной кодировки в 10-ричную. Но по каким-то соображениям обратного преобразования не предусмотрено. Такое преобразование легко делается на eScript.

Ниже приведено два скрипта, первый из них описывает обратную функцию преобразования, второй простую перекодировку из 10-ричной в 36-ричную систему счисления.
Функция конвертации RowIdNum в RowId:
function RowIdNumToRowId(sRowIdNum:String):chars
{
var aArr:Array=sRowIdNum.split("-");
var cResult:chars="";
var cPrefix:chars="";
if(aArr.length>1)
{
    var fDecmal:float;
    var sArr36:String="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    fDecmal=aArr[0];
    while(fDecmal>35)
    {
        cPrefix=sArr36[fDecmal % 36]+cPrefix;
        fDecmal=Math.floor(fDecmal/36);
    }
    cPrefix=sArr36[fDecmal]+cPrefix;
    fDecmal=aArr[1];
    while(fDecmal>35)
    {
        cResult=sArr36[fDecmal % 36]+cResult;
        fDecmal=Math.floor(fDecmal/36);
    }
    cResult=cPrefix+"-"+sArr36[fDecmal]+cResult;
}
aArr=null;
return cResult;
}
Функция преобразования из 10-ричной в 36-ричную систему счисления:
function ToBase36(Base10:float):chars
{
var fDecmal:float=Base10;
var cResult:chars="";
var sArr36:String="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
while(fDecmal>35)
{
cResult=sArr36[fDecmal % 36]+cResult;
fDecmal=Math.floor(fDecmal/36);
}
cResult=sArr36[fDecmal]+cResult;
return cResult;
}

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

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. только что понадобилось:


    WScript.Echo(NumToRowId("32189444993-671-1723953981"));




    function NumToRowId(num)
    {
    try
    {
    var arr = num.split("-");
    var i = 0;
    for (i; i < arr.length; i++)
    arr[i] = parseInt(arr[i]).toString(36);
    return arr.join("-").toUpperCase();
    }
    finally
    {
    arr = null;
    }
    }

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