Procedury

W Comarch DMS dostępne są procedury (wyzwalacze), które rozszerzają funkcjonalność modelowania procesów o możliwość wykonywania dodatkowych akcji uruchamiane poprzez określone zdarzenie występujące podczas pracy z aplikacją. Aktualnie Comarch DMS wyposażony jest w następujące wyzwalacze:

  • Baza Comarch DMS:
    • do.OnAfterDocumentCreated – procedura uruchamiana po każdym utworzeniu dokumentu w Comarch DMS.
    • do.OnAfterDocumentSave – procedura uruchamiana po każdej aktualizacji dokumentu Comarch DMS:
      • po kliknięciu w ikonę zapisu,
      • w przypadku, gdy na typie obiegu ustawiono automatyczny zapis po zainicjowaniu dokumentu,
      • po kliknięciu ‘Utwórz’ w celu utworzenia dokumentu w masowym skanowaniu,
      • po kliknięciu w ‘Generuj’ w celu wygenerowania dokumentu w punktach ACD,
      • przy próbie zapisu dokumentu w obiegu utworzonego z poziomu kolumny typu Dokumenty w obiegu w kontrolce typu Dane tabelaryczne.
    • do.OnBeforeDocumentShow – procedura uruchamiana przed wyświetleniem szczegółów dokumentu Comarch DMS:
      • w przypadku utworzenia nowego dokumentu za pomocą ikony ,
      • w przypadku wyświetlenia istniejącego dokumentu,
      • po kliknięciu ‘Utwórz’ w celu utworzenia dokumentu w masowym skanowaniu,
      • po kliknięciu w ‘Generuj’ w celu wygenerowania dokumentu w punktach ACD.
    • do.OnDocumentPropagation – procedura uruchamiana jest podczas każdego przekazania dokumentu do kolejnego etapu.
  • Bazy Comarch ERP XL, Comarch ERP Optima, Comarch ERP Altum – podczas propagacji dokumentu Comarch DMS można wykonać procedurę na bazie systemu Comarch ERP:
    • CDN.OnDocumentPropagation – procedura uruchamiana jest podczas każdego przekazania dokumentu do kolejnego etapu.
Uwaga
Procedura CDN.OnDocumentPropagation na bazach systemów Comarch ERP jest wykonywana wyłącznie w instalacji jednospółkowej.

W każdej z procedur (wyzwalaczy) obsłużono wyjątki (Try-Catch) z możliwością przekazania informacji do aplikacji jako komunikat (MessageBox). Ponadto wyjątek zwrócony poprzez instrukcję THROW spowoduje cofnięcie transakcji. Możliwość tą można wykorzystać np. do zatrzymania przekazania dokumentu do kolejnego etapu (procedura OnDocumentPropagation) w sytuacji, gdy nie został spełniony warunek przekazania. Kliknięcie „Przekaż do kolejnego etapu” może spowodować wyświetlenie komunikatu zdefiniowanego w procedurze i zatrzymanie akcji przekazania.

Budowa procedur (wyzwalaczy) rozszerzających funkcjonalność modelowania procesów (budowa procedury zostanie wyświetlona po kliknięciu w nazwę):

do.OnDocumentPropagation

Procedura jest wywoływana podczas przekazania dokumentu do następnego etapu.

CREATE PROCEDURE do.OnDocumentPropagation

@WorkflowId as int = NULL,

@StageId as int = NULL,

@DocumentId as int = NULL,

@PropagatedById as int = NULL,

@DocumentOwnerId as int = NULL,

@IsAutomaticPropagation as bit = NULL

AS

BEGIN

declare @test int

— Tutaj można obsłużyć dodatkowe akcje użytkownika.

END

Opis argumentów:

      • @WorkflowId – int, id Obiegu dokumentów (DSH_Id),
      • @StageId – int, id etapu (DDS_Id),
      • @DocumentId – int, id dokumentu (DWD_ID),
      • @PropagatedById – int, id użytkownika przekazującego dokument (DCD_Id),
      • @DocumentOwnerId int, id właściciela dokumentu (DCD_Id) – przyjmuje zawsze wartość 0,
      • @IsAutomaticPropagation bit, wartość prawdziwa, jeśli dokument był przekazany przez propagację czasową.

do.OnAfterDocumentSave

Procedura jest wykonywana podczas zapisu dokumentu.

CREATE PROCEDURE do.OnAfterDocumentSave

@DocumentId as int = NULL, — DWD_ID z tabeli DF_Work

@SavedBy as int = NULL — DCD_ID z tabeli DF_ConfOSDictionary

AS

BEGIN

declare @test int;

— Tutaj można obsłużyć dodatkowe akcje użytkownika.

END

Opis argumentów:

      • @DocumentId – id dokumentu (DWD_ID),
      • @SavedBy – id użytkownika zapisującego dokument (DCD_Id).

do.OnAfterDocumentCreated

Procedura jest wykonywana przy zapisie nowego dokumentu.

CREATE PROCEDURE do.OnAfterDocumentCreated

@DocumentId as int = NULL, — DWD_ID z tabeli DF_Work

@SavedBy as int = NULL — DCD_ID z tabeli DF_ConfOSDictionary

AS

BEGIN

declare @test int;

— Tutaj można obsłużyć dodatkowe akcje użytkownika.

END

Opis argumentów:

      • @DocumentId – id dokumentu (DWD_ID),
      • @SavedBy – id użytkownika zapisującego dokument (DCD_Id).

do.OnBeforeDocumentShow

Procedura uruchamiana jest przed wyświetleniem szczegółów dokumentu DMS

CREATE PROCEDURE do.OnBeforeDocumentShow

@documentId as int = NULL, — DWD_ID z tabeli DF_Work

@workflowId as int = NULL, — DFH_ID z tabeli DF_HeadDokumentFlow

@userId as int = NULL — DCD_ID z tabeli DF_ConfOSDictionary

AS

BEGIN

begin try

declare @test int

— Tutaj można obsłużyć dodatkowe akcje użytkownika.

end try

begin catch

DECLARE @ErrorMessage varchar(max) = 'W procedurze do.OnBeforeDocumentShow 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

Opis argumentów:

      • @DocumentId – identyfikator dokumentu (DWD_Id),
      • @WorkflowId – identyfikator typu obiegu (DFH_Id),
      • @UserId – identyfikator operatora (DCD_Id).

Przyklad

Przykład zastosowania procedury do.OnAfterDocumentCreated

W przykładzie zastosowano funkcję skalarną do.ModWorkflowName zwracającą nazwę typu obiegu. W procedurze do.OnAfterDocumentCreated dodano warunek, który ogranicza wywołanie procedury do nazwy typu obiegu. Oznacza to, że procedura zostanie uruchomiona każdorazowo, gdy w ramach wskazanego typu obiegu zostanie utworzony nowy dokument i zostanie podjęta próba jego zapisu w bazie. W przypadku, gdy kontrolka, której identyfikator wskazano w procedurze ma uzupełnioną wartość, dokument zostanie zapisany. W przypadku, gdy w kontrolce, której identyfikator określono w procedurze, nie zostanie uzupełniona wartość, dokument nie zostanie zapisany i zostanie wyświetlony komunikat o treści określonej w poleceniu THROW w procedurze.

USE [nazwa_bazy_DMS]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [do].[OnAfterDocumentCreated]

@DocumentId as int = NULL, — DWD_ID z tabeli DF_Work

@SavedBy as int = NULL — DCD_ID z tabeli DF_ConfOSDictionary

AS

BEGIN

BEGIN TRY

declare @string varchar(max)=”;

if do.ModWorkflowName (@DocumentId)=’Nazwa_typu_obiegu’ /*nazwa typu obiegu, w którym nastąpi blokada*/

Begin

select @string= isnull (w.DWC_ValueString,”) from do.DF_Work d

join do.DF_ConfDSHead i on d.DWD_DSHId=i.DSH_ID

join do.DF_ConfCFCardDokFlow k on k.DKO_DSHId=i.DSH_ID

join do.DF_WorkCF w on w.DWC_DKOId = k.DKO_ID

where DWD_ID=@DocumentId and k.DKO_Name=’Identyfikator’  /* identyfikator kontrolki, dla której wymagane jest uzupełnienie wartości*/

if @string =”

THROW 50001, 'Pole Dokument jest wymagane’ ,1; — treść wyświetlanego komunikatu

End

END TRY

BEGIN CATCH

DECLARE @ErrorMessage varchar(max) = ERROR_MESSAGE();

–THROW 50001, @ErrorMessage ,1;

declare @ErrorSeverity int = ERROR_SEVERITY(), @ErrorState int = ERROR_STATE()

raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState);

end catch

END

Czy ten artykuł był pomocny?