サーチ…


前書き

保存された検索の数式列は、Oracle SQLおよびHTMLの多くの機能を活用できます。これらの機能をどのように使用できるか、回避すべき落とし穴の例を示します。

Netsuite式のOracle SQL CASE文

CASEステートメントを使用すると、別の列にある値(「ORのための私の王国」)に基づいて、条件付きで列に式を表示できます。この例では、トランザクションのステータスが「 Pending Fulfillmentまたは「 Partially Fulfilled場合に結果が取得されます。

CASE DECODE( {status}, 'Pending Fulfillment', 1, 'Partially Fulfilled', 1, 0 )
WHEN 1 THEN 式-1
END

正規表現を使用して階層レコード名を解析する

正規表現を使用して、階層的なレコード名を解析します。式は名前の最後のコロンを探します。コロンの後ろに続くもの、または何もない場合は全体の名前を返します。

regexp_substr( {name} , '[^:]*$' )

複数のフィールドを連結して複雑な文字列を作成する

この例では、親レコードの名前、このレコードの名前、およびこのレコードのメモから文字列を作成します。

{createdfrom} || ' ' || {name} || ' ' || {memo}

DIV要素を挿入して列のCSS(スタイルシート)をカスタマイズする

'<div style="font-size:11pt">' || || '</div>'

ストリング式を破損や注入攻撃から保護する

文字列式フィールドでは、ブラウザにHTMLのような部分文字列を含む値があると考えてください。これが意図的でない限り、価値を腐敗から守ることが重要です。これは注入攻撃を避けるために役立ちます。これは、後で顧客サービス担当者の机上で解釈されるWebオーダーのコメントフィールドにHTMLを入力することを防ぎます。

htf.escape_sc( )

URLを通過するときにフィールド値を破損から保護する

utl_url.escape( )

SQL CASE文で `mainline`の値をテストする

保存された検索式では、 mainlineの可能な値はHTMLコンテキストで役立つように設計されています。 mainlineがtrueの場合、 {mainline}値は1文字の文字列* (アスタリスク)です。 mainlineがfalseの場合、 {mainline}値は6文字の文字列&nbsp; (改行なしのスペース、文字エンティティ参照としてエンコードされたHTML)。これらの文字列値は、SQLコンテキストの文字列リテラルと比較できます。

CASE
WHEN {mainline} = '*' THEN expression-when-true
WHEN {mainline} = '&nbsp;' THEN expression-when-false
END

複雑で実世界的な例

次の例では、ここで取り上げるいくつかの手法を組み合わせています。クリックすると、行に関連付けられた受注レコードが開きます。ハイパーリンクは、クリックすると新しいウィンドウまたはタブでレコードを開き、ホールドされたときにツールチップを表示するように設計されています。 URLで使用されるinternalidフィールドは、URLエンコーディングから保護されています。利用可能な場合、顧客名はHTMLコーディングから保護された同じ列に表示されます。

'<div style="font-size:11pt">'
 ||
CASE {mainline}
WHEN '*' THEN '<br>' || htf.escape_sc( regexp_substr( {name} , '[^:]*$' ) ) || '<br>'
END
 ||
'<a alt="" title="Open the order associated with this line." '
 ||
'href="javascript:void(0);" onClick="window.open('''
 ||
'https://system.na1.netsuite.com/app/accounting/transactions/transaction.nl?id='
 ||
utl_url.escape( {internalid} )
 ||
''' , ''_blank'' )">'
 ||
{number}
 ||
'</a>'
 ||
'</div>'

フィールドに値が指定されている場合と指定されていない場合のレコードをカウントする(欠落していない値と欠損していない値をカウントする)

Oracle SQLのNVL2()関数を使用すると、フィールドにデータが含まれている場合は1つの値を、フィールドにデータが含まれていない場合は別の値を含む表示列を作成できます。たとえば、エンティティ検索では、プライマリ電子メールアドレスの存在をテキスト表示列に変換します。

NVL2( {email} , 'YES' , 'NO' )

これにより、電子メールアドレスの有無によって小計されたレコード数をカウントできます。

Field: Internal ID
Summary Type: Count

Field: Formula (Text)
Summary Type: Group
Formula: NVL2( {email} , 'YES' , 'NO' )


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow