Sikkepitje.nl

Sikkepitje.nl

this private cloud

Magister SOAP AD functie opvragen voorbeeld

De Schoolmaster Magister SOAP/XML Webservice uitlezen anno 2020 doen we als volgt in PowerShell. Grote voordelen:

  • Door op te halen in XML krijgen we de resultaten direct in een variable
  • Encoding problemen zijn voorbij.

⚠ (:source lang=powershell:) $magisterUser = "gebruikersnaam" $magisterPass = "wachtwoord" $magisterUrl = "https://school.swp.nl:8800/doc" <:vspace> # haal sessiontoken $SessionToken_Login = $magisterUrl + "Library=Algemeen&Function=Login&UserName=" + $magisterUser + "&Password=" + $magisterPass + "&Type=XML" $feed = [xml](new-object system.net.webclient).downloadstring($SessionToken_Login) $SessionToken = $feed.response.SessionToken <:vspace> function Run-Webclient($url) { $wc = New-Object System.Net.WebClient $wc.Encoding = [System.Text.Encoding]::UTF8 $feed = [xml]$wc.downloadstring($url) return $feed.Response.Data } function ADFunctie2 ($functie, $SessionToken) { return Run-Webclient -Url ($magisterUrl + "library=ADFuncties&function=" ` + $functie + "&SessionToken=" + $SessionToken + "&LesPeriode=&Type=XML") } function ADFunctie3 ($functie, $SessionToken, $stamnr) { return Run-Webclient -Url ($magisterUrl + "library=ADFuncties&function=" + ` $functie + "&SessionToken=" + $SessionToken + "&LesPeriode=&StamNr=" + $stamnr + "&Type=XML") } <:vspace> $stamnr = 10104 $data = ADFunctie3 -F "GetLeerlingGroepen" -Ses $sessiontoken -st $stamnr foreach ($vak in $data.Vakken.Vak) { write-host $vak.groep } <:vspace> $data = ADFunctie2 -F "GetActiveStudents" -Ses $SessionToken $ll = $data.Leerlingen.Leerling | Select-Object ` stamnr_str,achternaam,tussenv,roepnaam,loginaccount.naam,klas,studie,profiel.code <:vspace> $data = ADFunctie2 -F "GetActiveEmpoyees" -Ses $SessionToken $docent = $data.Personeelsleden.Personeelslid | Select-Object ` stamnr_str,achternaam,tussenv,roepnaam,loginaccount.naam,code,Functie.Omschr (:sourceend:)

Magister SOAP custom query

Oftewel hoe we in 2020 "lijsten" opvragen. Dit is een andere methode.

⚠ (:source lang=powershell:) # Globals $user = "soapuser" $pass = "soappassword" $tenant = "school" $layout = "weblijst" <:vspace> # Construct uri $uri = "https://$tenant.swp.nl:8800/doc?Library=Data&Function=GetData&SessionToken=$user%3B$pass&Layout=$layout&Parameters=&Type=CSV&encoding=ANSI" <:vspace> # Read the data $request = [System.Net.WebRequest]::Create($uri) $response = $request.GetResponse() $requestStream = $response.GetResponseStream() $encoding = [System.Text.Encoding]::UTF7 $readStream = New-Object System.IO.StreamReader($requestStream, $encoding) $data = $readStream.ReadToEnd() $readStream.Close() $response.Close() <:vspace> # Convert raw data to CSV $csv = ConvertFrom-Csv $data -Delimiter ";" (:sourceend:)

Test MagisterSOAP

⚠ (:source lang=powershell:) <# Snel testen of Magister webservice werkt <:vspace> 21-1-2021 Paul Wiegmans <:vspace> URL van produktiedatabase: https://school.swp.nl:8800/soap URL van testdatabase: https://school.swp.nl:8801/soap <:vspace> Silvie beweert dat de testomgeving niet toegankelijk is. <:vspace> Ja dat klopt. en het klopt niet... De eerste keer inloggen krijg je een melding en wordt de omgeving gesloten,..... De eerste keer wordt de omgeving namelijk "wakker"gemaakt. Log je daarna in, dan werkt het.. Die tweede keer inloggen moet binnen vijf minuten gebeuren #> <:vspace> $magisterUser = "gebruikersnaam" $magisterPass = "wachtwoord" $magisterUrl = "https://school.swp.nl:8800/doc" <:vspace> function Invoke-Webclient($url) { $wc = New-Object System.Net.WebClient $wc.Encoding = [System.Text.Encoding]::UTF8 try { $feed = [xml]$wc.downloadstring($url) } catch { $e = $_.Exception $line = $_.InvocationInfo.ScriptLineNumber $msg = $e.Message Throw "Invoke-Webclient: caught exception: $e at line $line : $msg" } if ($feed.Response.Exception) { Write-Host ("Invoke-Webclient: " + $feed.Response.Exception + ": " + $feed.Response.ExceptionMsg) return $feed.Response } return $feed.Response.Data } function ADFunction ($Url = $magisterUrl, $Function, $SessionToken) { return Invoke-Webclient -Url ($Url + "?library=ADFuncties&function=" + $Function + "&SessionToken=" + $SessionToken + "&LesPeriode=&Type=XML") } <:vspace> # haal sessiontoken Clear-Host Write-Host "Login ..." $feed = "" $GetToken_URL = $magisterUrl + "?Library=Algemeen&Function=Login&UserName=" + $magisterUser + "&Password=" + $magisterPass + "&Type=XML" $feed = [xml](new-object system.net.webclient).downloadstring($GetToken_URL) if ($feed.Response.Result -ne "True") { Throw "Fatale fout in SOAP-query: " + $feed.Response.ResultMessage } $MyToken = $feed.response.SessionToken <:vspace> Write-Host "Ophalen docenten..." $mag_doc = @() $data = "" $data = ADFunction -Url $magisterUrl -Sessiontoken $MyToken -Function "GetActiveEmpoyees" <:vspace> $mag_doc = $data.Personeelsleden.Personeelslid | Select-Object ` @{Name = 'Stamnr'; Expression = {$_.stamnr_str}}, @{Name = 'Id'; Expression = { $null }}, @{Name = 'Login'; Expression = {$_.'loginaccount.naam'}}, Code, Roepnaam, Tussenv, Achternaam, @{Name = 'Naam'; Expression = {$_.'Loginaccount.Volledige_naam'}}, @{Name = 'Functie'; Expression = { $_.'Functie.Omschr' }}, @{Name = 'Locatie'; Expression = { $_.'Administratieve_eenheid.Omschrijving' }} <:vspace> Write-Host "Opgehaald:" $mag_doc.count $mag_doc | Select-Object -First 5 | Format-Table (:sourceend:)

SOAP queries naar testdatabase

Zoals de produktiedatabase te benaderen is via de URL https://school.swp.nl:8800/doc , zo zijn de gegevens uit de Magister testdatabase te benaderen via de URL https://school.swp.nl:8801/doc. De derde database is te benaderen via de URL https://school.swp.nl:8802/doc.