# 11.2 SDK Action

E’ una tipologia di funzione che viene utilizzata per creare delle azioni BPMN custom.

È possibile registrare nuove azioni con il seguente metodo:  
 **SDK::setProcessMakerAction($func, $src, $label);**  
*$func : nome della funzione*  
*$src : percorso file contenente la funzione*  
*$label : etichetta della funzione*

Per de-registrare il file usare:

**SDK::unsetProcessMakerAction($func);**  
*$func: nome della funzione*

Una volta registrata, si rende disponibile all’utilizzo nella sezione “Azione” nella quale sono presenti tutte le altre azioni BPMN.

[![image-1699016384284.png](https://usermanual.vtenext.com/uploads/images/gallery/2023-11/scaled-1680-/image-1699016384284.png)](https://usermanual.vtenext.com/uploads/images/gallery/2023-11/image-1699016384284.png)

Inoltre una volta scelta la funzione da richiamare, se nella funzione gestiamo dei parametri di input abbiamo la possibilità di passarli direttamente da interfaccia:

[![image.png](https://usermanual.vtenext.com/uploads/images/gallery/2025-05/scaled-1680-/mhiimage.png)](https://usermanual.vtenext.com/uploads/images/gallery/2025-05/mhiimage.png)

**Esempio**

Nel seguente esempio registro una funzione per aggiungere un invitato ad un evento.

```PHP
SDK::setProcessMakerAction('vte_add_event_invitee', 'modules/SDK/src/ProcessMaker/Utils.php', 'Add invitee to event (event, user/contact)');
```

Questa funzione necessita di due parametri: l'id dell'evento e l'id dell'invitato che può essere un utente o un contatto. Per chiarezza indico nel comando di registrazione anche i parametri nella label della funzione.

Nella funzione che andrò a sviluppare vanno aggiunti i parametri $event e $invitee che saranno popolati con i valori passati dall'interfaccia di configurazione dell'azione.  
I primi due parametri invece sono fissi e sono:  
$engine l'oggetto contenente tutte le informazioni relative al processo che si sta eseguendo  
$actionid l'id dell'azione corrente

```php
function vte_add_event_invitee($engine, $actionid, $event, $invitee) {
    $engine->log('vte_add_event_invitee', "event:$event invitee:$invitee");
    
    if (strpos($event,'x') !== false) list(,$event) = explode('x',$event);
    if (strpos($invitee,'x') !== false) list(,$invitee) = explode('x',$invitee);
    
    $parent_module = getSalesEntityType($invitee);
    if ($parent_module == 'Contacts') {
        $_REQUEST['inviteesid_con'] = $invitee;
    } else {
        $_REQUEST['inviteesid'] = $invitee;
    }
    $focus = CRMEntity::getInstance('Events');
    $focus->retrieve_entity_info_no_html($event,'Events');
    $focus->mode = 'edit';
    $focus->save('Events');
}
```

Se necessario, sarà possibile prevedere all'interno della funzione il return di un valore che poi sarà richiamabile e salvabile all'interno di un campo di un form dinamica o di un modulo attraverso la variabile "Risultato" nella sezione dedicata disponibile nella picklist "Seleziona opzione".

[![image.png](https://usermanual.vtenext.com/uploads/images/gallery/2025-05/scaled-1680-/qrOimage.png)](https://usermanual.vtenext.com/uploads/images/gallery/2025-05/qrOimage.png)