SWN008 - Schede: dettaglio¶
Nome programma SWN008 Linkage section UTILAGPRG - Linkage comune Id processo: 11 Nome processo:SCHEDE-DETTAGLIO Tabelle principali gestite
| AREA | AREAGATE | Direzione |
|---|---|---|
| ASNSKINF | ARPSKINF | ------> |
| CRMSKINF | ARPSKINF | ------> <------ |
Logica generale Esportazione del dettaglio scheda relativi a: * Schede CRM * Checklist o schede di stima Importazione del dettaglio scheda relativi a: * Schede CRM Configurazioni possibili
| Gruppo | Parametro | Note |
|---|---|---|
| abilita | attiva-areaapp | |
| areaapp | cod-azienda | |
| areaapp | db-conn-string | |
| areaapp | agg-postgres-online | |
| ass-strum | priorita-default |
Elaborazione Tipi di segnalazione: Vedi Tipi di segnalazione A - Controllo di esecuzione Vedi Controllo di esecuzione A.1 - Aggiornamento KEEP-ALIVE Per il momento non lo eseguiamo: il keep-alive viene tenuto aggiornato dal thread autonomo di aglancio; se il programma venisse chiamato in "tempo reale" dal programma di gestione, non necessita comunque del keep-alive. A.2 - Apertura A.2.1 Apertura tabelle Tentare l'apertura della tabella da sincronizzare: ARPSKINF Se fallita inviare una Segnalazione critica e chiudere. C - Importazione aggiornamenti Effettuare una query per estrarre tutte le informazioni aggiornate su APP: SELECT * FROM arpskinf WHERE a_ski_azienda = azienda AND a_ski_agg_app = 'A' Le informazioni potranno essere: * Cancellate: se A_SKI_FL_CANC = "C" * Inserite o aggiornati: se A_SKI_FL_CANC <> "C" C.1 - Importazione informazione nuova o aggiornata C.1.1 - Importazione informazione su tipologia CRM (A_SKI_ORIGINE = 'C') Verificare se esiste la tipologia a cui fa riferimento l'informazione, con una lettura su CRMTIPCL:
| Dato | Contenuto |
|---|---|
| TCL-COD | A-SKI-MODELLO |
Controlli: * Se non esiste skippare al record successivo * Se esiste, ma la tipologia ha la gestione su Area (TCL-GESTIONE-AREAGATE <> "S") skippare al record successivo * Leggere l'informazione associata su CRMINFOR: se non esiste skippare al record successivo In tutti questi casi lasciare il flag A-SKI-AGG-APP alzato Negli altri casi proseguire con l'aggiornamento Cercare l'informazione su CRMSKINF
| Dato | Contenuto |
|---|---|
| SKI-TCL | A-SKI-MODELLO |
| SKI-PAG | A-SKI-PAGINA |
| SKI-PROG | A-SKI-PROG |
Se l'informazione non esiste, inserirla. Quindi proseguire con l'aggiornamento di CRMSKINF.
| Dato | Contenuto |
|---|---|
| SKI-INF | A-SKI-INF |
| SKI-V-POS | In caso di inserimento: vedi C.1.1.1 |
| SKI-H-POS | |
| SKI-V-SIZE | |
| SKI-H-SIZE | |
| SKI-H-SIZE-DES | |
| SKI-FL-OBB | A-SKI-FL-OBB |
| SKI-DES | A-SKI-DES |
| SKI-SCHEDA-CESSATA | "N" |
| SKI-PROG-PADRE | A-SKI-PROG-PADRE |
| SKI-SEQ | A-SKI-PROG-SEQ |
| SKI-ID-MULTIAZI | " " |
C.1.1.1 - Posizionamento informazione Nel programma aggiungiamo una tabella in working che contiene le dimensioni delle pagina considerate nella elaborazione corrente; quindi dovrà avere: * Chiave * T-TCL * T-PAGINA * Dati * T-V-SIZE * T-H-SIZE Quindi, in caso di inserimento nuova informazione in una pagina, cercare se la pagina esiste già nella tabella. Se non esiste aggiungerla e determinare dimensione massima, scorrendo le informazioni presenti su CRMSKINF per la pagina stessa, e determinando posizione massima verticale e orizzontale NB: quando si incrementa T-V-SIZE, azzerare T-H-SIZE e ripartire Dopodichè dobbiamo dare dimensioni e posizioni alla nuova informazione; Dimensioni SKI-V-SIZE Sempre = 1,1, eccetto che: * IPT-TIP = K-INF-TIP-VAL-FISSI -> 10 * IPT-TIP = K-INF-NOTE -> 5 SKI-H-SIZE Sempre = IPT-LUN + 1, eccetto che: * IPT-TIP = K-INF-TIP-NUMERO ---> (IPT-LUN + IPT-LUN-DEC + 1) * IPT-TIP = K-INF-CHECK ----> 0 SKI-H-SIZE-DES Sempre = 0, eccetto che: * IPT-TIP = K-INF-TIP-TABELLA ---> 20 Posizione SKI-H-POS - SKI-V-POS Determinare la dimensione dell'informazione: (SKI-H-SIZE + 1); se SKI-H-SIZE-DES > 0 -> (SKI-H-SIZE + SKI-H-SIZE-DES + 2) Quindi, confrontare (T-H-SIZE + dimensione informazione) con TCL-H-SIZE; se * Maggiore: * SKI-H-POS = 2 * SKI-V-POS = T-V-POS + 1,1 + SKI-V-SIZE * Impostare i nuovi valori sulla tabella: * T-V-SIZE = SKI-V-POS * T-H-SIZE = SKI-H-POS + SKI-H-SIZE + SKI-H-SIZE-DES * MInore o uguale: * SKI-H-POS = T-H-SIZE + 1 * SKI-V-POS = T-V-POS * Impostare i nuovi valori sulla tabella: * T-V-SIZE = invariato * T-H-SIZE = SKI-H-POS + SKI-H-SIZE + 1 + SKI-H-SIZE-DES C.1.2 - Importazione informazione cancellata Fare una ricerca su CRMSKINF come al punto C.1.1 Se l'informazione esiste, effettuare la cancellazione fisica del record. C.1.3 - Azzeramento flag aggiornamento Aggiornare ARPSKINF impostando
| Dato | Contenuto |
|---|---|
| A-SKI-AGG-APP | " " |
C.2 - Importazione informazioni di altre tipologie (A_SKI_ORIGINE <> 'C') Per il momento le ignoriamo e skippiamo il record (senza aggiornare) B - Esportazione informazioni aggiornate * ID SINCRO: gestito * Esportazione differenziale: gestita ma non ottimizzata: non esiste una chiave diretta per ottenere solo i record aggiornati: si dovrà usare data/ora ultimo aggiornamento * Cancellazione logica: gestita In questa fase si dovrà tenere conto di * Limite record * Limite errori * "Esporta tutto" B.1 - Stato sincronizzazione Sulla tabella APSTATOSYN, leggere il record relativo alla tabella/oggetto da sincronizzare "ARPSKINF"; se il record non esiste, crearlo impostando
| Dato | Contenuto |
|---|---|
| A_SYN_AZIENDA | Codice azienda |
| A_SYN_TABELLA | "ARPSKINF" |
| A_SYN_DA_GES_DATA | 0 |
| A_SYN_DA_GES_ORA | 0 |
| A_SYN_DA_ID_SINCRO | 1 |
Qui otterremo due informazioni importanti: * Data/ora ultima esportazione da gestionale a postgres (A_SYN_DA_GES_DATA e A_SY_DA_GES_ORA) * Prossimo ID sincronizzazione da memorizzare sulla tabella (A_SYN_ID_SINCRO) B.2 - Ricerca record da esportare B.2.1 Ricerca record da esportare
| Tipo di elaborazione | Condizione | Cosa fare |
|---|---|---|
| Singolo record | AGPRG-KEY <> " " | Si legge direttamente il record da aggiornare, in base al primo byte di AGPRG-KEY. Verrà eseguita se agg-postgres-online è attiva Se viene sincronizzato un record cancellato, verrà effettuata la cancellazione logica |
| Esportazione totale | AGPRG-ESPORTA-TUTTO = "S" | Si scorrono tutti i record di CRMSKINF e ASNSKINF; ogni record va considerato |
| Esportazione standard | (SKI-DA-DATA+SKI-DA-TIME) >= (A-SYN-DA-GES-DATA+A-SYN-DA-GES-ORA) (ASKI-DA-DATA+ASKI-DA-TIME) >= (A-SYN-DA-GES-DATA+A-SYN-DA-GES-ORA) |
|
| Pulizia | AGPRG-OPE = "PULIZIA" | Eseguire solo il giro di cancellazione logica B.3 quindi uscire |
Per ciascun record valido si cercano tutti i record collegati (in questo caso non ce ne sono) B.2.2 Verifica ed esportazione record Dopodichè si effettua la ricerca dell'informazione su ARPSKINF, a seconda del record di provenienza: CRMSKINF Cercare la testata scheda relativa su CRMTIPCL
| Dato | Contenuto |
|---|---|
| TCL-COD | SKI-TCL |
Se la manutenzione della scheda è di competenza di Areagate, non esportare il record quindi se TCL-GESTIONE-AREAGATE = 'S'
| Dato | Contenuto |
|---|---|
| A-SKI-AZIENDA | Codice azienda |
| A-SKI-ORIGINE | "C" |
| A-SKI-MODELLO | SKI-TCL |
| A-SKI-PAGINA | SKI-PAG |
| A-SKI-PROG | SKI-PROG |
ASNSKINF
| Dato | Contenuto |
|---|---|
| A-SKI-AZIENDA | Codice azienda |
| A-SKI-ORIGINE | "S" |
| A-SKI-MODELLO | ASKI-MOD-NOME |
| A-SKI-PAGINA | ASKI-PAG |
| A-SKI-PROG | ASKI-PROG |
Se non esiste, inserirlo. Se esiste, aggiornarlo l'aggiornamento del record deve avvenire solo se almeno un dato tra quelli da modificare è diverso. NB: se è stata richiesta l'esportazione completa (AGPRG-ESPORTA-TUTTO = "S") allora il record dovrà essere esportato a prescindere dal confronto Suggerimento Invece di popolare direttamente i dati del record di destinazione, portarli su delle copie in w/s. Al termine confrontare i dati sulla destinazione con la copia in w/s. Aggiornamento da CRMSKINF
| Dato | Contenuto | Confronto? |
|---|---|---|
| A-SKI-AZIENDA | Codice azienda | |
| A-SKI-ORIGINE | "C" | |
| A-SKI-MODELLO | SKI-TCL | |
| A-SKI-PAGINA | SKI-PAG | |
| A-SKI-PROG | SKI-PROG | |
| A-SKI-DES | SKI-DES | Si |
| A-SKI-INF | SKI-INF | Si |
| A-SKI-PROG-PADRE | SKI-PROG-PADRE | Si |
| A-SKI-PROG-SEQ | SKI-SEQ | Si |
| A-SKI-V-POS | SKI-V-POS | Si |
| A-SKI-H-POS | SKI-H-POS | Si |
| A-SKI-V-SIZE | SKI-V-SIZE | Si |
| A-SKI-H-SIZE | SKI-H-SIZE | Si |
| A-SKI-H-SIZE-DES | SKI-H-SIZE-DES | Si |
| A-SKI-FL-OBB | SKI-FL-OBB | Si |
| A-SKI-GRUPPO | IPT-GRUPPO (da CRMINFOR) | Si |
| A-SKI-FL-RIPORTA | " " | |
| A-SKI-IPT-NUM-SINCRO | 0 | |
| A-SKI-FL-CANC | " " | Si |
| A-SKI-ID-SINCRO | Prossimo id sincro |
Aggiornamento da ASNSKINF
| Dato | Contenuto | Confronto? |
|---|---|---|
| A-SKI-AZIENDA | Codice azienda | |
| A-SKI-ORIGINE | "S" | |
| A-SKI-MODELLO | ASKI-MOD-NOME | |
| A-SKI-PAGINA | ASKI-PAG | |
| A-SKI-PROG | ASKI-PROG | |
| A-SKI-DES | ASKI-DES | Si |
| A-SKI-INF | ASKI-INF | Si |
| A-SKI-PROG-PADRE | ASKI-PROG-PADRE | Si |
| A-SKI-PROG-SEQ | ASKI-SEQ | Si |
| A-SKI-V-POS | ASKI-V-POS | Si |
| A-SKI-H-POS | ASKI-H-POS | Si |
| A-SKI-V-SIZE | ASKI-V-SIZE | Si |
| A-SKI-H-SIZE | ASKI-H-SIZE | Si |
| A-SKI-H-SIZE-DES | ASKI-H-SIZE-DES | Si |
| A-SKI-FL-OBB | ASKI-FL-OBB | Si |
| A-SKI-GRUPPO | ASKI-GRUPPO | Si |
| A-SKI-FL-RIPORTA | ASKI-FL-RIPORTA | Si |
| A-SKI-IPT-NUM-SINCRO | ASKI-IPT-NUM-SINCRO | Si |
| A-SKI-FL-CANC | " " | |
| A-SKI-ID-SINCRO | Prossimo id sincro |
In questa fase tenere memoria di data+ora dell'ultimo record di input considerato. B.3 Verifica record cancellati (operazione PULIZIA) Sulle tabelle di origine CRMSKINF e ASNSKINF non esiste il flag di cancellazione logica. Quindi per esportare l'informazione relativa ai record cancellati si opererà come segue: 1. Scorrere tutti i record di ARPSKINF 2. Ricerca, per ciascuno, del corrispondente record sul record di origine, in base a A-SKI-ORIGINE A questo punto la situazione potrebbe essere la seguente:
| *SKINF trovato? |
A-SKI-FL-CANC | Cosa fare |
|---|---|---|
| Si | "C" | Aggiornare ARPSKINF impostando |
| Si | " " | Nessuna operazione |
| No | "C" | Nessuna operazione |
| No | " " | Aggiornare ARPSKINF impostando |
B.9 - Aggiornamento id syncro Al termine dell'elaborazione, aggiornare il record APSTATOSYN:
| Dato | Contenuto |
|---|---|
| A_SYN_AZIENDA | Codice azienda |
| A_SYN_TABELLA | "ARPSKINF" |
| A_SYN_DA_GES_DATA | Data/ora dell'ultimo record aggiornato |
| A_SYN_DA_GES_ORA | |
| A_SYN_DA_ID_SINCRO | Ultimo id sincro + 1 |
Estratto da documentazione interna ClickUp