INSTANCIAMIENTO DE CONTROLES
Cuando se desee acceder a los métodos y propiedades de un control en concreto, debemos declarar (o castear) la variable a su interfaz específico.
Ejemplo:
// Creamos un ITextoUsuario e instanciamos el control que necesitamos. // Método 1 ITextoUsuario idCliente = (gForm.Controls["IdCliente"] as ITextoUsuario); // Método 2 ITextoUsuario idCliente = (ITextoUsuario)gForm.Controls["IdCliente"]; // Acceso a propiedades de control idCliente AhoraCore.VBA.Interaction.MsgBox(idCliente.Text); // NOTA: Se puede acceder a las propiedades del control solicitado si casteamos directamente AhoraCore.VBA.Interaction.MsgBox((gForm.Controls["IdCliente"] as ITextoUsuario).Text);
ADICIÓN DE ESPACIOS DE NOMBRES NECESARIOS
Para usar tipos definidos en un espacio de nombres sin especificar el espacio de nombres completo donde se encuentra el elemento, es recomendable hacer uso de la directiva using. En caso de no hacerlo, el compilador será incapaz de encontrar el elemento y arrojará errores al comprobar o ejecutar el código
Como buena práctica, es aconsejable añadir siempre los espacios de nombres AhoraOCX, AhoraCore y AhoraSistema en todos los scripts.
Script de pantalla con los espacios de nombres añadidos:
using AhoraSistema; using AhoraOCX; using AhoraCore; namespace AhoraScriptsPantalla { public class AhoraEmpresa_frmEmpresas : AhoraOCX.AhoraBaseScript { } }
Script único con los espacios de nombres añadidos:
using AhoraSistema; using AhoraOCX; using AhoraCore; namespace AhoraScriptsVacia { public class Script_0 : AhoraOCX.AhoraBaseScript { public void Main() { IItemColeccion lObj; IColecciones lCol = gCn.Obj.DameColeccion("Albaranes", "Where 1=1"); if (lCol != null) { for (int i = 1; i < lCol.Count(); i++) { if (lCol.Objetos[i].GetType().ToString() == "Collection") { lObj = lCol.Objetos[i]; for (int x = 1; x < lObj.Objetos.Count; x++) { AhoraCore.VBA.Interaction.MsgBox(lObj.Objetos[x].Descripcion); } } else { AhoraCore.VBA.Interaction.MsgBox(lCol.GetItem(i).Descripcion); } } } } } }
PROPIEDADES QUE HAN CAMBIADO DE NOMBRE
Para estandarizar el sistema a nomenclaturas actuales, se han renombrado algunas de las propiedades siguientes;
Caption -> Text
Locked -> ReadOnly
Recuerde que puede consultar las propiedades y métodos de nuestro sistema accediendo a la ayuda integrada en el editor de scripts:
Por ejemplo:
// Propiedad antigua. Da error. gForm.Caption = "Título formulario"; // Propiedad nueva. gForm.Text = "Título formulario";
VARIANT A VALOR
Anteriormente no era necesaria la declaración directa de ninguna variable dado que “Visual Basic Script” tipaba automáticamente todas las variables con el tipo de dato "Variant". Si desea información técnica detallada sobre dicho tipo consulte este artículo.
A nivel técnico y a modo de resumen, Variant podía contener:
- Valores escalares
- Arrays
- Objects
- Valor Empty
- Valor Nothing (null)
Para facilitar la conversión y traducción del código se ha creado una clase nueva llamada Valor que emula de forma lo más similar posible a Variant con la particularidad de que admite únicamente los siguientes valores escalares:
- Cadenas
- Boleanos
- Fechas
- Números enteros
- Números decimales
Se aconseja siempre la declaración de las variables de tipo escalar correspondientes al valor a introducir, ejemplos:
int valorInt = 5; string cadena = "cadena"; DateTime fecha = new DateTime(2121,1,1);
No obstante, tienen a su disposición dicha clase para emular aquellas operaciones con operadores o comprobaciones que, a priori, no son coherentes con el tipo de dato pero que sí permitía Variant:
Ejemplos:
// Suma de booleanos. El resultado es -2 con Variant. Valor variableValorBT = true; Valor variableValorB = true; Assert.True((variableValorBT + variableValorB) == -2);
// Suma de nulo y booleano. El resultado es -1 con Variant. Valor variableValorBT = null; Valor variableValorB = true; Assert.True((variableValorBT + variableValorB) == -1);
// Suma de nulo y string. Usando Variant es como sumar una cadena vacía. Valor variableValorBT = null; Valor variableValorB = "tt"; Assert.True((variableValorBT + variableValorB) == "tt");
// Operadores de ejemplo Booleanos con Valor // Suma de Valor (con Booleano) + Booleano. Mismo resultado que Valor + Valor Valor variableValorBT = true; bool variableBooleano = true; Assert.True(variableValorBT + variableBooleano == -2); Assert.True(variableBooleano + variableValorBT == -2); variableValorBT = true; variableBooleano = false; Assert.True(variableValorBT + variableBooleano == -1); Assert.True(variableBooleano + variableValorBT == -1); variableValorBT = false; variableBooleano = true; Assert.True(variableValorBT + variableBooleano == -1); Assert.True(variableBooleano + variableValorBT == -1); variableValorBT = false; variableBooleano = false; Assert.True(variableValorBT + variableBooleano == 0); Assert.True(variableBooleano + variableValorBT == 0); variableValorBT = true; // Suma de Valor (con Booleano) + int int variableInt = -3; // Lo "sumamos" con un entero Assert.True(variableValorBT + variableInt == -4); variableValorBT = null; variableInt = 1; // Suma de Valor (Nulo) + int Assert.True(variableValorBT + variableInt == 1);
PROPIEDADES DE LOS OBJETOS
En C# no se admiten parámetros en las propiedades de las clases, excepto si son las propiedades por defecto, a la cual se puede acceder mediante índice o clave. Como consultar y asignar propiedades a objetos del ERP es muy habitual, la propiedad Propiedades de la clase IItem y todos sus derivados se convierte en la propiedad por defecto de la clase.
Ejemplo VBScript:
Variable = Objeto.Propiedades("Propiedad")
Objeto.Propiedades("Propiedad") = Valor
Ejemplo C#:
Variable = Objeto["Propiedad"];
Objeto["Propiedad"] = Valor;
Propiedad Item de la clase IItem
La propiedad Item (de solo lectura) de la clase IItem se elimina. Debe devolverse el mismo objeto.
Ejemplo VBScript:
Dim OtroItem As IItem
...
Set OtroItem = Objeto.Item
Ejemplo C#:
IItem OtroItem;
...
OtroItem = Objeto;
FORMATO, PRESENTACIÓN Y TIPODATO
Se modifican las propiedades, anteriormente de tipo "String", de Formato, Presentación y TipoDato para que recuperen su información de las enumeraciones siguientes:
Formato y Presentacion -----> Enumeración EFormatoCampo
Con 1 decimal -> Con1decimal
Con 2 decimales -> Con2decimales
Con 3 decimales -> Con3decimales
Con 4 decimales -> Con4decimales
Con 5 decimales -> Con5decimales
Con 6 decimales -> Con6decimales
Euros -> Euros
Fecha Año Completo - 31/12/1988 -> FechaAnyoCompleto
Fecha Corta - 31/12/88 -> FechaCorta
Fecha Mediana - 31-Dic-88 -> FechaMediana
Hora Corta - 17:30 -> HoraCorta
Hora Larga - 17:30:59 -> HoraLarga
Letra delante -> LetraDelante
Letra detras -> LetraDetras
Mayusculas -> Mayusculas
Mayusculas y Minusculas -> MayusculasyMinusculas
Pesetas -> Pesetas
Sin decimales -> SinDecimales
TipoDato -----> Enumeración ETipoDato
Numeric -> Numeric
Moneda -> Moneda
Date -> Date
String -> String
NIF -> NIF
RECUPERACIÓN DE FECHAS EN OBJETO
Debido a las particularidades de la recuperación de datos en VBScript (ADODB) los campos de tabla tipo datetime, smalldatetime o equivalentes, si su hora está grabada como "00:00:00" se devuelve el valor sin la hora. En 5.0 esto no es posible por lo que todos los campos que muestren información que sea únicamente Fecha deberían tener debidamente rellena la propiedad TipoDato y Formato.
Ejemplo:
Tabla "Conta_Ejercicios_Periodos", campo "FechaIni".
Resultado en campo SIN TipoDato y Formato establecidos:
En VBScript recupera los datos de esta forma:
No obstante en C# los recupera así:
Estableciendo en 5.0 el formato correspondiente aparece correctamente: