Share |

jueves, octubre 12, 2006

Enviar pulsaciones de teclas

Gracias a sergio por "postear" en el foro de Tips dBits.

Para enviar pulsaciones de teclado desde Navision y mediante código C/AL podemos utilizar este sencillo truco:

Definimos una variable
WShell
de tipo
Automation
y subtipo
'Windows Script Host Object Model'.WshShell

y utilizamos el siguiente codigo para enviar la pulsación de la tecla Enter

IF ISCLEAR(WShell) THEN IF NOT CREATE(WShell) THEN EXIT;
WShell.SendKeys('{ENTER}');


que evidentemente podemos cambiar por la tecla que más nos convenga.

viernes, septiembre 01, 2006

Ordenar un array

Codigo C/AL para ordenar un array.

OnRun()
myText[1] := 'Z8754';
myText[2] := 'M2532';
myText[3] := 'D1992';
myText[4] := 'A9900';

SortArrayOfText(myText);

FOR i := 1 TO ARRAYLEN(myText) DO BEGIN
 IF myText[i] <> '' THEN
  MESSAGE(myText[i]);
END;


SortArrayOfText(VAR ParamArray : ARRAY [999] OF Text[30])
COMPRESSARRAY(ParamArray);
FOR i := 1 TO ARRAYLEN(ParamArray) DO BEGIN
 IF ParamArray[i] = '' THEN
  Finish := i;
END;

REPEAT
 ToExit := TRUE;
 FOR i := 1 TO (Finish - 1) DO BEGIN
  IF ParamArray[i] > ParamArray[i + 1] THEN BEGIN
   Swap(ParamArray[i], ParamArray[i + 1]);
   ToExit := FALSE;
  END;
 END;
 Finish -= 1;
UNTIL ToExit;


Swap(VAR Param1 : Text[30];VAR Param2 : Text[30])
temp := Param2;
Param2 := Param1;
Param1 := temp;

viernes, agosto 18, 2006

Evitar caracteres extraños al importar / exportar

Cuando realizamos importaciones o exportaciones, mediante un dataport por ejemplo, podemos tener el problema de ver caracteres extraños en sustitución a los acentos, dieresis, eñes, u otros signos como el primero, primera, cedilla, etc.

Esto es debido a que el sistema utilizado por Navision y Windows son distintos, es decir, Navision utiliza el sistema ASCII y Windows utiliza el sistema ANSI, más completo. Aunque los caracteres "normales" como A, B, C, etc. utilizan el mismo código, no lo hacen los caracteres especiales mencionados anteriormente. Con lo que la conversión entre uno y otro sistema es errónea.

Para solventar este inconveniente, Microsoft puso a disposición de los usuarios y técnicos una CodeUnit que realiza la conversión entre el sistema ANSI al ASCII y vicevesa. La CodeUnit se puede descargar pulsando aquí.

La CodeUnit ofrece dos métodos. En función de si estamos importando o exportando utilizaremos un método u otro.

Para importar:
NewText := Ansi2Ascii( myText )
Para exportar:
NewText := Ascii2Ansi( myText )

Importante. No utilizar ninguno de estos métodos si lo que se pretende es exportar e importar de nuevo al mismo u otro Navision.

viernes, julio 21, 2006

Abrir formulario por defecto

¿Sabes que desde C/AL se puede abrir el formulario por defecto asociado a una tabla? Eso es, sin necesidad de conocer su ID. Tan solo hay que indicar como parámetro de la función FORM.RUNMODAL(Number [, Record] [, Field]) un cero y la variable del record a tratar.

Por ejemplo:
recItem.SETFILTER("Gen. Prod. Posting Group", 'MERCADERIA');
FORM.RUNMODAL(0,recItem);

Utilizando la variable recItem de tipo record y subtipo Item y pasándola como parámetro lograremos que se abra su formulario asociado con los datos seleccionados.

martes, mayo 30, 2006

Enviar email desde Navision

Para enviar un email desde Navision mediante CAL, utilizaremos el siguiente código:

Hay que definir la variable objApp como Atomation asignándola a 'Microsoft Outlook 11.0 Object Library'.Application y la variable objMail como Atomation asignándola a 'Microsoft Outlook 11.0 Object Library'.MailItem

//Create application
IF ISCLEAR(objApp) THEN
CREATE(objApp);

//Create mail item
objMail := objApp.CreateItem(0);

//Set properties
objMail."To"('joseppages@hotmail.com');
objMail.Subject('Mail from Navision');
objMail.Body('This is a mail send from Navision.');

//Uncomment for display email
//objMail.Display();

//Send mail
objMail.Send();


Evidentemente que a través del objeto objMail tenemos otras propiedades que podemos utilizar a nuestra conveniencia, como CC o Importance.

lunes, marzo 20, 2006

Pasar parámetros entre objetos

En ocasiones es necesario comunicarse entre objetos de Navision con el fin de trasladar información adicional o complementaria al objeto llamado. La opción más utilizada para ello es mediante el pase de parámetros, o sea, desde un objeto ejecutamos a otro pero antes llamamos a una función definida por nosotros.

Por ejemplo: Desde el formulario A ejecutamos el formulario B pasándole algunos parámetros con información adicional.

Primero, en el formulario B deberemos añadir una función con los parámetros a recibir:
SetMisParametros(Param1 : Integer; Param2 : Integer)
MiParametro1 := Param1;
MiParametro2 := Param2;

MiParametro1 y MiParametro2 deben ser definidas como Globales, para que conserven el valor hasta que el objeto sea destruido.

Añadimos código en el evento OnOpenForm del formulario B para comprobar que las variables tienen el valor asignado mediante el pase de parámetros:
Form - OnOpenForm()
MESSAGE('MiParametro1 = %1', miParametro1);
MESSAGE('MiParametro2 = %1', miParametro2);


Segundo, en el formulario A, y antes de ejecutar al formulario B, pasar los parámetros:
control1000000000 - OnPush()
myFormB.SetMisParametros(1, 2); //Pase de parámetros a formulario B
myFormB.RUNMODAL; //Las var. MiParametro1 y MiParametro2 ya tienen valor
CLEAR(myFormB); //Las var. MiParametro1 y MiParametro2 NO tienen valor


Al ejecutar la linea myFormB.RUNMODAL mostrarán 2 mensajes informando del valor de las variables globales del formulario B.

lunes, febrero 27, 2006

Métodos de acceso a Navision

Debido a la persecución de la obtención de la excelencia en la cadena de valor de las organizaciones mediante la optimización de procesos de negocio (BPM), cada vez existe más necesidad de conectar aplicaciones distribuidas, con el fin de construir una infraestructura de software basada en servicios (SOA), y de esta manera, ganar en competitividad, haciendo sus procesos más eficientes, más flexibles y menos costosos y facilitar, así también, la toma de decisiones (BI).

Navision, como parte fundamental de dicha infraestructura (ERP), dispone de distintos métodos para facilitar su integración en los procesos.

Pulse aquí para acceder a un archivo powerpoint que muestra estos métodos.

domingo, febrero 12, 2006

Eliminar sesiones

Gracias a rvalls por "postear" en el foro de Tips dBits.

A partir de la version 4.0 de Microsoft Business Navision, es posible eliminar sesiones, tanto en la BBDD nativa como en SQL Server.
Para ello se accederá a la ventana de "Sesiones de la base de datos", mediante el menu Archivo-Base de datos-Informacion y en la pestaña "Sesiones" se accederá al LookUp de "Sesiones actuales". Simplemente pulsando la tecla F4 se podrá eliminar cualquier sesión, excepto la actual.