jueves, 30 de enero de 2014

Campos MEMO en Navision

En este post vamos a ver un ejemplo de como crear un campo memo y grabar y leer datos en este campo.
Lo primero que hay que hacer, es definir un campo de tipo BLOB y luego, en propiedades seleccionar el SubTipo MEMO.



 
 
Para grabar hariamos lo siguiente:
 
Var Name  DataType Length
Memo  BigText  
Texto  Text  1024
i  integer  
ISLector  InStream  
OSEscritor  OutStream  
 
//ESCRIBIR
Memo.ADDTEXT('Mi texto');
Memo.ADDTEXT('Mas');
...
MiTabla.CuerpoLargo.CREATEOUTSTREAM(OSEscritor);
Memo.WRITE(OSEscritor);
MiTabla.INSERT

//LEER
CLEAR(Memo);
MiTabla.CALCFIELDS(CuerpoLargo);
MiTabla.CuerpoLargo.CREATEINSTREAM(ISLector);
Memo.READ(ISLector);
i := 1;
WHILE i <= Memo.LENGTH DO BEGIN
      Memo.GETSUBTEXT(Texto,i,MAXSTRLEN(Texto));
      i:=i+MAXSTRLEN(Texto);
      MESSAGE('%1',Texto);
END;

jueves, 23 de enero de 2014

Instalar los WEB SERVICES de Navision en un servidor

En este post explicaremos como instalar el servicio de Navision de la capa de Web Services.
Ejecutamos el instalador de la carpeta del CD ServiceTier/Microsoft Dynamics Nav Service.msi
y seguimos los pasos.

Una vez instalado, en los 2 servicios de windows creados poner un usuario y contraseña que tenga permisos y roles en navision. Por lo que ponemos un usuario que sea super.

Hay que tener en cuenta,para los que vais a acceder desde php, que por defecto viene la autenticación NTLM desactivada. Es necesario que este activada para acceder con php.
Para activarla, buscamos el archivo CustomSeting.config que suele estar en
C:\Program Files (x86)\Microsoft Dynamics NAV\60\Service\CustomSeting.config y en la entrada <add key="WebServicesUseNTLMAuthentication" value="false"></add> le ponemos true.

jueves, 16 de enero de 2014

Abrir cliente de Navision desde Reporting Services

Crear un link en Reporting Services que nos abra nuestro cliente de navision en una pantalla determinada con unos filtros definidos se hace de la siguiente manera:
  1. En reporting, seleccionamos las propiedades del elemento que va a tener incrustado el link. 
  2.  
  3. En la direccion URL ponemos el link de la siguiente manera ="mi_link"
     
El link se escribe de la siguiente manera:
navision://client/run?
servername=MI_NOMBRE_SERVIDOR
&
database=MI_BASE_DE_DATOS
&
company=MI_EMPRESA
&
target=Form NUMERO_DE_FORM
&
view=SORTING(Field1)
WHERE(Field41=CONST(Rojo),
      Field40=CONST(Alto))
&
position=
&
servertype=MSSQL

La definición de los campos se hace poniendo Field+id del campo.
Si el cliente está abierto, abre un formulario nuevo con nuestra petición. Si no esta abierto, abre el cliente clásico y después el formulario deseado.

jueves, 9 de enero de 2014

Incrustar imagenes en un correo HTML

Se pueden mandar correos por smtp en navision utilizando la codeunit SMTP Mail y el objeto Automation 'Microsoft Navision Mail'.SmtpMessage que viene con la instalacion del navision clásico.
El cuerpo de los correos se puede mandar en html indicandolo en una de las propiedades que tiene el objeto. Si queremos enviar imágenes incrustadas dentro del mensaje en esta web tenemos la
explicacion de los requisitos necesarios para que nuestra imagen este bien formada.

Con esta otra web que convierte imagenes a base64, podemos convertir cualquiera de nuestras imágenes a texto html necesario.
Si agregamos el texto resultante al cuerpo de nuestro mensaje tendremos una imagen incrustada. Pero no vamos a dejar el post aqui, lo que yo propongo, consiste en guardar este resultado en un archivo de texto y leerlo cuando vayamos a utilizarlo para incorporarlo a nuesto correo.Es una de las opciones, tambien se puede guardar en un campo MEMO de la base de datos (Lo explicaremos en un próximo post) o simplemente ponerlo a piñon en una variable de texto.

Las variables:
Name DataType Subtype Length
btResultado BigText    
NombreFichero Text   1024
Fichero File    
ISLector InStream    
CuerpoHTML BigText    
Texto Text   1024
i Integer    

//Abrimos el fichero, lo recorremos y lo guardamos en un BigText
IF EXISTS(NombreFichero) THEN BEGIN
    IF Fichero.OPEN(NombreFichero) THEN BEGIN
       CLEAR(CuerpoHTML);
       Fichero.TEXTMODE := TRUE;
       Fichero.CREATEINSTREAM(ISLector);
       CuerpoHTML.READ(ISLector);
       i := 1;
       WHILE i <= CuerpoHTML.LENGTH DO BEGIN
          CuerpoHTML.GETSUBTEXT(Texto,i,MAXSTRLEN(Texto));
          i:=i+MAXSTRLEN(Texto);
          btResultado.ADDTEXT(Texto);
       END;
    END;
END;

jueves, 2 de enero de 2014

Error al ejecutar un Informe por limitacion de filas en el combobox

Con la actualización de seguridad MS11-100 de Microsoft, se limita el numero máximo de filas del parámetro de tipo combobox de Reporting Services a 1000. Si el parámetro contiene más de 1000 filas da un error la ejcución. Esto se soluciona especificando en los archivos de configuración de Reporting Services el número de registros.
Dentro de la carpeta ReportService y dentro de ReportManager en los archivos web.config hay que añadir lo siguiente:
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="30000" />
<add key="aspnet:MaxJsonDeserializerMembers" value="30000" />
</appSettings>
Todo esto se añade justamente detrás del tag <system.web> y si ya existe el tag <appSettings> ponemos nuestras dos líneas dentro.
Es decir, quedaría así;
</system.web>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="30000" />
<add key="aspnet:MaxJsonDeserializerMembers" value="30000" />
</appSettings>