miércoles, 21 de agosto de 2013

Imprimir archivos con Navision

Como habiamos comentado en un post anterior, vamos a explicar como imprimir archivos de una manera rápida y sencilla desde Navision.
En post previos habiamos visto como descargar un informe desde Reporting Services y guardarlo en PDF. Ahora en este post vamos a coger un fichero PDF e imprimirlo.
Para eso utilizaremos el SHELL de windows. Lo que vamos a hace es simular lo que hace el boton derecho del raton sobre un fichero pdf

Cuando se desplegan las opciones tenemos la posibilidad de imprimir. Desde C/AL vamos a hacer esto mismo:

NameDataTypeSubtype
objShellAutomation'Microsoft Shell Controls And Automation'.Shell
objFolderAutomation'Microsoft Shell Controls And Automation'.Folder
objFolderItemsAutomation'Microsoft Shell Controls And Automation'.FolderItems
objFolderItemAutomation'Microsoft Shell Controls And Automation'.FolderItem
objVerbsAutomation'Microsoft Shell Controls And Automation'.FolderItemVerbs
objVerbAutomation'Microsoft Shell Controls And Automation'.FolderItemVerb
iInteger
 
//Funcion que imprime un archivo pasado de una carpeta especifica
funcion imprimirarchivo(txtCarpeta text 1024,txtArchivo text 1024)
{
//Creamos el objeto SHELL y todos los relacionados para obtener el menu contextual
CREATE(objShell);
objFolder          := objShell.NameSpace(DELCHR(txtCarpeta,'>','\'));
objFolderItems := objFolder.Items;
objFolderItem   := objFolderItems.Item(txtArchivo);
objVerbs           := objFolderItem.Verbs;
i  
                       := -1;
//Recorremos las opciones de menu para encontrar el que pone IMPRIMIR
REPEAT
   i := i+1;
   IF (i < objVerbs.Count) THEN BEGIN
      objVerb := objVerbs.Item(i);
   END;
UNTIL (ControlImprimir(objVerb.Name) = TRUE) OR (i >= objVerbs.Count);

IF (i <= objVerbs.Count) THEN BEGIN
   //Ejecutamos la opción de menú que pqueremos
   objVerb.DoIt;
   EXIT(TRUE);
END ELSE BEGIN
   EXIT(FALSE);
END;

}
//Funcion que nos devuelve si la opcion de menu es la que queremos
funcion imprimirarchivo(txtCarpeta text 1024,txtArchivo text 1024)
{
//Comprobamos que es la de imprimir.
IF STRPOS(UPPERCASE(DELCHR(txtTexto,'=','&')),'IMPRIMIR')>0 THEN BEGIN
   EXIT(TRUE);
END;
EXIT(FALSE);

}

De esta manera podemos imprimir los ficheros deseados. Combinando la descarga del Reporting Services de post anteriores con la impresion de archivos de este post podemos imprimir los informes de reporting directamente sin la intervencion del usuario.

No hay comentarios:

Publicar un comentario