Nome programma
SWA014
Linkage section
Programma richiamabile direttamente da una funzione di lancio, o da uno schedulatore
Configurazioni possibili
Gruppo |
Parametro |
Note |
areaapp |
|
|
areaapp |
|
|
aws |
|
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
A - 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:
oLGR-FILE = "CRMATTIV"
oLGR-DATA = A_SYN_DA_GES_DATA
oLGR-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:
o"C": eseguire A.4
o"I": eseguire A.3
o"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": Attività standard •"G": Attività agenda (appuntamento) |
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.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
oIMG-TIP-DOC = "AT"
oIMG-DOC-COGE (1:12) = numero attività
•Per ciascun record leggere il corrispondente record COGARIDX su ARX-CHIA2, impostando:
oARX-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:
oA_CRL_AGG_DATA = ARX-DA-DATA
oA_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:
oDA: EXT-TMP-DIR/U06-FILE
oA: cartella configurata "areaapp"-"cartella-ftp-attivita" / CRT-NUM "/" U06-FILE
oLa modalità di trasferimento dipenderà dalla configurazione attivazione-bucket
A.3.4.3 - Controllo allegati non presenti sul gestionale
Eseguire un comando SQL con cui cancellare 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; in questo caso avremo anche A_CRT_ID_DISPOSITIVO e A_CRT_IDD_PROG significativi.
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 |
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:
oDA: cartella configurata "areaapp"-"cartella-ftp-attivita" / CRT-NUM "/" A_CRL_DOCUMENTO
oA: EXT-TMP-DIR/A_CRL_DOCUMENTO
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
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 |
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 |