Węzły i atrybuty schematu
W przypadku definicji obiektu biznesowego, celem schematu jest tworzenie łącza pomiędzy schematem a obiektem obsługi. Dla definicji usługi biznesowej określa się łącze pomiędzy schematem a usługą (usługą ogólną, usługą wyszukiwania lub usługą obiektu obsługi). W przypadku definicji skryptu usługi, definiuje się interfejs APO do przekazywania informacji ze skryptu i do skryptu. Ta dokumentacja zawiera pełną listę węzłów i atrybutów XML dostępnych podczas tworzenia schematu.
Omawiane tematy
Uwagi dot. czasu standardowego
Ustawianie wartości domyślnych i zmienne systemowe
Rozszerzenie zabezpieczeń na skrypt usługi
Czynność nadpisania usługi biznesowej
Określanie atrybutu searchBy dla usługi wyszukiwania
Cztery typy elementów
Element schematu może należeć do jednego z czterech różnych typów struktur. Należy pamiętać, że są dostępne dwie klasy typów elementów: Grupa i lista węzłów strukturalnych oraz dane zawierające węzły pola oraz wartości niesformatowane.
Mnemonik | Poprawne wartości | Opis | Przykłady |
---|---|---|---|
type= | "field" |
Typ pola to domyślny typ dla dowolnego elementu nieoznaczonego jawnie jako coś innego niż pole. W związku z tym praktycznie nigdy nie jest wymagane jawne oznaczanie elementu jako pola. Należy pamiętać, że element pola, w przeciwieństwie do grupy lub listy, będzie zawierał informacje na temat własnych węzłów, a nie innych węzłów. |
|
"group" |
Element grupy jest zazwyczaj elementem strukturalnym tylko schematu i w takim przypadku nie ma on odwzorowania. Należy pamiętać, że podczas grupowania wielu elementów używanych do odwzorowywania struktury XML pola CLOB/XML rekordu bazującego na obiekcie biznesowym, odwzorowanie może występować na poziomie grupy. |
Przykład tworzenia struktury przy użyciu grupy:
Przykład, w którym grupa zawiera odwzorowanie:
|
|
"list" |
Węzeł listy jest węzłem strukturalnym, tak jak węzeł grupy. Jedyna różnica polega na tym, że struktura listy ma możliwość wielokrotnego powtarzania w ramach dokumentu XML. |
Przykład schematu z listą:
Przykład schematu z listą:
|
|
"raw" |
Typ danych nieprzetworzonych używany do pobierania części nieprzetworzonego tekstu, który nie ma właściwej struktury powiązanej ze sobą. |
Przykład wystąpienia XML dla powyższego schematu:
|
Typ danych elementu pola
Spośród czterech różnych typów elementów, tylko pole może mieć typ danych.
Mnemonik | Poprawne wartości | Opis | Przykłady |
---|---|---|---|
dataType= | "string" |
Domyślnie element pola jest ciągiem znaków. Dlatego nie jest wymagane określenie typu danych "ciąg znaków". |
|
"number" |
Służy do definiowania elementu, który jest liczbą. Uwaga: Wskazówki dot. interfejsu użytkownika zawierają ustawienie umożliwiające Pomijanie automatycznego formatowania liczb.
Uwaga: Należy używać atrybutu currencyRef na potrzeby automatycznego wyświetlania symbolu waluty, powiązanego z kodem waluty, do którego istnieje odwołanie. Pozycje dziesiętne waluty są ignorowane w ramach tego formatowania, dzięki czemu można wyświetlać symbol waluty dla kursu jednostki z wieloma miejscami dziesiętnymi.
|
Przykłady
|
|
"money"
Opcjonalne atrybuty dodatkowe currencyRef="element name" |
Służy do definiowania elementu, który odzwierciedla kwotę pieniężną. Odwołanie do waluty jest opcjonalne, a jeśli pozostanie puste zostanie użyta waluta podana podczas instalacji. Automatyczne formatowanie i walidacja do zastosowania na podstawie waluty. Na przykład symbol waluty zostanie pokazany podczas automatycznego renderowania. Ponadto, liczba miejsc dziesiętnych nie może przekraczać prawidłowej liczby zdefiniowanej dla waluty. Uwaga: Więcej informacji na temat obsługiwanej składni dotyczącej odwoływania się do innych elementów można znaleźć w sekcji Odwołania do innych elementów.
|
|
|
"lookup"
Wymagany dodatkowy atrybut lookup="field name" |
Służy do definiowania elementu, który ma prawidłowe wartości zdefiniowane za pomocą listy wartości. Pole listy wartości jest wymagane. |
|
|
"lookupBO"
Wymagany dodatkowy atrybut lookupBO="bo name" |
Służy do definiowania elementu, który ma prawidłowe wartości zdefiniowane za pomocą rozszerzanej listy wartości. Obiekt biznesowy rozszerzanej listy wartości jest wymagany. |
|
|
"boolean" |
Służy do definiowania elementu o wartościach "Y" i "N". |
|
|
"date" |
Służy do definiowania elementu, który odzwierciedla datę. |
|
|
"dateTime" |
Służy do definiowania elementu, który odzwierciedla datę i godzinę. Uwaga: Więcej informacji o dodatkowej konfiguracji pól daty/godziny odzwierciedlających standardowy czas można znaleźć w sekcji Uwagi dot. czasu standardowego.
|
|
|
"time" |
Służy do definiowania elementu, który odzwierciedla godzinę. |
|
|
"uri" |
Służy do definiowania elementu przechwytującego identyfikator URI. Elementy zdefiniowane za pomocą tego typu umożliwiają obsługę listy dozwolonych identyfikatorów URI i zastępowania identyfikatorów URI zgodnie z opisem w sekcji Odwołania do identyfikatorów URI . |
|
Odwołania do innych elementów
Dostępnych jest kilka atrybutów, które umożliwiają odwoływanie się do innego elementu w tym samym schemacie. Obsługiwana składnia odwołania XPath jest zawsze taka sama. W tej sekcji znajdują się przykłady zastosowania domyślnego atrybutu odwołania (defaultRef).
Odwołanie do elementu na tym samym poziomie:
<schema>
<id mapField="ACCT_ID" required="true"/>
<altId defaultRef="id" required="true"/>
</schema>
Odwołanie do elementu w wyższej grupie:
<schema>
<id mapField="ACCT_ID" required="true"/>
<msgInfo type="group" mapXML="XML_FIELD">
<altId defaultRef="../id" required="true"/>
</msgInfo>
</schema>
Odwołanie do elementu w niższej grupie:
<schema>
<id mapField="ACCT_ID" defaultRef="msgInfo/altId" required="true"/>
<msgInfo type="group" mapXML="XML_FIELD">
<altId required="true"/>
</msgInfo>
</schema>
Odwołanie do elementu w innej grupie:
<schema>
<acctInfo type="group">
<id mapField="ACCT_ID" required="true"/>
</acctInfo>
<msgInfo type="group" mapXML="XML_FIELD">
<altId defaultRef="../acctInfo/altId" required="true"/>
</msgInfo>
</schema>
Uwagi dot. czasu standardowego
Większość pól daty/czasu odzwierciedla czas "prawny", to znaczy czas zgodny ze zmianą czasu na letni/zimowy w danej strefie czasowej, pokazując w polu aktualnie obowiązującą datę/godzinę. Istnieją jednak pola daty/godziny, które powinny zawsze pokazywać czas standardowy w celu zapobiegania nieporozumieniom i dwuznaczności. Dobrym przykładem są data i godzina powiązane ze szczegółowymi danymi interwału. Więcej informacji zawiera sekcja Projektowanie stref czasowych.-
Podczas definiowania elementu za pomocą dataType="dateTime" można opcjonalnie skonfigurować stdTime="true", co oznacza, że pobierane przez element dane będą zawsze odzwierciedlać czas standardowy w "podstawowej" strefie czasowej. "Podstawową" strefę czasową określa się w Opcjach instalacji.
Przykład:
<schema>
<startTime dataType="Time" stdTime="true"/>
</schema>
Jeśli strefa czasowa odzwierciedlająca pole daty/godziny nie jest strefą czasową instalacji, należy użyć opcjonalnego ustawienia stdTimeRef="XPath to time zone element" względem elementu daty/godziny w celu wskazania, że element odzwierciedla czas standardowy i wskazuje strefę czasową do użycia. Więcej informacji na temat obsługiwanej składni dotyczącej odwoływania się do innych elementów można znaleźć w sekcji Odwołania do innych elementów.
Przykład:
<schema>
<alternateTimeZone fkRef="F1-TZONE" suppress="true"/>
<startDateTime dataType="dateTime" stdTimeRef="alternateTimeZone"/>
</schema>
Możliwe są przypadki, w których data/godzina są pobierane jako czas standardowy w jednej strefie czasowej, ale powinny być wyświetlane za pomocą innej strefy czasowej. W takim przypadku można użyć atrybutu displayRef="XPath" wraz z odpowiednim atrybutem identyfikującym strefę czasową, z której pobierane są dane. Więcej informacji na temat obsługiwanej składni można znaleźć w sekcji Odwołania do innych elementów.
<schema>
<displayTimeZone fkRef="F1-TZONE" suppress="true"/>
<startDateTime dataType="dateTime" stdTime="true" displayRef="displayTimeZone"/>
</schema>
Atrybuty odwzorowania
Podczas tworzenia schematu można wybierać z pomiędzy następujących atrybutów odwzorowania.
Mnemonik | Poprawne wartości | Opis | Przykłady |
---|---|---|---|
mapField= | "field name" |
W przypadku obiektu biznesowego, atrybut mapField jest używany do identyfikowania kolumny bazy danych, z którą powiązany jest element. W przypadku schematów usług biznesowych, atrybut mapField= jest używany do powiązania elementu schematu z elementem usługi. |
|
mapChild= | "table name" |
Atrybut mapChild jest używany tylko na potrzeby odwzorowywania obiektów biznesowych. Używa się go na dwa sposoby:
|
Przykład listy w ramach tabeli podrzędnej w obiekcie biznesowym:
|
mapList= | "list name" |
Atrybut mapList jest używany tylko na potrzeby odwzorowywania obiektów biznesowych. Używa się go na dwa sposoby:
|
Przykład listy w ramach usługi biznesowej:
|
mapXML= | "field name" |
Atrybut mapXML jest zazwyczaj używany do odwzorowywania struktur XML do dużych pól znaków/XML w ramach usługi. Należy pamiętać, że podczas używania atrybutu mapXML do odwzorowywania struktury listy lub grupy (type="list" lub type="group") nie jest wymagane odwzorowywanie wszystkich elementów podrzędnych w strukturze. Możliwe jest także odwzorowanie elementów listy do pola wielkich znaków powiązanego z elementem podrzędnym listy. |
|
isPrimeKey= | "true" |
Należy określić klucz główny listy zdefiniowany w ramach odwzorowanego elementu XML (type="list" mapXML="CLOB"). Klucz główny jest używany przez framework do określania, czy wymagane jest dodanie, aktualizowanie lub kasowanie elementu listy podczas aktualizacji obiektu biznesowego. Uwaga: Nie jest wymagane określanie klucza głównego dla listy obiektu biznesowego odwzorowanej do listy obiektu obsługi. Podczas odwzorowywania listy fizycznej, klucz główny jest wyznaczany na podstawie istniejących, fizycznych metadanych.
|
|
orderBy= | "XPath asc|desc, XPath asc|desc" |
Domyślnie lista zdefiniowana w ramach odwzorowanego elementu XML (type="list" mapXML="CLOB") jest sortowana według pierwszego elementu listy. Za pomocą atrybutu orderBy można określić inną kolejność sortowania. Wartością atrybutu jest rozdzielana przecinkami lista XPath pól (względna do elementu listy) z opcjonalną kolejnością sortowania (domyślnie rosnąco). Uwaga: Ta opcja jest dostępna tylko dla list odwzorowanych jako kod XML w ramach obiektów biznesowych.
|
|
Atrybuty opisowe
Następujących atrybutów można używać w celu opisywania elementu schematu oraz zapewniania dodatkowej konfiguracji powiązanej z elementem. Atrybuty te są zazwyczaj przydatne tylko w przypadku elementów pól.
Mnemonik | Poprawne wartości | Opis | Przykłady |
---|---|---|---|
<!-- comment --> |
Umożliwia dodawanie komentarza do schematu za pomocą specjalnych znaków otwierających i zamykających: <!-- oraz -->. |
|
|
description= | "text" |
Opis elementu może służyć do zapewniania wewnętrznego opisu elementu. Dzięki temu czytelnik schematu może łatwiej zrozumieć przyczynę biznesową dotyczącą danego elementu. |
|
label= | "text" |
Etykieta elementu powinna stanowić krótki opis, który zazwyczaj będzie występować przed elementem w interfejsie użytkownika. |
|
required= | "true" |
Służy do zapewniania obecności elementu w czasie interakcji obiektu. Uwaga: W przypadku uwzględnionych schematów atrybut required="true" nie jest przetwarzany w schematach obiektów biznesowych i usług biznesowych, kiedy znajdują się one w schemacie skryptu usługi. Dzięki temu skrypt usługi może wypełniać wymagane elementy zanim osadzone obiekty biznesowe lub usługi biznesowe zostaną wywołane ze skryptu usługi.
|
|
mdField= | "field code" |
Atrybut metadanych jest używany w celu powiązania elementu z metadanymi pola. Pole definiuje typ danych, a także etykietę oraz tekst pomocy. Po połączeniu elementu z polem metadanych, nie jest wymagane określenie żadnego z tych atrybutów. Uwaga: W przypadku schematu obiektu biznesowego atrybut mapField służy do wyznaczania typu danych i etykiety. W razie konieczności można podać atrybut mdField w celu zastąpienia tych atrybutów. Jeśli element jest odwzorowany do kolumny XML, atrybut mdField jest wymagany w celu zapewnienia odpowiedniego typu danych i etykiety.
|
|
fkRef= | "FK Reference Code" |
Jeśli elementem jest klucz obcy, zdefiniowanie jego odwołania do klucza obcego umożliwi frameworkowi walidację elementu w czasie interakcji schematu i automatycznie zapewni opisy oraz możliwości nawigacji. |
|
private= | "true" |
Oznaczenie elementu jako "prywatny" zapobiegnie ujawnieniu go w czasie interakcji schematu. Uwaga: Element prywatny wymaga wartości domyślnej.
|
|
suppress= | "true" |
Ustawienie zapobiega pojawianiu się elementu w automatycznie generowanych interfejsach użytkowników. Uwaga: Ten atrybut można określić w ramach grupy. W takim przypadku wszystkie elementy grupy zostaną pominięte.
Uwaga: Porady dotyczące wartości domyślnych pomijanych elementów można znaleźć w sekcji Ustawianie wartości domyślnych i zmienne systemowe.
|
|
"blank" |
To ustawienie oznacza, że automatyczne renderowanie interfejsu użytkownika w trybie wyświetlania spowoduje ukrycie elementu, jeśli jego wartość jest pusta. Element będzie można nadal modyfikować w odwzorowaniu wejściowym, niezależnie od tego, czy jest pusty. |
|
|
"input" |
To ustawienie sprawia, że automatyczne renderowanie interfejsu użytkownika pominie element dotyczący danych wejściowych, mimo że można będzie go wyświetlić jako pusty. Uwaga: Elementy oznaczone jako suppress="input" będą działać tak, jak w przypadku suppress="blank". Jeśli wartość jest pusta, brak wartości będzie wyświetlany w odwzorowaniu wyświetlania lub danych wejściowych. Jeśli dostępna jest wartość elementu, zostanie on wyświetlony zarówno w odwzorowaniu wyświetlania, jak i danych wejściowych.
Uwaga: Porady dotyczące wartości domyślnych pomijanych elementów można znaleźć w sekcji Ustawianie wartości domyślnych i zmienne systemowe.
|
|
|
noAudit= | "true" |
To ustawienie zapobiega wyświetlaniu elementu jako elementu zmienionego w miejscu dołączania audytu obiektu biznesowego. Jeśli zostanie określone w węźle grupy lub listy, będzie mieć zastosowanie do całego węzła. Nie można określić go w ramach głównego węzła schematu, a jedynie w elementach schematu. Uwaga: Ten atrybut ma zastosowanie tylko do schematów obiektów biznesowych.
|
|
storeEmptyNodes= | "true" |
Domyślnie puste węzły są usuwane z instancji obiektu biznesowego po zapisaniu. To ustawienie umożliwia elementowi grupy lub listy bezpośrednie zachowanie pustych węzłów. Atrybut ten może być przydatny w sytuacjach, gdy dane obiektu biznesowego są wymieniane z systemem zewnętrznym i istnieje potrzeba rozróżnienia między pustą wartością elementu uczestniczącego w synchronizacji a elementem, który w niej nie uczestniczy, a zatem całkowicie pominiętym w komunikacie. Uwaga:Jest to dostępne tylko w odniesieniu do elementów grupy i listy.
|
|
emitEmptyGroups= | "true" |
Domyślnie puste węzły nie są uwzględniane w danych wyjściowych obiektu biznesowego lub wywołania usługi biznesowej. Ten atrybut jest ustawiony w węźle schematu najwyższego poziomu, umożliwiając uwzględnienie pustych węzłów wszystkich grup i elementów listy w danych wyjściowych. Ten atrybut może być przydatny w tych samych sytuacjach, które mogą wymagać użycia atrybutu storeEmptyNodes=. Uwaga: Jest to dostępne tylko w przypadku schematów obiektów biznesowych i usług biznesowych.
|
|
emitEmptyElements= | "true" |
Ten atrybut jest podobny do atrybutu emitEmptyGroups=, ale może być również określony na poziomie pola. Atrybut ma zastosowanie do wszystkich typów schematów. |
|
adheresToDA= | "rozdzielana przecinkami lista nazw obszarów danych." |
Atrybut ma zastosowanie do węzłów schematu, grupy i listy. Zgłasza, że ten węzeł schematu podrzędnego ma za zadanie "wyglądać jak" schemat jednego z wymienionych obszarów danych, na ogół ze względów na polimorfizm. Uwaga: Zalecane podejście dotyczące wymuszania struktury udostępnionego obszaru danych polega na uwzględnieniu go w schemacie. Ten atrybut powinien być ograniczony do przypadków użycia, w których nie ma możliwości uwzględnienia obszaru danych.
|
|
Stałe schematów
Istnieją schematy należące do produktów, w przypadku których projekt wymaga domyślnej wartości w schemacie, ale w których wartość jest specyficzna dla wdrożenia i nie może być definiowana przez produkt. W takich sytuacjach produkt może zastosować techniką określaną mianem stałej schematu. Projekt schematu będzie uwzględniał zadeklarowaną stałą. W czasie wdrożenia zadanie konfiguracji zdefiniuje odpowiednią wartość dla stałej.
Załóżmy na przykład, że produkt dostarcza algorytm, który utworzy wychodzącą wiadomość po spełnieniu określonego warunku. Typ wiadomości wychodzącej musi zostać skonfigurowany przez wdrożenie. Aby wykorzystać stałą schematu do zdefiniowania typu wiadomości wychodzącej, podstawowy produkt skonfiguruje co następuje:
-
Wartość z listy typu opcji dla listy wartości F1CN_OPT_TYP_FLG. Przykład: M202 - typ wiadomości wychodzącej o ukończeniu działania z nazwą wartości Java outmsgCompletion
-
Schemat bazowy, który jest używany do tworzenia komunikatów wychodzących "ukończonego działania" z odwołaniem do stałej schematu przy użyciu nazwy wartości Java wartości wyszukiwania typu opcji
... <outboundMessageType mapField="OUTMSG_TYPE_CD" default="%Constant(outmsgCompletion)"/> ...
W czasie wdrożenia użytkownicy o uprawnieniach administratora muszą skonfigurować odpowiedni typ komunikatu wychodzącego na potrzeby "ukończenia działania". Następnie należy przejść do Konfiguracji cechy, wybrać typ cechy Stałe schematów, wybrać typ opcji Typ wiadomości wychodzącej ukończenie działania i wprowadzić nowo utworzony typ wiadomości wychodzącej w wartości opcji.
Stałe schematów mogą być także używane w ramach składni spłaszczania w celu zdefiniowania elementów wiersza wymaganych do spłaszczenia.
Ustawianie wartości domyślnych i zmienne systemowe
Domyślny atrybut może być używany do ustalania wartości domyślnych w elementach pola oraz w elementach wiersza wymaganych do spłaszczania. Można ustawić wartość domyślną pola na wartość stałą lub na jedną z kilku zmiennych systemowych.
Jeśli element jest wymagany, wartość domyślna jest stosowana na poziomie serwera podczas dodawania lub zmiany rekordu, w którym nie podano wartości tego elementu.
Jeśli element jest opcjonalny, można skonfigurować wartość domyślną w taki sposób, aby podczas wypełniania rekordu w interfejsie użytkownika w trybie dodawania podawana była sugerowana wartość. Użytkownicy powinni mieć możliwość usunięcia wartości domyślnej dla tego typu elementu, a system nie będzie próbował jej wypełnić w momencie zapisywania.
Standardem obsługi listy jest pokazywanie pustego wiersza nowej listy, który użytkownik może wypełnić lub nie. W związku z tym wartości domyślne interfejsu użytkownika nie są pokazywane dla elementów listy.
Nie zaleca się konfigurowania domyślnego atrybutu elementu opcjonalnego, który nie jest edytowalny lub widoczny w interfejsie użytkownika w trybie dodawania (na przykład element o wartości suppress="true" lub suppress="input" lub element listy, którego wartość domyślna nie jest pokazywana, zgodnie z informacjami w poprzednim punkcie). Wartość domyślna tego typu elementu jest nadal stosowana, ale użytkownik nie ma możliwości zresetowania wartości. Może to powodować niespójności, ponieważ ustawianie wartości domyślnych nie występuje w polach opcjonalnych dodanych w ramach przypadku użycia innego niż interakcja interfejsu użytkownika.
Mnemonik | Poprawne wartości | Opis | Przykłady |
---|---|---|---|
default= | "value" | Ten atrybut służy do ustawiania określonej wartości domyślnej elementu. Prawidłowe wartości są zależne od ustawienia dataType. |
|
"%CurrentDate" | Służy do ustawiania bieżącej daty jako domyślnej wartości elementu. Dotyczy tylko elementów daty. |
|
|
"%CurrentDateTime" | Służy do ustawiania bieżącej daty/godziny jako domyślnej wartości elementu. Dotyczy tylko elementów daty/godziny. |
|
|
"%StandardDateTime" | Służy do ustawiania standardowej daty i godziny jako wartości domyślnej. Standardowa data i godzina są takie same, jak aktualna data i godzina, chyba że w podstawowej strefie czasowej obowiązuje czas letni/zimowy. Do użycia z atrybutem stdTime. Uwaga: Więcej informacji można znaleźć w części Uwagi dot. czasu standardowego.
|
|
|
"%ProcessDate" | Można ustawić wartość domyślną daty procesu. Data procesu jest różna od daty bieżącej, ponieważ data procesu pozostaje stała w całym czasie wykonywania procesu. Bieżąca data odzwierciedla rzeczywistą datę przetwarzania. Przypomina to datę roboczą zadania, które jest standardowym parametrem zadania. |
|
|
"%ProcessDateTime" | Przypomina to parametr "%ProcessDate", ale ma zastosowanie do pól daty/godziny. |
|
|
"%CurrentUser" | Służy do ustawiania bieżącego użytkownika jako domyślnej wartości elementu. |
|
|
"%CurrentUserTimeZone" | Służy do ustawiania strefy czasowej bieżącego użytkownika jako domyślnej wartości elementu. Jeśli strefa czasowa bieżącego użytkownika nie zostanie znaleziona, zostanie użyta strefa czasowa instalacji. |
|
|
"%CurrentUserLanguage" | Służy do ustawiania języka bieżącego użytkownika jako domyślnej wartości elementu. |
|
|
"%InstallationCurrency" | Służy do ustalania wartości domyślnej waluty na podstawie rekordu instalacji. |
|
|
"%InstallationCountry" | Można ustawić wartość domyślną kraju na podstawie rekordu instalacji. |
|
|
"%InstallationLanguage" | Można ustawić wartość domyślną języka na podstawie rekordu instalacji. |
|
|
"%Constant( )" | Można ustawić wartość domyślną elementu na podstawie stałej schematu. | Poniżej znajduje się przykład stałej schematu użytej jako wartość domyślna, gdzie nazwa wartości Java oraz wartość wyszukiwania to "customerLanguage".
|
|
"%Context( )" | Można ustawić wartość domyślną zawartą w zmiennej kontekstowej. Ostrzeżenie: Zanim będzie można zastosować wartość domyślną kontekstu schematu, należy zainicjować zmienne kontekstowe w obrębie skryptu serwera. Więcej informacji można znaleźć w sekcji Zmienne kontekstowe.
|
Przykład zmiennej kontekstowej używanej jako wartość domyślna:
Uwaga: Podczas definiowania zmiennej kontekstowej w ramach skryptu, należy dodawać jej prefiks $$. Podczas odwoływania się do zmiennej w składni %Context( ) prefiks nie jest dołączany.
|
|
defaultRef= | "XPath" |
Ten atrybut służy do ustawiania domyślnej wartości jednego elementu za pomocą wartości innego. |
Więcej informacji na temat obsługiwanej składni dotyczącej odwoływania się do innych elementów można znaleźć w sekcji Odwołania do innych elementów. |
Węzły i atrybuty spłaszczania
Termin "spłaszczanie" opisuje czynność definiowania jednego lub wielu pojedynczych elementów schematu, które są w rzeczywistości częścią listy w ramach obiektu obsługi. Spłaszczanie jest możliwe wtedy, gdy istnieją inne atrybuty danej listy, które można zdefiniować w celu unikatowego opisania elementu lub elementów. Typowym przypadkiem użycia spłaszczania jest charakterystyka. Zamiast definiować charakterystyki obiektu za pomocą kolekcji, w której użytkownik musi wybrać typ charakterystyki, a następnie zdefiniować wartość, charakterystyki są definiowane jako elementy z od razu wyświetlaną odpowiednią etykietą. Ta technika umożliwia projektantowi schematu i interfejsu użytkownika na wyświetlenie oddzielnych charakterystyk w logicznych miejscach interfejsu użytkownika zamiast wrzucania ich wszystkich w jedno miejsce.
Identyfikowanie listy lub tabeli podrzędnej
Podczas spłaszczania tabeli podrzędnej wymagany jest węzeł wiersza do identyfikowania listy/tabeli podrzędnej, z której pochodzi element. W ramach węzła wiersza należy zdefiniować co najmniej jeden element z definicją is=, co zapewni, że element ten będzie unikatowym wierszem w bazie danych. Może także definiować elementy lub pola w wierszu, które są pominięte i uzupełnione za pomocą konfiguracji wykorzystującej wartość domyślną.
-
W przypadku obiektu biznesowego węzeł wiersza definiuje tabelę podrzędną, do której należy pole spłaszczone.
Składnia: <row mapChild="table name">. Ten przykład dotyczy listy osób w ramach konta w produkcie Customer Care and Billing. Jedną z osób można oznaczyć jako osobę "główną". Pokazuje to sposób, w jaki można zdefiniować jawny element ID głównej osoby w celu uproszczenia odwołań do tego pola. Wchodzi w skład tabeli podrzędnej CI_ACCT_PER. Wartością MAIN_CUST_SW jest true, co sprawia, że jest to sytuacja unikatowa (i tylko jeden wiersz może mieć tę wartość)
<custId mapField="PER_ID" mdField="CM-MainCust"> <row mapChild="CI_ACCT_PER"> <MAIN_CUST_SW is="true" /> <ACCT_REL_TYPE_CD default="MAIN" /> </row> </custId>
Uwaga: Powyższy przykład pokazuje, że węzeł wiersza może także definiować elementy w ramach listy, które są pominięte i przydzielone do wartości domyślnej. Tej składni nigdy nie używa się do identyfikowania określonego wiersza. Należy pamiętać, że wartość domyślna może być literałem lub zmienną systemową. -
W przypadku usługi biznesowej, węzeł wiersza identyfikuje nazwę listy, do której należy pole spłaszczone.
Składnia: <row mapList="list name">. Ten przykład pokazuje dwa zapisy z listy spłaszczonej do wartości pola i opisu.
<selectList type="list" mapList="DE"> <value mapField="COL_VALUE"> <row mapList="DE_VAL"> <SEQNO is="2"/> </row> </value> <description mapField="COL_VALUE"> <row mapList="DE_VAL"> <SEQNO is="3"/> </row> </description> </selectList>
Unikatowe identyfikowanie pola spłaszczonego lub listy spłaszczonej
Składnia is= w wierszu lub elemencie rowFilter służy do unikatowego identyfikowania wiersza.
Mnemonik | Poprawne wartości | Opis | Przykłady |
---|---|---|---|
is= | "value" | Atrybut ten służy do bezpośredniego tworzenia odwołania do wartości. |
|
"%Constant( )" | Można konfigurować element spłaszczony na podstawie stałej schematu. Podczas interakcji usług wartość stałej schematu zostanie użyta do identyfikowania spłaszczonego elementu w jego wierszu podrzędnym. |
Poniżej znajduje się przykład stałej schematu użytej jako składnia spłaszczona, gdzie nazwa wartości Java oraz pole wartości wyszukiwania to "cmRate".
|
|
"%n" | Wartość zastępowania %n służy do odwoływania się do względnego wystąpienia listy. Względne wystąpienie listy jest zazwyczaj używane do konfigurowania spłaszczonego elementu tabeli podrzędnej wprowadzonej według liczby porządkowej. Wartość n powinna być wartością dodatnią i całkowitą. W czasie interakcji odczytu obiektu biznesowego zostanie zwrócone względne wystąpienie listy (pozycja) określone przez wartość całkowitą. | Przykład z względnym wystąpieniem listy - gdzie zwracane jest pierwsze wystąpienie w wierszu.
|
Spłaszczanie predefiniowanego typu charakterystyki
Jeśli pole spłaszczone znajduje się w zbiorze charakterystyk, a typ charakterystyki jest predefiniowaną charakterystyką, automatyczne renderowanie interfejsu użytkownika spowoduje wygenerowanie listy rozwijanej dla listy prawidłowych wartości. Przykładowo poniższy schemat wygeneruje listę rozwijaną dla elementu "Użycie", który pokazuje prawidłowe wartości typu charakterystyki "Przyczyna statusu - użycie" (F1–SRUSG).
<usage mdField="STATUS_RSN_USAGE" mapField="CHAR_VAL">
<row mapChild="F1_BUS_OBJ_STATUS_RSN_CHAR">
<CHAR_TYPE_CD is="F1-SRUSG"/>
<SEQ_NUM is="1"/>
</row>
</usage>
Definiowanie wielu elementów z listy
Podczas uwzględniania wielu kolumn w ramach tej samej listy system podaje skrócony zapis do kopiowania reguł spłaszczania zdefiniowanych w innym elemencie celem zapewnienia, że reguły spłaszczania nie będą musiały być powtarzane. W tym celu węzeł wiersza zawiera atrybut rowRef, który wskazuje nazwę innego elementu, który definiuje informacje odwzorowania. Następujący przykład pokazuje spłaszczanie pól "ID klienta" oraz "Otrzymuje kopię faktury" z tej samej listy osób konta (gdzie MAIN_CUST_SW ma wartość true ).
<custId mapField="PER_ID">
<row mapChild="CI_ACCT_PER">
<MAIN_CUST_SW is="true" />
<ACCT_REL_TYPE_CD default="MAIN" />
</row>
</custId>
<copyBill mapField="RECEIVE_COPY_SW" rowRef="custId"/>
Należy pamiętać, że powyższy zapis pokazuje także, że atrybut rowRef można zdefiniować bezpośrednio w ramach definicji atrybutu elementu.
Spłaszczanie w ramach dwóch warstw
Jeśli obiekt obsługi lub usługa zawierają zagnieżdżone listy o głębokości dwóch warstw, system obsługuje spłaszczanie elementu w ramach spłaszczonego elementu. Ta technika także wykorzystuje atrybut rowRef. Spłaszczanie drugiego poziomu odwołuje się do spłaszczonego elementu na pierwszym poziomie. W poniższym przykładzie pokazano spłaszczanie charakterystyki do elementu o nazwie legalContact dla klienta "głównego". Należy zauważyć, że element legalContact zawiera dwa węzły wiersza: Jeden z nich odwołuje się do informacji o spłaszczaniu dotyczących rekordu nadrzędnego, a drugi służy do definiowania tabeli podrzędnej
<custId mapField="PER_ID">
<row mapChild="CI_ACCT_PER">
<MAIN_CUST_SW is="true" />
<ACCT_REL_TYPE_CD default="MAIN" />
</row>
</custId>
<legalContact mapField="CHAR_VAL_FK1">
<row rowRef="custId">
<row mapChild="CI_ACCT_PER_CHAR" >
<CHAR_TYPE_CD is="LEGAL" />
</row>
</row>
</legalContact>
Należy pamiętać, że powyższy zapis pokazuje także, że atrybut rowRef można zdefiniować jako atrybut węzła wiersza zamiast bezpośrednio w ramach definicji atrybutu elementu.
Definiowanie listy spłaszczonej
W niektórych przypadkach lista lub tabela podrzędna obsługują wiele wartości tego samego "typu", które powinny być przedstawiane jako lista. Kontynuując przykład przedstawiony powyżej, na liście osób w ramach konta jedna osoba może być określona jako osoba "główna". Ta osoba została spłaszczona do pojedynczego elementu (a typ relacji konta otrzymał wartość domyślną i został pominięty). Aby obsługiwać pozostałe osoby powiązane z kontem, można zdefiniować listę, na której każdy wiersz będzie zawierać ID osoby oraz typ relacji konta.
W przeciwieństwie do węzła wiersza, lista spłaszczona jest konfigurowana za pomocą elementu rowFilter. Poniższy schemat stanowi ilustrację opisanego przykładu. Węzeł listy definiuje tabelę podrzędną. Element rowFilter zawiera kryteria, które służą do identyfikowania wierszy w ramach uwzględnianej tabeli. Elementy listy są definiowane w ramach węzła listy, poza elementem rowFilter.
<custId mapField="PER_ID">
<row mapChild="CI_ACCT_PER">
<MAIN_CUST_SW is="true" />
<ACCT_REL_TYPE_CD default="MAIN" />
</row>
</custId>
<miscPersons type="list" mapChild="CI_ACCT_PER">
<rowFilter>
<MAIN_CUST_SW is="false" />
</rowFilter>
<relType mapField="ACCT_REL_TYPE_CD"/>
<personId mapField="PER_ID"/>
</custId>
Należy pamiętać, że system waliduje, czy jeżeli schemat zawiera spłaszczone pojedyncze elementy oraz spłaszczone listy z tej samej tabeli podrzędnej, to czy kryteria definiujące ich unikatowość muszą być analogiczne.
Spłaszczanie listy o określonej dacie obowiązywania
W aplikacji znajdują się listy, które posiadają datę obowiązywania (a niektóre posiadają także datę i godzinę obowiązywania). Na przykład istnieją zbiory charakterystyk z datą obowiązywania. Projekt takich zbiorów zakłada pobranie pojedynczej wartości dla typu charakterystyki, która może ulec zmianie wraz z upływem czasu. Nie ma na celu obsługiwania wielu wartości charakterystyk obowiązujących jednocześnie.
Niektóre obiekty obsługi mają charakterystyki z datą obowiązywania i nie mają charakterystyk opartych na sekwencji. W przypadku tych obiektów we wdrożeniach może być wymagane użycie charakterystyki w celu zdefiniowania dodatkowego pola, które nie wymaga dat obowiązywania.
Projektując element schematu, który reprezentuje wartość w zbiorze z datą obowiązywania, należy rozważyć, czy wartość jest używana w procesach, w przypadku których istotne jest pobieranie zmian wartości w czasie (np. obliczanie faktury).
- Jeśli śledzenie zmian wartości nie jest istotne, zaleca się ustawienie daty obowiązywania na stałą wartość w schemacie. (Przykłady poniżej).
- Jeśli śledzenie zmian wartości jest ważne, należy rozważyć sposób projektowania schematu.
- Jedną z opcji jest zdefiniowanie listy spłaszczonej w sposób opisany powyżej. Zarówno wartość, jak i data obowiązywania są elementami na tej liście. W tym przypadku użycia można zarządzać listą tak samo jak każdą inną listą. Można dodawać lub usuwać wartości.
- Inną opcją jest zdefiniowanie pojedynczej spłaszczonej wartości w schemacie. W przypadku tej opcji podczas pobierania rekordu zwracana jest najnowsza obowiązująca wartość. W tym projekcie ważną kwestią jest sposób definiowania daty odwołania.
Elementy spłaszczone, w których zmiany nie są śledzone
Poniżej przedstawiono przykład spłaszczania elementu w zbiorze z datą obowiązywania, w którym wartość nie musi być mieć daty obowiązywania. W tym przypadku zaleca się trwałe zakodowanie daty w atrybucie is=.
<schema>
<externalReference mapField="ADHOC_CHAR_VAL" mdField="CM_EXT_REF" dataType="string">
<row mapChild="CI_SA_CHAR">
<CHAR_TYPE is="CM_EXT_REF"/>
<EFFDT is="2000-01-01"/>
</row>
</externalReference>
</schema>
Elementy spłaszczone, w których zmiany mają określoną datę obowiązywania
Jeśli schemat obiektu biznesowego ma spłaszczać wartość z datą obowiązywania, w przypadku której powinny być śledzone zmiany w czasie, wartość spłaszczona będzie reprezentować najnowszy obowiązujący zapis. W takim przypadku zaleca się jawne zdefiniowanie pola daty lub daty/godziny jako elementu. Następnie dostępna jest składnia atrybutu is= wskazująca, że jawne pole daty jest datą, której należy użyć w wartości.
Mnemonik | Poprawne wartości | Opis | Przykłady |
---|---|---|---|
is= | "%effectiveDate( )" | Za pomocą tej konfiguracji można wskazać, że data ma korzystać z wartości innego elementu.
Uwaga: Więcej informacji na temat obsługiwanej składni dotyczącej odwoływania się do innych elementów można znaleźć w sekcji Odwołania do innych elementów.
|
|
"%effectiveDateTime( )" | Za pomocą tej konfiguracji można wskazać, że data/godzina ma korzystać z wartości innego elementu. Uwaga: Więcej informacji na temat obsługiwanej składni dotyczącej odwoływania się do innych elementów można znaleźć w sekcji Odwołania do innych elementów.
|
|
Należy rozważyć, czy jawny element daty lub daty/godziny powinien być wyświetlany w interfejsie użytkownika, gdy pokazywane jest pole spłaszczone, czy też powinien być pomijany. Projektanci powinni również wziąć pod uwagę zastosowanie okna dialogowego użytkownika w celu aktualizacji wartości. Bardziej intuicyjne może być wyświetlanie tylko pola spłaszczonego i wprowadzenie osobnego okna dialogowego w celu aktualizacji wartości z datą obowiązywania.
W przypadku tej opcji sugeruje się, aby strona obsługi obiektu zawierała osobną strefę, w której pokazywana jest historia wartości z datami obowiązywania w czasie. Najnowsza wartość może być również uwzględniona w tej strefie.
Uwaga: W celu zapewnienia zgodności wstecznej system obsługuje również następujące opcje. Nie są one jednak zalecane. Data odwołania jest w nich pośrednio zdefiniowana jako data bieżąca przez cały czas. W przypadku zmiany wartości opcje te obsługują dodawanie nowych wierszy z datą obowiązywania. Technika ta powoduje jednak pojawienie się nowych wierszy z datą obowiązywania, gdy aktualizowane są inne elementy tego samego schematu. Nowe wiersze będą miały bieżącą datę lub datę/godzinę z tą samą wartością wiersza, ponieważ data lub data/godzina odwołania jest datą bieżącą, co stanowi zmianę. W produkcie nie zaleca się zarządzania charakterystyką z datą obowiązywania bez zdefiniowania daty lub daty/godziny jako elementu jawnego.
Mnemonik | Poprawne wartości | Opis | Przykłady |
---|---|---|---|
is= | "%effectiveDate" |
Ta konfiguracja nie jest zalecana |
|
"%effectiveDateTime" |
Ta konfiguracja nie jest zalecana |
|
Strefa wyszukiwania
Można skonfigurować element schematu interfejsu użytkownika w taki sposób, aby włączać okno dialogowe automatycznego wyszukiwania, gdy schemat jest dołączony do odwzorowania interfejsu użytkownika obsługi.
search="search zone"
Atrybutu wyszukiwania można używać w ramach schematu odwzorowania interfejsu użytkownika. Jest on używany do automatycznego generowania atrybutu odwzorowania interfejsu użytkownika oraSearch. Strefa wyszukiwania to strefa eksploratora skonfigurowana jako wyszukiwanie.
<person fkRef="PER" search="C1_PSRCH"/>
searchField="search field:element|'literal';"
Atrybutu searchField można używać tylko w połączeniu z atrybutem wyszukiwania. Atrybut searchField jest używany do tworzenia atrybutu odwzorowania interfejsu użytkownika oraSearchField. Wartość searchField służy do wypełniania filtra strefy wyszukiwania wartością początkową, gdy uruchamiana jest strefa wyszukiwania. Wartość początkowa może być także wartością literałową. Wartość searchField służy do dopasowywania mnemoniku filtra, który także nosi nazwę searchField.
Pole wyszukiwania: element|'literal'. Pole wyszukiwania odzwierciedla filtr strefy wyszukiwania, który należy uzupełnić podczas uruchamiania. Elementem jest element schematu odwzorowania, który służy do uzupełniania filtra. Element ten jest opcjonalny. Jeśli pozostanie pusty, przyjmie wartość domyślną elementu, dla którego określono dany atrybut. Atrybut searchField przyjmuje także "literał" jako wartość wejściową.
<person fkRef="PER" search="C1_PSRCH" searchField="PERSON; PER_TYPE:personType;"/>
searchOut="search field:element;"
Atrybutu searchOut można używać tylko w połączeniu z atrybutem wyszukiwania. Atrybut searchOut jest używany do tworzenia atrybutu odwzorowania interfejsu użytkownika oraSearchOut. Wartość searchOut służy do pobierania wybranej wartości ze strefy wyszukiwania i przenoszenia jej do elementu odwzorowania interfejsu użytkownika. Podana wartość searchOutpowinna być zgodna z mnemonikiem ELEMENT_NAME w ramach parametru strefy wyniku wyszukiwania.
Pole wyszukiwania: element. Pole wyszukiwania odzwierciedla wynik strefy wyszukiwania przeniesiony ponownie do odwzorowania interfejsu użytkownika. Elementem jest element schematu odwzorowania, który ma zostać wypełniony. Element ten jest opcjonalny. Jeśli pozostanie pusty, przyjmie wartość domyślną elementu, dla którego określono dany atrybut.
<person fkRef="PER" search="C1_PSRCH" searchField="PER_ID"
searchOut="PER_ID;PRIMARY_PHONE:personPhone;"/>
Rozszerzenie zabezpieczeń na skrypt usługi
Bezpieczeństwo usługi aplikacji będzie wymuszane wtedy, gdy obiekty biznesowy lub skrypt usługi zostanie wywołany z poziomu skryptu BPA lub odwzorowania interfejsu użytkownika, ale nie z poziomu skryptu usługi. Aby bezpieczeństwo było wymuszane podczas wywoływania obiektu biznesowego lub skryptu usługi z poziomu skryptu usługi, należy dodać następujący atrybut do schematu skryptu usługi.
appSecurity="true"
Atrybut appSecurity jest dostępny tylko dla schematów skryptów usług. Jeśli zostanie określony, dla każdego obiektu biznesowego lub skryptu usługi wywoływanego bezpośrednio przez skrypt usługi będzie przeprowadzana ocena usługi aplikacji pod kątem dostępu.
<schema appSecurity="true">
...
</schema>
Czynność nadpisania usługi biznesowej
Aby wywołać usługę biznesową za pomocą czynności innej niż "odczyt", należy podać atrybut czynności w ramach głównego węzła schematu usługi biznesowej.
pageAction="add, change, delete"
Atrybut czynności jest używany do nadpisywania domyślnej czynności odczytu w schemacie usługi biznesowej. Prawidłowe wartości to:
-
dodawanie
-
aktualizowanie (dozwolone tylko w przypadku usługi obiektu obsługi)
-
zmiana (niedozwolone w przypadku usługi obiektu obsługi)
-
kasowanie
-
odczyt (domyślna czynność, jeśli nie określono atrybutu pageAction)
Przykład:
<schema pageAction="change">
<parm type="group">
<ele1/>
<ele2/>
</parm>
</schema>
Określanie atrybutu searchBy dla usługi wyszukiwania
Aby wywołać usługę wyszukiwania, należy jawnie określić atrybut searchBy zgodny z elementami odwzorowanymi w schemacie.
searchBy="MAIN"
Wartości atrybutu searchBy można znaleźć, wyświetlając schemat XML powiązany z usługą biznesową za pomocą adresu URL wyświetlania XML. Typowe wartości:
-
MAIN
-
ALT
-
ALT2
-
ALT3
- itp.
<schema searchBy="MAIN">
<AccountID mapField="ACCT_ID"/>
<Results type="list">
<AccountID mapField="ACCT_ID"/>
</Results>
</schema>
Uwzględnianie innych schematów
Nie ma ograniczeń w zakresie uwzględniania schematu w innych schematach - wszystkie typy można uwzględniać we wszystkich pozostałych typach. Uwzględnianie zagnieżdżone jest także dozwolone, a obecnie nie ma ograniczenia w zakresie głębokości zagnieżdżania.
Uwzględnienie schematu wymaga dwóch części:
- Węzła uwzględnienia
- Nazwy atrybutu
W poniższej tabeli znajdują się obsługiwane instrukcje uwzględniania.
Mnemonik | Opis | Przykłady |
---|---|---|
<includeBO name=" "/> |
Uwzględnienie schematu obiektu biznesowego w innym schemacie jest dopuszczalne. Należy pamiętać, że reguły odwzorowania schematu obiektu biznesowego lub usługi biznesowej mogą nie mieć zastosowania w kontekście schematu nadrzędnego. Inne schematy uwzględnia się na własne ryzyko. Bardzo przydatnym aspektem przetwarzania XML jest to, że framework ignoruje nieadekwatne atrybuty. Innymi słowy, uwzględnienie atrybutów odwzorowania w schemacie skryptu nie będzie mieć negatywnych konsekwencji. |
|
<includeBS name=" "/> |
Służy do uwzględniania schematu usługi biznesowej. |
|
<includeDA name=" "/> |
Służy do uwzględniania schematu obszaru danych. |
|
<includeMP name=" "/> |
Służy do uwzględniania schematu odwzorowania interfejsu użytkownika. |
|
<includeSS name=" "/> |
Służy do uwzględniania schematu skryptu usługi. |
|
Atrybuty zgodności
Te atrybuty zostały dodane w ramach uaktualnień z poprzednich wersji frameworku.
fwRel="2"
Ten atrybut został dodany do schematów utworzonych w frameworku 2 jako część uaktualnienia frameworku 4. Nowe schematy nie będą wymagały tego atrybutu. Nie zaleca się modyfikowania tego atrybutu bez zapoznania się z następującymi różnicami w sposobie działa, ponieważ niewłaściwe zmiany mogą być przyczyną błędów.
<schema fwRel="2"
...
</schema>