Hook after update non mi funziona

Rox

New member
Ciao,
sto provando per la prima volta ad utilizzare la funzione hook.
Ho creato due tabelle:
Tabella1
Campi: ID (PK), Probabilità (un valore numerico)

Tabella2
Campi: ID (PK), Riferimento_Step1(Campo lookup che prende in automatico l'ID del record correlato della Tabella1), Descrizione (campo di testo), Probabilità (valore ripreso dal campo Probabilità della Tabella1).

Dato che la Tabella1 è la master view rispetto alla Tabella 2, quando inserisco un nuovo record nella Tabella 2 come subform il campo Riferimento_Step1 si alimenta automaticamente tramite una funzione hook insert before e tutto funziona.

Ora vorrei, però che se aggiorno il campo Probabilità nella Tabella1, in automatico venisse eseguita una query SQL che aggiorni il valore Probabilità nella Tabella2 tutte le volte in cui il campo è correlato.

Per ora ho scritto questo esempio:

$hooks['Tabella1']['update']['after'] = 'dadabik_hook_probabilità_Tabella2_aggiornamento';

function dadabik_hook_probabilità_Tabella2_aggiornamento($id, $Value)
{
global $conn;

$sql = "UPDATE Tabella2 set Probabilità = :probabilità WHERE Riferimento_Step1 = :id";

$res_prepare = prepare_db($conn, $sql);

$res_bind = bind_param_db($res_prepare, ':id', $id);

$res_bind = bind_param_db($res_prepare, ':probabilità', $Value[Probabilità]);

$res = execute_prepared_db($res_prepare,0);

}

Tuttavia, quando aggiorna il campo Probabilità nella Tabella1, invece che aggiornare i valori correlati nella Tabella2, vedo la pagina del Form vuota (solo il menu generale e il titolo della pagina) e il record risolta "locked".

Sperando di essere riuscito a spiegarmi, qualcuno ha qualche idea su come potrei procedere?

Grazie




Your current DaDaBIK version

You are using DaDaBIK version 10.1-Manarola enterprise, installed on 05-08-2020 (installation code: 154885eb55ac07f958), the latest version of DaDaBIK is 10.1-Manarola released on 03-09-2020

You are runnning the last release of DaDaBIK

In case you want to upgrade to a more powerful edition (from Pro to Enterprise/Platinum, from Enteprise to Platinum) please contact us.

System info

PHP Version: 7.2.8

mysql version: 5.7.23

Web server: Apache/2.2.34 (Unix) mod_wsgi/3.5 Python/2.7.13 PHP/7.2.8 mod_ssl/2.2.34 OpenSSL/1.0.2o DAV/2 mod_fastcgi/mod_fastcgi-SNAP-0910052141 mod_perl/2.0.9 Perl/v5.24.0

Client: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15

URL installation: http://localhost:8888/dadabik/
 

eugenio

Administrator
Staff member
Ciao,
non mi è molto chiaro lo scenario, in particolare questa parte "si alimenta automaticamente tramite una funzione hook insert before" (in teoria non dovrebbe essere necessario l'hook qua).

In generale pero' posso dirti che se ti trovi con una pagina bianca probabilmente c'è un errore PHP, dovresti guardare il log degli errori.
Un errore che vedo dal codice è sicuramente questo: la tua funzione dovrebbe avere come input solo $id.

Ciao,
 

Rox

New member
Ciao Eugenio e grazie per la risposta.
Il primo hook (before insert) l'ho creato perché così il campo da aggiornare (che è un lookup e non prende il valore del primarykey della master view) viene popolato automaticamente. Senza l'hook vedevo il valore nel menu drop-down ma l'utente doveva sempre selezionarlo manualmente, così invece non è richiesto questo passaggio.

Ho sbagliato a capire, invece, il funzionamento dell'hook after update. ho quindi ricostruito la funzione creando una query mysql con all'interno una subquery, ottenendo il funzionamento che desideravo ["UPDATE Tabella2 SET Probabilità = (SELECT Probabilità FROM Tabella1 WHERE id = :id) WHERE Riferimento_Step1 = :id"].

Grazie e a presto
 

eugenio

Administrator
Staff member
Perfetto, sì after update hook riceve in input solo id del record.

Riguardo al primo punto, continua a non essermi molto chiaro perché in realtà, se ho capito bene quello che hai fatto, dovrebbe succedere già di default, senza dover utilizzare hooks: in pratica se il campo è select_single e fa riferimento alla PK della tabella master, questa select_single dovrebbe essere mostrata già compilata (e disabilitata).

Ciao,
 
Top