martes, 16 de enero de 2024

Como agregar entrada al web.config desde Genexus al hacer el deploy


Al agregar o modificar un elemento del web.config en la carpeta web del modelo (RutaDeMiModelo\CSharpModel\Web\web.config) al hacer el deploy la configuracion por defecto de genexus, no considera lo que se ponga adicionalmente en el web.config

si queremos hacer un deploy y que el web.config tenga una personalizacion una forma es modificando los archivos 

  1. C:\Program Files (x86)\GeneXus\GeneXus17\Deploy\CSharp\GeneXus.csharp.Server.targets 
  2. C:\Program Files (x86)\GeneXus\GeneXus17\ApplicationServers\Templates\CSharpWeb\IIS_Base.stg



Vamos a modificar el archivo IIS_Base.stg agregando

 
location()::=<<
/*otro codigo existente */
$if (MiNuevaPropiedadSupport)$
	$locationNueva()$
$endif$
>>

locationNueva()::=<<
<location path="miruta">
 <system.webServer>
  <httpErrors errorMode="Detailed" />
 </system.webServer>
</location>
>>

Vamos a crear un arhivo MisPropiedades.prop y lo vamos a guardar en donde mas les sea de su agrado, en este archivo vamos a definir nuestras propiedades



<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <PropertyGroup>
  <!-- Agregar nuevas propiedades o sobrescribir propiedades existentes -->
  <MiNuevaPropiedadSupport>true</MiNuevaPropiedadSupport>		
 </PropertyGroup>
</Project>

Ahora vamos a modificar el archivo GeneXus.csharp.Server.targets

En la parte superior del archivo vamos agregar el Import a nuestro archivo MisPropiedades.props


<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
 <Import Project="$(GX_PROGRAM_DIR)\Packages\Gxpm\Platforms\GeneXus.CSharp.WorkflowEngine.targets"/>
 <Import Project="$(GX_PROGRAM_DIR)\Packages\Gxpm\Platforms\GeneXus.CSharp.WorkflowClient.targets"/>
 <Import Project="$(GX_PROGRAM_DIR)\Library\GAM\GAM_Backend\Net\GAM_Backend.targets" Condition="'$(IncludeGAMBackend)' == 'true'"/>
		
 <Import Project="MiRuta\MisPropiedades.props" Condition="Exists('MiRuta\MisPropiedades.props')" />
    //... Mas codigo existente

por ultimo vamos agregar codigo en el elemento <GenerateFromTemplate


<GenerateFromTemplate
 TemplateGroupFile="$(WebConfigTemplate)"
 TemplateName="generateConfig"
 Properties="
   DisplayName=$(ProjectName);
   Namespace=$(Namespace);
   IntegratedSecurity=$(IntegratedSecurity);
   RestEnabled=$(RestSupport);
   APIRestSupport=$(APIRestSupport);
   SDEnabled=$(SDSupport);
   HttpsEnabled=$(Https);
   IncludeQueryViewer=$(IncludeQueryViewer);
   WebNotificationSupport=$(WebNotificationSupport);
   HasWorkflow=$(HasWorkflow);
   HasBC=$(HasBCs);
   HasAPIs=$(HasAPIs);
   ChatbotSupport=$(ChatbotSupport);
   DeployOfflineReplicator=$(DeployOfflineReplicator);
   MiNuevaPropiedadSupport = $(MiNuevaPropiedadSupport);"

Ahora al hacer un Deploy va verificar la propiead y va agregar el fragmento que necesitamos en el web.config

Referencias:

StringTemplate

domingo, 9 de agosto de 2020

Redirect https con JavaScript

 

Hay varias formas de redirigir una pagina

aqui les dejo una forma para redirigir a una pagina

<html>

<head>

<body>


<!-- codigo que tu necesites --> 


<script type="text/javascript">  

function JSRedirectOnload() {

    if (window.location.protocol != "https") {  

    window.location = "https://" + window.location.hostname + '/wwpbaseobjects.home.aspx';

  }

}

if (window.addEventListener)

    window.addEventListener("load", JSRedirectOnload, false);

else if (window.attachEvent)

    window.attachEvent("onload", JSRedirectOnload);

else window.onload = JSRedirectOnload;

</script>

</body>

</html>


Referencias:

https://www.w3schools.com/js/js_window_location.asp

viernes, 28 de febrero de 2020

Como cambiar tu session timeout en IIS

En el IIS, seleccione uno de los sitios, seleccione la característica "ASP" y abra las propiedades



¡Ahora solo cambia el valor de propiedad "TimeOut", a el tiempo que prefieras!

por ultimo, verifique en Application Pool's la propiedad "idle timeout" con tu "session timeout"


jueves, 15 de noviembre de 2018

MaxWebConfigFileSizeInKB e IIS 10

Cuando el archivo web.config supera el tamaño de los 250kb el IIS genera el error
"No se puede leer el archivo de configuración porque supera el tamaño máximo de archivo iis"
"IIS - Cannot read configuration file because it exceeds the maximum file size"

para solucionarlo hay que agregar en regedit las siguientes entradas


Agregar la clave "Configuration"
Agregar el valor DWORD "MaxWebConfigFileSizeInKB"

En las siguientes ubicaciones:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\InetStp

domingo, 7 de mayo de 2017

Como Instalar Url rewrite en windows 10 IIS 10



Al intentar instalar Url Url ReWrite 2.0 en windows 10 IIS 10 no te deja instalarlo.

Para poder instalar el Url ReWrite 2.0 deberas seguir los siguientes pasos
  1. Abrir Regedit y ubicarse en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp
  2. Editar la entrada "MajorVersion" y seleccionar la opcion "DECIMAL" despues poner el valor 9
  3. Pulsar F5 mientras estas en Regedit
  4. Ahora instala el modulo Url ReWrite 2.0
  5. Regresar el valor de "MajorVersion" al valor 10 "DECIMAL" 
  6. Pulsar F5 mientras estas en Regedit
  7. Cerrar el Regedit

martes, 31 de enero de 2017

Cómo establecer el maxAllowedContentLength a 500 MB


El límite de requests en .Net se puede configurar en dos propiedades en conjunto:
1. Web.Config/system.web/httpRuntime/maxRequestLength
Unidad de medida: kilobytes
Default value 4096 KB (4 MB)
Max. value 2147483647 KB (2 TB)

2. Web.Config/system.webServer/security/requestFiltering/maxAllowedContentLength (en bytes)
Unidad de medida: bytes
Default value 30000000 b (28.6 MB)
Max. value 4294967295 bytes (4 TB)


<system.web>
     <!-- El tamañano default es 4096 kilobytes (4 MB). Maximo Valor es 2147483647 KB (2 TB)-->
     <!-- 100 MB en  kilobytes -->
     <httpRuntime maxRequestLength="102400" />
   </system.web>
   <system.webServer>
     <security>
       <requestFiltering>        
         <!--El tamañano default es 30000000 bytes (28.6 MB). Maximo Valor es 4294967295 bytes (4 GB)-->
         <!-- 100 MB en bytes -->
         <requestLimits maxAllowedContentLength="104857600" />
       </requestFiltering>
     </security>
   </system.webServer>

Referencias:
https://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits

jueves, 18 de abril de 2013

Como hacer un menu usando el GAM


Se parte de que se tiene activado el GAM en su propiedad Enable Integrated Security = True
Y la propiedad Default Integrated Security = Authorization
Al tener esta ultima propiedad en autorización el gam se encarga de agregar los objetos utilizados en Genexus a los permisos de la aplicación
La forma en que los agrega es poniéndoles _NombreDel Evento
Ejemplo.- si tengo una transacción Menu  agregara los siguientes permisos
menu_Execute (significa que puede ejecutar el objeto)
menu_Insert (permite insertar)
menu_Update (permite modificar)
menu_Delete (permite eliminar)
menu_FullControl  (Permite agregar todos los permisos anteriores)


Se cuenta con tres pasos para tener los permisos en usuario
a) Primero debe existir el permiso en la aplicación
                en este punto en el caso de los menus principales que no llaman a un objeto deben de darse de alta en los permisos de la aplicación usando las opciones de agregar permisos a la aplicación.
b) Se debe agregar los permiso a los roles
c) Por último se debe agregar los roles al usuario

ahora procederemos a crear una transacción Menu con los campos necesarios para guardar los datos de las opciones que componen al menú como se muestra en la figura siguiente


MenuIsHeader.- se utiliza para indicar que es un menú principal pero que no va a llamar a ningún objeto para ejecutarse.
trim(MenuObject)+'_Execute' IF not MenuObject.isempty();
trim(MenuName)+'_Execute' IF  MenuObject.isempty();
MenuObjectNull.- se utiliza para indicar va llamar a un objeto o no
MenuObject IF MenuIsHeader=False
Se debe crear un subtipo con los siguientes atributos
MenuParentId
MenuParentName




De esta forma tenemos un menú recursivo
Hasta aquí ya tenemos la transacción menú para dar de alta nuestras opciones de menú
Ahora en la master page se debe agregar el user control de su preferencia para mostrar el menú
En este ejemplo usaremos  SmoothNavMenu


Agregamos el user control SmoothNavMenu a nuestra master page como se muestra en la figura

 en la pestaña de eventos de nuestra master page se debe agregar el código que muestra la imagen, se esta llamando en el evento start el data provider que devuelve la SDT con los datos del menú que se debe mostrar.

Ahora en el data provider se debe llenar de la siguiente forma:
order MenuOrder
where MenuParentId = &MenuParentId or (&MenuParentId=0 and MenuParentId.IsNull() )
Where GAMRepository.CheckPermission(MenuGAMObject)
{
      Id = str(MenuId)
      Title = MenuName
      Description = MenuDescription

      //Link = iif(MenuObjectNull.IsEmpty(),!"#",MenuObject+'.aspx') //generador C#
      Link = iif(MenuObjectNull.IsEmpty(),!"#",MenuObject) //generar java
     
      Items = SmoothNavMenuDP.udp(MenuId)
}



La siguiente instrucción GAMRepository.CheckPermission(MenuGAMObject)
Nos devuelve si tiene permisos el usuario autentificado al objeto enviado como parámetro a la funcion



Asi es como debe aparecer el menú del ejemplo

si usas otro user control solo debes hacer algunos cambios para llenar la SDT del menu, el principio de este ejemplo es el mismo para cualquier User Control de Menu

si quieres el ejemplo completo en xpz comenta esta entrada y dale en ++Google
Espero les sea de utilidad