Veröffentlichungsdatum: 03. August 2011
Änderungsdatum: 26. März 2024
Dir Behördenwegweiser von Service BW lässt sich sehr einfach über SOAP und PHP in eine Weblication CMS Präsenz einbinden.
Der Behördenwegweiser von Service BW lässt sich sehr einfach über SOAP und PHP in eine Weblication CMS Präsenz einbinden. Sie können so Ihr Cityweb-Modul um die Informationen aus Service-BW erweitern.
Die PHP basierte Service BW Schnittstelle läuft über SOAP. Die Nutzung von SOAP als Universelle Schnittstelle über Systeme hinweg gestaltet sich einfach und transparent. Auf die Ergebnisse der SOAP-Anfrage kann man dann über PHP direkt zugreifen. Über var_dump lassen sich alle gelieferten Inhalte anzeigen und die Ausgabe erfolgt direkt über PHP print Befehle, so dass keine zusätzliche XSLT-Transformation mehr stattfindet.
Der Redakteur kann zu einer Dienstleistung eine entspresprechende Dienstleistung aus dem Service-BW Portal zuordnen, die beim Aufruf angezeigt wird. Dazu wird ihm eine Auswahlbox mit den verfügbaren Service-BW Dienstleistungen angeboten.
<div class="wEditorExtensionLabel"><xsl:value-of select="php:functionString('wTexts::showTextUser', 'Service BW', 'Service BW Verknüpfung')"/></div> <div class="wEditorExtensionValue"> <!--web:text:start editor="select" valuepre="" textpre=" " script="/IhrGlobalesProjekt/wGlobal/scripts/php/service-bw-lls.php" multiple="0" size="" inputStyle="width:240px"--><xsl:value-of select="/wd:document/wd:extension/wd:object/wd:data[@id='serviceBW']/text()"/><!--web:text:stop--> </div>
require_once $_SERVER['DOCUMENT_ROOT'].'/weblication/grid.php';
$serviceBwUsername = 'IHR_BENUTZERNAME';
$serviceBwPassword = 'IHR_PASSWORT';
$dirSoapCache = '/soapCache';
wRepository::createDir($dirSoapCache);
$profilData = new stdClass();
$profilData->ags = "0";
$profilData->plz = "0";
$profilData->sprache = "deu";
$profilData->kategorienUndVerknuepfung = false;
$pkey = new stdClass();
$pkey->id = 8;
$pkey->mandantenId = 0;
$pkey->sprachId = "deu";
$param = new stdClass();
$param->lebenslageKey = $pkey;
$param->profilData = $profilData;
$soapCacheKey = md5('getLLDetails:'.serialize($param));
$pathSoapCache = $dirSoapCache.'/'.$soapCacheKey;
if(wRepository::documentExists($pathSoapCache)){
$result = unserialize(wReadWrite::readFile($pathSoapCache));
}
else{
$client = new wSoapClientServiceBW('https://ws.service-bw.de/zfinder-core-ws/lebenslage?wsdl', array('username' => $serviceBwUsername, 'password' => $serviceBwPassword));
$result = $client->getLLDetails($param);
wReadWrite::writeFile($pathSoapCache, serialize($result));
}
print '<entries>'."\n";
if($result->return->publizierteNachfolger){
foreach($result->return->publizierteNachfolger as $publizierteNachfolger){
print '<entry value="'.$publizierteNachfolger->id.'">'.$publizierteNachfolger->value.'</entry>'."\n";
$pkey = new stdClass();
$pkey->id = $publizierteNachfolger->id;
$pkey->mandantenId = 0;
$pkey->sprachId = "deu";
$param = new stdClass();
$param->lebenslageKey = $pkey;
$param->profilData = $profilData;
$soapCacheKey = md5('getLLDetails:'.serialize($param));
$pathSoapCache = $dirSoapCache.'/'.$soapCacheKey;
if(wRepository::documentExists($pathSoapCache)){
$result1 = unserialize(wReadWrite::readFile($pathSoapCache));
}
else{
$client = new wSoapClientServiceBW('https://ws.service-bw.de/zfinder-core-ws/lebenslage?wsdl', array('username' => $serviceBwUsername, 'password' => $serviceBwPassword));
try{
$result1 = $client->getLLDetails($param);
}
catch(exception $e){
}
wReadWrite::writeFile($pathSoapCache, serialize($result1));
}
if($result1->return->publizierteNachfolger){
foreach($result1->return->publizierteNachfolger as $publizierteNachfolger1){
print '<entry value="'.$publizierteNachfolger1->id.'">    '.preg_replace("/\d+\s*\.\s*/", "", $publizierteNachfolger1->value).'</entry>'."\n";
}
}
}
}
print '</entries>'."\n";
Die in der Seite (im Dienstleistungsobjekt) definierte ID wird dann als $_GET Variable gesetzt, falls kein Wert über den Parameter definiert wurde. Das Darstellungsskript wird anschließend eingebunden und zeigt die entsprechende Dienstleistung an.
<xsl:if test="/wd:document/wd:extension/wd:object/wd:data[@id='serviceBW']/text()"> <div class="elementBoxSheetOnly"> <p class="serviceBwInfos">Informationen vom Service-BW Portal</p> <wsl:php> if($_GET['llid'] == ''){ $_GET['llid'] = '<xsl:value-of select="/wd:document/wd:extension/wd:object/wd:data[@id='serviceBW']/text()"/>'; } include($_SERVER['DOCUMENT_ROOT'].'/wGlobalProject/wGlobal/scripts/php/service-bw.php'); </wsl:php> <div class="elementText"> <a style="color:#999999" class="extern" target="_blank" href="http://www.service-bw.de/zfinder-bw-web/lifesituations.do?llid={/wd:document/wd:extension/wd:object/wd:data[@id='serviceBW']/text()}">Zum Service-BW Portal wechseln</a> </div> </div> </xsl:if>
Das eigentliche Skript, dass die Dienstleistungen oder auch Lebenslagen anzeigt, führt eine SOAP-Anfrage durch und speichert das Ergebnis im Verzeichns /soapCache. So wird die Anzahl der Anfragen gering gehalten und die Performance des Systems deutlich erhöht, da bereit abgefragte Informationen in einem Cache vorgehalten werden.
require_once $_SERVER['DOCUMENT_ROOT'].'/weblication/grid.php';
$serviceBwUsername = 'IHR_BENUTZERNAME';
$serviceBwPassword = 'IHR_PASSWORT';
$dirSoapCache = '/soapCache';
$profilData = new stdClass();
$profilData->ags = "0";
$profilData->plz = "0";
$profilData->sprache = "deu";
$profilData->kategorienUndVerknuepfung = false;
$pkey = new stdClass();
$pkey->id = 8;
$pkey->mandantenId = 0;
$pkey->sprachId = "deu";
$type = 'll';
if(wRequest::getParameter('type') != ''){
$type = wRequest::getParameter('type');
}
// Falls ein Verfahren (Dienstleistung) angezeigt werden soll
if($type == 'vb'){
if(wRequest::getParameter('vbid') != ''){
$pkey->id = wRequest::getParameter('vbid');
}
$param = new stdClass();
$param->verfahrenKey = $pkey;
$param->profilData = $profilData;
$pathSoapCache = $dirSoapCache.'/'.md5('getVBDetails:'.serialize($param));
if(wRepository::documentExists($pathSoapCache)){
$result = unserialize(wReadWrite::readFile($pathSoapCache));
}
else{
$client = new wSoapClientServiceBW('https://ws.service-bw.de/zfinder-core-ws/verfahren?wsdl', array('username' => $serviceBwUsername, 'password' => $serviceBwPassword));
$result = $client->getVBDetails($param);
wReadWrite::writeFile($pathSoapCache, serialize($result));
}
print '<h2>'.preg_replace("/\s*\d+\.(\d+\.)?\s*/", "", $result->return->verfahrenstitel).'</h2>';
print preg_replace("/\&(\w+)\=/s", "&$1=", $result->return->informationen);
print '<h3>Verfahrensablauf</h3>';
print preg_replace("/\&(\w+)\=/s", "&$1=", $result->return->ablauf);
if($result->return->unterlagen != ''){
print '<h3>Erforderliche Unterlagen</h3>';
print preg_replace("/\&(\w+)\=/s", "&$1=", $result->return->unterlagen);
}
if($result->return->frist != ''){
print '<h3>Frist/Dauer</h3>';
print preg_replace("/\&(\w+)\=/s", "&$1=", $result->return->frist);
}
if($result->return->gebuehren != ''){
print '<h3>Kosten</h3>';
print preg_replace("/\&(\w+)\=/s", "&$1=", $result->return->gebuehren);
}
if($result->return->rechtsgrundlage != ''){
print '<h3>Rechtsgrundlage</h3>';
print preg_replace("/\&(\w+)\=/s", "&$1=", $result->return->rechtsgrundlage);
}
if($result->return->vorgaengerId){
print '<a class="back" href="?llid='.$result->return->vorgaengerId.'">Zurück zu '.$result->return->vorgaengerTitel.'</a>';
}
else{
print '<a class="back" href="javascript:history.back()">Zurück</a>';
}
}
//Falls eine Lebenslage angezeigt werden soll
else{
if(wRequest::getParameter('llid') != ''){
$pkey->id = wRequest::getParameter('llid');
}
$param = new stdClass();
$param->lebenslageKey = $pkey;
$param->profilData = $profilData;
$pathSoapCache = $dirSoapCache.'/'.md5('getLLDetails:'.serialize($param));
if(wRepository::documentExists($pathSoapCache)){
$result = unserialize(wReadWrite::readFile($pathSoapCache));
}
else{
try{
$client = new wSoapClientServiceBW('https://ws.service-bw.de/zfinder-core-ws/lebenslage?wsdl', array('username' => $serviceBwUsername, 'password' => $serviceBwPassword));
$result = $client->getLLDetails($param);
wReadWrite::writeFile($pathSoapCache, serialize($result));
}
catch(SoapFault $e){
print '<h2>Dieser Bereich befindet sich noch im Aufbau</h2>';
print '<a class="back" href="javascript:history.back()">Zurück</a>';
}
}
$text = preg_replace('/href="[^"]*llpreview\.do\?id=(\d+)[^"]*"/', 'href="?llid=$1"', $result->return->beschreibung);
$text = preg_replace("/\&(\w+)\=/s", "&$1=", $text);
print '<h2>'.preg_replace("/\s*\d+\.(\d+\.)?\s*/", "", $result->return->titel).'</h2>';
print '<p><strong>'.$result->return->untertitel.'</strong></p>';
print $text;
if($result->return->publizierteNachfolger){
if($pkey->id == '8'){
print '<h3>Lebenslagen</h3>';
}
else{
print '<h3>Weitere Lebenslagen</h3>';
}
print '<ul>';
foreach($result->return->publizierteNachfolger as $publizierteNachfolger){
print '<li><a href="?type=ll&llid='.$publizierteNachfolger->id.'">'.preg_replace("/\s*\d+\.(\d+\.)?\s*/", "", $publizierteNachfolger->value).'</a></li>';
}
print '</ul>';
}
$soapCacheKey = md5('getVerfahrenByLebenslagekey:'.serialize($param));
$pathSoapCache = $dirSoapCache.'/'.$soapCacheKey;
if(wRepository::documentExists($pathSoapCache)){
$result = unserialize(wReadWrite::readFile($pathSoapCache));
}
else{
try{
$client = new wSoapClientServiceBW('https://ws.service-bw.de/zfinder-core-ws/lebenslage?wsdl', array('username' => $serviceBwUsername, 'password' => $serviceBwPassword));
$result = $client->getVerfahrenByLebenslagekey($param);
wReadWrite::writeFile($pathSoapCache, serialize($result));
}
catch(SoapFault $e){
print '<h2>Dieser Bereich befindet sich noch im Aufbau</h2>';
print '<a class="back" href="javascript:history.back()">Zurück</a>';
}
}
if(is_array($result->return)){
print '<h3>Verfahren</h3>';
print '<ul>';
foreach($result->return as $verfahren){
print '<li><a href="?type=vb&vbid='.$verfahren->id.'">'.$verfahren->value.'</a></li>';
}
print '</ul>';
}
if($result->return->vorgaengerId && $result->return->vorgaengerId != 8){
print '<a class="back" href="?llid='.$result->return->vorgaengerId.'">Zurück zu: '.preg_replace("/\s*\d+\.(\d+\.)?\s*/", "", $result->return->vorgaengerTitel).'</a>';
}
}
Ein Beispiel für die Integration in Weblication Cityweb finden Sie unter http://www.ortenberg.de/de/cityweb/dienstleistungen/bauantrag-baugenehmigung.php