ERP 2.50:Developers Guide/How To Use an Extension Point/it
Languages: |
Obiettivo
L'obiettivo di questo how-to è quello di mostrare come è possibile utilizzare un esistente punto di estensione di una funzione PL. C'è una lista completa di punti di estensione disponibili nella sezione dei Riferimenti dellaGuida Sviluppatori.
Ogni volta che si desidera modificare il comportamento o di estendere un processo già esistente, è possibile usufruire di un Punto di Estensione. Nei documenti inter-aziendali sono utilizzati per creare documenti di corrispondenza quando gli ordini e le fatture sono state completate. Altro esempio di utilizzo potrebbe essere quello di generare un requisito di lavoro quando un ordine di vendita di un prodotto fabbricato è completato. In questa sezione ho intenzione di spiegare come uno sviluppatore può sviluppare una nuova procedura che deve essere eseguita da un esistente Punto di Estensione.
Per usare un Punto di Estensione abbiamo solo bisogno di una procedura PL seguendo alcune semplici regole:
- La procedura ha un solo parametro di input, l'id dell'istanza di esecuzione id.
- Bisogna recuperare i parametri necessari che sono disponibili nella tabella ad_ep_instance_para.
- Bisogna aggiornare i parametri di output nella tabella ad_ep_instance_para.
- Eccezioni possibili sono sollevate.
Bisogna dichiarare la procedura nel Application Dictionary. Per dichiararla è sufficiente impostare il nome della procedura nella scheda Procedure del Punto di Estensione dove deve essere eseguita.
Vediamolo applicato a un esempio.
Esempio Documenti Inter-company
Come detto sopra, questo modulo genera un nuovo ordine di corrispondenza quando un altro ordine è completato. Per raggiungere tale requisito, abbiamo sviluppato la procedura INTERCO_CREATE_ORDER. Recupera i valori dei parametri utilizzando il dato ad_ep_instance_id. E fa le azioni necessarie per generare il nuovo ordine. Alla fine il parametro Message è aggiornato aggiungendo un nuovo messaggio, in modo che l'utente conosce il numero del documento dell'ordine di corrispondenza generato.
Qui di seguito vi è una sintesi della procedura INTERCO_CREATE_ORDER. Possiamo vedere come la logica di cui sopra è implementatat. All'inizio i valori parametro vengono recuperati utilizzando il cursore Cur_Params. Più tardi nel codice viene aggiornato la variabile p_Message con il numero del documento di ordine di corrispondenza generato. E infine il parametro Message viene aggiornato nella AD_EP_Instance_Para aggiungendo la variabile p_Message. Notate anche come il blocco Exception solleva solo le eccezioni in modo che possano essere catturati successivamente dalla procedura principale che chiama la procedura.
CREATE OR REPLACE PROCEDURE INTERCO_CREATE_ORDER(p_ep_instance IN VARCHAR2) ... BEGIN FOR Cur_Params IN ( SELECT * FROM ad_ep_instance_para WHERE ad_ep_instance_id = p_ep_instance) LOOP IF (cur_params.parametername LIKE 'DocAction') THEN p_docaction := Cur_Params.p_string; ELSIF (cur_params.parametername LIKE 'Record_ID') THEN p_record_id := cur_params.p_string; ELSIF (cur_params.parametername LIKE 'User') THEN p_user := cur_params.p_string; ELSIF (cur_params.parametername LIKE 'Message') THEN p_message := cur_params.p_text; ELSIF (cur_params.parametername LIKE 'Result') THEN p_result := cur_params.p_number; END IF; END LOOP; ... p_message:='@INTERCO_ordCreated@' || v_DocumentNo; ... UPDATE ad_ep_instance_para SET p_text = (CASE WHEN p_text IS NULL OR p_text='' THEN p_message ELSE TO_CHAR(p_text) || '<BR>'|| p_message END) WHERE ad_ep_instance_id = p_ep_instance AND parametername LIKE 'Message'; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('INTERCO_CREATE_ORDER exception') ; RAISE; END INTERCO_CREATE_ORDER;
Languages: |