SWA014: Sincronizzazione attività CRM

Navigation:  »No topics above this level«

SWA014: Sincronizzazione attività CRM

Return to chapter overview

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

 

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