Czy wiesz, że wykorzystując procedurę On.AfterDocumentDeleted możesz zapisywać do bazy dane o usunięciu dokumentu, rejestrując ID usuniętego dokumentu, ID operatora oraz dokładną datę i czas tej akcji w Comarch BPM?
Zastosowanie
Poniższy przykład przedstawia, jak za pomocą procedury On.AfterDocumentDeleted w bazie danych Comarch BPM zapisywać informacje o tym, kto, kiedy i jaki dokument usunął z obiegu.
Zawartość przykładu
- Zmodyfikowana procedura do.OnAfterDocumentDeleted, która jest wywoływana automatycznie podczas usuwania dokumentu.
- Tabelka wdrożeniowa do.WDR_DeletedDocumentsLog, w której są zapisywane informacje kto i kiedy usunął dany dokument.
Kliknij tutaj, aby pobrać przykład
Zasada działania
Procedura do.OnAfterDocumentDeleted dodaje do tabelki wdrożeniowej do.WDR_DeletedDocumentsLog informacje o usunięciu dokumentu (ID dokumentu, ID użytkownika usuwającego oraz datę i czas operacji).
- Parametry wejściowe: Procedura wykorzystuje dwa parametry wejściowe:
- @documentId: Zawiera ID dokumentu (DWD_ID) z tabeli do.DF_Work.
- @userId: Zawiera ID operatora (DCD_ID) z tabeli do.DF_ConfOSDictionary.
- Pobieranie Pełnego Numeru Dokumentu: Mimo że pełny numer dokumentu (DWD_FullNumber) nie jest parametrem wejściowym, procedura pobiera go bezpośrednio z tabeli nagłówkowej dokumentu do.DF_Work, używając jako klucza przekazanego @documentId.
- Tabela do.DF_ConfOSDictionary: Używamy jej do pobrania loginu operatora (DCD_Login), co czyni log bardziej czytelnym niż samo ID.
- Funkcja GETDATE(): Zapewnia dokładną datę i czas, kiedy operacja usunięcia została wykonana.
- Instrukcja INSERT INTO: Wstawia zebrane dane do tabeli wdrożeniowej do.WDR_DeletedDocumentsLog.
Konfiguracja przykładu
1.
Utworzono w bazie danych BPM w schemacie do. własną tabelę o nazwie do.WDR_DeletedDocumentsLog, w ktorej będą zapisywane informacje dotyczące usunięć dokumentów.
Przykład tabeli:CREATE TABLE do.WDR_DeletedDocumentsLog (
DDL_Id INT IDENTITY(1,1) PRIMARY KEY,
DDL_DocumentId INT NOT NULL, /*ID usuniętego dokumentu (DWD_ID z do.DF_Work)*/
DDL_FullNumber VARCHAR(50) NULL, /*Numer dokumentu (DWD_FullNumber z do.DF_Work)*/
DDL_DeletedByUserId INT NULL, /*ID użytkownika, który usunął dokument (DCD_ID z do.DF_ConfOSDictionary)*/
DDL_UserName VARCHAR(255) NULL, /*Login użytkownika*/
DDL_DeleteDate DATETIME NOT NULL /*Data i czas operacji*/
);
2. W procedurze do.OnAfterDocumentDeleted dodano kod:
/* Deklaracja zmiennych */ DECLARE @userLogin VARCHAR(100); DECLARE @fullNumber VARCHAR(50); --z do.DF_Work (DWD_FullNumber) /* 1. Pobranie loginu użytkownika z tabeli do.DF_ConfOSDictionary - Tabela słownika działów i pracowników */ IF @userId IS NOT NULL BEGIN SELECT @userLogin = DCD_Login FROM do.DF_ConfOSDictionary WHERE DCD_ID = @userId; END /* 2. Pobranie pełnego numeru dokumentu z tabeli do.DF_Work (Tabela nagłówkowa dokumentu) */ IF @documentId IS NOT NULL BEGIN SELECT @fullNumber = DWD_FullNumber FROM do.DF_Work WHERE DWD_ID = @documentId; END /* 3. Dodanie informacji o usunięciu dokumentu do tabeli wdrożeniowej */ INSERT INTO do.WDR_DeletedDocumentsLog ( DDL_DocumentId, DDL_FullNumber, DDL_DeletedByUserId, DDL_UserName, DDL_DeleteDate ) VALUES ( @documentId, @fullNumber, @userId, @userLogin, GETDATE() );
3. Zmodyfikowana procedura wygląda następująco:
ALTER PROCEDURE [do].[OnAfterDocumentDeleted] @documentId as int = NULL, -- DWD_ID from DF_Work table @userId as int = NULL -- DCD_ID from DF_ConfOSDictionary table, the user who deleted the document AS BEGIN begin try /* Deklaracja zmiennych */ DECLARE @userLogin VARCHAR(100); DECLARE @fullNumber VARCHAR(50); --z do.DF_Work (DWD_FullNumber) /* 1. Pobranie loginu użytkownika z tabeli do.DF_ConfOSDictionary - Tabela słownika działów i pracowników */ IF @userId IS NOT NULL BEGIN SELECT @userLogin = DCD_Login FROM do.DF_ConfOSDictionary WHERE DCD_ID = @userId; END /* 2. Pobranie pełnego numeru dokumentu z tabeli do.DF_Work (Tabela nagłówkowa dokumentu) */ IF @documentId IS NOT NULL BEGIN SELECT @fullNumber = DWD_FullNumber FROM do.DF_Work WHERE DWD_ID = @documentId; END /* 3. Dodanie informacji o usunięciu dokumentu do tabeli wdrożeniowej */ INSERT INTO do.WDR_DeletedDocumentsLog ( DDL_DocumentId, DDL_FullNumber, DDL_DeletedByUserId, DDL_UserName, DDL_DeleteDate ) VALUES ( @documentId, @fullNumber, @userId, @userLogin, GETDATE() ); end try begin catch DECLARE @ErrorMessage varchar(max) = 'W procedurze do.OnAfterDocumentDeleted wystąpił błąd: ' + ERROR_MESSAGE(); --THROW 50001, @ErrorMessage ,1; declare @ErrorSeverity int = ERROR_SEVERITY(), @ErrorState int = ERROR_STATE() raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState); end catch END
Uzupełniona tabela do.WDR_DeletedDocumentsLog
Po usunięciu dokumentu w Comarch BPM za pomocą ikony kosza, w tabeli wdrożeniowej pojawia się wpis:
