Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:1.-login:start [2018/09/04 17:49]
ejetoro [Pantalla de login personalizada]
wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:1.-login:start [2023/11/23 13:10] (actual)
ary [Login a Nivel de App]
Línea 2: Línea 2:
 =====LOGIN===== =====LOGIN=====
  
-====Pantalla de login personalizada====+====Pantalla de Login Personalizado APP XOne====
 \\ \\
-En algunos casos, podríamos necesitar personalizar la pantalla habitual de login. \\ 
  
-Lo único que tenemos que hacer es definir una colección con el diseño que queramos para el login. A esta colección hay que ponerle un atributo **login-coll="true"** que es el provoca que dicha colección se convierta en "Pantalla de Login".\\+Debemos definir una colección con el diseño que queramos para el login. A esta colección hay que ponerle un atributo **login-coll="true"** que es el provoca que dicha colección se convierta en "Pantalla de Login".\\
 \\ \\
 +Dentro del Nodo APP, en la colección que hemos definido login-coll="true" se aplican las opciones de las conditions de las .css para diseñar. En caso de que no sean definidas, sale por defecto la pantalla Login XOne.
 +\\
 +\\
 +====Tipos de Login====
 +
 +Los tipos de Login para APP XOne definidos son:
 +
 +\\
 +|<30% 30%>|
 +^ Tipos de Login         ^
 +| Auto Login             |
 +| Login a Nivel de App   |
 +| Login a Nivel de Coll  |
 +\\
 +
 +=== Auto Login ===
 +
 +Para lograr que nuestra APP haga auto login debemos definir en el nodo APP, el atributo "autologon=true" y tiene que existir además en la **tabla gen_usuarios** de la APP, un usuario con **login=admin** y **pass=null**
 +\\
 +<code javascript>
 +<?xml version="1.0" encoding="iso-8859-15" standalone="yes"?>
 +<xml>   
 +    <app    
 +        prefix="gen"
 +        load-wait="false"
 +        version="16.02.2023.2030"
 +        sql-debug="true"
 +        debug="true"
 +        show-wait-dialog="false"
 +        default-language="javascript"   
 +        resolution-height="1280"
 +        resolution-width="720"
 +        companycolor="#FFFFFF"
 +        entry-point="Menu"
 +        use-honeywell-scanner-integration="true"
 +        orientation="portrait"
 +        autologon="true"   
 +        screen-orientation="portrait">
 +        
 +        <connection prefix="" name="Info_ReplicaFiles" connstring="Provider=Xone Remote Provider;Data Source=local;ProgID=com.xone.db.impl.replicafiles.RplFilesConnection;Timeout=60" />
 +        <connection name="json" datemask="ymd" connstring="Provider=Xone Remote Provider;Data Source=http://xoneisp.com/XOneJSONAllbyXOne/default.aspx;ProgID=com.xone.db.json.JSONConnection;Timeout=60;Security Level=0" />
 +        <connection name="ContentProviderConnection" connstring="Provider=Xone Remote Provider;Data Source=content://com.xone.android.framework.dataprovider;ProgID=cgscontent.provider;Debug=true" />
 +        
 +        <include file="dnie.js" language="javascript" encoding="UTF-8" />
 +        <include file="nfc.js" language="javascript" encoding="UTF-8" />
 +        <include file="funciones_chat.js" language="javascript" encoding="UTF-8" />
 +        <style url="basico_chat.css" encoding="UTF-8" />
 +        <style url="basico.css" encoding="UTF-8" />
 +      
 +    </code>    
 +=== Login a Nivel de App ===
 +\\
 +Este método es el que tiene por defecto las App XOne, en este caso el atributo autologon="false" en el nodo APP de la aplicación, aunque sino se detalla por defecto tiene ese valor.\\
 +Se crea una colección de Login donde se define acciones para comprobación de usuarios y contraseñas
 +\\
 +Ejemplo:
 +\\
 +\\
 +<code javascript>
 +<coll name="ContentLogin" title="Login" sql="select t1.ID     from ##PREF##usuarios t1" objname="usuarios" updateobj="" progid="ASData.CASBasicDataObj" special="true" filter="" sort="" login-coll="false" notab="true" bgcolor="#55000000">
 +      <group name="General" id="1">
 +        <prop name="ID" type="N" visible="0" />
 +        <frame name="mainFrame" width="100%" height="100%" align="center">
 +          <frame name="secondaryFrame" width="90%" height="50%" align="center|top" bgcolor="#0D406B,#0F4B7D,#0D406B">
 +            <prop name="MAP_LOGIN_IMG" type="IMG" width="20%" height="25%" labelwidth="0" path="##APP##\icons\logo.png" locked="true" bgcolor="#FF0000" lmargin="2%" tmargin="18%" />
 +            <frame name="propFrame" width="60%" height="50%" align="left|top" newline="false" lmargin="6%" tmargin="3%">
 +              <prop name="MAP_USERNAME_LABEL" type="TL" caption="Nombre de Usuario" class="loginProp" />
 +              <prop name="MAP_USERNAME" type="T" class="loginProp" />
 +              <prop name="MAP_PASSWORD_LABEL" type="TL" caption="Contraseña" class="loginProp" />
 +              <prop name="MAP_PASSWORD" type="X" class="loginProp" />
 +            </frame>
 +            <prop name="OK" type="B" title="Entrar" class="loginButton" method="ExecuteNode(entrar)" />
 +            <prop name="CANCEL" type="B" title="Salir" newline="false" lmargin="10%" class="loginButton" method="ExecuteNode(salir)" />
 +            <prop name="MAP_VERSION" type="TL" caption="Versión ##VERSION##" class="loginProp" align="center" tmargin="8%" fontsize="4" />
 +          </frame>
 +        </frame>
 +      </group>
 +      <entrar>
 +        <action name="runscript">
 +          <script language="javascript">
 + var ObjB,st_erraut,CollB,CollC,ObjC;
 + st_erraut="";
 + var CollB = appData.getCollection("Usuarios");
 + CollB.setFilter("LOGIN='" + self.MAP_USERNAME.toString() + "'");
 + CollB.startBrowse();
 + var ObjB = CollB.getCurrentItem();
 + if( ObjB === null || ObjB == "undefined"){
 + st_erraut = "Nombre de usuario o password incorrecto";
 + }
 + ObjB = null;
 + CollB.endBrowse();
 + CollB.clear();
 + CollB = null;
 + // Si todo OK, intentamos el logueo
 + if( st_erraut == ""){
 + self.setVariables("##LOGIN_USERCOLL##","Usuarios");
 + self.setVariables("##LOGIN_NEWUSER##","LOGIN," + self.MAP_USERNAME);
 + self.setVariables("##LOGIN_NEWPASS##","PWD," + self.MAP_PASSWORD);
 + self.setVariables("##LOGIN_NEWNOUSERIN##",0);
 + appData.failWithMessage(-11888,"##LOGIN_START##");
 + }else{
 + appData.failWithMessage(-8100,st_erraut);
 + }
 + </script>
 +        </action>
 +      </entrar>
 +      <salir>
 +        <action name="runscript">
 +          <script language="javascript">
 +  appdata.failWithMessage(-11888,"##EXITAPP##");
 + </script>
 +        </action>
 +      </salir>
 +    </coll>
 + </code>   
 +
 +
 +=== Login a Nivel de Coll ===
 +
 +
 +Al definirse una colección con atributo login-coll="true", pasa a ser la colección de Logueo.
  
-=== Ejemplo Fichero login.xml ===+Ejemplo Fichero login.xml
  
 <code xml> <code xml>
Línea 74: Línea 194:
 </code> </code>
 \\ \\
- 
-Fichero código.**vbs** que se incluye en la colección **Empresas**.\\ 
-\\ 
- 
-<code vb> 
-function login() 
- Dim st_msg,ObjB,st_erraut,CollB,CollC,ObjC 
- st_msg="" 
- 'Forzar al usuario a introducir nombre de usuario y contraseña 
- if This("MAP_USUARIO")="" or This("MAP_PWD")="" then 
- st_msg="Introduzca nombre de usuario y clave" 
- end if 
- if st_msg <> "" then 
- appdata.failwithmessage -8100,st_msg 
- else 
- st_erraut="" 
- Set CollB=appdata.GetCollection("Usuarios") 
- CollB.filter="LOGIN='"+Cstr(This("MAP_USUARIO")) +"'" 
- CollB.StartBrowse 
- Set ObjB=CollB.CurrentItem 
- if ObjB is nothing then 
- st_erraut="Nombre de usuario o password incorrecto" 
- end if 
- Set ObjB=nothing 
- CollB.EndBrowse 
- CollB.Clear 
- Set CollB=nothing 
- 'Si todo OK, intentamos el logueo 
- if st_erraut="" then 
- This.Variables("##LOGIN_USERCOLL##")="Usuarios" 
- This.Variables("##LOGIN_NEWUSER##")="LOGIN,"+This("MAP_USUARIO") 
- This.Variables("##LOGIN_NEWPASS##")="PWD,"+This("MAP_PWD") 
- This.Variables("##LOGIN_NEWNOUSERIN##")=0 
- appdata.failwithmessage -11888,"##LOGIN_START##" 
- else 
- appdata.failwithmessage -8100,st_erraut 
- end if 
- end if 
-end function 
-</code>