EjecutarFormularioCommand.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows.Forms;
6 using sage.ew.db;
7 using sage.ew.interficies;
8 
9 namespace Sage.ES.S50.Addons
10 {
11  internal class EjecutarFormularioCommand : Command
12  {
13  int ret = 0;
14 
15  public EjecutarFormularioCommand(IAddonsManager addons) : base(addons)
16  {
17  Name = "EjecutarFormulario";
18  }
19 
20  protected override void CommandModulo(IModulo modulo, params object[] parameters)
21  {
22  if (DB._SQLExisteTablaBBDD(modulo._NombreConexion, "FORMSNET"))
23  {
24  string tcFormularioFox = parameters[0].ToString();
25  Func<Dictionary<string, object>, bool> ExisteFormNet = parameters[1] as Func<Dictionary<string, object>, bool>;
26  Func<IFormBase, object[], bool> InitAccesoDirecto = parameters[2] as Func<IFormBase, object[], bool>;
27  object[] toParametros = parameters[3] as object[];
28  bool tlAccesoDirecto = Convert.ToBoolean(parameters[4]);
29  bool tlTareaProgramada = Convert.ToBoolean(parameters[5]);
30  Dictionary<string, object> _dicFormNet = new Dictionary<string, object>();
31  string lcLibreriaNet = "", lcFormNet = "";
32  bool llExisteFormNet = false;
33 
34  _dicFormNet = DB.SQLREGValor("FORMSNET", "FORMVFP", tcFormularioFox, modulo._AliasDB);
35  if (_dicFormNet != null && _dicFormNet.Count > 0)
36  {
37  lcFormNet = Convert.ToString(_dicFormNet["formnet"]).Trim();
38  llExisteFormNet = ExisteFormNet(_dicFormNet); //FUNCTIONS.ExisteFormNet(_dicFormNet);
39  if (llExisteFormNet)
40  {
41  // Cargamos la clase de negocio
42  int lnPos = lcFormNet.IndexOf('.', lcFormNet.IndexOf('.', lcFormNet.IndexOf('.') + 1) + 1);
43  if (lnPos > 0)
44  lcLibreriaNet = lcFormNet.Substring(0, lnPos);
45 
46  string lcType = lcFormNet + "," + lcLibreriaNet;
47  Type ltType = Type.GetType(lcType);
48 
49  dynamic loForm = Activator.CreateInstance(ltType);
50  if (loForm != null)
51  {
52  // Bug 145257. Comprobar parámetros del acceso directo
53  bool llFormBase = loForm is IFormBase;
54 
55  //Pasem parametres
56  bool llOk = true;
57  if (toParametros != null && toParametros.Length > 0)
58  {
59  string lcParam0 = toParametros[0].ToString().Trim().ToUpper();
60 
61  // Si el primer parámetro es AUTOMATICO o ACCESODIRECTO no ejecutamos el método_Init
62  // CCR 127560. Añadir caso especial para ejecuciones de tareas programadas mediante informes configurables.
63  if ((ltType.GetMethod("_Init") != null) && (((lcParam0 != "AUTOMATICO") && (lcParam0 != "ACCESODIRECTO")) || tcFormularioFox == "ICLISPRO"))
64  {
65  llOk = loForm._Init(toParametros);
66  }
67 
68  // Bug 122494 - En el caso de formulari, realizar el Init
69  if (llFormBase)
70  {
71  InitAccesoDirecto(loForm, toParametros);
72  }
73  //FUNCTIONS._InitAccesoDirecto(loForm, toParametros);
74  }
75 
76  if (!llOk)
77  ((Form)loForm).Close();
78  else
79  {
80  //PE-104237: Quitamos el ShowDialog y lo cambiamos por Show ya que con ShowDialog y ejecutando desde una tarea programada configurada como ejecutar tanto si el usuario ha iniciado sesión
81  //como si no, y con el tipo Servicio de red o SYSTEM, no se pueden ejecutar formularios modales, peta con esta excepción. En cambio con el Show al no ser modal si que deja ejecutarse
82  // Bug 122494 - Si es clase de negocio, ejecutar _ShowDialog
83  if (!llFormBase)
84  loForm._ShowDialog();
85  else if (tlAccesoDirecto && !tlTareaProgramada)
86  loForm.ShowDialog();
87  else
88  loForm.Show();
89  }
90  ret = 1;
91  }
92  }
93  }
94  }
95 
96  }
97 
98  protected override ExpectedParameters GetExpectedParameters()
99  {
100  return new ExpectedParameters(new Type[] { typeof(string),
101  typeof(Func<Dictionary<string, object>, bool>),
102  typeof(Func<IFormBase,object[], bool>),
103  typeof(object[]),
104  typeof(bool),
105  typeof(bool)
106  });
107  }
108  protected override object Return(params object[] parameters)
109  {
110  return ret;
111  }
112  protected override bool Exit()
113  {
114  return ret == 1;
115  }
116  }
117 }
PE-93426 Interficie para los módulos de la aplicación
Definition: IModulo.cs:22
bool _Init(object[] taParams)
Evento para realizar las mismas comprobaciones que en el método análogo de la pantalla de fox En los...
Interface para formularios que deriven de FormBase
Definition: IFormBase.cs:12
string _NombreConexion
Nombre real de la base de datos
Definition: IModulo.cs:59
string _AliasDB
Alias de la Base de datos
Definition: IModulo.cs:29