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.

 

Przyklad

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:

 

Rozpoczynasz pracę z Comarch BPM (dawniej DMS) i chcesz dowiedzieć się, jak korzystać z programu? A może masz już podstawową wiedzę o Comarch BPM (dawniej DMS) i chcesz dowiedzieć się więcej?

Sprawdź Szkolenia Comarch BPM!