Oracle Workflow - Dicas

Perguntas relacionadas a questões técnicas do Oracle EBS. Criação de Concorrentes, Value Sets, Alerts, Forms Personalizations, Configurações, etc
Responder
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Abaixo algumas informações úteis relacionadas ao Oracle Workflow.

Tipos:
FYI - Notification (sem nenhuma ação)
FYA - Approve/Reject

Tabelas úteis:

Selecionar tudo

WF_ITEM_TYPES_TL
WF_NOTIFICATIONS

Chamada de Workflow via PL/SQL:

Selecionar tudo

DECLARE
  p_x_item_type VARCHAR2(100);
  P_X_PROC_INT_NAME VARCHAR2(100);
  P_X_ATTRIBUTE1 VARCHAR2(100) ;
  x_itemkey number; 
  P_USER_NAME VARCHAR2(100) ; 

BEGIN
P_x_item_type :='XX_TEST1'; --Item Internal Name 
P_X_PROC_INT_NAME := 'XX_TEST_P1'; --Process Name 
P_USER_NAME :='TGLUFKE' ; 

SELECT XX_WF_SEQ.NEXTVAL INTO x_itemkey FROM DUAL;

  -- API used to create a Process.
  wf_engine.createprocess ( itemtype => p_x_item_type ,itemkey => x_itemkey ,
     process => p_x_proc_int_name);
  -- API used to set the userkey for the Workflow.
  wf_engine.setitemuserkey ( itemtype => p_x_item_type ,itemkey => x_itemkey ,
    userkey => x_itemkey);
  --  -- API used to set the Attribute value in a Workflow.
  WF_ENGINE.SETITEMATTRTEXT ( ITEMTYPE => P_X_ITEM_TYPE ,itemkey => x_itemkey,
      aname => 'XXPONUM' ,avalue => 'PO-ABC-123');
  -- API used to set the Item Owner for the Workflow.
  wf_engine.setitemowner ( itemtype => p_x_item_type ,ITEMKEY => X_ITEMKEY ,owner => P_USER_NAME);
  -- API used to Start Process, here Main Process.
  wf_engine.startprocess (p_x_item_type, x_itemkey);
  
  dbms_output.put_line( 'workflow completed successfully');
  COMMIT;
EXCEPTION
WHEN OTHERS THEN
  dbms_output.put_line( 'Exception Raised while Calling the Workflow... ' || SQLCODE || ' - ' || SQLERRM);
END;
Package Template de Workflow com Approval:

Selecionar tudo

--Package Spec : 
--create table xxltech_wf_log(sno number, msg varchar2(150),cdate date);
--
--create sequence xxltech_wf_log_seq ; 

 Create or replace package xxltech_WF_UTILS  IS 
 
 PROCEDURE APPROVED_WF_STATUS (
       p_item_type           IN     VARCHAR2,
       p_item_key            IN     VARCHAR2,
       p_actid               IN     NUMBER  ,
       p_funcmode            IN     VARCHAR2,
        RESULT     OUT NOCOPY      VARCHAR2) ;
        
PROCEDURE REJECT_WF_STATUS (
       p_item_type           IN     VARCHAR2,
       p_item_key            IN     VARCHAR2,
       p_actid               IN     NUMBER  ,
       p_funcmode            IN     VARCHAR2,
        RESULT     OUT NOCOPY      VARCHAR2);        
 
 End xxltech_WF_UTILS; 
/

--Package Body 
 Create or replace package BODY xxltech_WF_UTILS  IS 
 
 
PROCEDURE APPROVED_WF_STATUS (
       p_item_type           IN     VARCHAR2,
       p_item_key            IN     VARCHAR2,
       p_actid               IN     NUMBER  ,
       p_funcmode            IN     VARCHAR2,
        RESULT     OUT NOCOPY      VARCHAR2)
   IS
 
       x_wf_result            VARCHAR2(100);
       x_new_status           VARCHAR2(50);
       x_project_id           NUMBER(15);
       x_notif_op varchar2(50) ; 
 
BEGIN
IF (p_funcmode <>  'RUN') then return; end if;


  WF_ENGINE.SETITEMATTRnumber
    ( ITEMTYPE => p_item_type ,itemkey => p_item_key,
aname => 'XXAPPROVAL_AMOUNT' ,avalue => 2500);

  --   x_wf_result  := wf_engine.getitemattrtext   (p_item_type, p_item_key, 'WF_STATUS');
   RESULT := 'COMPLETE';
   
 INSERT INTO   
       xxltech_wf_log values 
       (xxltech_wf_log_seq.nextval, ' Inside : APPROVED_WF_STATUS : APPROVED_WF_STATUS--->'|| RESULT,sysdate)          
       ;

EXCEPTION WHEN OTHERS THEN
 
x_wf_result :=x_wf_result||'Error Code-->'||SQLERRM;
 
 
END  APPROVED_WF_STATUS;



PROCEDURE REJECT_WF_STATUS (
       p_item_type           IN     VARCHAR2,
       p_item_key            IN     VARCHAR2,
       p_actid               IN     NUMBER  ,
       p_funcmode            IN     VARCHAR2,
        RESULT     OUT NOCOPY      VARCHAR2)
   IS
 
       x_wf_result            VARCHAR2(100);
       x_new_status           VARCHAR2(50);
       x_project_id           NUMBER(15);
       x_notif_op varchar2(50) ; 
 
BEGIN
IF (p_funcmode <>  'RUN') then return; end if;

  --   x_wf_result  := wf_engine.getitemattrtext   (p_item_type, p_item_key, 'WF_STATUS');
   RESULT := 'COMPLETE';
   
INSERT INTO   
       xxltech_wf_log values 
       (xxltech_wf_log_seq.nextval, 'Inside : REJECT_WF_STATUS: REJECT--->'|| RESULT,sysdate)          
       ;
               
EXCEPTION WHEN OTHERS THEN
 
x_wf_result :=x_wf_result||'Error Code-->'||SQLERRM;
 
 
END  REJECT_WF_STATUS;
 
 
 
 END xxltech_WF_UTILS; 
 /

Vincular PDF em um Worflow:

Selecionar tudo

CREATE OR REPLACE PACKAGE BODY RCT_EXAMPLE IS


    PROCEDURE start_training_wf(unique_id IN VARCHAR2) IS
        l_itemtype  VARCHAR2(30) := 'RCT_ITM1';
        l_itemkey   VARCHAR2(300);
        l_file_name VARCHAR2(100) := 'holidaylist.xls';
        l_unique_id VARCHAR2(50) := unique_id;
   
    BEGIN
        l_itemkey := 'RCT_ITM1 ' ||
                     to_char(SYSDATE,
                             'dd/mm/yyhh:mm:ss');
        wf_engine.createprocess(l_itemtype,
                                l_itemkey,
                                'RCT_PROCESS');
        wf_engine.setitemattrdocument(itemtype   => l_itemtype,
                                      itemkey    => l_itemkey,
                                      aname      => 'ATTACHMENT2',
                                      documentid => 'PLSQLBLOB:RCT_EXAMPLE.xx_notif_attach_procedure/' ||
                                                    l_file_name);
        wf_engine.startprocess(l_itemtype,
                               l_itemkey);
   
    END;


    PROCEDURE xx_notif_attach_procedure(document_id   IN VARCHAR2,
                                        display_type  IN VARCHAR2,
                                        document      IN OUT BLOB,
                                        document_type IN OUT VARCHAR2) IS
        l_file_name VARCHAR2(100) := document_id;
        bdoc        BLOB;
    BEGIN
       
        document_type := 'Excel' || ';name=' || l_file_name;
   
        SELECT stored_file
          INTO bdoc
          FROM BLOB_TABLE
         WHERE file_name = l_file_name;
   
        dbms_lob.copy(document,
                      bdoc,
                      dbms_lob.getlength(bdoc));
    EXCEPTION
        WHEN OTHERS THEN
           
            wf_core.CONTEXT('xx_g4g_package',
                            'xx_notif_attach_procedure',
                            'document_id',
                            'display_type');
            RAISE;
    END;


END RCT_EXAMPLE;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes