【问题标题】:BI Publisher conditional field maskingBI Publisher 条件字段屏蔽
【发布时间】:2019-01-29 16:18:01
【问题描述】:

我在 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:

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

【问题讨论】:

  • 通常显示的是数字的后四位,而不是隐藏的。每当我在任何地方看到帐号时,它总是显示最后四位数字。
  • 是的,我不是这个意思,问题是一些帐号少于 4 位。

标签: peoplesoft bi-publisher


【解决方案1】:

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 sn-p。

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

【讨论】:

  • 您是否缺少上面的结束 IF &lt;?end if?&gt; ?我设置了 2 个 If 语句,在标题中 if 包含 &lt;?if@inlines:Bank_Account__!=''?&gt; 然后我将嵌套的 If 逻辑放在它旁边的字段上。这是正确的,还是可以将整个 If(对于长度大于 4 的情况)放入主 If 字段?为了清楚起见,我将编辑上面的帖子(编辑 2)...
  • 我已经格式化了之前的答案。外面有一个 If.endif,里面还有两个 if.endif。
  • 谢谢 - 我按照您的建议修改了代码,但是当我尝试预览文件时出现负错误错误。请参阅上面的编辑 3,了解我在字段浏览器中所做的更改以及由此产生的错误消息。在这种情况下,帐号字段只有 3 位数字,因此它应该只屏蔽前 2 位数字。
  • 再次更新答案。在 if 条件中,必须使用 string-length 而不是 length。从这里下载我的文件:transfer.sh/jxd8z/inp.zip
  • @RanjithR 关于您对 BIP 不支持 else 子句的评论:您可以使用 &lt;?choose:?&gt;&lt;?when:expression?&gt;'true'&lt;?end when?&gt;&lt;?otherwise?&gt;'false'&lt;?end otherwise?&gt;&lt;?end choose?&gt; 结构或使用 &lt;?xdoxslt:ifelse(expression, 'true', 'false')?&gt;&lt;?xdofx:if expression then 'true' else 'false'?&gt;
猜你喜欢
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
相关资源
最近更新 更多