Eksport dziennika zmian

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.

Przykład
Zamówienie sprzedaży ZS/2025/00001 uległo zmianie. Wraz ze zmianą w zamówieniu sprzedaży ZS/2025/00001 zmieniły się również pozycje zamówienia sprzedaży A, B i C. W danych eksportu zamówienie sprzedaży ZS/2025/00001 jest wymienione jako jednostka biznesowa. Pozycje zamówienia sprzedaży A, B i C znajdują się poniżej zamówienia sprzedaży.

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.

Struktura danych eksportu

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.

Przykład
Zamówienie sprzedaży ZS/2025/00001 (jednostka biznesowa – Business Entity) posiada pozycje zlecenia sprzedaży A, B i C (elementy zależne – Dependents).
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:

  • BUSINESS_OBJECT
  • DYNAMIC_OBJECT
changeType Określa typ zmiany. Możliwe wartości:

  • INSERT
  • UPDATE
  • DELETE

Wartość tego atrybutu wpływa na to, czy w ChangedValues występują elementy OldValue i NewValue:

  • INSERT występuje tylko NewValue
  • UPDATE występują oba: OldValue i NewValue
  • DELETE występuje tylko OldValue

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:

  • BINARY
  • BLOB
  • BOOLEAN
  • BYTE
  • CHAR
  • CIS_DATE
  • CLOB
  • DECIMAL
  • DOMESTIC_AMOUNT
  • DOUBLE
  • DURATION
  • FLOAT
  • FOREIGN_AMOUNT
  • GUID
  • INT
  • LONG
  • NLS_STRING_VALUE
  • POINT_IN_TIME
  • QUANTITY
  • SHORT
  • SQL_DATE
  • STRING
  • TIMESTAMP
  • VALUESET
  • VARSTRING
  • PRIMARY_KEY
  • DYNAMIC_OBJECT_CODE_VALUES
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:

  • CIS_DATE
  • GUID
  • DECIMAL
  • DOMESTIC_AMOUNT
  • FOREIGN_AMOUNT
  • QUANTITY
  • STRING
  • TIMESTAMP
  • VALUESET
  • PRIMARY_KEY

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

  1. Otworzyć aplikację Eksport danych.
  2. Wybrać filtr dla ModificationJournal lub utworzyć nowy filtr.
  3. Wybrać najwyższy atrybut w drzewie na zakładce Filtr.
  4. 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.
  5. Wybrane atrybuty filtra są zaznaczone z możliwością modyfikacji.
  6. Przejść na zakładkę Ograniczenie. Wyświetlane są dostępne wyszukiwania.
  7. Wybrać jedno z zapytań i – w razie potrzeby – zawęzić zakres danych do eksportu.
  8. Wybrać przycisk [Eksportuj dane] ze standardowego paska narzędzi.
  9. Otwarte zostanie okno dialogowe Eksport danych.
  10. W tym oknie można określić ustawienia pliku docelowego.
  11. Wybrać przycisk [W tle] lub [Natychmiast], aby rozpocząć eksport.
  12. 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.

Czy ten artykuł był pomocny?