Tasting the mix of SAP, WML and SAP on SDN
Saben ustedes lo que es el WML? Muy simple...WML significa Wireless Markup Language y es utilizado para desarrollar aplicaciones móbiles.
Hace algunas semanas, tuve que hacer un pequeño juego utilizando JavaME (Ya postearé sobre eso)...Por lo cual, obviamente pensé en hacer un emulador de SE16 utilizando el conector SAPJCo, JavaME y SAP...Por lástima, algunas librerías me siguen mostrando errores...No importa...Dado mi "error", decidí retomar un proyecto que tenía archivado desde hace tiempo...Utilizar PHP, WML y SAP para hacer una emulación de SE16...Me tomó algunas horas hacer esto...
index.php
<?php
session_start();
$_SESSION = array();
session_destroy();
header("Content-type: text/vnd.wap.wml");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
echo ("<?xml version='1.0'?>");
?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="index" title="SE16" ordered="false">
<p>
Server:<input name="Server" size="5"/><br/>
System:<input name="Sysnum" size="3"/><br/>
Client:<input name="Client" size="3"/><br/>
User:<input name="User" size="6"/><br/>
Password:<input name="Password" size="7" type="password"/><br/>
</p>
<do type="accept" label="OK" optional="false">
<go href="process.php" method="post">
<postfield name="Server" value="$Server"/>
<postfield name="Sysnum" value="$Sysnum"/>
<postfield name="Client" value="$Client"/>
<postfield name="User" value="$User"/>
<postfield name="Password" value="$Password"/>
</go>
</do>
</card>
</wml>
Login_Class.php
<?php
Class Login
{
var $Login, $rfc;
function Log_In($Server,$Sysnum,$Client,$User,$Pass)
{
$this->Login = array ("ASHOST"=>$Server,
"SYSNR"=>$Sysnum,
"CLIENT"=>$Client,
"USER"=>$User,
"PASSWD"=>$Pass,
"CODEPAGE"=>"1404");
return $this->Login;
}
function RFC_Connection($Login)
{
$this->rfc = saprfc_open($Login);
IF ( !$this->rfc )
{
ECHO "The connection fails with the following error:".saprfc_error();
EXIT;
}
else
{
return $this->rfc;
}
}
}
?>
process.php
<?php
session_start();
header("Content-type: text/vnd.wap.wml");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
echo ("<?xml version='1.0'?>");
?>
<?php
require_once("Login_Class.php");
?>
<?php
if(!isset($_SESSION["Server"]))
{
$_SESSION["Server"] = $_POST["Server"];
$_SESSION["Sysnum"] = $_POST["Sysnum"];
$_SESSION["Client"] = $_POST["Client"];
$_SESSION["User"] = $_POST["User"];
$_SESSION["Pass"] = $_POST["Password"];
}
$Login = new Login();
$Log_Me = $Login->Log_In($_SESSION["Server"],$_SESSION["Sysnum"],$_SESSION["Client"],
$_SESSION["User"],$_SESSION["Pass"]);
$RFC_Me = $Login->RFC_Connection($Log_Me);
?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="choose" title="SE16" ordered="false">
<p>
Table:<input name="Table" size="20"/><br/>
</p>
<do type="accept" label="OK" optional="false">
<go href="Show_Table.php" method="post">
<postfield name="Table" value="$Table"/>
</go>
</do>
</card>
</wml>
Show_Table.php
<?php
session_start();
require_once("SE16.php");
require_once("Login_CLass.php");
if(isset($_POST["Table"]))
{
$Table = $_POST["Table"];
$Login = new Login();
$Log_Me = $Login->Log_In($_SESSION["Server"],$_SESSION["Sysnum"],$_SESSION["Client"],
$_SESSION["User"],$_SESSION["Pass"]);
$RFC_Me = $Login->RFC_Connection($Log_Me);
$SE16 = new SE16();
$SE16->Show_Table($Table,$RFC_Me);
}
?>
SE16.php
<?php
header("Content-type: text/vnd.wap.wml");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
echo ("<?xml version='1.0'?>");
?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<?php
Class SE16
{
var $fce;
function Show_Table($Table,$RFC_Me)
{
$this->fce = saprfc_function_discover($RFC_Me, "RFC_READ_TABLE");
IF (! $this->fce )
{
ECHO "The function module had failed.";
EXIT;
}
$Table = STRTOUPPER($Table);
saprfc_import ($this->fce,"QUERY_TABLE",$Table);
saprfc_import ($this->fce,"DELIMITER","/");
saprfc_table_init ($this->fce,"OPTIONS");
saprfc_table_init ($this->fce,"FIELDS");
saprfc_table_init ($this->fce,"DATA");
$rfc_rc = "";
$rfc_rc = saprfc_call_and_receive ($this->fce);
if ($rfc_rc != SAPRFC_OK)
{
if ($rfc == SAPRFC_EXCEPTION )
echo ("Exception raised: ".saprfc_exception($this->fce));
else
echo ("Call error: ".saprfc_error($this->fce));
exit;
}
$data_row = saprfc_table_rows ($this->fce,"DATA");
$field_row = saprfc_table_rows ($this->fce,"FIELDS");
ECHO "<wml>";
ECHO "<card id='SE16' title='' ordered='false'>";
ECHO "<p>";
ECHO "<table columns='$field_row' title='$Table'>";
ECHO "<tr>";
for($i=1; $i<=$field_row ; $i++)
{
$FIELDS = saprfc_table_read ($this->fce,"FIELDS",$i);
ECHO "<td><b>";
ECHO $FIELDS['FIELDNAME'];
ECHO "</b></td>";
}
ECHO "</tr>";
for($i=1; $i<=$data_row ; $i++)
{
ECHO "<tr>";
$DATA = saprfc_table_read ($this->fce,"DATA",$i);
$TEST = SPLIT("/",$DATA['WA']);
for($j=0; $j<$field_row; $j++)
{
ECHO "<td>";
ECHO $TEST[$j];
ECHO "</td>";
}
ECHO "</tr>";
}
ECHO "</table>";
ECHO "</p>";
ECHO "</card>";
ECHO "</wml>";
}
}
?>
Ahora, podemos ver algunas imágenes...
Inclusive, podemos utilizar el navegador Opera para poder ver mejor el output de la tabla.
Espero que le haya gustado.
Saludos,
Blag.
1 comment:
Hola Alvaro, que problema tuviste con J2ME y JCO??? Quizá te pueda ayudar, espero tu post sobre ese proyecto...
Post a Comment