Service BW in Cityweb über SOAP einbinden

03.08.2011

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.

Funktion der Service BW Schnittstelle

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.

Auswahl und Zuordnung der Dienstleistung

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.

Auswahlbox mit Dienstleistungen über ein Pflegetag, welches ein PHP-Skript zur Generierung nutzt

<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="&#160;" 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>

Generierung der Auswahlbox (service-bw-lls.php) in der Pflegemaske einer Dienstleistung

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($pathSoapCacheserialize($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($pathSoapCacheserialize($result1));
    }

    if(
$result1->return->publizierteNachfolger){
      foreach(
$result1->return->publizierteNachfolger as $publizierteNachfolger1){
        print  
'<entry value="'.$publizierteNachfolger1->id.'">&#160;&#160;&#160;&#160;'.preg_replace("/\d+\s*\.\s*/"""$publizierteNachfolger1->value).'</entry>'."\n";
      }
    }
  }
}

print 
'</entries>'."\n";

Darstellung der Information aus dem Service-BW Portal

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.

Einbinden der Service-BW Informationen über Parameter oder über die Dienstleistungs-ID, die in der Seite steht

<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:wSecurityAlert>

      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:wSecurityAlert><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.

Darstellung der Informationen zu einer Lebenslage bzw. einer Dienstleistung (/wGlobalProject/wGlobal/scripts/php/service-bw.php)

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($pathSoapCacheserialize($result));
  }

  print 
'<h2>'.preg_replace("/\s*\d+\.(\d+\.)?\s*/"""$result->return->verfahrenstitel).'</h2>';

  print 
preg_replace("/\&(\w+)\=/s""&amp;$1="$result->return->informationen);
  print 
'<h3>Verfahrensablauf</h3>';
  print 
preg_replace("/\&(\w+)\=/s""&amp;$1="$result->return->ablauf);
  if(
$result->return->unterlagen != ''){
    print 
'<h3>Erforderliche Unterlagen</h3>';
    print 
preg_replace("/\&(\w+)\=/s""&amp;$1="$result->return->unterlagen);
  }
  if(
$result->return->frist != ''){
    print 
'<h3>Frist/Dauer</h3>';
    print 
preg_replace("/\&(\w+)\=/s""&amp;$1="$result->return->frist);
  }
  if(
$result->return->gebuehren != ''){
    print 
'<h3>Kosten</h3>';
    print 
preg_replace("/\&(\w+)\=/s""&amp;$1="$result->return->gebuehren);
  }
  if(
$result->return->rechtsgrundlage != ''){
    print 
'<h3>Rechtsgrundlage</h3>';
    print 
preg_replace("/\&(\w+)\=/s""&amp;$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($pathSoapCacheserialize($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""&amp;$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&amp;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($pathSoapCacheserialize($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&amp;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>';
  }
}