Imports tsWPFCore Imports bdGrupoSanchoToro.db Imports System.CodeDom.Compiler Imports DevExpress.Xpf.Core Imports System.Reflection Imports bdGrupoSanchoToro.db.tscGrupoSanchoToro Imports bdGrupoSanchoToro.db.Utilidades Public Class ucProcesos Private bd As tscGrupoSanchoToro Public Overrides Sub Cargado() End Sub Public Overrides Function EstablecedcPrincipal(Optional Background As Boolean = False, Optional FuerzaNuevo As Boolean = False, Optional Refrescar As Boolean = False) As tsUtilidades.EstadosAplicacion gcProcesos.ItemsSource = bd.procesos.ToList Return tsUtilidades.EstadosAplicacion.AplicacionSinIndice End Function Public Overrides Sub EstableceDataContextSecundarios(Optional Background As Boolean = False) End Sub Public Overrides Sub EstableceTitulo() Me.docpanel.Caption = "Procesos" End Sub Public Overrides ReadOnly Property idRegistroAplicacionActual As String Get Return "Procesos" End Get End Property Public Overrides ReadOnly Property NombreTablaBase As String Get Return "procesos" End Get End Property Public Overrides ReadOnly Property DescripcionRegistro As String Get Return "Procesos" End Get End Property Public Overrides Function ObtieneBD() As tsUtilidades.ItsContexto bd = tscGrupoSanchoToro.NuevoContexto() Return bd End Function Public Overrides Function ObtienePermisos() As tsUtilidades.Permisos Return Comun.ObtienePermisos(Me.bd, "AP.ADMINISTRATIVOS", idUsuario) End Function Private Sub btEjecutar_Click(sender As Object, e As RoutedEventArgs) Try Dim dwi As dxwInicio = CType(Window.GetWindow(Me), dxwInicio) Dim pr As bdGrupoSanchoToro.db.procesos = CType(Me.gcProcesos.CurrentItem, procesos) If pr.Accion <> "" Then Dim stipo As String = tsUtilidades.Utilidades.Ttagi(pr.Accion, "CLASE") Dim tipo As Type If stipo <> "" Then Dim sEnsamblado As String = tsUtilidades.Utilidades.Ttagi(pr.Accion, "ENS") If sEnsamblado <> "" Then Dim dm As AppDomain = AppDomain.CurrentDomain Dim b() As Byte = IO.File.ReadAllBytes(sEnsamblado) tipo = dm.Load(b).GetType(stipo, False, True) Try tipo.GetMethod(tsUtilidades.Utilidades.Ttagi(pr.Accion, "SUB")).Invoke(Nothing, Nothing) tipo = Nothing Catch ex As Exception End Try Else tipo = tsUtilidades.Utilidades.FindType(stipo) End If Dim sSub As String = tsUtilidades.Utilidades.Ttagi(pr.Accion, "SUB") Dim sPar As String = tsUtilidades.Utilidades.Ttagi(pr.Accion, "PAR") If tipo.GetMethod(sSub).GetParameters.Count = 0 Then tipo.GetMethod(sSub).Invoke(Nothing, Nothing) Else If sPar = "" Then ' tipo.GetMethod(sSub).Invoke(Nothing, {dwi, Comun.dcfg, Comun.dcn, bdGrupoSanchoToro.db.Utilidades.dsc, pr.Accion}) tipo.GetMethod(sSub).Invoke(Nothing, {dwi, pr.Accion}) Else 'tipo.GetMethod(sSub).Invoke(Nothing, {sPar, dwi, Comun.dcfg, Comun.dcn, bdGrupoSanchoToro.db.Utilidades.dsc, pr.Accion}) tipo.GetMethod(sSub).Invoke(Nothing, {sPar, dwi, pr.Accion}) End If End If End If Else Dim oCProvider As New VBCodeProvider Dim oCompiler As CodeDomProvider = oCProvider Dim oCParam As New CompilerParameters oCParam.GenerateInMemory = True ' oCParam.CompilerOptions = [String].Format("/lib:""{0}""", IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Reference Assemblies\Microsoft\Framework\v4.0")) + [String].Format(" /lib:""{0}""", IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Reference Assemblies\Microsoft\Framework\v4.5")) ' Dim a As Assembly = Assembly.GetExecutingAssembly 'For Each ra In a.GetReferencedAssemblies ' oCParam.ReferencedAssemblies.Add(ra.Name) 'Next oCParam.ReferencedAssemblies.AddRange(AppDomain.CurrentDomain.GetAssemblies.Where(Function(x) x.IsDynamic = False).Select(Function(x) x.Location).ToArray) 'oCParam.ReferencedAssemblies.Add("System.dll") 'oCParam.ReferencedAssemblies.Add("System.Data.dll") 'oCParam.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll") 'oCParam.ReferencedAssemblies.Add("PresentationFramework.dll") 'oCParam.ReferencedAssemblies.Add("GestionParlamento.exe") 'Creamos un objeto CompilerResult que obtendrá los resultados de la compilación Dim oCResult As CompilerResults Dim sRutina As String = System.Text.Encoding.UTF8.GetString(pr.idFicheroNavigation.Fichero) oCResult = oCompiler.CompileAssemblyFromSource(oCParam, sRutina) 'Comprobamos que no existan errores de compilación. Dim oCError As CompilerError Dim sErrores As String = "" If oCResult.Errors.Count > 0 Then 'Si existen errores los mostramos. 'Si bien, podriamos implementar un mejor método para visualizar 'los errores de compilación, este nos servirá por los momentos. For Each oCError In oCResult.Errors sErrores &= oCError.ErrorText.ToString & " --- " 'MsgBox(oCError.ErrorText.ToString) Next Throw New Exception(sErrores) Else 'Como el ensamblado se generó en memoria, debemos obtener 'una referencia al ensamblado generado, para esto usamos 'la propiedad CompiledAssembly Dim oEnsamblado As System.Reflection.Assembly oEnsamblado = oCResult.CompiledAssembly Dim oClass As Type = oEnsamblado.GetType("RutinasTecnosis") oClass.GetMethod("Ejecutar").Invoke(Nothing, Nothing) End If End If Catch ex As Exception DXMessageBox.Show(ex.Message, "Error") End Try End Sub Private Sub Nuevo(sender As Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs) FuncionesDinamicas.AbrirAP(New ucProceso, OtrosParametros) End Sub Private Sub ap_Enlazar(Celda As DevExpress.Xpf.Grid.EditGridCellData, Defecto As Boolean) Handles Me.Enlazar Dim P = Comun.ObtienePermisos(Me.bd, "AP.ADMINISTRADOR", idUsuario) If P.Consultar Then Dim id As Integer = DirectCast(Me.gcProcesos.CurrentItem, procesos).idProceso FuncionesDinamicas.AbrirAP(New ucProceso(id), OtrosParametros) Else btEjecutar_Click(Nothing, Nothing) End If End Sub End Class