Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Live Search
spaceKeyDOK
placeholderSuchen

Expand
titleINHALTSVERZEICHNIS
Table of Contents
maxLevel3
minLevel2
stylenone

...

EFS Service Layer, unsere API in EFS, ermöglicht den Zugriff auf EFS Kern-Funktionalitäten durch externe Anwendungen. Somit können Anwendungen, die auf EFS-Daten und -Funktionalitäten beruhen, außerhalb von EFS mit verschiedenen Technologien erstellt werden. Die Dienste können von außen über HTTPS aufgerufen werden, wobei SOAP oder REST als Protokolle verwendet werden können. Es können verschiedene Datenaustauschformate verwendet werden (z.B. JSON oder XML).

Eine Übersicht aller EFS Service-Layer Methoden finden Sie in der englischsprachigen EFS Dokumentation. Aufgrund der Komplexität und Umfang dieser Liste, kann dieses Dokument aktuell nur auf Englisch zur Verfügung gestellt werden. Wir bitten um Ihr Verständnis.

Info

Der EFS-Service Layer ist seit EFS 9.1 verfügbar, einige Installationen haben jedoch auch weiterhin Zugriff auf die älteren "Web-Services" (Optionen > Service-Layer > Web-Services). Die Verwendung von Web-Services wird nicht mehr empfohlen, da diese Funktionalität veraltet ist und demnächst entfernt wird.

...

Die auf Ihrer EFS-Installation verfügbaren Services können in einem speziell eingerichteten Konfigurations-Menü eingesehen und konfiguriert werden. Das Menü befindet sich im Administrationsbereich von EFS unter Optionen Service-Layer. Das Menü Service-Layer ist grundsätzlich nur verfügbar, wenn Questbacks das Support-Team auf Ihrer Installation die Nutzung von Services freigeschaltet hat. Für den Zugang zum Menü ist entweder Schreibrecht auf das ACL-Recht webservice_conf oder Mitgliedschaft im Root-Team erforderlich.

...

  • Der jeweilige Service muss von Questbacks dem Support-Team hinzugefügt werden.

  • Der Service muss aktiviert werden. Falls erforderlich, können mit dem Button Alle Services aktivieren auch sämtliche auf der Installation vorhandenen Services en bloc aktiviert werden.

  • Das Mitarbeiterteam, zu dem der Account gehört, mit dem auf einen Service zugegriffen wird, muss Zugriffsrecht für diesen Service haben. Auf der Registerkarte Zugriffsgruppen können die Zugriffsrechte auf die einzelnen Services separat definiert werden.

  • Des Weiteren beinhalten viele Services eine Prüfung auf die Objektrechte des Mitarbeiterteams. Bei survey.questionnaire.createPage oder survey.questionnaire.deletePage beispielsweise benötigt das Mitarbeiterteam Schreibrecht auf das betreffende Projekt.

  • Auf der Registerkarte Zugriffslog werden alle Aufrufe geloggt. Die Einträge können nach IP-Adresse, Name des verwendeten Adminaccounts, Service-Name und Datum durchsucht werden.

...

Folgende Authentifizierungsmechanismen können verwendet werden:

  • Tokens (empfohlen): Questbacks Das Support-Team kann für Sie und Ihre Mitarbeiter Tokens generieren. Diese Tokens können dann beim Aufruf des Service zur Authentifizierung genutzt werden (Parametername: "token").

  • Accountname und Passwort für den EFS-Adminbereich: Da jeder Mitarbeiter mit Adminbereichs-Zugang über diese Daten verfügt, ist dies die einfachste Möglichkeit, sich für die Services zu authentifizieren.

...

Expand
titleExample: JSON call with http authentication using PHP and Zend Framework
Code Block
languagephp
<?php
/* Example requires Zend Framework */
require_once('Zend/Loader/Autoloader.php');
function serviceLayerCall($method, $params=null)
{
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $url="http://EFSINSTALLATIONURL/service/index.php?handler=json&token=TOKEN";
    $client = new Zend_Http_Client();
    $client->setUri($url);
    $client->setConfig(array('timeout' => 30));
    $client->setMethod(Zend_Http_Client::POST);
    /* not using TOKEN? Here is basic auth: */
    //$user = "USER";
    //$passwd = "PASSWORD";
    //$client->setAuth($user, $passwd);
    
    $client->setRawData(json_encode(array('method' => $method, 'jsonrpc' => '2.0', 'id' => 1, 'params' => $params)));
    $request = $client->request();
    //print "<pre>";
    //var_dump($request->getBody());
    $return = json_decode($request->getBody());
    $return=$return->result;
    return $return->return;
}

/* 1. Step - Get projects
 */
print "<h3>1. step - get projects</h3>";
$projects=serviceLayerCall("survey.surveys.getList");

foreach($projects as $project)
{
    print "- ".$project->title." (".$project->id.")<br>";
}


//2. Step - Get Structure for Pid 1112
, first a helper function:
function sub($pages, &$myquestions)
{
    foreach($pages as $page)
    {
        if(count($page->subPages) > 0)
            $this->sub($page->subPages, $myquestions);
        foreach($page->questions as $question)
        {
            $myquestions[]=$question;
        }
    }
    return $myquestions;
}

$relevantVars=array();
print "<hr><h3>2. step - get structure for Pid 1112</h3>";
$project=serviceLayerCall("survey.surveys.getQuestionnaireStructure", array("surveyId" => 1112));
$questions=sub($project, $myquestions);
foreach($questions as $question)
{
    if($question->questiontext) {
        print $question->questiontext . "<br>";
        foreach ($question->variables as $variable) {
            if ($variable->type == "char" || $variable->type == "text") {
                print "Text-Var: ".$variable->varname . "<br>";
                //add to $relevantVars for export
                $relevantVars[] = $variable->varname;
            }
        }
    }
}

/* 3 - Relevant vars for export */
print "<hr><h3>3. Collected variables for export:</h3>";
var_dump($relevantVars);
print "</pre>";

/* 4 - Get CSV export */
print "<hr><h3>4. Get results for specific vars</h3>";
$exportData=serviceLayerCall("survey.results.getRawdataCSV", array("surveyId" => 1112, "exportTypes" => array("QUESTIONNAIRE"), "includeVariables" => $relevantVars));
print base64_decode($exportData);
Info

Die Übersicht der EFS Service-Layer Methoden hat darüberhinaus auch Beispiele für REST Aufrufe und Antworten.

...

Expand
titleKonfiguration von Postman

Sie können einzelne Anfragen erstellen, indem Sie auf "New" klicken und "Request" wählen, die richtige Methode auswählen und den Link zum Dienst einfügen. Wenn Sie POST-Anfragen verwenden, müssen Sie den Body angeben, indem Sie "raw" und "JSON" in den entsprechenden Einstellungen wählen. Alle anderen Registerkarten können auf Standardwerten belassen werden.

Screenshot of Postman, showing a GET request

Um alle verfügbaren EFS Service-Layer REST-Dienste zu importieren, müssen Sie die RAML-Datei (https://my-efs/service/?handler=rest&raml=1&token=1234567890) herunterladen und in Postman importieren.

Screenshot of postman showing the import dialog

Die Registerkarte Collections enthält nun eine Liste aller für den Aufrufer verfügbaren Dienste auf der EFS-Installation.

Info

Bitte beachten Sie, dass in seltenen Fällen Postman die RAML-Datei aus EFS ablehnt. In diesem Fall empfehlen wir, die Anfragen individuell zu erstellen.

Ergebnisse mit Bedingungen filtern

Abfragen mit "ByCriteria" im Namen haben die Möglichkeit, Ergebnisse nach Bedingungen zu filtern. Diese Bedingungen können einfache Eins-zu-Eins-Vergleiche und komplexe Anfragen sein, die durch einen Operator verbunden werden. Alle Beispiele basieren auf dem REST-Dienst POST /panel/circles/listByCondition, der eine Liste von Portals-Gruppen (Circles) zurückgibt.

Comparison

Dies ist die einfachste Abfrage, sie gleicht die Elemente basierend auf einer einzigen Eigenschaft des Elements ab, in diesem Fall dem circleType. Bitte beachten Sie, dass condition bei einigen Services durch die Zeichenkette logicalCondition ersetzt werden muss.

Code Block
{
    "condition": {
        "comparison": {
            "variable": "circleType",
            "operator": "EQUAL",
            "value": "COMPANY_MANAGED"
        }
    }
}

Mögliche operator Werte für den Vergleich: EQUAL, UNEQUAL, LESS_EQUAL, LESS_THAN, GREATER_EQUAL, GREATER_THAN, CONTAINS. Größer/Kleiner-Operatoren sollten nur auf numerische Werte angewendet werden.

InComparison

Diese Abfrage ermöglicht den Vergleich einer Eigenschaft mit einer Liste von Werten.

Code Block
{
    "condition": {
        "inComparison": {
            "variable": "circleType",
            "operator": "IN",
            "value": [
                "COMPANY_MANAGED",
                "USER_MANAGED"
            ]
        }
    }
}

Der einzige zulässige Wert für operator in inComparison-Vergleich ist IN.

Join

Dieser Typ erlaubt komplexere Anfragen, bei denen zwei Bedingungen (comparison, inComparison oder join) durch einen AND oder OR Operator verbunden werden können.

Code Block
{
    "condition": {
        "join": {
            "operator": "AND",
            "condition1": {
                "comparison": {
                    "variable": "title",
                    "operator": "CONTAINS",
                    "value": "Test"
                }
            },
            "condition2": {
                "inComparison": {
                    "variable": "circleType",
                    "operator": "IN",
                    "value": [
                        "COMPANY_MANAGED",
                        "USER_MANAGED"
                    ]
                }
            }
        }
    }
}

Der operator Wert der join-Bedingung kann AND oder OR sein,die einzelnen Bedingungen sind ähnlich aufgebaut wie ihre Einzelinstanzen oben. Da auch join erlaubt ist, sind komplexere Strukturen möglich:

Code Block
languagejson
{
    "condition": {
        "join": {
            "operator": "AND",
            "condition1": {
                "join": {
                    "operator": "AND",
                    "condition1": {
                        "comparison": {
                            "variable": "title",
                            "operator": "CONTAINS",
                            "value": "Test"
                        }
                    },
                    "condition2": {
                        "inComparison": {
                            "variable": "circleProcessStatus",
                            "operator": "IN",
                            "value": [
                                "IDLE","IN_PROGRESS"
                            ]
                        }
                    }
                }
            },
            "condition2": {
                "inComparison": {
                    "variable": "circleType",
                    "operator": "IN",
                    "value": [
                        "COMPANY_MANAGED",
                        "USER_MANAGED"
                    ]
                }
            }
        }
    }
}

Verfügbare Service Layer Methoden

Eine Übersicht aller EFS Service-Layer Methoden finden Sie in der englischsprachigen EFS Dokumentation.