Bu makalede, PHP ve JavaScript yazılım dillerini kullanarak dinamik olarak dataGrid oluşturarak bir web servisin fonksiyonunu kullanarak grid ten toplu şekilde dönen verileri SoapClient aracılığı ile fonksiyona gönderme işlemini yapacağız.
İlk önce uygulamanın tasarımını oluşturacak olan SPCclienttasarim.php sayfasını aşağıdaki gibi oluşturuyoruz. Kodlamaların açıklamalı şekilde aşağıdaki gibi olacaktır.
JavaScript ve HTML ile Dinamik Tablo Oluşturma
.. / SPCclienttasarim.php Sayfası:
<!DOCTYPE html>
<head>
<title>Gonder</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<SCRIPT language="javascript">
//addRow fonksiyonu: html tablolarından table id'sini paremetre olarak alır, paremetre aldığı tabloya satır ekleme işlemi
function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var colCount = table.rows[0].cells.length;
for(var i=0; i<colCount+14; i++) {
var newcell = row.insertCell(i);
newcell.innerHTML = table.rows[1].cells[i].innerHTML;//tanımlanan satır '<tr>' uzunluğu kadar kolon '<td>' ekleme
switch(newcell.childNodes[0].type) {
case "text":
newcell.childNodes[0].value = "";
break;
case "checkbox":
newcell.childNodes[0].checked = false;
break;
case "select-one":
newcell.childNodes[0].selectedIndex = 0;
break;
}
}
}
//deleteRow fonksiyonu: html tablolarından table id'sini paremetre olarak alır, paremetre aldığı tablodan seçili satırları silme işlemi
function deleteRow(tableID) {
try {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
for(var i=0; i<rowCount; i++) {
var row = table.rows[i];
var chkbox = row.cells[0].childNodes[0];
if(null != chkbox && true == chkbox.checked) {
if(rowCount <= 1) {
alert("Cannot delete all the rows.");
break;
}
table.deleteRow(i);
rowCount--;
i--;
}
}
}catch(e) {
alert(e);
}
}
//CountRows fonksiyonu ile html'de tasarladığımız tabloların satır sayısını döndürebiliriz
function CountRows() {
var totalRowCount = 0;
var rowCount = 0;
var table = document.getElementById("dataTable");
var rows = table.getElementsByTagName("tr")
for (var i = 0; i < rows.length; i++) {
totalRowCount++;
if (rows[i].getElementsByTagName("td").length > 0) {
rowCount++;
}
}
var message = "Total Row Count: " + totalRowCount;
message += "\nRow Count: " + rowCount;
// alert(message);
//Aşağıdaki kod satırı ile JavaScript fonksiyonunun döndürdüğü satır sayısını 'NumRows' değişkeni olarak aynı sayfaya veya PHP kodlarımızın olduğu başka bir .php sayfasına post edebiliriz.
document.getElementById("NumRows").value = totalRowCount;
}
</SCRIPT>
</head>
<body>
<style type="text/css">
table { width:1600px; margin:1px auto; table-layout:fixed; border-collapse:collapse; border: 1px solid #CCC;}
table th { border: 2px solid #CCC; background-color:#D5D9E1; color: #4C5260; font-size: 14px; text-align:center; }
th.chkk { width: 25px }
table td {white-space: nowrap; }
td.chkk { width: 25px }
input[type="text"] {
font-size:0.75em;
color: #6F798E;
padding:0.25em;
box-sizing: border-box;
width:100%;
}
input[type=submit] {
padding:5px 15px;
background:#ccc;
border: 2px solid #CCC;
cursor:pointer;
-webkit-border-radius: 5px;
border-radius: 8px;
color: #6F798E;
}
input[type=button] {
padding:5px 15px;
background:#ccc;
border: 1px solid #CCC;
cursor:pointer;
-webkit-border-radius: 8px;
border-radius: 10px;
color: #6F798E;
}
.button:hover {background-color: #828385; color: #E3ECFF;}
.button:active {
background-color: #061535;
box-shadow: 0 5px #666;
transform: translateY(4px);
}
select {
margin: 0;
padding: 0;
width: 100px;
color: #6F798E;
box-sizing: border-box;
}
</style>
//Aşağıdaki html formunda yapılacak olan işlemler method= POST için değişkenleri normal olarak 'SPCclient.php' sayfasına POST etmek istediğimizi gösteriyoruz.
<form name="form1" method="post" action="SPCclient.php">
//Yukarıda JavaScript'de yazmış olduğumuz satır ekleme ve satır silme fonksiyonlarının buttonların click olayına bağlanması paremetre olarak işlemleri hangi html tabloya uygulamak istiyorsak o tablonun id='dataTable' giriyoruz.
<INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />
<INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />
<br/>
//En dış tablo ..
<table width: 100%; cellspacing="2" cellpadding="2" border="1">
<tr>
<td> </td>
<td><b> idcollect </b></td>
<td><b> idcharacteristic</b></td>
<td><b>idsequencesample</b></td>
<td><b> dtsample </b></td>
<td><b> tmsample </b></td>
<td><b> config </b></td>
<td><b> idmachine </b></td>
<td><b> idoperator </b></td>
<td><b> idinspector </b></td>
<td><b> idshift </b></td>
<td><b> idgage </b></td>
<td><b> nmlot </b></td>
<td><b> nmmo </b></td>
<td><b> qtitens </b></td>
<td><b> qtdefectsitem </b></td>
<td><b> qtrejectsitem </b></td>
</tr>
</table>
//DataGrid olarak kullanmak istediğimiz tablo ...
<TABLE id="dataTable" cellspacing="2" cellpadding="2" border="1">
<tr>
<th class="chkk"></th><th colspan="15"></th>
</tr>
<tr>
//html'de checkbox nesnesini oluşturma ..
<td><input type="checkbox" name="chk"/></td>
//html'de dropdown nesnesini oluşturma... ve birden fazla satır eklendiği taktirde aynı değişkene birden fazla değer atamak için aşağıdaki gibi nesnenin değer tutacak olan değişkenini array olarak tanımlıyoruz.
<td>
<select name="idcollect[]">
<option value="33test">33test</option>
<option value="000032test">000032test</option>
<submit>submit</submit>
</select>
</td>
<td>
<select name="idcharacteristic[]">
<option value="OP01"> OP01 </option>
<option value="OP02">OP02</option>
<option value="OP03">OP03</option>
<option value="OP04">OP04</option>
<option value="OP05">OP05</option>
<submit>submit</submit>
</select>
</td>
//her satır eklemede aynı değişkene fazladan bir değer bağlanabilmesi için tabloda tanımlı tüm input ve/veya select nesnelerinin değişkenlerini dizi şeklinde tanımlıyoruz.
<td>
<input type="text" size="13" name='idsequencesample[]'>
</td>
<td>
<input type="text" size="8" name="dtsample[]">
</td>
<td>
<input type="text" size="8" name="tmsample[]">
</td>
<td>
<input type="text" size="2" name="config[]">
</td>
<td>
<input type="text" size="8" name="idmachine[]">
</td>
<td>
<input type="text" size="8" name="idoperator[]">
</td>
<td>
<input type="text" size="8" name="idinspector[]">
</td>
<td>
<input type="text" size="4" name="idshift[]">
</td>
<td>
<input type="text" size="4" name="idgage[]">
</td>
<td>
<input type="text" size="3" name="nmlot[]">
</td>
<td>
<input type="text" size="3" name="nmmo[]">
</td>
<td>
<input type="text" size="4" name="qtitens[]">
</td>
<td>
<input type="text" size="10" name="qtdefectsitem[]">
</td>
<td>
<input type="text" size="9" name="qtrejectsitem[]">
</td>
</tr>
</table>
//JavaScript'de yazdığımız satır sayma fonksiyonunun döndürdüğü NumRows değişkenini form'da tanımlı 'SPCclient.php' sayfasına post etmek için aşağıdaki gibi 'hidden' tipinde nesne tanımlıyoruz.
<input type="hidden" id='NumRows' name='NumRows' value="0">
//Form nesnelerinin değerlerini 'SPCclient.php' sayfasına post etmek için aşağıdaki gibi 'submit' tipinde nesne tanımlıyoruz.
<center> <input type="submit" name="GONDER" value="GONDER" onclick="CountRows();"/> </center>
</form>
</body>
</html>
PHP ile Soap Client Oluşturmak ve HTML Form'dan Post Edilen Değişkenleri Kullanmak
.. / SPCclient.php Sayfası:
<?php
$url = "http://domain/se/ws/spc_ws.php";
//soap web sunucuya bağlanmak için yapılması gereken konfigürasyon aşağıdaki gibidir.
$opts = array('ssl' => array('verify_peer'=>false, 'verify_peer_name'=>false,'allow_self_signed' => true));
$params = array ('cache_wsdl' => WSDL_CACHE_NONE, 'encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_1, 'trace' => true, 'exceptions' => true, "connection_timeout" => 180,
'login' => 'usrname',
'password' => 'psswrd',
'stream_context' => stream_context_create($opts) );
try {
//soap web servise bağlanacak client nesnesinin oluşturulması aşağıdaki gibidir.
$client = new SoapClient ( $url . "?wsdl", $params );
//web servisin barındırdığı tüm fonksiyonları listelemek için kod satırı aşağıdaki gibidir.
//var_dump($client->__getFunctions());
if (isset($_POST['GONDER']))
{//html formun değerlerini post edecek buttona basıldığında gerçekleşmesi beklenen işlemler aşağıdaki gibidir.
//JavaScript'de yazdığımız tablonun satır sayısını döndüren fonksiyondan dönen değerleri aşağıdaki gibi karşılıyoruz.
$NumRows = $_REQUEST['NumRows']-1;
echo "GIRILEN VERILER";
echo "<br>";
echo "<br>";
//tablonun satır sayısı kadar dönecek olan döngüde yapılan işlemler..
for($i=0; $i < $NumRows; $i++)
{
//web serviste tanımlı fonksiyona client ile göndereceğimiz paremetrelerin tanımlanması aşağıdaki gibidir.
$idcollect="";
$idcharacteristic="";
$idsequencesample="";
$dtsample="";
$tmsample="";
$config="";
$idmachine="";
$idoperator="";
$idinspector="";
$idshift="";
$idgage="";
$nmlot="";
$nmmo="";
$qtitens="";
$qtdefectsitem = "";
$qtrejectsitem="";
//her döngüde post ile html formdan dönen değerlerin değişkenlere bağlanması aşağıdaki gibidir.
$idcollect = $_POST['idcollect'];
$idcharacteristic = $_POST['idcharacteristic'];
if (count( array_filter($_POST['idsequencesample'])) ==0)
{
echo "<script type='text/jscript'>alert('Orneklem Sirasi Bos Birakilamaz. !!')</script>";
exit;
}
else
$idsequencesample = $_POST['idsequencesample'];
if (count( array_filter($_POST['dtsample'])) ==0)
{
echo "<script type='text/jscript'>alert('Orneklem Tarihi Bos Birakilamaz. !!')</script>";
exit;
}
else
$dtsample = $_POST['dtsample'];
if (count( array_filter($_POST['tmsample'])) ==0)
{
echo "<script type='text/jscript'>alert('Orneklem Saati Bos Birakilamaz. !!')</script>";
exit;
}
else
$tmsample = $_POST['tmsample'];
if (count( array_filter($_POST['idmachine'])) ==0)
{
echo "<script type='text/jscript'>alert('Makine ID Bos Birakilamaz. !!')</script>";
exit;
}
else
$idmachine = $_POST['idmachine'];
if (count( array_filter($_POST['idoperator'])) ==0)
{
echo "<script type='text/jscript'>alert('Operator ID Bos Birakilamaz. !!')</script>";
exit;
}
else
$idoperator = $_POST['idoperator'];
if (count( array_filter($_POST['idinspector'])) ==0)
{
echo "<script type='text/jscript'>alert('Kontrolor ID Bos Birakilamaz. !!')</script>";
exit;
}
else
$idinspector = $_POST['idinspector'];
if (count( array_filter($_POST['idshift'])) ==0)
{
echo "<script type='text/jscript'>alert('Vardiya ID Bos Birakilamaz. !!')</script>";
exit;
}
else
$idshift = $_POST['idshift'];
$idgage = $_POST['idgage'];
$nmlot = $_POST['nmlot'];
$nmmo = $_POST['nmmo'];
if (count( array_filter($_POST['qtitens'])) ==0)
{
echo "<script type='text/jscript'>alert('Orneklem Sayisi Bos Birakilamaz. !!')</script>";
exit;
}
else
$qtitens = $_POST['qtitens'];
if (count( array_filter($_POST['qtdefectsitem'])) ==0)
{
echo "<script type='text/jscript'>alert('Kusurlu Sayisi Bos Birakilamaz. !!')</script>";
exit;
}
else
$qtdefectsitem = $_POST['qtdefectsitem'];
if (count( array_filter($_POST['qtrejectsitem'])) ==0)
{
echo "<script type='text/jscript'>alert('Red Sayisi Bos Birakilamaz. !!')</script>";
exit;
}
else
$qtrejectsitem = $_POST['qtrejectsitem'];
//değişkenlerin soap client paremetresi olarak tanımlanması
$paremetreler = array('idcollect' =>$idcollect[$i],'idcharacteristic' =>$idcharacteristic[$i],'idsequencesample' =>$idsequencesample[$i],'dtsample' =>$dtsample[$i],'tmsample' =>$tmsample[$i],'config' =>$config[$i],'idmachine' =>$idmachine[$i],'idoperator' =>$idoperator[$i],'idinspector' =>$idinspector[$i],'idshift' =>$idshift[$i],'idgage' =>$idgage[$i],'nmlot' =>$nmlot[$i],'nmmo' =>$nmmo[$i],'qtitens' =>$qtitens[$i],'qtdefectsitem' =>$qtdefectsitem[$i],'qtrejectsitem' =>$qtrejectsitem[$i]);
//web servisten fonksiyon çağırma ve tanmlanan paremetrelerin fonksiyon değişkeni olarak aktarılması aşağıdaki gibidir.
$data = $client->__soapCall('ImportSampleAtt', array('parameters'=> $paremetreler));
//fonksiyondan dönen sonuç..
var_dump($data);
//html tablodan web servise post edilen tüm verilerin listelenmesi
echo "<br>";
echo $idcollect[$i];
echo " ";
echo $idcharacteristic[$i];
echo " ";
echo $idsequencesample[$i];
echo " ";
echo $dtsample[$i];
echo " ";
echo $tmsample[$i];
echo " ";
echo $config[$i];
echo " ";
echo $idmachine[$i];
echo " ";
echo $idoperator[$i];
echo " ";
echo $idinspector[$i];
echo " ";
echo $idshift[$i];
echo " ";
echo $idgage[$i];
echo " ";
echo $nmlot[$i];
echo " ";
echo $nmmo[$i];
echo " ";
echo $qtitens[$i];
echo " ";
echo $qtdefectsitem[$i];
echo " ";
echo $qtrejectsitem[$i];
echo "<br>";
}
}
}
catch(Exception $e)
{
//web servise bağlanılamadığı taktirde verilecek hata mesajı..
die($e->getMessage());
}
?>
Hiç yorum yok:
Yorum Gönder