Hi all, i need your help.
In my application i have a this procedure:
PROCEDURE ProcessoSilente() //Procedura nata per gestire tutti i processi silenti in WiNeMo // I processi gestiti sono: //1 - Controllo Utente //2 - Invio E-Mail //3 - StatisticheEmail //4 - Statistiche CRM //5 - StatisticheVarie //6 - Statistiche WElectroCom DataOggi is Date = DateSys() OraOggi is Time = TimeSys() arrElencoTaskParalleli is array of ParallelTask parte_alfa,Causale,tipo_documento is string nConteggioEsecuzioneProcedura is numeric = 0 WHILE True nConteggioEsecuzioneProcedura++ // 1 - Controllo utente: Serve per gestire il corretto uso degli utenti in WiNeMo IF InTestMode() THEN Trace("Controllo connsessione utente " + gsUtente ) ora is numeric = TimeSys() IF gsUtente<>"" THEN HReadSeekFirst(Utenti,UT_NOME,gsUtente,hLockNo) IF HFound(Utenti) THEN Utenti.UT_CTRL=ora HModify(Utenti) ELSE DelayBeforeClosing(2000) Error("Manomissione controllo utente. Il programma verrà terminato!") EndProgram() END ELSE IF InTestMode() THEN Trace("ERRORE CONTROLLO UTENTE") END //-------------------------------------------------------------------------------------------------------------- // 2 - Invio E-Mail: Controlla tutte le e-mail che l'utente ha in queue in questo momento e le invia FOR i = 1 TO ArrayCount(arrElencoTaskParalleli) IF arrElencoTaskParalleli.Completed=True THEN ArrayDelete(arrElencoTaskParalleli,i) END END IF ArrayCount(arrElencoTaskParalleli)=0 AND DecimalPart(nConteggioEsecuzioneProcedura/3)=0 THEN DataOggi = DateSys() OraOggi = TimeSys() HReadSeekFirst(azienda,azie_key,gsAzienda) HReadSeekFirst(utentia,Uten_key,gsUtente) HReadSeekFirst(accountmail,Am_Id,utentia.uten_id_mail) IF InTestMode() THEN Trace("Controllo MAIL") END IF HExecuteQuery(QRY_SelezionaQueueMailDaInviare,hQueryDefault,DataOggi,OraOggi,gsUtente) THEN HReadFirst(QRY_SelezionaQueueMailDaInviare) WHILE NOT HOut(QRY_SelezionaQueueMailDaInviare) let t = ParallelTaskExecute(COL_Queue.InvioEmailInQueueSingolo,(QRY_SelezionaQueueMailDaInviare.QM_ID),ptoFullCopyHFSQLContext) Add(arrElencoTaskParalleli,t) HReadNext(QRY_SelezionaQueueMailDaInviare) END END END IF InTestMode() THEN Trace(""+ArrayCount(arrElencoTaskParalleli)) //-------------------------------------------------------------------------------------------------------------- //3 - StatisticheEmail IF HExecuteQuery(QRY_CountEmailInQueue,hQueryDefault,gsUtente,gsAzienda) THEN HReadFirst(QRY_CountEmailInQueue) IF HFound(QRY_CountEmailInQueue) THEN nEmMailInInvio=QRY_CountEmailInQueue.Count_1 ELSE nEmMailInInvio=0 END END IF HExecuteQuery(QRY_CountMailInErrore,hQueryDefault,gsUtente,gsAzienda) THEN HReadFirst(QRY_CountMailInErrore) IF HFound(QRY_CountMailInErrore) THEN nEmailInErrore=QRY_CountMailInErrore.Count_1 ELSE nEmailInErrore=0 END END IF HExecuteQuery(QRY_CountEmailInQueueTutti,hQueryDefault,gsAzienda) THEN HReadFirst(QRY_CountEmailInQueueTutti) IF HFound(QRY_CountEmailInQueueTutti) THEN nEmailInvioTuttiUtenti=QRY_CountEmailInQueueTutti.Count_1 ELSE nEmailInvioTuttiUtenti=0 END END IF HExecuteQuery(QRY_CountMailInErroreTutti,hQueryDefault,gsAzienda) THEN HReadFirst(QRY_CountMailInErroreTutti) IF HFound(QRY_CountMailInErroreTutti) THEN nEmailErroreTuttiUtenti=QRY_CountMailInErroreTutti.Count_1 ELSE nEmailErroreTuttiUtenti=0 END END //-------------------------------------------------------------------------------------------------------------- //4 - Statistiche CRM IF InTestMode() THEN Trace("STATISTICHE CRM") HExecuteQuery(QRY_StatisticheCRM,hQueryDefault,gsAzienda,0,Null) HReadFirst(QRY_StatisticheCRM) gxAttivitaAperteTot=QRY_StatisticheCRM.Count_1 HExecuteQuery(QRY_StatisticheCRM,hQueryDefault,gsAzienda,1,Null) HReadFirst(QRY_StatisticheCRM) gxAttivitaChiuseTot=QRY_StatisticheCRM.Count_1 HExecuteQuery(QRY_StatisticheCRM,hQueryDefault,gsAzienda,0,gsUtente) HReadFirst(QRY_StatisticheCRM) gxAttivitaAperteUtente=QRY_StatisticheCRM.Count_1 HExecuteQuery(QRY_StatisticheCRM,hQueryDefault,gsAzienda,1,gsUtente) HReadFirst(QRY_StatisticheCRM) gxAttivitaChiuseUtente=QRY_StatisticheCRM.Count_1 HExecuteQuery(QRY_CRM_Cerca_fra2_date,hQueryDefault,gsAzienda,Null,Null,gsUtente) HReadFirst(QRY_CRM_Cerca_fra2_date) WHILE NOT HOut(QRY_CRM_Cerca_fra2_date) IF QRY_CRM_Cerca_fra2_date.FlChiuso=0 THEN ArrayAdd(garrElencoAttivitaAperteUtente,QRY_CRM_Cerca_fra2_date.Descrizione+" - "+ QRY_CRM_Cerca_fra2_date.Note) END HReadNext(QRY_CRM_Cerca_fra2_date) END //-------------------------------------------------------------------------------------------------------------- //5 - StatisticheVarie IF InTestMode() THEN Trace("Calcolo ricavo/Calcolo cestino") IF NOT HExecuteQuery(QRY_Venduto_Totale_Da_A,WiNeMo_connection,hQueryWithoutCorrection,DateSys(),DateSys(),"'"+gsAzienda+"'") THEN IF InTestMode() THEN Trace("ERRORE ESECUZIONE") END HReadFirst(QRY_Venduto_Totale_Da_A) gxRicavoGiornaliero=QRY_Venduto_Totale_Da_A.Venduto-QRY_Venduto_Totale_Da_A.CostoVenduto HExecuteQuery(QRY_Conta_TRASH,hQueryDefault,gsAzienda) HReadFirst(QRY_Conta_TRASH) gxNumDocumentiCestinati=QRY_Conta_TRASH.Count_1 //-------------------------------------------------------------------------------------------------------------- //6 - Statistiche WElectroCom IF DecimalPart(nConteggioEsecuzioneProcedura/6)=0 THEN IF InTestMode() THEN Trace("Controllo Ordini WElectroComm") HReadSeekFirst(webparameter,wbp_Tipo,"CONF_ALFA") IF HFound THEN parte_alfa=webparameter.wbp_Valore END HReadSeekFirst(webparameter,wbp_Tipo,"CONF_CAUSALE") IF HFound THEN Causale=webparameter.wbp_Valore END HReadSeekFirst(webparameter,wbp_Tipo,"CONF_TIPDOC_WEB") IF HFound THEN tipo_documento=webparameter.wbp_Valore END HExecuteQuery(QRY_SelezionaOrdiniWElectroComm,hQueryDefault,tipo_documento,parte_alfa,Causale) HReadFirst(QRY_SelezionaOrdiniWElectroComm) IF HFound(QRY_SelezionaOrdiniWElectroComm) THEN gxNumOrdiniWEletrocom=QRY_SelezionaOrdiniWElectroComm.Count_1 ELSE gxNumOrdiniWEletrocom=0 END END //-------------------------------------------------------------------------------------------------------------- CriticalSectionStart() ExecuteMainThread(WIN_Menu_winemo.DoUpadateDashboard) CriticalSectionEnd() IF gbFl_Exit_Processo_silente=True THEN BREAK END ThreadPause(500) END
This procedure is performed with this thread, after a logon user:
ThreadExecute("ProcessoSilente",threadFullCopyHFSQLContext,Utility.ProcessoSilente) The "ExecuteMainThread(WIN_Menu_winemo.DoUpadateDashboard)" perform this procedure:
PROCEDURE DoUpadateDashboard() DashDisplay(DASH_NoName1,IW_Cestino) DashDisplay(DASH_NoName1,IW_CostoGiornaliero_New) DashDisplay(WIN_Menu_winemo.DASH_NoName1,IW_CRM) DashDisplay(WIN_Menu_winemo.DASH_NoName1,IW_WSendMail_New) DashDisplay(DASH_NoName1,IW_WElectroComm_New)
In same case the program Freeze and i dont understand why.
I'm going crazy. |