SAP Analytics Cloud to rozbudowana platforma w chmurze której celem jest dostarczanie wszystkich niezbędnych narzędzi w dziedzinie Business Intelligence. Jeden z dostępnych modułów to Analytic Designer – narzędzie, która pozwala na tworzenie zaawansowanych aplikacji analitycznych z możliwością pisania skryptów w uproszczonej wersji JavaScript.
W tym artykule przedstawimy jedną z ciekawych wbudowanych funkcji skryptowych– getResultSet. Zwraca ona wszystkie komórki z danymi w podanym obiekcie – jest jak „eksplorer” który przemierza przez każdy element tabeli i spisuje informacje o nim.
Możliwych przypadków użycia dla tej funkcji jest mnóstwo – możemy odczytywać konkretne elementy, wiersze, kolumny, kopiować i wklejać wartości komórek do innych elementów. W tym artykule postaramy się pokrótce przedstawić przykłady działania i możliwe użycia funkcji.
Będziemy operować na prostym przykładzie – w aplikacji znajduje się mała tabela z danymi nt. nieobecności pracowników w rozłożeniu na lata.
Korzystając z menu na górze interfejsu, dodajemy przycisk i ustawiamy go nad tabelą (Insert > Button)
Korzystając z tabeli Styling po prawej stronie interfejsu możemy mu zmienić nazwę (w naszym przypadku na „Odczytaj”)
Uruchamianie skryptów w Analytic Designer obydwa się za pomocą tzw. Eventów. Przykładowo, żeby uruchomić skrypt naciskając na przycisk, należy umieścić go w Evencie onClick dla przycisku. W tym celu w aplikacji zaznaczamy przycisk, a następnie klikamy na ikonkę z trzema kropkami , Edit Scripts i onClick.
Korzystając z getResultSet chcemy odczytać dane z podanej na początku tabeli i zapisać je do zmiennej w JavaScript. W tym celu do edytora skryptów wprowadzamy poniższy kod :
var elementy_tabeli = Table_1.getDataSource().getResultSet();
Gdzie :
Var – inicjalizacja zmiennej
Elementy_tabeli – nazwa zmiennej, w której chcemy przechować dane
Table_1.getDataDataSource() – źródło danych pobrane z tabeli
W tym momencie po naciśnięciu przycisku do zmiennej zostaną wczytane dane z tabeli. Spróbujemy je teraz wyświetlić w konsoli. Jako że Elementy_tabeli to zmienna typu Array (tabela), żeby odczytać jej wartości musimy skorzystać z pętli For, tak jak poniżej:
for (var i = 0; i < elementy_tabeli.length; i++)
{
console.log(elementy_tabeli[i]);
}
Całość skryptu powinna wyglądać następująco:
Console.log() pozwala na wyświetlanie podanego elementu w konsoli przeglądarki.
Zapisujemy zmiany i uruchamiamy aplikację. Konsolę otwieramy przyciskiem F12 (w przykładzie korzystamy z Google Chrome) a następnie naciskamy na dodany przycisk. Rezultat powinien wyglądać tak jak poniżej.
Warto zwrócić uwagę na to, że każdy pobrany element można rozwinąć, by dokładniej podejrzeć jego informacje. Dzięki rozłożeniu elementów możemy zauważyć, że getResultSet przemierza tabelę od lewej do prawej, z góry do dołu.
Do skryptu możemy dodać też policzenie ilości elementów, tak jak w przykładzie poniżej:
var elementy_tabeli = Table_1.getDataSource().getResultSet();
var ilosc_elementow = 0;
for (var i = 0; i < elementy_tabeli.length; i++)
{
console.log(elementy_tabeli[i]);
ilosc_elementow++;
}
console.log("Ilość elementów to : " +ilosc_elementow.toString());
Mimo tego, że tabela składa się z 24 komórek, getResultSet zwraca tylko te obiekty , które posiadają wartości.
Teraz postaramy się „wyciągnąć” i zapisać do obiektu tekstowego wartość ostatniego elementu w tabeli. W naszym przykładzie zmieniliśmy źródło danych:
Do aplikacji dodajemy obiekt Text (Insert > Text) i ustawiamy go obok przycisku.
Aby pobrać ostatni element tabeli do zmiennej dla eventu onClick dodajemy poniższy wpis:
var ostatni_element = elementy_tabeli[elementy_tabeli.length-1];
(jako numer elementu podajemy [długość tabeli – 1] ponieważ jest ona indeksowane od 0)
Aby móc wykorzystać wartości zebrane przez GetResultSet, musimy najpierw zrozumieć w jaki sposób są one zapisane. Przykładowo spójrzmy na ostatni wpis naszego skryptu w konsoli :
Możemy zauważyć ze pojedynczy wpis składa się z 3 elementów, które stanowią techniczne nazwy obiektów użytych w tabeli –
– @MeasureDimension (wskaźnik)
– Date_703i1904sd (data)
– Location_4nm2e04531 (lokalizacja).
Z technicznego punktu widzenia zatem pojedynczy wpis to nic innego jak mini tabela. Możemy zauważyć, że wartość komórki (18.66) znajduję się w elemencie @MeasureDimension dla własności formattedValue. Wykorzystajmy tą wiedzę w skrypcie (event onClick).
var wartosc_ostatniego_elementu = ostatni_element["@MeasureDimension"].formattedValue;
Jako indeks tabeli podajemy wartość @MeasureDimension, po kropce natomiast wybieramy własność która nas interesuje (formattedValue).
Tak pobraną wartość wprowadzamy do elementu tekstowego:
Text_1.applyText(wartosc_ostatniego_elementu);
Całość kodu powinna wyglądać następująco:
var elementy_tabeli = Table_1.getDataSource().getResultSet();
for (var i = 0; i < elementy_tabeli.length; i++)
{
console.log(elementy_tabeli[i]);
}
var ostatni_element = elementy_tabeli[elementy_tabeli.length-1];
var wartosc_ostatniego_elementu = ostatni_element["@MeasureDimension"].formattedValue;
Text_1.applyText(wartosc_ostatniego_elementu);
Zapisujemy i uruchamiamy aplikacje. Naciśnięcie przycisku powinno zwracać podobny wynik jak poniżej:
Na tym zakończymy nasz artykuł o wykorzystaniu GetResultSet w aplikacji. Po więcej informacji na temat tej jak i innych, przydatnych funkcji Analytic Designer, odsyłamy do oficjalnej dokumentacji –
https://help.sap.com/doc/958d4c11261f42e992e8d01a4c0dde25/2020.21/en-US/index.html