【Salesforce】数式のCONTAINSについて
Visualfoce上で数式の「CONTAINS」を使用したところ、思わぬ挙動をしたのでメモです。
CONTAINSといえば、Stringにもあるように文字列中に別の文字列が含まれるかを返す数式です。
戻り値は、もちろんBoolean型が返ってくるものと思っていました。
そこで、Visualforceにこういう記述をしてみます。
<div>パターン1:{!CONTAINS('aaa', 'bbb')}</div> <div>パターン2:{!CONTAINS('aaa', '')}</div> <div>パターン3:{!CONTAINS('', 'bbb')}</div> <div>パターン4:{!CONTAINS('', '')}</div>
こちらは作成されたHTMLです。
見て分かるように、パターン3の結果にBooleanの値が入っていません。
<div>パターン1:false</div> <div>パターン2:true</div> <div>パターン3:</div> <div>パターン4:true</div>
どうやら、第一引数の中身が空白の場合に起きるようです。
VisualforceタグのrenderedにCONTAINSの結果のみを指定した際に、思わぬ動きになってしまいました。
これの結果は、パターン1もパターン2も表示されました。
<apex:variable value="" var="var" /> <apex:outputText value="パターン1" rendered="{!CONTAINS(var, 'aaa')}" /> <apex:outputText value="パターン2" rendered="{!!CONTAINS(var, 'aaa')}" />
回避策としては、こうでしょうか。
varに「aaa」が含まれていればパターン1、varが空白か「aaa」が含まれていなければパターン2が表示されます。
この場合はvarが空白であるため、パターン2が表示されます。
<apex:variable value="" var="var" /> <apex:outputText value="パターン1" rendered="{!var != '' && CONTAINS(var, 'aaa')}" /> <apex:outputText value="パターン2" rendered="{!var == '' || !CONTAINS(var, 'aaa')}" />
正確には、varの空白確認はISBLANKの方がいいかもしれませんね。
No comments.