Contents []
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.
$magisterUser = "gebruikersnaam"
$magisterPass = "wachtwoord"
$magisterUrl = "https://school.swp.nl:8800/doc"
# 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
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")
}
$stamnr = 10104
$data = ADFunctie3 -F "GetLeerlingGroepen" -Ses $sessiontoken -st $stamnr
foreach ($vak in $data.Vakken.Vak) {
write-host $vak.groep
}
$data = ADFunctie2 -F "GetActiveStudents" -Ses $SessionToken
$ll = $data.Leerlingen.Leerling | Select-Object `
stamnr_str,achternaam,tussenv,roepnaam,loginaccount.naam,klas,studie,profiel.code
$data = ADFunctie2 -F "GetActiveEmpoyees" -Ses $SessionToken
$docent = $data.Personeelsleden.Personeelslid | Select-Object `
stamnr_str,achternaam,tussenv,roepnaam,loginaccount.naam,code,Functie.Omschr
$magisterPass = "wachtwoord"
$magisterUrl = "https://school.swp.nl:8800/doc"
# 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
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")
}
$stamnr = 10104
$data = ADFunctie3 -F "GetLeerlingGroepen" -Ses $sessiontoken -st $stamnr
foreach ($vak in $data.Vakken.Vak) {
write-host $vak.groep
}
$data = ADFunctie2 -F "GetActiveStudents" -Ses $SessionToken
$ll = $data.Leerlingen.Leerling | Select-Object `
stamnr_str,achternaam,tussenv,roepnaam,loginaccount.naam,klas,studie,profiel.code
$data = ADFunctie2 -F "GetActiveEmpoyees" -Ses $SessionToken
$docent = $data.Personeelsleden.Personeelslid | Select-Object `
stamnr_str,achternaam,tussenv,roepnaam,loginaccount.naam,code,Functie.Omschr
Magister SOAP custom query
Oftewel hoe we in 2020 "lijsten" opvragen. Dit is een andere methode.
# Globals
$user = "soapuser"
$pass = "soappassword"
$tenant = "school"
$layout = "weblijst"
# Construct uri
$uri = "https://$tenant.swp.nl:8800/doc?Library=Data&Function=GetData&SessionToken=$user%3B$pass&Layout=$layout&Parameters=&Type=CSV&encoding=ANSI"
# 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()
# Convert raw data to CSV
$csv = ConvertFrom-Csv $data -Delimiter ";"
$user = "soapuser"
$pass = "soappassword"
$tenant = "school"
$layout = "weblijst"
# Construct uri
$uri = "https://$tenant.swp.nl:8800/doc?Library=Data&Function=GetData&SessionToken=$user%3B$pass&Layout=$layout&Parameters=&Type=CSV&encoding=ANSI"
# 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()
# Convert raw data to CSV
$csv = ConvertFrom-Csv $data -Delimiter ";"
Test MagisterSOAP
<#
Snel testen of Magister webservice werkt
21-1-2021 Paul Wiegmans
URL van produktiedatabase: https://school.swp.nl:8800/soap
URL van testdatabase: https://school.swp.nl:8801/soap
Silvie beweert dat de testomgeving niet toegankelijk is.
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
#>
$magisterUser = "gebruikersnaam"
$magisterPass = "wachtwoord"
$magisterUrl = "https://school.swp.nl:8800/doc"
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")
}
# 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
Write-Host "Ophalen docenten..."
$mag_doc = @()
$data = ""
$data = ADFunction -Url $magisterUrl -Sessiontoken $MyToken -Function "GetActiveEmpoyees"
$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' }}
Write-Host "Opgehaald:" $mag_doc.count
$mag_doc | Select-Object -First 5 | Format-Table
Snel testen of Magister webservice werkt
21-1-2021 Paul Wiegmans
URL van produktiedatabase: https://school.swp.nl:8800/soap
URL van testdatabase: https://school.swp.nl:8801/soap
Silvie beweert dat de testomgeving niet toegankelijk is.
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
#>
$magisterUser = "gebruikersnaam"
$magisterPass = "wachtwoord"
$magisterUrl = "https://school.swp.nl:8800/doc"
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")
}
# 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
Write-Host "Ophalen docenten..."
$mag_doc = @()
$data = ""
$data = ADFunction -Url $magisterUrl -Sessiontoken $MyToken -Function "GetActiveEmpoyees"
$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' }}
Write-Host "Opgehaald:" $mag_doc.count
$mag_doc | Select-Object -First 5 | Format-Table
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.