Vai al contenuto

SWA014: Sincronizzazione attività CRM

Nome programma SWA014 Linkage section Programma richiamabile direttamente da una funzione di lancio, o da uno schedulatore Configurazioni possibili

Gruppo Parametro Note
areaapp swa014-esportazione-massiva
areaapp swa014-data-inizio-exp-massiva
aws attivazione-bucket

Logica generale del programma Questo programma permetterà la sincronizzazione (import/export) delle attività i CRM tra gestionale e base dati Postgres Le attività CRM sono oggetti che potrebbero essere aggiornati e/o cancellati sia su gestionale che su APP. Quindi per poter ottenere correttamente le attività cancellate è necessario eseguire l'esportazione usando il log aggiornamenti. La prima esportazione avverrà invece nel modo classico, esportando tutte le attività presenti nel sistema. Importazione attività (20/04/2018) In fase di importazione, la logica è la seguente: * Tutte le attività nuove sono importate cosi' come sono; se sono già state chiuse su APP saranno importate come chiuse * Tutte le attività già esistenti (quindi quelle che erano state inserite su gestionale, o inserite su APP e non chiuse) potranno essere importate e chiuse, ma saranno aggiornate solo alcune informazioni specifiche (vedi il punto B.2) Maschera del programma Nella maschera del programma mostrare solo il contatore dei record elaborati. Elaborazione 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 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.3 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 = "S"). 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. 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

A -


Estratto da documentazione interna ClickUp