Wprowadzenie
Dziennik zmian to funkcja rejestrująca historię zmian wartości biznesowych i zapisująca zdarzenia zachodzące w cyklu życia jednostek biznesowych (Business Entity). Dla każdej jednostki biznesowej i instancji bazy danych można określić, czy zmiany mają być rejestrowane.
Za pomocą dziennika zmian można np. w sposób ciągły dokumentować zmiany w danych podstawowych, co umożliwia ich łatwe weryfikowanie. Dziennik zmian można aktywować dla jednostek biznesowych za pomocą aplikacji Aktywacja dziennika zmian.
Rekordy dziennika zmian można przeszukiwać za pomocą interfejsu programowania dziennika zmian. Eksport dziennika zmian wykorzystuje te interfejsy i tworzy z nich plik.
Artykuł dotyczy używanej struktury danych, wymienione zostały również funkcje związane z portem eksportu.
Grupa docelowa
- Administratorzy
- Konsultanci techniczni
Struktura danych
Struktura danych eksportu dziennika zmian wykorzystuje informacje z interfejsu programowania dla dziennika zmian (szczegóły w artykule: Dziennik zmian). Eksportowane dane mogą obejmować zmiany kilku instancji jednostek biznesowych. Dla każdej instancji jednostki biznesowej zmienione instancje zależne są wymienione pogrupowane według zależności.
Struktura danych dla instancji jednostki biznesowej
Zmiany oznaczone w dzienniku zmian są eksportowane w poniższej strukturze. Nazwy encji przedstawione na poniższej ilustracji odpowiadają nazwom elementów w pliku XML generowanym przez eksport.

Dla zmiany instancji jednostki biznesowej (Business Entity) oraz jej elementów zależnych (Dependents) w ramach jednej transakcji eksportowany jest element ModificationJournal.
Zmiany w instancji jednostki biznesowej są odwzorowywane w elemencie JournalObject.
Elementy zależne (Dependents) jednostki biznesowej pozostają w relacji 1:n z elementem ModificationJournal. Wszystkie zmodyfikowane instancje obiektów biznesowych są grupowane w jednym elemencie Dependent jako elementy typu JournalObject.
W strukturze danych element ModificationJournal dla zamówienia sprzedaży znajduje się w relacji 1:1 z pozycją zamówienia sprzedaży.
Poniżej pozycji zlecenia sprzedaży znajdują się zmiany dotyczące A, B i C – każda z nich reprezentowana jest jako osobny element JournalObject.
Zmiany na poziomie atrybutów są wyszczególnione wewnątrz elementu JournalObject.
Dla każdego zmodyfikowanego atrybutu tworzony jest element ChangedValue.
Element ChangedValue może zawierać elementy OldValue oraz NewValue, czyli wartość przed zmianą i wartość po zmianie.
To, czy obecny jest jeden, czy oba elementy, zależy od rodzaju zmiany:
-
jeśli jednostka biznesowa (Business Entity) lub jej element zależny (Dependent) została nowo utworzona, obecny jest tylko NewValue
-
w przypadku zmiany istniejącej wartości, obecne są zarówno OldValue, jak i NewValue
-
przy usunięciu występuje wyłącznie OldValue
Struktura elementów OldValue i NewValue jest identyczna — różnią się jedynie semantycznie (czyli znaczeniem przypisanym w kontekście zmiany).
Typ danych w elemencie OldValue lub NewValue określa, jaki obiekt typu …Value
jest referencjonowany.
Zwykle z dostępnej listy można wskazać tylko jeden obiekt.
Wyjątek stanowi typ danych DynamicObjectCodeValue — w jego przypadku można wskazać wiele obiektów.
Typ elementu w OldValue lub NewValue określa, o jaki typ danych chodzi wewnątrz DynamicObjectCodeValue.
Atrybuty i relacje
Poniżej przedstawiono atrybuty i relacje dla wszystkich istotnych obiektów w strukturze danych.
ModificationJournal (jednostka biznesowa – Business Entity)
Atrybut
Atrybut | Opis |
---|---|
entityName |
W pełni kwalifikowana nazwa jednostki biznesowej (Business Entity), np. com.cisag.app.sales.obj.SalesOrder . |
entityDescription |
Opis jednostki biznesowej pochodzący z repozytorium, np. Zamówienie sprzedaży. |
entityInstanceString |
Ciąg znaków identyfikujący instancję jednostki biznesowej, np. „Zamówienie sprzedaży – ZS/2025/00001. |
changedUser |
Nazwa i opis użytkownika, który wykonał zmianę. |
changedTime |
Data i godzina wykonania zmiany. |
Relacje
Relacja | Opis |
Dependent | Lista wszystkich elementów zależnych (Dependents), pogrupowana według obiektów biznesowych.
Model relacji: 1:n |
JournalObject | Zawiera zmiany dotyczące instancji jednostki biznesowej (Business Entity).
Model relacji: 1:1 |
Zależność (Dependent)
Atrybut
Atrybut | Opis |
---|---|
dependentName |
W pełni kwalifikowana nazwa elementu zależnego (Dependent), np. com.cisag.app.sales.obj.SalesOrderDetail |
dependentDescription |
Opis elementu zależnego pochodzący z repozytorium, np. pozycja zamówienia sprzedaży. |
Relacje
Relacja | Opis |
---|---|
JournalObject |
Zawiera zmiany zmodyfikowanych instancji elementu zależnego (Dependent).
Model relacji: 1:n |
JournalObject
Atrybuty
Atrybut | Opis |
objectName | W pełni kwalifikowana nazwa obiektu, np. com.cisag.app.sales.obj.SalesOrderDetail |
objectInstanceString | Ciąg identyfikujący instancję obiektu, np. pozycja zamówienia sprzedaży – A. |
primaryKey | Klucz główny obiektu. |
objectType | Określa typ obiektu. Możliwe wartości:
|
changeType | Określa typ zmiany. Możliwe wartości:
Wartość tego atrybutu wpływa na to, czy w ChangedValues występują elementy OldValue i NewValue:
|
Relacje
Relacja | Opis |
ChangedValue | Zawiera zmiany dla poszczególnych atrybutów. Model relacji: 1:n |
ChangedValue
Atrybut
Atrybut | Opis |
attributePath | Ścieżka zmodyfikowanego atrybutu. Ścieżka jest podawana względem objectName określonego w elemencie JournalObject .Na przykład dla atrybutu number w obiekcie SalesOrder jako ścieżka atrybutu zostanie podane po prostu number. Pełna ścieżka z nazwą obiektu (np. com.cisag.app.sales.obj.SalesOrder:number) nie jest stosowana. |
dataType | Określa typ danych atrybutu. Możliwe wartości to:
|
elementType | Ten atrybut jest używany tylko wtedy, gdy atrybut dataType ma wartość DYNAMIC_OBJECT_CODE_VALUES. W takim przypadku elementType określa, jaki typ danych mają wartości wewnątrz obiektu typu DynamicObjectCodeValue. Możliwe wartości to:
|
Relacje
Relacje | Opis |
OldValue | Opisuje wartość przed zmianą. Ta relacja występuje tylko wtedy, gdy typ zmiany (changeType) to UPDATE lub DELETE. Model relacji: 1:0..1 lub 1:0..n w przypadku typu danych DYNAMIC_OBJECT_CODE_VALUES |
NewValue | Opisuje wartość po zmianie. Ta relacja występuje tylko wtedy, gdy typ zmiany (changeType) to INSERT lub UPDATE. Model relacji: 1:0..1 lub 1:0..n w przypadku typu danych DYNAMIC_OBJECT_CODE_VALUES. |
OldValue i NewValue
Atrybut
Atrybut | Opis |
valueAsString | Tekstowa reprezentacja wartości. Formatowanie zależy od typu danych oraz od ustawień użytkownika. |
Relacje
Na podstawie istniejących relacji, w zależności od atrybutu dataType
w elemencie ChangedValue
, obecna jest tylko jedna odpowiednia relacja.
Relacje | Opis |
BinaryValue | Reprezentacja wartości binarnej. Relacja występuje tylko wtedy, gdy atrybut dataType w ChangedValue ma wartość BINARY. Model relacji: 1:1 |
BlobValue | Reprezentacja wartości typu BLOB. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość BLOB. Model relacji: 1:1 |
BooleanValue | Reprezentacja wartości logicznej (Boolean). Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość BOOLEAN. Model relacji: 1:1 |
ByteValue | Reprezentacja wartości typu Byte. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość BYTE. Model relacji: 1:1 |
CharValue | Reprezentacja znaku (Character). Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość CHAR. Model relacji: 1:1 |
CisDateValue | Reprezentacja daty w formacie CisDate. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość CIS_DATE. Model relacji: 1:1 |
ClobValue | Reprezentacja wartości typu CLOB. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość CLOB. Model relacji: 1:1 |
DecimalValue | Reprezentacja liczby dziesiętnej w formacie CisDecimal. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość DECIMAL. Model relacji: 1:1 |
DomesticAmountValue | Reprezentacja kwoty w walucie krajowej (DomesticAmount). Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość DOMESTIC_AMOUNT. Model relacji: 1:1 |
DoubleValue | Reprezentacja liczby zmiennoprzecinkowej typu Double. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość DOUBLE. Model relacji: 1:1 |
DurationValue | Reprezentacja okresu czasu (Duration). Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość DURATION. Model relacji: 1:1 |
FloatValue | Reprezentacja liczby zmiennoprzecinkowej typu Float. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość FLOAT. Model relacji: 1:1 |
ForeignAmountValue | Reprezentacja kwoty w walucie obcej (ForeignAmount). Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość FOREIGN_AMOUNT. Model relacji: 1:1 |
GuidValue | Reprezentacja identyfikatora GUID. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość GUID. Model relacji: 1:1 |
IntegerValue | Reprezentacja liczby całkowitej typu Integer. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość INTEGER. Model relacji: 1:1 |
LongValue | Reprezentacja liczby całkowitej typu Long. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość LONG. Model relacji: 1:1 |
NLSStringValue | Reprezentacja wartości językowej (NLS – National Language Support). Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość NLS_STRING_VALUE. Model relacji: 1:1 |
PointInTimeValue | Reprezentacja punktu w czasie (PointInTime). Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość LONG. Model relacji: 1:1 |
QuantityValue | Reprezentacja ilości (Quantity). Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość QUANTITY. Model relacji: 1:1 |
ShortValue | Reprezentacja liczby całkowitej typu Short. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość SHORT. Model relacji: 1:1 |
SQLDateValue | Reprezentacja daty w formacie SQLDate. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość SQL_DATE. Model relacji: 1:1 |
StringValue | Reprezentacja tekstu (String). Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość STRING. Model relacji: 1:1 |
TimeStampValue | Reprezentacja znacznika czasu (Timestamp). Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość TIMESTAMP. Model relacji: 1:1 |
ValueSetValue | Reprezentacja wartości ze zbioru zdefiniowanych wartości (ValueSet). Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość VALUE_SET. Model relacji: 1:1 |
VarStringValue | Reprezentacja zmiennolateksowego ciągu znaków (VarString). Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość VAR_STRING. Model relacji: 1:1 |
PrimaryKeyValue | Reprezentacja klucza głównego (Primary Key). Oprócz samego klucza głównego, jeśli to możliwe, zwracany jest również InstanceString obiektu docelowego. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość PRIMARY_KEY. Model relacji: 1:1 |
DynamicObjectCodeValues | Reprezentacja pary wartości kodowych (Code-Werte-Paar). Wartości te mają typ danych określony w atrybucie elementType w elemencie ChangedValue. Relacja ta występuje tylko wtedy, gdy atrybut dataType w elemencie ChangedValue ma wartość DYNAMIC_OBJECT_CODE_VALUES. Model relacji: 1:n |
DynamicObjectCodeValues
DynamicObjectCodeValue reprezentuje parę kod-wartość. Kod jest reprezentacją tekstową, która jest unikalna i może być również używana do sortowania. Typ danych wartości zależy od atrybutu elementType w ChangedValue.
OldValue i NewValue mogą odwoływać się do kilku DynamicObjectCodeValues.
Atrybut
Atrybut | Opis |
code | Tekstowa reprezentacja kodu. |
Relacje
Tylko jedna relacja jest dostępna z istniejących relacji w zależności od atrybutu elementType na ChangedValue.
Relacje | Opis |
CisDateValue | Reprezentacja daty w formacie CisDate. Relacja ta występuje tylko wtedy, gdy atrybut elementType w elemencie ChangedValue ma wartość CIS_DATE. Model relacji: 1:1 |
DecimalValue | Reprezentacja liczby dziesiętnej w formacie CisDecimal. Relacja ta występuje tylko wtedy, gdy atrybut elementType w elemencie ChangedValue ma wartość DECIMAL. Model relacji: 1:1 |
DomesticAmountValue | Reprezentacja kwoty w walucie krajowej (DomesticAmount). Relacja ta występuje tylko wtedy, gdy atrybut elementType w elemencie ChangedValue ma wartość DOMESTIC_AMOUNT. Model relacji: 1:1 |
ForeignAmountValue | Reprezentacja kwoty w walucie obcej (ForeignAmount). Relacja ta występuje tylko wtedy, gdy atrybut elementType w elemencie ChangedValue ma wartość FOREIGN_AMOUNT. Model relacji: 1:1 |
GuidValue | Reprezentacja identyfikatora GUID. Relacja ta występuje tylko wtedy, gdy atrybut elementType w elemencie ChangedValue ma wartość GUID. Model relacji: 1:1 |
QuantityValue | Reprezentacja ilości (Quantity). Relacja ta występuje tylko wtedy, gdy atrybut elementType w elemencie ChangedValue ma wartość QUANTITY. Model relacji: 1:1 |
StringValue | Reprezentacja tekstu (String). Relacja ta występuje tylko wtedy, gdy atrybut elementType w elemencie ChangedValue ma wartość STRING. Model relacji: 1:1 |
TimeStampValue | Reprezentacja znacznika czasu (Timestamp). Relacja ta występuje tylko wtedy, gdy atrybut elementType w elemencie ChangedValue ma wartość TIMESTAMP. Model relacji: 1:1 |
ValueSetValue | Reprezentacja wartości ze zbioru zdefiniowanych wartości (ValueSet).Relacja ta występuje tylko wtedy, gdy atrybut elementType w elemencie ChangedValue ma wartość VALUE_SET.
Model relacji: 1:1 |
PrimaryKeyValue | Reprezentacja klucza głównego (Primary Key). Oprócz samego klucza głównego, jeśli to możliwe, zwracany jest również InstanceString obiektu docelowego. Relacja ta występuje tylko wtedy, gdy atrybut elementType w elemencie ChangedValue ma wartość PRIMARY_KEY. Model relacji: 1:1 |
Instrukcja: Eksportowanie danych
- Otworzyć aplikację Eksport danych.
- Wybrać filtr dla ModificationJournal lub utworzyć nowy filtr.
- Wybrać najwyższy atrybut w drzewie na zakładce Filtr.
- Ustawić wybór atrybutów na Czytelny wybór. Zostaną wybrane wszystkie atrybuty. W przypadku atrybutów kluczy obcych zostanie wybrany tylko klucz biznesowy. Jest to wymagane dla elementów DomesticAmount, ForeignAmount, Duration oraz Quantity.
- Wybrane atrybuty filtra są zaznaczone z możliwością modyfikacji.
- Przejść na zakładkę Ograniczenie. Wyświetlane są dostępne wyszukiwania.
- Wybrać jedno z zapytań i – w razie potrzeby – zawęzić zakres danych do eksportu.
- Wybrać przycisk [Eksportuj dane] ze standardowego paska narzędzi.
- Otwarte zostanie okno dialogowe Eksport danych.
- W tym oknie można określić ustawienia pliku docelowego.
- Wybrać przycisk [W tle] lub [Natychmiast], aby rozpocząć eksport.
- Wybrane dane zostaną wyeksportowane do pliku docelowego.
Wyszukiwanie w eksporcie
Podczas eksportowania dziennika zmian dostępne są cztery metody wyszukiwania.
- Eksportuj dziennik zmian (baza konfiguracyjna)
- Eksportuj dziennik zmian (repozytorium)
- Eksportuj dziennik zmian (OLTP)
- Eksportuj dziennik zmian (OLAP)
Dziennik zmian można wyeksportować z odpowiedniej bazy danych za pomocą odpowiedniego wyszukiwania.
Do eksportu nie można użyć instrukcji OQL.
Nie jest możliwe sortowanie według atrybutu Business Entity w sortowaniu, ale możliwe jest grupowanie.