BI Publisher 条件字段屏蔽

BI Publisher conditional field masking

我在 Peoplesoft BI Publisher RTF 模板的字段中有以下代码,它屏蔽了银行帐号的最后 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: 这是我根据您建议的更改进行的设置,但我认为我的逻辑嵌套不正确,语法也可能有问题。

编辑 3:

这里是修改后的代码,产生的错误信息:

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?>

更新:这是我得到的截图:

这是我使用的 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>

here

下载工作文件

有一些 more functions 可用于其他方式来实现此要求。