Vai al contenuto

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