SWN004 - Contatti¶
Nome programma SWN004 Linkage section UTILAGPRG - Linkage comune Id processo: 7 Nome processo: CONTATTI Tabelle principali gestite
| AREA | AREAGATE | Direzione |
|---|---|---|
| COGRIFER COGRIFE2 |
ARPCONTT | ------> <------ |
Logica generale Sincronizzazione dei contatti. Esportazione Esportazione di tutti i contatti effettivamente modificati (con dati variati). Importazione Le applicazioni WEB potranno: * Creare nuovi contatti: saranno salvati su ARPCONTT con RRIF-TIP = "A" * Modificare contatti esistenti: saranno salvati su ARPCONTT sulla chiave originale, e sarà alzato il flag di aggiornamento web RRIF-AGG-APP Configurazioni possibili
| Gruppo | Parametro | Note |
|---|---|---|
| abilita | attiva-areaapp | |
| areaapp | cod-azienda | |
| areaapp | db-conn-string | |
| areaapp | agg-postgres-online | |
| contatti | numerazione-web |
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: ARPCONTT Se fallita inviare una Segnalazione critica e chiudere. C - Importazione aggiornamenti Effettuare una query per estrarre tutti i contatti aggiornati su APP: SELECT * FROM arpcontt WHERE rrif_azi = azienda AND rrif_agg_app = 'A' I contatti aggiornati potranno essere: * Se RRIF_TIP = "A" -> Sempre nuovi; in questo caso l'attribuzione della numerazione avviene sempre dal gestionale -> C.2 * se RRIF_TIP = "C" -> Potrebbero essere aggiornati o nuovi (nuovi solo se la configurazione numerazione-web è attiva) -> C.1 C.1 - Importazione contatto aggiornato o nuovo Un contatto aggiornato deve esistere già su COGRIFER. Fare quindi una ricerca impostando:
| Dato | Contenuto |
|---|---|
| RIF-TIP | RRIF-TIP |
| RIF-COD | RRIF-COD |
Se il contatto non esiste; se la configurazione numerazione-web * E' attiva: * Inserire il contatto creando il record su COGRIFER con il codice attribuito sul web, e aggiornarlo come in caso di variazione * In questo caso non si deve proseguire con il punto C.2 ma fermarsi qui perchè il contatto importato è già ufficiale * Non è attiva: inserire una segnalazione critica-es2000 indicando il contatto errato Altrimenti proseguire con l'aggiornamento di COGRIFER.
| Dato | Contenuto |
|---|---|
| RIF-CODANA Se RIF-ANA-TIP |
Se RRIF-COD-NOM: > 0: contatto su prospect: |
| RIF-NOME | RRIF-NOME |
| RIF-EMAIL | RRIF-EMAIL |
| RIF-TEL1 | RRIF-TEL1 |
| RIF-TEL2 | RRIF-TEL2 |
| RIF-TEL3 | RRIF-TEL3 |
| RIF-FAX | RRIF-FAX |
| RIF-TITOLO | RRIF-TITOLO |
| RIF-POSIZIONE | RRIF-COD-POSIZIONE |
| RIF-INTERNO | RRIF-INTERNO |
| RIF-SKYPE | RRIF-SKYPE |
| RIF-VAL | RRIF-VAL |
| RIF-FL-STAMPA | RRIF-FL-STAMPA |
Leggere e aggiornare COGRIFER2:
| Dato | Contenuto |
|---|---|
| RIF2-NOTE | RRIF-NOTE |
C.2 - Importazione nuovo contatto Quando RRIF-TIP = "A" significa che è stato creato un nuovo contatto su APP, e va aggiunto all'interlocutore di riferimento (cliente/fornitore/contatto). C.2.1 - Creazione nuovo contatto Inserimento di COGRIFER
| Dato | Contenuto |
|---|---|
| RIF-TIP | "C" |
| RIF-COD | Cercare il primo codice libero su COGRIFER |
| altri campi | i restanti campi saranno valorizzati come al punto C.1 |
Inserimento di COGRIFER2
| Dato | Contenuto |
|---|---|
| RIF2-TIP | RIF-TIP |
| RIF2-COD | RIF-COD |
| RIF2-NOTE | RRIF-NOTE |
C.2.2 - Rimozione "nuovo contatto" Il contatto presente su ARPCONTT con RRIF-TIP = 'A', dopo l'inserimento deve essere cancellato. C.2.2 - Rimozione "nuovo contatto" Il contatto presente su ARPCONTT con RRIF-TIP = 'A', dopo l'inserimento deve essere cancellato. B - Esportazione informazioni aggiornate * ID SINCRO: gestito * Esportazione differenziale: gestita ma non ottimizzata: non esiste una chiave diretta per ottenere solo i record aggiornati * 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 "ARPCONTT"; se il record non esiste, crearlo impostando
| Dato | Contenuto |
|---|---|
| A_SYN_AZIENDA | Codice azienda |
| A_SYN_TABELLA | "ARPCONTT" |
| 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.1.1 - ID sincro iniziale In precedenza l'id sincro veniva gestito come numerazione in COGNUMER. Quindi, se A-SYN-DA-ID-SINCRO = 0 o 1, effettuare una prima ricerca con COGS25:
| Dato | Contenuto |
|---|---|
| S25-I-COD | 49 |
(vedi SWA002) B.2 - Ricerca record da esportare B.2.1 Ricerca record da esportare
| Tipo di elaborazione | Condizione | Cosa fare |
|---|---|---|
| Singolo record | AGPRG-KEY <> " " (conterrà RIF-CHIA1) |
Si legge direttamente il record da aggiornare su COGRIFER 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 COGRIFER; ogni record va considerato, ignorando il controllo sulla variazione dei record |
| Esportazione standard | Si scorrono tutti i record di COGRIFER: si considerano solo i record dove: (RIF-DA-DATA+RIF-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 |
| Occupazione numerazione | (conterrà RIF-CHIA1) |
Eseguire la procedura B.4 e uscire |
Per ciascun record valido si cercano tutti i record collegati: * COGRIFE2 B.2.2 Verifica ed esportazione record Dopodichè si effettua la ricerca dell'informazione su ARPCONTT
| Dato | Contenuto |
|---|---|
| RRIF-AZI | Codice azienda |
| RRIF-TIP | RIF-TIP |
| RRIF-COD | RIF-COD |
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 ASNPREST
| Dato | Contenuto | Confronto? |
|---|---|---|
| RRIF-AZI | Codice azienda | |
| RRIF-TIP | RIF-TIP | |
| RRIF-COD | RIF-COD | |
| RRIF-CODANA | Se RIF-ANA-TIP: |
Si |
| RRIF-COD-NOM | Se RIF-ANA-TIP: |
Si |
| RRIF-NOME | RIF-NOME | Si |
| RRIF-EMAIL | RIF-EMAIL | Si |
| RRIF-TEL1 | RIF-TEL1 | Si |
| RRIF-TEL2 | RIF-TEL2 | Si |
| RRIF-TEL3 | RIF-TEL3 | Si |
| RRIF-FAX | RIF-FAX | Si |
| RRIF-NOTE | RIF2-NOTE | Si |
| RRIF-TITOLO | RIF-TITOLO | Si |
| RRIF-COD-POSIZIONE | RIF-POSIZIONE | Si |
| RRIF-POSIZIONE | Descrizione della posizione trovata sulla apposita tabella | |
| RRIF-INTERNO | RIF-INTERNO | Si |
| RRIF-DATA-AGG | Data sistema | |
| RRIF-SKYPE | RIF-SKYPE | Si |
| RRIF-VAL | RIF-VAL | Si |
| RRIF-FL-STAMPA | RIF-FL-STAMPA | Si |
| RRIF-ID-SINCRO | Prossimo id sincro | |
| RRIF-AGG-APP | " " |
In questa fase tenere memoria di data+ora dell'ultimo record di input considerato. Per tutti i campi alfanumerici significativi (non flag, non valori fissi) effettuare il parsing tramite GESSTR, come già fatto negli altri programmi di sincronizzazione B.3 Verifica record cancellati Sulla tabella di origine COGRIFER esiste il flag di cancellazione logica. Non possiamo pero' dare per scontato che nessun programma possa effettuare cancellazioni fisiche (ad esempio, la cancellazione fisica di un cliente effettua anche la cancellazione fisica sui contatti). Quindi gestiamo anche in questo caso il giro di verifica record cancellati. Quindi si opererà come segue: 1. Scorrere tutti i record di ARPCONTT 2. Ricerca, per ciascuno, del corrispondente record su COGRIFER A questo punto la situazione potrebbe essere la seguente:
| COGRIFER trovato? | RIF-VAL | RRIF-VAL | Cosa fare |
|---|---|---|---|
| Si | " " | "C" | Aggiornare ARPCONTT impostando |
| Si | "C" | "C" | Nessuna operazione |
| Si | " " | " " | Nessuna operazione |
| Si | "C" | " " | Aggiornare ARPCONTT impostando |
| No | / | "C" | Nessuna operazione |
| No | / | " " | Aggiornare ARPCONTT impostando |
B.4 Occupazione numerazione condivisa Procedura specifica per l'operazione "OCCUPA-KEY" In questa operazione si riceve una chiave di contatto (RIF-CHIA1), e il programma deve controllare che questo numero sia libero. In tal caso occuparlo inserendo il record. In dettaglio: Ricerca di un record su ARPCONTT con la chiave:
| Dato | Contenuto |
|---|---|
| RRIF-AZI | Codice azienda |
| RRIF-TIP | RIF-TIP |
| RRIF-CODCONT | RIF-COD |
Se il record viene trovato -> uscire restituendo AGPRG-ESITO = "N" Altrimenti inserire il record vuoto, esattamente cosi' com'è. Se a questo punto l'operazione ha esito: * Positivo: uscire restituendo AGPRG-ESITO = "S" * Negativo: uscire restituendo AGPRG-ESITO = "N" (in questo caso nel lasso di tempo tra la lettura e la scrittura del record un processo web ha effettuato la stessa operazione ed è arrivata prima). B.9 - Aggiornamento id syncro Al termine dell'elaborazione, aggiornare il record APSTATOSYN:
| Dato | Contenuto |
|---|---|
| A_SYN_AZIENDA | Codice azienda |
| A_SYN_TABELLA | "ARPCONTT" |
| 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