diff --git a/Helper/HelperGdb.cs b/Helper/HelperGdb.cs index 43ac48c..f653010 100644 --- a/Helper/HelperGdb.cs +++ b/Helper/HelperGdb.cs @@ -1403,5 +1403,24 @@ namespace OliviaAddInPro.Helper } + /** + * Dado un nombre de capa mira si está abierta y la cierra + */ + public static bool CloseLayer(string nombCapa) + { + try + { + var lyr = MapView.Active.Map.FindLayers(nombCapa).FirstOrDefault() as FeatureLayer; + if (lyr == null) + return false; + MapView.Active.Map.RemoveLayer(lyr); + return true; + } + catch (Exception ex) + { + return false; + } + } + } } diff --git a/Services/FinProcServ.cs b/Services/FinProcServ.cs index f98f9a1..5ad8c64 100644 --- a/Services/FinProcServ.cs +++ b/Services/FinProcServ.cs @@ -14,27 +14,48 @@ namespace OliviaAddInPro.Services { public void finEjecuta(Respuesta res) { - OliviaGlob.progrDialog.Hide(); + //OliviaGlob.progrDialog.Hide(); String msg=string.Empty; //gestiona los flags, el estado de finok o finnok va en res.Vale if (res.HasError) { msg = res.Error.First(); + //actualiza los flags + OliviaGlob.RemoveFlagTipEjec(TiposEjecucion.FinEjecNOk); } else { msg = Resource1.String_exito; + bool todoOk = true; + //importa resultados + if (OliviaGlob.HasFlagTipEjec(TiposEjecucion.EjecSecto)) //Ha terminado bien la sectorización + { + /*if (!gdb.import_secto_ini()) + { + todoOk=false; + msg = msg + " " + gdb.err_st; + }*/ + } + else if (OliviaGlob.HasFlagTipEjec(TiposEjecucion.EjecPlanif)) //Ha terminado bien la planificación + { + /*guarda_csv(); + if (!gdb.import_planif()) + { + todoOk=false; + msg = msg + " " + gdb.err_st; + }*/ + } + //actualiza los flags + OliviaGlob.RemoveFlagTipEjec(TiposEjecucion.FinEjecOk); + if (todoOk) + { + //pone modo config2 + OliviaGlob.AddFlagTipEjec(TiposEjecucion.Config2); + } } - - //importa resultados - //borra los archivos que le toca borrar - //hay una funcion borrafiles en EjecServ, usar esa? - //pone modo config2 - - + BorraFiles(); HelperGlobal.ponMsg(msg); - Application.Current.Dispatcher.Invoke(new Action(() => { finEjecuta2(); })); } @@ -44,63 +65,7 @@ namespace OliviaAddInPro.Services //muestra la ventana OliviaGlob.ShowHidePane(true); } - - //se le llama cuando ha terminado el proceso de ejecución en Olivia Tasks - //puede haber ido bien, haberse cancelado, etc. En función de ello se realizan - //unas tareas u otras - public void FinProceso() - { - bool mal = true; - string err = ""; - - if (OliviaGlob.HasFlagTipEjec(TiposEjecucion.FinEjecOk)) //ha terminado bien - { - if (OliviaGlob.HasFlagTipEjec(TiposEjecucion.EjecSecto)) //Ha terminado bien la sectorización - { - /*if (gdb.import_secto_ini()) - { - mal = false; - } - else - { - mal = true; - err = gdb.err_st; - }*/ - } - else if (OliviaGlob.HasFlagTipEjec(TiposEjecucion.EjecPlanif)) //Ha terminado bien la planificación - { - /*guarda_csv(); - if (gdb.import_planif()) - { - mal = false; - } - else - { - mal = true; - err = gdb.err_st; - }*/ - } - //actualiza los flags - OliviaGlob.RemoveFlagTipEjec(TiposEjecucion.FinEjecOk); - OliviaGlob.AddFlagTipEjec(TiposEjecucion.Config2); - } - else if(OliviaGlob.HasFlagTipEjec(TiposEjecucion.FinEjecNOk)) //ha habido error - { - /*mal = true; - err = progr_eje.err_str;*/ - //actualiza los flags - OliviaGlob.RemoveFlagTipEjec(TiposEjecucion.FinEjecNOk); - } - - if (mal) - { - HelperGlobal.ponMsg(err, System.Windows.MessageBoxImage.Error); - - } - - OliviaGlob.ShowHidePane(true); - - } + /** * Borra los archivos exportados para el proceso @@ -113,26 +78,30 @@ namespace OliviaAddInPro.Services try { - if (capa_principal == null) - return; - list = System.IO.Directory.GetFiles(OliviaGlob.Paths.DirData, capa_principal + "*"); - if (list.Length > 0) + if (capa_principal != null && HelperGdb.CloseLayer(capa_principal)) { - foreach (string f in list) + list = System.IO.Directory.GetFiles(OliviaGlob.Paths.DirData, capa_principal + "*"); + if (list.Length > 0) { - if (System.IO.Path.GetExtension(f) == ".lock") - continue; - System.IO.File.Delete(f); + foreach (string f in list) + { + if (System.IO.Path.GetExtension(f) == ".lock") + continue; + System.IO.File.Delete(f); + } } } - if (capa_principal_nw == null) - return; - list = System.IO.Directory.GetFiles(OliviaGlob.Paths.DirData, capa_principal_nw + "*"); - if (list.Length > 0) + if (capa_principal_nw != null && HelperGdb.CloseLayer(capa_principal_nw)) { - foreach (string f in list) + list = System.IO.Directory.GetFiles(OliviaGlob.Paths.DirData, capa_principal_nw + "*"); + if (list.Length > 0) { - System.IO.File.Delete(f); + foreach (string f in list) + { + if (System.IO.Path.GetExtension(f) == ".lock") + continue; + System.IO.File.Delete(f); + } } } } diff --git a/Services/LanzaSrv/LanzaOlvServ.cs b/Services/LanzaSrv/LanzaOlvServ.cs index 0c0edfd..0726c05 100644 --- a/Services/LanzaSrv/LanzaOlvServ.cs +++ b/Services/LanzaSrv/LanzaOlvServ.cs @@ -39,24 +39,18 @@ namespace OliviaAddInPro.Services.LanzaSrv } public Respuesta ejec(string NTratamiento) - { + { NombreTratamiento = NTratamiento; - add_cfg_comun(); - - //lanza ventana marchando que lanza proceso en bucle para actualizar barra progreso - //OliviaGlob.progr_eje = new ProgresoEjec(); + add_cfg_comun(); //lanza proceso OliviaTask var res = lanza(); if (!res.Value) { res.Error.Add("Error al arrancar OliviaTask (programa de procesado de datos): No ha arrancado correctamente la instancia OliviaTask"); - res.Value = true; return res; } - //OliviaGlob.progr_eje.start(str_cfg); - return res; } @@ -108,7 +102,8 @@ namespace OliviaAddInPro.Services.LanzaSrv GeneralDef.EjecGeoParamSep + GeneralDef.GG_pcfg + GeneralDef.EjecGeoParamIgual + OliviaGlob.Paths.PathCfg + "D:\\Proyectos\\Olivia\\Instal2.0\\cfg.ini"; pfi = new ProcessStartInfo(OliviaGlob.Paths.PathExeOlivia, args); - System.Diagnostics.Process.Start(pfi); + pfi.UseShellExecute = false; + System.Diagnostics.Process.Start(pfi); //comprueba que haya arrancado OliviaTask //le da 2 seg de margen para que arranque @@ -184,5 +179,38 @@ namespace OliviaAddInPro.Services.LanzaSrv else return null; } + + /** + * Comprueba si OliviaTask ha salido y le espera durante T seg. Si no, para la tarea + * return true si ha terminado, false si no + */ + private bool EsperaProcess(string nombproc) + { + bool esta_geo = true; + Process[] pg; + + //le da 3 seg de margen para que se cierre + pg = Is_process(nombproc, 1, false); + esta_geo = (pg != null); + + if (esta_geo) + { + //mata a la fuerza la tarea + try + { + for (int i = 0; i < pg.Length; i++) + { + pg[i].Kill(); + if (pg[i].WaitForExit(500)) + esta_geo = false; + } + } + catch (Exception) + { + esta_geo = false; + } + } + return !esta_geo; + } } } diff --git a/Services/LimpiezaServ.cs b/Services/LimpiezaServ.cs index 6df2098..5c61a81 100644 --- a/Services/LimpiezaServ.cs +++ b/Services/LimpiezaServ.cs @@ -56,6 +56,7 @@ namespace OliviaAddInPro.Services return res; } res.Value = true; + return res; }