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 可用于其他方式来实现此要求。
我在 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 可用于其他方式来实现此要求。