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.