SWN052 - Attività CRM¶
Nome programma SWN052 Linkage section UTILAGPRG - Linkage comune Id processo: 55 Nome processo: ATTIVITA-CRM Tabelle principali gestite
| AREA | AREAGATE | Direzione |
|---|---|---|
| CRMATTIV CRMATTAN CRMATTOP |
APCRMATTIV APCRMATTAN APCRMATTOP |
------> <------ |
Logica generale Sincronizzazione attività CRM Esportazione Esportazione di tutti i record effettivamente modificati (con dati variati). Importazione Le applicazioni WEB potranno inserire, modificare o cancellare logicamente nuove attività NB: questo programma non è strutturata in modo classico come quelli standard delle nuove sincronizzazione, a causa della complessità delle operazioni di import/export relative alle attività. Si è cercato comunque di adeguarlo il più possibile allo schema standard. Configurazioni possibili
| Gruppo | Parametro | Note |
|---|---|---|
| abilita | attiva-areaapp | |
| areaapp | cod-azienda | |
| areaapp | db-conn-string | |
| areaapp | agg-postgres-online |
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: APCRMATTIV Se fallita inviare una Segnalazione critica e chiudere. Esportazione attività Seguendo le Linee guida per la sincronizzazione, eseguire l'esportazione delle attività. Su POSTGRES, tabella APSTATOSYN, leggere il record relativo alla tabella/oggetto da sincronizzare "CRMATTIV"; se il record non esiste, crearlo impostando
| Dato | Contenuto |
|---|---|
| A-SYN-AZIENDA | Codice azienda |
| A-SYN-TABELLA | "CRMATTIV" |
| 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) Se configurata l'esportazione massiva: swa014-esportazione-massiva = "S", verrà eseguito il punto A.1, altrimenti il punto A.2 Non ancora implementato il giro di ricerca sul log aggiornamenti: attivare solo se è configurato il log, altrimenti lasciare il giro attuale che anche se non è ottimizzato comunque può funzionare. A.1 - Esportazione massiva attività * Scorrere CRMATTIV; * Se l'attività ha data precedente alla data confiurata in swa014-data-inizio-exp-massiva, l'attività non sarà esportata * Eseguire il punto A.1.1 per verificare se l'attività è di tipo "Agenda"; se si, cercare l'ora fine appuntamento con il punto A.1.2 * Eseguire A.3ca A.1.1 - Ricerca se attività "Agenda" * Verificare se su CRMAGAPP esistono record collegati all'attività in esame; se si, significa che l'attività è di tipo "Agenda". A.1.2 - Ricerca fine appuntamento Cercare con una start all'indietro l'ultimo record di CRMAGASP collegato ad una attività. L'ora fine dell'appuntamento è data da "ASP-ORA + 15 minuti" A.2 - Esportazione attività aggiornate/cancellate Occorre verificare se per la tabella interessata il log aggiornamenti è attivo: quindi testare il campo TLF-CRM-LOG (8). Se il campo non vale "X" segnalare e uscire. * Scorrere il log aggiornamenti relativo alla tabella interessata ricerca su LOGAGREC attraverso LGR-CHIA3, impostando: * LGR-FILE = "CRMATTIV" * LGR-DATA = A-SYN-DA-GES-DATA * LGR-ORA = A-SYN-DA-GES-ORA * Leggere tutti i record trovati * leggere LOGIDREC che contiene la chiave del file CRMATTIV * Se e' il campo di linkage denominato "utilswa-num-attivita" non e' = 0 si deve filtrare solamente i record con questo numero di attivita. * Eseguire il punto A.1.1 per verificare se l'attività è di tipo "Agenda"; se si, se si, cercare l'ora fine appuntamento con il punto A.1.2 * Per ciascun record valudo, se LGR-OPERAZIONE vale: * "C": eseguire A.4 * "I": eseguire A.3 * "M": eseguire A.3 Se siamo in modalita' di "aggiornamento su singola attivita'" modifiicare "logdirec" mettere nel campo lgr-eseguito = "S" ed eseguire rewrite allo scopo di indicare a SWA014 che gira in modo massivo, che si tratta di un record di cui e' gia' stato fatto l'aggioranamento. A.3 - Esportazione attività nuova/aggiornata Cerca l'esistenza di un record su APCRMATTIV avente:
| Dato | Descrizione |
|---|---|
| A-CRT-AZIENDA | Codice azienda |
| A-CRT-ID-DISPOSITIVO | 0 |
| A-CRT-IDD-PROG | 0 |
| A-CRT-NUM | CRT-NUM |
Se non esiste, inserirlo. Se esiste, aggiornarlo: se pero' A-CRT-AGG-APP = "S" o "C", inserire una segnalazione sul file di log. A.3.1 - Aggiornamento APCRMATTIV Cerca l'esistenza di un record su APCRMATTIV avente: Informazioni con cui inserire/aggiornare un record su APCRMATTIV:
| Dato | Descrizione |
|---|---|
| A-CRT-AZIENDA | Codice azienda |
| A-CRT-ID-DISPOSITIVO | 0 |
| A-CRT-IDD-PROG | 0 |
| A-CRT-NUM | CRT-NUM |
| A-CRT-TIPO | |
| A-CRT-OPE-AUTORE | CRT-OPE |
| A-CRT-DATA | CRT-DATA |
| A-CRT-ORA | CRT-ORA |
| A-CRT-DATA-ESE | CRT-DATA-ESE |
| A-CRT-ORA-ESE | CRT-ORA-ESE |
| A-CRT-TIPOLOGIA | CRT-TIP |
| A-CRT-FL-ESE | CRT-FL-ESE |
| A-CRT-DES | CRT-DES |
| A-CRT-NOTE | Ricerca note attività su CRMATTNT |
| A-CRT-FL-CANC | CRT-FL-CANC |
| A-CRT-IMP | CRT-IMP |
| A-CRT-FL-PERSONALE | CRT-FL-PERSONALE |
| A-CRT-FL-MULTI-DEST | CRT-FL-MULTI-DEST |
| A-CRT-FL-MAIL | CRT-FL-MAIL |
| A-CRT-FL-SMS | CRT-FL-SMS |
| A-CRT-FL-RPZ | CRT-FL-RPZ |
| A-CRT-RPZ-CADENZA | CRT-RPZ-CADENZA |
| A-CRT-ID-SINCRO | A-SYN-ID-SINCRO |
| A-CRT-AGG-APP | "N" |
| A-CRT-ORA-FINE | Contiene l'ora fine appuntamento, se A-CRT-TIPO = "G" |
| A-CRT-CODICE-GIRO | CRT-CODICE-GIRO |
| A-CRT-DATA-GIRO | CRT-DATA-GIRO |
| A-CRT-ORA-GIRO | CRT-ORA-GIRO |
| A-CRT-STATO-ATTIVITA | CRT-STATO-ATTIVITA |
| A-CRT-CATEGORIA | CRT-CATEGORIA |
A.3.2 - Aggiornamento APCRMATTAN Usando un opportuno comando SQL cancellare tutti i record di APCRMATTAN la cui chiave corrisponde alla chiave primaria di APCRMATTIV. Dopodichè eseguire l'esportazione dei record CRMATTAN aventi: * CRN-NUM = CRT-NUM Per ciascun record inserire un nuovo record su APCRMATTAN:
| Dato | Descrizione |
|---|---|
| A-CRN-AZIENDA | Codice azienda |
| A-CRN-ID-DISPOSITIVO | 0 |
| A-CRN-IDD-PROG | 0 |
| A-CRN-NUM | CRT-NUM |
| A-CRN-NOM | CRN-ANA |
| A-CRN-DATA-ESE | CRN-DATA-ESE CRN-ORA-ESE |
| A-CRN-ORA-ESE | |
| A-CRN-CND-COD | CRN-CND-COD |
A.3.3 - Aggiornamento APCRMATTOP Usando un opportuno comando SQL cancellare tutti i record di APCRMATTOP la cui chiave corrisponde alla chiave primaria di APCRMATTIV. Dopodichè eseguire l'esportazione dei record CRMATTOP aventi: * CRP-NUM = CRT-NUM Per ciascun record inserire un nuovo record su APCRMATTOP:
| Dato | Descrizione |
|---|---|
| A-CRP-AZIENDA | Codice azienda |
| A-CRP-ID-DISPOSITIVO | 0 |
| A-CRP-IDD-PROG | 0 |
| A-CRP-NUM | CRP-NUM |
| A-CRP-OPE | CRP-OPE |
| A-CRP-DATA-ESE | CRP-DATA-ESE CRP-ORA-ESE |
| A-CRP-ORA-ESE | |
| A-CRP-DATA-ALL | CRP-DATA-ALL CRP-ORA-ALL |
| A-CRP-ORA-ALL | |
| A-CRP-FL-ALLARME | CRP-FL-ALLARME |
| A-CRP-FL-ESITO | CRP-FL-ESITO |
| A-CRP-FL-NOTIFICA | CRP-FL-NOTIFICA |
| A-CRP-FL-ESE | CRP-FL-ESE |
| A-CRP-ID-APP-GOOGLE | CRP-ID-APP-GOOGLE |
| A-CRP-SMS-NOTIFICA | CRP-SMS-NOTIFICA |
A.3.4 - Aggiornamento APCRMATTAL Per motivi di performance, si cercherà di aggiornare (e quindi trasferire da server gestionale a server web) i soli allegati nuovi realmente modificati sull'attività (una attività potrebbe venire aggiornata, ma gli allegati non essere stati toccati). Note su archiviazione remota Se per la classe "Attività CRM" è attiva l'archiviazione remota, l'esecuzione di questa fase viene bypassata: anche se è stata appena attivata, i documenti non ancora remoti saranno sincronizzati e trasferiti dall'apposito processo incluso in ARC005. A.3.4.1 - Azzeramento A-CRL-AGG-GEST Eseguire un comando SQL con cui impostare "A-CRL-AGG-GEST="N"" per tutti i record relativi all'attività in corso:
| Dato | Descrizione |
|---|---|
| A-CRL-AZIENDA | Codice azienda |
| A-CRL-ID-DISPOSITIVO | 0 |
| A-CRL-IDD-PROG | 0 |
| A-CRL-NUM | CRT-NUM |
A.3.4.2 - Controllo ed esportazione allegati * Scorrere tutti i record di COGIMAGE attraverso IMG-CHIA2 aventi * IMG-TIP-DOC = "AT" * IMG-DOC-COGE (1:12) = numero attività * Per ciascun record leggere il corrispondente record COGARIDX su ARX-CHIA2, impostando: * ARX-PROTOCOLLO = IMG-PROTOCOLLO * A questo punto siamo posizionati su un allegato dell'attività; vediamo se sulla tabella web esiste ed è aggiornato: * Lettura di APCRMATTAL impostando
| Dato | Descrizione |
|---|---|
| A-CRL-AZIENDA | Codice azienda |
| A-CRL-ID-DISPOSITIVO | 0 |
| A-CRL-IDD-PROG | 0 |
| A-CRL-NUM | CRT-NUM |
| A-CRL-PROG | Progressivo di allegato (IMG-DOC-COGE (13:4) |
- Quindi se il record esiste e:
- A-CRL-AGG-DATA = ARX-DA-DATA
- A-CRL-AGG-ORA = ARX-DA-ORA
- Significa che l'allegato è già presente e aggiornato, quindi scartare il record
- Altrimenti proseguire:
- Estrazione documento: chiamata a COGU06 con i parametri:
| Dato | Descrizione |
|---|---|
| U06-OPE | "Estrai-da-doc" |
| U06-FL-INTERNO | "T"ASN115 |
| U06-TIP-DOC | "AT" |
| U06-DOC-COGE | IMG-DOC-COGE |
A questo punto sarà presente un file nella cartella EXT-TMP-DIR con nome U06-FILE * inserimento/aggiornamento record su APCRMATTAL:
| Dato | Descrizione |
|---|---|
| A-CRL-AZIENDA | Codice azienda |
| A-CRL-ID-DISPOSITIVO | 0 |
| A-CRL-IDD-PROG | 0 |
| A-CRL-NUM | CRT-NUM |
| A-CRL-PROG | Progressivo di allegato (IMG-DOC-COGE (13:4) |
| A-CRL-ARX-PROGRESSIVO | ARX-PROGRESSIVO |
| A-CRL-DOCUMENTO | U06-FILE |
| A-CRL-DESCRIZIONE | IMG-OGGETTO |
| A-CRL-AGG-DATA | ARX-DA-DATA ARX-DA-TIME |
| A-CRL-AGG-ORA | |
| A-CRL-AGG-APP | "N" |
| A-CRL-AGG-GEST | "S" |
- Trasferimento file sul server WEB, usando la subroutine di trasferimento FTP già usata per gli allegati di Assist, vedi SWA005:
- DA: EXT-TMP-DIR/U06-FILE
- A: cartella configurata "areaapp"-"cartella-ftp-attivita" / CRT-NUM "/" U06-FILE
- La modalità di trasferimento dipenderà dalla configurazione attivazione-bucket A.3.4.3 - Controllo allegati non presenti sul gestionale Eseguire un comando SQL con cui effettuare la cancellazione logica di tutti i record relativi all'attività in corso:
| Dato | Descrizione |
|---|---|
| A-CRL-AZIENDA | Codice azienda |
| A-CRL-ID-DISPOSITIVO | 0 |
| A-CRL-IDD-PROG | 0 |
| A-CRL-NUM | CRT-NUM |
aventi ancora A-CRL-AGG-GEST = "N" A.4 - Cancellazione attività In questo caso dobbiamo semplicemente informare i dispositivi esterni che l'attività è stata cancellata; quindi: Cerca l'esistenza di un record su APCRMATTIV avente:
| Dato | Descrizione |
|---|---|
| A-CRT-AZIENDA | Codice azienda |
| A-CRT-ID-DISPOSITIVO | 0 |
| A-CRT-IDD-PROG | 0 |
| A-CRT-NUM | CRT-NUM |
Se il record viene trovato, aggiornare impostando:
| Dato | Descrizione |
|---|---|
| A-CRT-FL-CANC | "C" |
B - Importazione attività Scorrere APCRMATTIV eseguendo una apposita query che permetta di restituire i record aggiornati (A-CRT-AGG-APP <> " ","N"). Per ciascun record trovato, se il campo: A-CRT-NUM vale: * "0": significa che è una nuova attività inserito su smartphone; eseguire B.1 * <> 0: significa che sullo smartphone l'attività è stato aggiornata; eseguire B.2 24/04/2018 Aggiungo questa nota dopo aver controllato il comportamento attuale del programma che nel frattempo è stato pesantemente modificato per la sincronizzazione con Calendar/Scheduler. Si considera "aggiornata" l'attività quando A-CRT-AGG-APP = "A" B.1 - Inserimento nuova attività Significa che il record è stato inserito da uno smartphone o da Areagate; in questo caso avremo anche A-CRT-ID-DISPOSITIVO e A-CRT-IDD-PROG significativi. Non appena si inizia questa fase impostare
| Dato | Descrizione |
|---|---|
| A-CRT-SEMAFORO | 1 |
e salvare: questo impedirà che qualcuno possa effettuare modifiche all'attività temporanea da ora in avanti B.1.1 - Creazione nuova attività NB: per il momento prevedo che l'attività sia collegata ad un solo nominativo e ad un solo utente destinatario, e con un solo allegato Chiamata a CRMS08 impostando:
| Dato | Descrizione |
|---|---|
| CRMS08-OPE | "SCRIVI" |
| CRMS08-NOM | Posizionarsi sul primo record di APCRMATTAN collegato all'attività; passare A-CRN-NOM |
| CRMS08-TIP | A-CRT-TIPOLOGIA |
| CRMS08-OGGETTO | A-CRT-DES |
| CRMS08-TESTO | A-CRT-NOTE |
| CRMS08-OPE-AUT | A-CRT-OPE-AUTORE |
| CRMS08-OPE-DST | Posizionarsi sul primo record di APCRMATTOP collegato all'attività; passare A-CRP-OPE |
| CRMS08-FL-ESEGUI | A-CRT-FL-ESE |
| CRMS08-FL-ALLARME | A-CRP-FL-ALLARME |
| CRMS08-ALLARME-DATA | A-CRP-DATA-ALL |
| CRMS08-ALLARME-ORA | A-CRP-ORA-ALL |
| CRMS08-CODICE-GIRO | A-CRT-CODICE-GIRO |
| CRMS08-DATA-GIRO | A-CRT-DATA-GIRO |
| CRMS08-ORA-GIRO | A-CRT-ORA-GIRO |
| CRMS08-STATO-ATTIVITA | A-CRT-STATO-ATTIVITA |
| CRMS08-CATEGORIA | A-CRT-CATEGORIA |
B.1.1.1 - Aggiornamenti all'attività CRMS08 non è in grado attualmente di salvare tutti i dati necessari all'attività. Quindi all'uscita dall'inserimento, rileggere CRMATTIV e: * Se c'è il modulo assistenza attivo (AZ-ASSIST = "S"), salvare il codice intervento collegato su CRT-ID-INTER (recuperato dalla descrizione A-CRT-DES) B.1.2 - Importazione allegati Lettura di tutti i record id APCRMATTAL collegati all'attività; per ciascuno: B.1.2.1 - Download allegato Trasferimento file dal server WEB, usando la subroutine di trasferimento FTP già usata per gli allegati di Assist, vedi SWA005: * * DA: cartella configurata "areaapp"-"cartella-ftp-attivita" / CRT-NUM "/" A-CRL-DOCUMENTO * A: EXT-TMP-DIR/A-CRL-DOCUMENTO Se il documento è cancellato logicamente (A-CRL-FL-CANC = "C") non verrà importato in fase di acquisizione nuova attività. B.1.2.2 - Archiviazione allegato Archiviazione del documento sull'attività, con una chiamata a COGU06:
| Nome campo | Contenuto |
|---|---|
| U06-OPE | INSERISCI-FILE |
| U06-FL-INTERNO | "T" |
| U06-TIP-DOC | "AT" |
| U06-DOC-COGE | CRMS08-ATTIVITA-CREATA su 12 cifre + A-CRL-PROG |
| U06-DO-OGGETTO | A-CRL-DESCRIZIONE |
| U06-FILE | EXT-TMP-DIR/A-CRL-DOCUMENTO |
B.1.3 - Rimozione record di input Il record di origine da cui siamo partiti su APCRMATTIV va cancellato, assieme ai record collegati alla stessa attività sulle altre tabelle: * APCRMATTAN * APCRMATTOP * APCRMATTAL B.1.3 - Riesportazione record La nuova attività dovrà essere riesportata come spiegato al punto A.3 In questo caso dovremo valorizzare alcuni campi in più:
| Nome campo | Contenuto |
|---|---|
| A-CRT-ID-DISP-ORIG | A-CRT-ID-DISPOSITIVO del record temporaneo |
| A-CRT-IDD-PROG-ORIG | A-CRT-IDD-PROG del record temporaneo |
B.2 - Aggiornamento attività esistente In questo caso avremo A-CRT-ID-DISPOSITIVO e A-CRT-IDD-PROG = 0, mentre avremo A-CRT-NUM significativo. Se A-CRT-AGG-APP = 'C' l'attività è stata cancellata lato web, quindi bisogna agire di conseguenza Altrimenti effettuare una chiamata specifica a CRMS08:
| Nome campo | Contenuto |
|---|---|
| CRMS06-OPE | AGGIORNA |
| CRMS08-ATTIVITA-CREATA | A-CRT-NUM |
| CRMS08-OGGETTO | A-CRT-DES/ |
| CRMS08-TESTO | A-CRT-NOTE |
| CRMS08-OPE-DST | A-CRT-OPE-AUTORE (?) |
| CRMS08-FL-ESEGUI | A-CRT-FL-ESE |
| CRMS08-CODICE-GIRO | A-CRT-CODICE-GIRO |
| CRMS08-DATA-GIRO | A-CRT-DATA-GIRO |
| CRMS08-ORA-GIRO | A-CRT-ORA-GIRO |
| CRMS08-STATO-ATTIVITA | A-CRT-STATO-ATTIVITA |
| CRMS08-CATEGORIA | A-CRT-CATEGORIA |
B.2.2 - Aggiornamento APCRMATTIV Aggiornare il record di origine impostando:
| Dato | Descrizione |
|---|---|
| A-CRT-AGG-APP | "N" |
C - Aggiornamento APSTATOSYN Aggiornare il record APSTATOSYN relativo a:
| Dato | Contenuto |
|---|---|
| A-SYN-AZIENDA | Codice azienda |
| A-SYN-TABELLA | "CRMATTIV" |
e aggiornare i dati:
| Dato | Contenuto |
|---|---|
| A-SYN-AZIENDA | Codice azienda |
| A-SYN-TABELLA | "CRMATTIV" |
| A-SYN-DA-GES-DATA | Data/ora di aggiornamento maggiore trovata sui record esportati |
| A-SYN-DA-GES-ORA | |
| A-SYN-DA-ID-SINCRO | Sommare 1 al valore precedente |
Estratto da documentazione interna ClickUp