Logramos montar un ejemplo para poder validar el acceso de los usuarios a la aplicación, podemos recoger la variables desde el navegador y enviarlas a FW para que se haga el proceso de validación mediante una dbf. Aunque ya es funcional, ahora nos gustaría poder enviar información al navegador desde FW, por ejemplo, mostrar un alert desde el navegador, informando que el usuario no esta registrado o la contraseña esta mal. No mediante un msginfo() directo desde fw como esta en el ejemplo.
Espero haberme hecho entender, de antemano gracias
Mirar al final de código
webviewval.prg
- Code: Select all Expand view
#include "FiveWin.ch"
//----------------------------------------------------------------------------//
function Main()
local oWebView := TWebView():New()
local aEstru := { { "user","C",10,0 },;
{ "pass","C",10,0 },;
{ "acti","L", 1,0 } }
public d_user
IF !FILE (".\usuarios.dbf")
FERASE(".\usuarios.dbf")
ENDIF
DbCreate( ".\usuarios.dbf", aEstru )
USE ".\usuarios.dbf" ALIAS d_user NEW EXCLUSIVE
SELECT d_user
dbappend()
d_user->user := "root"
d_user->pass := "123"
d_user->acti := .T.
oWebView:bOnBind = { | cJson, nCalls | validating( cJson, nCalls ) }
oWebView:Bind( "SendToFWH" )
oWebView:Navigate( Html() )
oWebView:SetTitle( "Validando formulario" )
Sleep( 200 )
oWebView:Run()
oWebView:Destroy()
d_user->(DbCloseArea())
return nil
//----------------------------------------------------------------------------//
function Html()
local cHtml
TEXT INTO cHtml
data:text/html,
<html>
<head>
</head>
<body style="background-color:cyan">
<h2>Validando Formulario</h2>
<small><strong>Usuario</strong></small>
<br>
<input type="text" id="txt_user" placeholder="root"></input>
<br>
<small id="sml_user"></small>
<br>
<small><strong>Contraseña</strong></small>
<br>
<input type="password" id="txt_pass" placeholder="123"></input>
<br>
<small id="sml_pass"></small>
<br>
<button onclick="validateInfo();" id="btn_val">Ingresar</button>
</body>
</html>
<script>
function validateInfo(){
var aError = new Array();
if(document.getElementById("txt_pass").value==""){
document.getElementById("sml_pass").innerHTML = "Ingrese contraseña";
aError.push("Error usuario");
}else{
document.getElementById("sml_pass").innerHTML = "";
}
if(document.getElementById("txt_user").value==""){
document.getElementById("sml_user").innerHTML = "Ingrese usuario";
aError.push("Error usuario");
}else{
document.getElementById("sml_user").innerHTML = "";
}
if(aError.length==0){
var cUse = document.getElementById("txt_user").value;
var cPas = document.getElementById("txt_pass").value;
document.getElementById("btn_val").setAttribute("onclick", "SendToFWH( '"+cUse+"','"+cPas+"' );");
document.getElementById("btn_val").click();
document.getElementById("btn_val").setAttribute("onclick", "validateInfo();");
}
}
</script>
ENDTEXT
return cHtml
function validating(cJson, nCalls)
Local hRspn := hash()
hb_jsondecode(cJson ,@hRspn )
SELECT d_user
Dbgotop()
locate for alltrim(d_user->user)=alltrim(hRspn[1]) .AND. alltrim(d_user->pass)=alltrim(hRspn[2])
if found()
msginfo("ingreso correcto")
else
msginfo("usuario o contraseña errados") //LA IDEA ES ENVIAR ESTE ERROR AL NAVEGADOR PARA QUE MUESTRE MEDIANTE UN ALERT
endif
return nil
//----------------------------------------------------------------------------//