BI Publisher - условное маскирование полей - PullRequest
0 голосов
/ 29 января 2019

У меня есть следующий код в поле в шаблоне RTF Peoplesoft BI Publisher, где оно маскирует последние 4 цифры номера банковского счета.

<?xdofx:lpad('',length(Bank_Account__)-4,'*')?> 
<?xdoxslt:rtrim(xdoxslt:right(Bank_Account__,4))?>

Проблема в том, что иногда общая длина номера банковского счета составляет менее 4 цифр, и когда это происходит, это вызывает ошибку отрицательного массива в функции lpad.

Могу ли я обернуть вокруг него какую-то условную инструкцию IF, где она проверит длину номера банковского счета и, если он длиннее 5 цифр, чем маскирует последние 4 цифры, иначе (для номеров банковских счетов меньшечем 5 цифр) просто замаскируйте последние 2 цифры.Как бы это выглядело?

Заранее спасибо!

РЕДАКТИРОВАТЬ:

Я должен добавить, что существующий код выше уже включен в следующуюОператор IF:

<?if@inlines:Bank_Account__!=''?>

Таким образом, весь оператор выглядит следующим образом:

<?if@inlines:Bank_Account__!=''?>
    <?xdofx:lpad('',length(Bank_Account__)-4,'*')?> 
    <?xdoxslt:rtrim(xdoxslt:right(Bank_Account__,4))?>
<?end if?>

Я просто хотел бы добавить условную логику для проверки длины банковского счета и последующего выполнения любого из вышеперечисленныхмаскировка.

РЕДАКТИРОВАТЬ 2: Вот мои настройки с вашими предлагаемыми изменениями, но я не думаю, что у меня есть правильная вложенная логика, и синтаксис также может быть проблемой.

enter image description here

Редактировать 3:

Вот модифицированный код и полученное сообщение об ошибке:

enter image description here

enter image description here

1 Ответ

0 голосов
/ 30 января 2019

Операторы if могут быть вложенными, но поскольку в BIP нет условия else, второе условие if должно проверять наличие отрицательного регистра.

Возможно, это может сработать:

<?if@inlines:Bank_Account__!=''?>
    <?if@inlines:string-length(Bank_Account__)>4?>
        <?xdofx:lpad('',length(Bank_Account__)-4,'*')?><?xdoxslt:rtrim(xdoxslt:right(Bank_Account__,4))?>
    <?end if?>
    <?if@inlines:string-length(Bank_Account__)<=4?>
        <?xdofx:lpad('','2','*')?><?xdoxslt:rtrim(xdoxslt:right(Bank_Account__,string-length(Bank_Account__)-2))?>
    <?end if?>
<?end if?>

Обновление: вот скриншот того, что я получил:

enter image description here

Вот фрагмент кода xml, который я использовал.

<?xml version="1.0"?>
<root>
  <record>
    <Bank_Account__>123456</Bank_Account__>
  </record>
    <record>
    <Bank_Account__>12345</Bank_Account__>
  </record>
    <record>
    <Bank_Account__>1234</Bank_Account__>
  </record>
    <record>
    <Bank_Account__>123</Bank_Account__>
  </record>
    <record>
    <Bank_Account__>12</Bank_Account__>
  </record>
</root>

Загрузите рабочие файлы с здесь

Есть несколько дополнительных функций , доступных для других способов реализации этого требования.

...