Szukaj…


Wprowadzenie

Kolumny z formułami w zapisanych wyszukiwaniach mogą wykorzystywać wiele funkcji Oracle SQL i HTML. Przykłady pokazują, jak można korzystać z tych funkcji, a także pułapki, których należy unikać.

Instrukcja CASE Oracle SQL we wzorze Netsuite

Za pomocą instrukcji CASE warunkowo wyświetl wyrażenie w kolumnie na podstawie wartości znalezionych w innej kolumnie, czyli „moje królestwo dla OR”. W tym przykładzie wynik jest uzyskiwany, gdy status transakcji to Pending Fulfillment lub Partially Fulfilled Pending Fulfillment :

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

Analizowanie nazwy rekordu hierarchicznego przy użyciu wyrażenia regularnego

Używając wyrażenia regularnego, przeanalizuj nazwę rekordu, która może być hierarchiczna. Wyrażenie szuka ostatniego dwukropka w nazwie. Zwraca to, co następuje po dwukropku lub całą nazwę, jeśli nie ma:

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

Zbuduj złożony ciąg, łącząc wiele pól

Przykład buduje ciąg z nazwy rekordu nadrzędnego, nazwy tego rekordu i notatki tego rekordu.

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

Dostosuj CSS (arkusz stylów) dla kolumny, wstawiając element DIV

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

Chroń formuły strunowe przed atakami korupcyjnymi i iniekcyjnymi

W polu formuły łańcuchowej zastanów się, że niektóre wartości mogą zawierać podciągi, które wyglądają w przeglądarce jak HTML. O ile nie jest to zamierzone, ważne jest, aby chronić wartości przed korupcją. Jest to przydatne, aby uniknąć ataków polegających na wstrzykiwaniu: zapobiega wprowadzaniu kodu HTML w polu komentarza w zamówieniu internetowym, które później jest interpretowane na biurku przedstawiciela działu obsługi klienta.

htf.escape_sc( wyrażenie )

Chroń wartości pól przed uszkodzeniem podczas przechodzenia przez adres URL

utl_url.escape( wyrażenie )

Przetestuj wartość „mainline” w instrukcji SQL CASE

W zapisanej formule wyszukiwania możliwe wartości mainline są przydatne w kontekście HTML. Gdy mainline ma wartość true, wartością {mainline} jest ciąg 1-znakowy * (gwiazdka). Gdy mainline ma wartość false, wartością {mainline} jest ciąg 6 znaków &nbsp; (spacja niełamliwa, HTML zakodowany jako odwołanie do znaku). Te wartości ciągu można porównać z literałami ciągu w kontekście SQL.

CASE
WHEN {mainline} = '*' THEN wyrażenie-kiedy-prawda
WHEN {mainline} = '&nbsp;' THEN wyrażenie-kiedy-fałsz
END

Skomplikowany przykład w świecie rzeczywistym

Poniższy przykład łączy kilka technik tutaj omówionych. Umieszcza hiperłącze w niestandardowo sformatowanej kolumnie, która po kliknięciu otwiera rekord zamówienia sprzedaży powiązany z wierszem. Hiperłącze służy do otwierania rekordu w nowym oknie lub karcie po kliknięciu oraz do wyświetlania podpowiedzi po najechaniu kursorem. Pole internalid używane w adresie URL jest chronione przed kodowaniem adresu URL. Nazwa klienta, jeśli jest dostępna, jest wyświetlana w tej samej kolumnie, chroniona przed kodowaniem 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>'

Policz rekordy z lub bez wartości podanej w polu (policz brakujące i brakujące wartości)

Za pomocą funkcji NVL2() Oracle SQL można utworzyć kolumnę wyświetlającą, która zawiera jedną wartość, jeśli pole zawiera dane, i inną wartość, jeśli pole nie zawiera danych. Na przykład w wyszukiwaniu jednostek zmień obecność głównego adresu e-mail w kolumnę z tekstem:

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

Pozwala to zliczać rekordy sumowane częściowo przez obecność lub brak adresu e-mail:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow