Od około 10 minut na moim gicie gości nowy update aplikacji Courier Services. W najnowszym commicie, pojawił się nowy program służący do generowania danych do tabeli. Stało się tak ponieważ nie mogę wciąż połączyć się ze swoją bazą danych oracle.Schemat bazy wygląda tak jak na poniższym obrazku.
Kod programu wklejam też poniżej, przejdźmy do krótkiego omówienia.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
*&---------------------------------------------------------------------* *& Report ZGENERATE_DATA *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT zgenerate_data. DATA: lcl_random TYPE REF TO cl_abap_random_int, l_str_pdata TYPE zpackage_data, l_tab_pdata TYPE STANDARD TABLE OF zpackage_data, l_var_init TYPE i, l_var_char(10) TYPE c, l_var_cont TYPE string, l_var_rand TYPE i. DATA: BEGIN OF l_str_cont OCCURS 0, content(100) TYPE c, END OF l_str_cont, l_str_scont LIKE LINE OF l_str_cont, l_tab_cont LIKE STANDARD TABLE OF l_str_scont. l_var_cont = 'Książki,Sprzęt AGD, Komputery, Materiały spożywcze, materiały biurowe'. SPLIT l_var_cont AT ',' INTO TABLE l_str_cont. LOOP AT l_str_cont INTO l_str_scont. APPEND l_str_scont TO l_tab_cont. ENDLOOP. lcl_random = cl_abap_random_int=>create( min = 1 max = 5 ). DO 100 TIMES. l_var_rand = lcl_random->get_next( ). READ TABLE l_tab_cont INTO l_str_scont INDEX l_var_rand. l_str_pdata-content = l_str_scont. CALL FUNCTION 'QF05_RANDOM_INTEGER' EXPORTING ran_int_max = 100000 ran_int_min = 1 IMPORTING ran_int = l_var_init. l_var_char = l_var_init. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = l_var_char IMPORTING output = l_str_pdata-send_from. CALL FUNCTION 'QF05_RANDOM_INTEGER' EXPORTING ran_int_max = 100000 ran_int_min = 1 IMPORTING ran_int = l_var_init. l_var_char = l_var_init. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = l_var_char IMPORTING output = l_str_pdata-send_to. CALL FUNCTION 'QF05_RANDOM_INTEGER' EXPORTING ran_int_max = 100 ran_int_min = 1 IMPORTING ran_int = l_var_init. l_str_pdata-value = l_var_init. CALL FUNCTION 'QF05_RANDOM_INTEGER' EXPORTING ran_int_max = 1000000 ran_int_min = 1 IMPORTING ran_int = l_var_init. l_var_char = l_var_init. l_str_pdata-weight = l_var_char. APPEND l_str_pdata TO l_tab_pdata. ENDDO. INSERT zpackage_data FROM TABLE l_tab_pdata. Write:/ 'Tabela została zaaktualizowana'. |
W programie wykorzystałem dwa sposoby możliwości uzyskania randomowej liczby całkowitej. Jeden z nich to wykorzystanie modułu funkcyjnego, drugi zaś to wywołanie metody klasy. Ponad to, w tabeli trzymane są dane send_from i send_to na podstawie tabeli but000, więc aby wygenerować odpowiednie ID, musiałem użyć funkcji dodawania zer, tak aby całe pole char zostało zajęte.
Wykorzystałem tutaj też dość rzadko spotykaną metodę generowania danych na podstawie stringa, która wydaje się być dużo bardziej pogmatwana niż stworzona po prostu w PLSQL.
Dane w but000 też będą wymagać uzupełnienia, gdyż obecnie znajduje się tam tylko kilka klientów, nie wiem jednak czy będzie kolejny wpis poświęcony temu wydarzeniu – myślę,że będzie to zależało od tego czy zadanie to będzie się mocno różnić od tego.
To już koniec na dziś, zapraszam was tutaj też jutro – być może pojawi się tu pierwsza cześć poradnika dotycząca stworzenia serwisu z oDaty.