Elastyczna nazwa pliku / Zapisywanie wielu plików
Domyślnie dane są zapisywane w polu "Nazwa pliku" zdefiniowanym w parametrze zadania. Nazwa pliku obsługuje kilka dynamicznych zmiennych zastępowania zdefiniowanych w szczegółowym opisie parametru zadania w kontrolce zadania "Szablon ekstraktu na podstawie wtyczek" (F1-PDBEX). Więcej informacji na temat nazwy pliku i procesów wielowątkowych zawiera sekcja Przetwarzanie rekordów ekstrakcji.
System obsługuje również bardziej zaawansowane tworzenie plików dla pojedynczego uruchomienia zadania. Rozważmy następujące przypadki użycia:
- Ekstrakt dotyczy danych powiązanych z wieloma dostawcami usług, w przypadku których każdy dostawca usług powinien otrzymać swój własny plik. W tym przypadku użycia jednostką roboczą jest dostawca usług, dlatego dla każdej jednostki roboczej tworzony jest plik.
- Wdrożenie uwzględnia wiele jurysdykcji reprezentowanych przez obszar obsługi klienta. Dany ekstrakt powinien spowodować utworzenie jednego pliku na obszar, tak aby każdy obszar otrzymał tylko odpowiednie dane.
- Ekstrakt danych osobowych powinien oddzielać prywatne dane osobowe od firmowych danych osobowych. Ponadto dla każdej osoby dane kontaktowe powinny skutkować utworzeniem osobnego pliku. W tym przypadku użycia jedna jednostka robocza obejmuje dane, które należy zapisać w więcej niż jednym pliku.
Aby obsługiwać powyższe przypadki użycia, algorytm przetwarzania rekordów obsługuje zwracanie nazwy pliku w danych wyjściowych:
- Nazwa pliku jest zawarta w wyjściowej grupie wystąpień schematu. Należy wypełnić tę wartość, jeśli dane dotyczące określonego zapisu schematu mają zostać przeniesione do tej nazwy pliku. W powyższym przykładzie ekstraktu danych osoby schemat zawierający informacje kontaktowe wskazywałby konkretny plik kontaktu.
- Nazwa pliku jest polem wyjściowym spoza listy schematów. Należy wypełnić tę wartość, jeśli nie istnieją różne pliki dla różnych schematów, ale nadal konieczne jest nadpisanie nazwy pliku zdefiniowanej w parametrze zadania. W powyższych przykładach zawierających dostawcę usług i obszar parametr ten zostałby wypełniony żądaną nazwą pliku. W przykładzie ekstraktu danych osoby to pole zostałoby wypełnione dla wszystkich informacji innych niż kontaktowe.
Proces zadania sprawdza dane wyjściowe po każdym wywołaniu algorytmu przetwarzania rekordów. W przypadku schematu z powiązaną, określoną nazwą pliku jego dane są zapisywane w tym pliku. W przeciwnym razie, jeśli zostanie podana nazwa pliku wyjściowego, dane zostaną zapisane w tym pliku. W przeciwnym razie używana jest nazwa pliku w parametrze zadania.
Zarządzanie nazwami plików
Ten typ wymagań oznacza, że algorytm przetwarzania rekordów musi podać nazwę pliku, która ma pewną wartość biznesową w celu rozróżnienia poszczególnych plików. Częścią nazwy pliku musi być na przykład dostawca usług, obszar lub wartość typu osoby. Zaleca się jednak, aby nazwa pliku nie była w całości określana przez algorytm. Zamiast tego sugeruje się, aby użytkownik przesyłający zadanie mógł podać żądaną nazwę pliku jako parametr zadania. Dzięki temu może ona zawierać dowolne obsługiwane zmienne zastępowania dotyczące informacji systemowych (numer uruchomienia zadania, znacznik daty/godziny itp.), które zapewniają unikatowość plików w danym uruchomieniu zadania. Algorytm może wyznaczyć zmienną zastępowania, która ma zostać zastąpiona wartością biznesową.
Na przykład, korzystając z przypadku użycia dotyczącego plików przypadających na obszar, wyobraźmy sobie, że użytkownik wskazuje nazwę pliku EXTRACT_FILE_<DIV>_{BN}_{RN}_{TN}.csv. Algorytm przetwarzania rekordów otrzymuje ten parametr. Wie, że powinien wyszukać fragment "<DIV>" i zastąpić go nazwą obszaru. Wyobraźmy sobie, że kod obszaru to A100. W danych wejściowych zwrócona zostanie nazwa pliku EXTRACT_FILE_A100_{BN}_{RN}_{TN}.csv wraz z danymi do zapisania w tym pliku dla danej jednostki roboczej.
W powyższym przypadku użycia dotyczącym informacji o osobie, w którym zapisywane są dwa pliki, zaleca się użycie parametru "Nazwa pliku" dla jednego z plików, na przykład pliku informacji o osobie. Do zdefiniowania drugiego pliku (zawierającego informacje kontaktowe) należy użyć dodatkowego parametru. Dlatego użytkownicy przesyłający zadanie powinni zdefiniować następujące parametry:
| Nazwa parametru | Opis | Wartość | Komentarze |
|---|---|---|---|
| fileName | Nazwa pliku | persons_<personType>_{BN}.txt | Jest to parametr nazwy pliku dostarczony z ekstraktem. |
| contactFileName | Nazwa pliku kontaktu | contacts_{BN}.txt | Jest to parametr specjalny zdefiniowany przez kontrolkę zadania ekstrakcji CM. |
Algorytm przetwarzania rekordów wyszukuje parametr "Nazwa pliku" podany jako dane wejściowe, znajduje tekst "<personType>" i zastępuje go wartością typu osoby, a następnie zwraca nazwę pliku w danych wyjściowych. Podczas tworzenia listy schematów zwracanych w danych wyjściowych schemat zawierający informacje kontaktowe osoby będzie zawierał nazwę pliku znalezioną w parametrze "Nazwa pliku kontaktu" dostarczonym jako dane wejściowe.
Wiele wątków
Ta funkcjonalność działa zgodnie z oczekiwaniami w przypadku wielu wątków. Na podstawie przypadku użycia i wdrożenia algorytmu "Wybór rekordów" każdy wątek może tworzyć pliki dla tej samej wartości biznesowej. Użyjmy przypadku użycia dotyczącego obszaru. Wyobraźmy sobie, że wdrożenie obejmuje trzy obszary: A100, B200, C300. Teraz wyobraźmy sobie, że ekstrakt odnosi się do informacji finansowych dotyczących konta. Algorytm wyboru rekordów powinien tworzyć wątki według ID konta, aby dane były równomiernie rozmieszczone w wielu wątkach. Ale w obrębie każdego wątku konta powinny znajdować się w jednym z 3 obszarów zawartych we wdrożeniu. Tak więc każdy wątek może utworzyć 3 pliki dla każdego z 3 obszarów.
Zgodnie z opisem w sekcji Ekstrakt wielowątkowy w systemie obsługiwana jest opcja łączenia, umożliwiająca konsolidację plików w taki sposób, że dla 3 obszarów istnieją 3 kompletne pliki. Cechy i ograniczenia opisane w tym temacie mają zastosowanie również w tym przypadku użycia.
Zamykanie plików
Podczas korzystania z tej funkcjonalności należy zwrócić uwagę na liczbę plików otwartych w procesie zadania. Każdy otwarty plik potrzebuje pamięci, aby można było nim zarządzać. W związku z tym w produkcie wprowadzono limit umożliwiający otwarcie tylko 10 plików (na wątek) podczas uruchamiania zadania. Podczas tworzenia zadania zapisu do wielu plików zdecydowanie zaleca się zaprojektowanie procesu w taki sposób, aby w miarę możliwości można było zapisać wszystkie dane dla jednego pliku i zamknąć ten plik przed przejściem do następnego pliku.
Przyjrzyjmy się naszym przykładom.
- W przykładzie z dostawcą usług jednostką roboczą procesu zadania jest dostawca usług. W takim przypadku po każdym wywołaniu przetwarzania rekordów dane mogą zostać zapisane w pliku, a następnie plik może zostać zamknięty.
- W przykładzie dotyczącym obszaru wybrane dane powinny być dzielone na wątki według odpowiedniej jednostki roboczej powiązanej z celem ekstrakcji, takiej jak konto lub środek trwały. Dane powinny być jednak uporządkowane według obszaru, tak aby wszystkie dane dla każdego obszaru były przetwarzane przed danymi następnego obszaru. Plik danego obszaru może zostać zamknięty po rozpoczęciu przetwarzania danych następnego obszaru.
- W przykładzie z ekstrakcją danych osoby plik kontaktu jest używany na potrzeby wszystkich danych, dlatego musi pozostać otwarty przez cały czas trwania zadania. Informacje o osobie są jednak rozdzielane według typu osoby. Algorytm "Wybór rekordów" umożliwia uporządkowanie danych według typu osoby, tak aby można było zapisać wszystkie dane jednego typu, a następnie wszystkie dane drugiego typu. Biorąc jednak pod uwagę, że w danym uruchomieniu mogą być otwarte nie więcej niż 3 pliki, w tym przypadku użycia nie ma potrzeby aktywnego zarządzania zamykaniem plików w trakcie procesu.
Skąd program zadania będzie wiedział, kiedy zamknąć plik? Ponieważ program zadania ma charakter ogólny i nie wie, jaki typ danych jest przetwarzany ani kiedy pliki powinny zostać zamknięte, informacje te powinny zostać dostarczone w ramach algorytmu przetwarzania rekordów.
W celu zarządzania tym problemem w ramach procesu zadania udostępniany jest algorytm przetwarzania rekordów z listą otwartych plików (z nierozwiązanymi systemowymi zmiennymi zastępowania) oraz wartością logiczną określającą, czy plik powinien zostać zamknięty. Aby wyjaśnić to dokładniej, wykorzystamy nasze przykłady.
Przykład z plikiem na obszar
W tym przypadku użycia we wdrożeniu istnieją 4 obszary: NORTH, EAST, SOUTH, WEST, a dane (dane konta) powinny być pogrupowane w oddzielnych plikach według obszarów.
Zaleca się, aby algorytm "Wybór rekordów" wybierał dane uporządkowane według obszaru.
Proces zadania przekazuje do algorytmu przetwarzania rekordów listę otwartych plików (dozwolone są tylko wartości zero lub jeden). W takim przypadku jedyną wskazówką, że dane dotyczące danego obszaru zostały zakończone, jest to, czy algorytm przetwarzania rekordów wykryje, że jego dane dotyczą jednego obszaru, a otwarty plik na liście dotyczy innego obszaru. Każde wywołanie powinno przygotować swoją nazwę pliku. Następnie powinno sprawdzić, czy dana nazwa pliku znajduje się na liście otwartych plików. Jeśli nie, powinno wskazać, że drugi otwarty plik powinien zostać zamknięty. (Należy pamiętać, że nie musi on być dodawany do "listy otwartych". Program zadania wyszukuje tylko zapisy oznaczone jako zamknięte. Zapisy, które nie są oznaczone jako zamknięte, będą ignorowane).
Załóżmy, że nazwa pliku w parametrze zadania to myFile_<DIV>_{BN}.txt.
Dane są sortowane w taki sposób, aby konta w obszarze EAST były przetwarzane jako pierwsze. Wyobraźmy sobie, że jest to jednostka robocza, która również znajduje się w obszarze EAST. Otrzymuje ona nazwę pliku i listę otwartych plików.
...
<hard>
<batchParms>
<BatchParm>
<name>fileName</name>
<value>myFile_<DIV>_{BN}.txt</value>
</BatchParm>
...
</batchParms>
<openFiles>
<OpenFile>
<closeFile></closeFile>
<fileName>myFile_EAST_{BN}.txt</fileName>
</OpenFile>
</openFiles>
...
</hard>
Algorytm zastępuje część <DIV> w nazwie pliku nazwą obszaru i wypełnia te dane w danych wyjściowych. Następnie porównuje nazwę pliku z bieżącą listą otwartych plików. Znajduje swój plik, więc nie musi wykonywać innych czynności.
<hard>
...
<fileName>myFile_EAST_{BN}.txt</fileName>
...
<openFiles>
<OpenFile>
<closeFile></closeFile>
<fileName>myFile_EAST_{BN}.txt</fileName>
</OpenFile>
</openFiles>
...
</hard>
Jeśli następnie wyobrazimy sobie wywołanie algorytmu przetwarzania rekordów, w którym obszar ma wartość NORTH i jest to pierwszy zapis dla tego obszaru, wówczas otrzymuje on następujące informacje:
<hard>
<batchParms>
<BatchParm>
<name>fileName</name>
<value>myFile_<DIV>_{BN}.txt</value>
</BatchParm>
...
</batchParms>
<openFiles>
<OpenFile>
<closeFile>true</closeFile>
<fileName>myFile_EAST_{BN}.txt</fileName>
</OpenFile>
</openFiles>
...
</hard>
Algorytm zastępuje część <DIV> w nazwie pliku nazwą obszaru i wypełnia te dane w danych wyjściowych. Następnie porównuje nazwę pliku z bieżącą listą otwartych plików i nie znajduje tej nazwy. Wskazuje zatem, że istniejący otwarty plik powinien zostać zamknięty.
<hard>
...
<fileName>myFile_NORTH_{BN}.txt</fileName>
...
<openFiles>
<OpenFile>
<closeFile>true</closeFile>
<fileName>myFile_EAST_{BN}.txt</fileName>
</OpenFile>
</openFiles>
...
</hard>
Przykład z plikiem na dostawcę usług
W tym przypadku użycia jednostką roboczą jest dostawca usług i każdy dostawca usług powinien mieć własny plik. W takim przypadku, ponieważ algorytm przetwarzania rekordów przygotowuje dane i nazwę pliku unikatową dla dostawcy usług, może również wskazywać, że plik może zostać zamknięty. Nie trzeba czekać na następne wywołanie przetwarzania rekordów, aby wskazać, że poprzedni plik może zostać zamknięty. Załóżmy, że nazwa pliku to MYFILE_<serviceProvder>_{BN}_{TN}.txt. Każde wywołanie przetwarzania rekordów przekaże nazwę pliku parametru zadania bez żadnych otwartych plików.
<hard>
<batchParms>
<BatchParm>
<name>fileName</name>
<value>MYFILE_<serviceProvider>_{BC}_{TN}.txt</value>
</BatchParm>
...
</batchParms>
<openFiles>
<OpenFile>
<fileName></fileName>
<closeFile></closeFile>
</OpenFile>
</openFiles>
...
</hard>
Algorytm przetwarza dane dla dostawcy usług A100. Zwraca informacje powiązane z nazwą pliku, a mianowicie pojedynczą nazwę pliku w danych wyjściowych powiązanych z tym dostawcą usług, dodaje plik do listy otwartych plików i wskazuje, że powinien zostać zamknięty. (Uwaga: plik na jednostkę roboczą to jedyny znany przypadek użycia, w którym algorytm będzie wiedział, że jest to ostatni zapis pliku, i sam się zamknie).
<hard>
...
<fileName>MYFILE_A100_{BC}_{TN}.txt</fileName>
...
<openFiles>
<OpenFile>
<closeFile>true</closeFile>
<fileName>MYFILE_A100_{BC}_{TN}.txt</fileName>
</OpenFile>
</openFiles>
...
</hard>
Przykład z wieloma otwartymi plikami
W tym przykładzie założono, że nazwy plików są zdefiniowane zgodnie z sekcją "Zarządzanie nazwami plików" powyżej. Zakładamy, że projektant algorytmów zdecydował, aby nie zamykać aktywnie pliku informacji o osobie, ponieważ w danym momencie otwarte są maksymalnie trzy pliki. Zakładamy również, że zdecydował, aby nie porządkować danych według typu osoby. Oto dane przekazane w trakcie uruchamiania:
<hard>
<batchParms>
<BatchParm>
<name>fileName</name>
<value>persons_<personType>_{BN}.txt</value>
</BatchParm>
<BatchParm>
<name>contactFileName</name>
<value>contacts_{BN}.txt</value>
</BatchParm>
...
</batchParms>
<openFiles>
<OpenFile>
<fileName>persons_P_{BN}.txt</fileName>
<closeFile></closeFile>
</OpenFile>
<OpenFile>
<fileName>persons_B_{BN}.txt</fileName>
<closeFile></closeFile>
</OpenFile>
<OpenFile>
<fileName>contacts_{BN}.txt</fileName>
<closeFile></closeFile>
</OpenFile>
</openFiles>
...
</hard>
Wystąpienie jednego wywołania algorytmu "Przetwarzanie rekordów" zawierającego szczegóły osoby (typ osoby "P").
<fileName>persons_P_{BN}.txt</fileName>
<fileOutput>
<listValue>
<SchemaInstance>
<recordXMLNode>person</recordXMLNode>
<schemaName>CM-PersonDetail</schemaName>
<schemaType>F1SS</schemaType>
<fileName></fileName>
<data>LotsOfData</data>
</SchemaInstance>
</listValue>
<listValue>
<SchemaInstance>
<recordXMLNode>person</recordXMLNode>
<schemaName>CM-AddressDetail</schemaName>
<schemaType>F1SS</schemaType>
<fileName></fileName>
<data>LotsOfData</data>
</SchemaInstance>
</listValue>
<listValue>
<SchemaInstance>
<recordXMLNode></recordXMLNode>
<schemaName>CM-ContactDetail</schemaName>
<schemaType>F1SS</schemaType>
<fileName>contacts_{BN}.txt</fileName>
<data>LotsOfData</data>
</SchemaInstance>
</listValue>
</fileOutput>
Ten przykład XML pokazuje, że:
- W elemencie fileName występuje nadpisana nazwa pliku.
- Pierwsze dwa schematy nie zawierają żadnej wartości w fileOutput\listValue\SchemaInstance\fileName, więc należy je zapisać w pliku w fileName. Należy zauważyć, że te dwa schematy zawierają również węzeł XML rekordu. Dzięki temu, jeśli dane wyjściowe mają format XML, dane z obu tych schematów zostaną zawarte w węźle XML "person". Funkcjonalność ta nie jest powiązana z tym wydaniem. Jest tylko próbą zilustrowania wielu cech.
- Trzeci schemat zawiera zapis w fileOutput\listValue\SchemaInstance\fileName. Dlatego dane te są zapisywane w osobnym pliku.
