Cuando creamos un formulario elegimos que campos son los que el usuario ve en pantalla. Mediante el Ctrl+F8 puede hacer un zoom y ver la totalidad de los campos del registro.
Si nos encontramos en la situación de que tenemos un campo cuyo valor no queremos que el usuario pueda ver, no disponemos de ningún método a priori sencillo en el formulario para evitarlo.
Se pude desactivar para un usuario concreto el Zoom con el rol object - 5330 Tools, Zoom. Pero esto lo desactiva en todas las pantallas y queremos desactivarla en una pantalla concreta.
Para estos casos, lo que se puede hacer es que en la tabla que contiene el campo con la información sensible se añade en el CaptionClass lo siguiente: '99999,2000000002'
Luego se va a la CodeUnit1 y en la función CaptionClassTranslate se añade lo siguiente:
Una opción nueva donde el CASE es el número del captionclass (En este caso el 99999):
CommaPosition := STRPOS(CaptionExpr,',');
IF (CommaPosition > 0) THEN BEGIN
CaptionArea := COPYSTR(CaptionExpr,1,CommaPosition - 1);
CaptionRef := COPYSTR(CaptionExpr,CommaPosition + 1);
CASE CaptionArea OF
'1' : EXIT(DimCaptionClassTranslate(Language,CaptionRef));
'2' : EXIT(VATCaptionClassTranslate(Language,CaptionRef));
'99999' : ERROR('');//<---------Desactivo el ZOOM
END;
END;
EXIT('');
miércoles, 25 de noviembre de 2015
martes, 25 de agosto de 2015
Renderizar Informes desde NAvision mediante XMLHTTP sin cache
Para llamar a un informe de Reporting (O cualquier página web) utilizamos el Automation XMLHTTP.
Capturamos la respuesta y generamos un pdf (En el caso de Reporting). El problema viene que XMLHTTP guarda en cache la petición por lo que puede darse el caso que no renderice el informe con los últimos datos.
Para forzarlo añadimos en la cabecera la opción Cache-Control:no-cache.
Quedaría así:
CREATE(XMLHTTP);
XMLHTTP.open('GET','Mi_Ruta_Informe_Reporting',FALSE);
XMLHTTP.setRequestHeader('Content-Type','application/pdf');
XMLHTTP.setRequestHeader('Cache-Control', 'no-cache');
XMLHTTP.send();
IF (XMLHTTP.status = 200) THEN BEGIN CLEAR(vRespuesta);
vRespuesta := XMLHTTP.responseStream;
isArchivoRecibido := vRespuesta;
F.CREATE('c:\mifichero.pdf');
F.CREATEOUTSTREAM(osEscribeArchivoRecibido);
COPYSTREAM(osEscribeArchivoRecibido,isArchivoRecibido);
F.CLOSE;
END;
CLEAR(XMLHTTP);
Capturamos la respuesta y generamos un pdf (En el caso de Reporting). El problema viene que XMLHTTP guarda en cache la petición por lo que puede darse el caso que no renderice el informe con los últimos datos.
Para forzarlo añadimos en la cabecera la opción Cache-Control:no-cache.
Quedaría así:
Name | DataType | Subtype |
XMLHTTP | Automation | 'Microsoft XML, v3.0'.XMLHTTP |
isArchivoRecibido | InStream | |
osEscribeArchivoRecibido | OutStream | |
vRespuesta | Variant |
CREATE(XMLHTTP);
XMLHTTP.open('GET','Mi_Ruta_Informe_Reporting',FALSE);
XMLHTTP.setRequestHeader('Content-Type','application/pdf');
XMLHTTP.setRequestHeader('Cache-Control', 'no-cache');
XMLHTTP.send();
IF (XMLHTTP.status = 200) THEN BEGIN CLEAR(vRespuesta);
vRespuesta := XMLHTTP.responseStream;
isArchivoRecibido := vRespuesta;
F.CREATE('c:\mifichero.pdf');
F.CREATEOUTSTREAM(osEscribeArchivoRecibido);
COPYSTREAM(osEscribeArchivoRecibido,isArchivoRecibido);
F.CLOSE;
END;
CLEAR(XMLHTTP);
martes, 14 de abril de 2015
Quitar tabulaciones, intros y demás de las casillas de texto en Navision
Cuando copiamos una casilla de excell que contiene un valor para pegarla en una casilla de Navision nos añade el retorno de carro que debemos quitar a mano (Si nos damos cuenta).
Se puede poner un pequeño código para que estos caracteres los elimine de manera automática. PAra eso hay que hacer:
CodeUnit 1 dentro de la función MakeText poner nada más comenzar lo siguiente:
myChr = Char;
//Eliminados caracteres raros del Excel en todas las ediciones.
myChr:=13; //CR
Text := DELCHR(Text,'=',FORMAT(myChr));
myChr:=10; //LF
Text := DELCHR(Text,'=',FORMAT(myChr));
myChr:=9; //TAB
Text := CONVERTSTR(Text,FORMAT(myChr),' ');
myChr:=255; //???
Text := CONVERTSTR(Text,FORMAT(myChr),' ');
Se puede poner un pequeño código para que estos caracteres los elimine de manera automática. PAra eso hay que hacer:
CodeUnit 1 dentro de la función MakeText poner nada más comenzar lo siguiente:
myChr = Char;
//Eliminados caracteres raros del Excel en todas las ediciones.
myChr:=13; //CR
Text := DELCHR(Text,'=',FORMAT(myChr));
myChr:=10; //LF
Text := DELCHR(Text,'=',FORMAT(myChr));
myChr:=9; //TAB
Text := CONVERTSTR(Text,FORMAT(myChr),' ');
myChr:=255; //???
Text := CONVERTSTR(Text,FORMAT(myChr),' ');
jueves, 19 de febrero de 2015
Selector de Carpetas en Navision
Este post lo he copiado de mibuso pero tenia que ponerlo aquí para que veáis que sencillo es:
Name DataType Subtype Length
ShellControl Automation 'Microsoft Shell Controls And Automation'.Shell
Folder Automation 'Microsoft Shell Controls And Automation'.Folder3
FolderItems Automation 'Microsoft Shell Controls And Automation'.FolderItems3
FolderItem Automation 'Microsoft Shell Controls And Automation'.FolderItem2
IF ISCLEAR(ShellControl) THEN
CREATE(ShellControl);
Folder := ShellControl.BrowseForFolder(0,'',0);
IF NOT ISCLEAR( Folder ) THEN BEGIN
FolderItems := Folder.Items();
FolderItem := FolderItems.Item;
EXIT(FORMAT(FolderItem.Path));
END;
CLEAR( ShellControl );
CLEAR( Folder );
CLEAR( FolderItems );
CLEAR( FolderItem );
EXIT('');
Name DataType Subtype Length
ShellControl Automation 'Microsoft Shell Controls And Automation'.Shell
Folder Automation 'Microsoft Shell Controls And Automation'.Folder3
FolderItems Automation 'Microsoft Shell Controls And Automation'.FolderItems3
FolderItem Automation 'Microsoft Shell Controls And Automation'.FolderItem2
IF ISCLEAR(ShellControl) THEN
CREATE(ShellControl);
Folder := ShellControl.BrowseForFolder(0,'',0);
IF NOT ISCLEAR( Folder ) THEN BEGIN
FolderItems := Folder.Items();
FolderItem := FolderItems.Item;
EXIT(FORMAT(FolderItem.Path));
END;
CLEAR( ShellControl );
CLEAR( Folder );
CLEAR( FolderItems );
CLEAR( FolderItem );
EXIT('');
miércoles, 18 de febrero de 2015
Manipular Ficheros físicos mediante Web Services
No se si alguna vez os ha surgido la necesidad de copiar o mover ficheros desde el cliente por roles o a través de Web Services.
Desde el cliente clásico funciona sin problemas, pero a la hora de hacerlo funcionar por Web Services surge el quebradero de cabeza.
Hay por ahí teorías que dan una posible solución que tiene que ver con que las funciones COPY,EXISTS,ERASE,etc.... no funcionan en la capa de WS.
Pero este no es el problema, el problema es que tenemos tres niveles en tres equipos. Es decir: que en nuestra arquitectura tenemos el cliente del Web Service (Capa 1), El Web Service en el servidor (Capa 2) y el servidor donde están los ficheros (Capa 3).
No se si habréis podido comprobar que si los ficheros a manipular están en el mismo servidor que donde tenemos instalada la capa de Web Service el problema desaparece. es más, es una de las recomendaciones que hace Microsoft para solucionar el problema.
La solución correcta consiste en Delegar servicios. Como ya he comentado, Microsoft recomienda que los archivos estén en el mismo servidor que la capa de Web Service para ahorrarte la enrevesada configuración de la Delegación.
Desde el cliente clásico funciona sin problemas, pero a la hora de hacerlo funcionar por Web Services surge el quebradero de cabeza.
Hay por ahí teorías que dan una posible solución que tiene que ver con que las funciones COPY,EXISTS,ERASE,etc.... no funcionan en la capa de WS.
Pero este no es el problema, el problema es que tenemos tres niveles en tres equipos. Es decir: que en nuestra arquitectura tenemos el cliente del Web Service (Capa 1), El Web Service en el servidor (Capa 2) y el servidor donde están los ficheros (Capa 3).
No se si habréis podido comprobar que si los ficheros a manipular están en el mismo servidor que donde tenemos instalada la capa de Web Service el problema desaparece. es más, es una de las recomendaciones que hace Microsoft para solucionar el problema.
La solución correcta consiste en Delegar servicios. Como ya he comentado, Microsoft recomienda que los archivos estén en el mismo servidor que la capa de Web Service para ahorrarte la enrevesada configuración de la Delegación.
Suscribirse a:
Entradas (Atom)