# Formularcode

## 👨‍💻️ Was ist Form code?

Der Form code ermöglicht es Ihnen, während des Startens und Ausführens der Umfrage benutzerdefinierten JavaScript-Code auszuführen.

Ihr benutzerdefinierter Code muss erweitern **NGSFormCode** Objekt ausgeführt zu werden.

```javascript
/*
 Beispiel, das zeigt, wie Befragten 
 Antworten an eine REST API eines Drittanbieters gesendet werden.

 Der Form code kann auch verwendet werden, um API-Codes von Drittanbietern 
 mit den Ereignissen onInit oder onLoaded in Ihre Formularseite einzufügen
*/
class CustomFormCode extends NGSFormCode { 
  /* Das Formular wurde geladen */
  onInit() {}

  /* Ein Security Item, das Authentifizierung erfordert, wird aufgerufen 
     wenn eine Umfrage Authentifizierung durch ein Security Item erfordert  
  */
  onAuthenticate(securityItem) {}

  /* Ein Security Item, das Authentifizierung erfordert, wird aufgerufen 
     ein Security Item wurde erfolgreich authentifiziert. 
     Die Rückgabe eines Strings aus dieser Methode blockiert den 
     Zugriff auf die Umfrage mit der im 
     Rückgabe-String definierten Meldung.  
  */
  onAuthenticated(securityItem, securityItemAuthorization) {}

  /* Das Formular wurde durch alle Security Items autorisiert und geladen  
    mit den Fragen der ersten sichtbaren Seite */
  onLoaded() {}

  /* Wird ausgelöst, wenn eine neue Seite geladen wird; ein Nullwert für die Seite 
    zeigt an, dass die abschließende Danke-Seite geladen wird 
  */
  onPageLoad(page) {}

  /* Wird ausgelöst, sobald die Antworten der Sitzung des Befragten auf dem Server gespeichert wurden.
  action definiert die Aktion, die das Speichern des Fortschritts ausgelöst hat; sie kann einer der folgenden Werte sein
  None = 0, Button = 1, PageChange = 2, QuestionChange = 3, Email = 4, Auto = 5 
  */
  onSaveProgress(ngsRespondent, action) {}

  /* Wird ausgelöst, sobald die Antworten des Befragten auf dem Server gespeichert wurden. */
  onSubmit(ngsRespondent) {
    // Details des Befragten
    console.log(ngsRespondent.respondent);

    // Antworten des Befragten
    console.log(ngsRespondent.answers);

    // Werte der Data-Attribute der Security Items
    console.log(ngsRespondent.dataAttributes);
    
    this.formContext.httpClient.post('http://www.yourrestsite.com/yourapi/saveanswers', 
        ngsRespondent.answers, {}).subscribe();
  }

  /* Wird ausgelöst, sobald die Antworten des Befragten auf dem Server aktualisiert wurden. */
  onUpdate(ngsRespondent) {console.log('update', ngsRespondent);}
}
```

Die **NGSForm** Basisklasse stellt die folgenden Eigenschaften bereit, die Sie in Ihrer abgeleiteten Klasse wiederverwenden können.&#x20;

```javascript
class NGSFormCode {
    // Aktuelle Umfrage
    survey;
    // Hilfsklasse für den Form-Kontext
    formContext;
    // Aktuelle Antworten des Befragten
    respondentAnswers;
    // Aktueller Befragter
    respondent;
    // Aktueller ausgeführter Sprachcode
    language;
    // Aktuelle Werte der Data-Attribute aus Security Items
    dataAttributesValues;
 }
```

**FormContext** stellt die folgenden Eigenschaften bereit, die Sie aus Ihrer von NGSFormCode abgeleiteten Klasse über die Eigenschaft formContext verwenden können.

```javascript
export class FormContext {
    // Aktuelle Antworten des Befragten
    private respondentAnswers$: Observable<RespondentAnswer[]>,
    // Aktuelle Data-Attribute der Security Items
    private dataAttributesValues$: Observable<RespondentAnswer[]>,
    // Aktuelle Sprache des Befragten
    private language$: Observable<Language>,
    // Angular HTTP client
    private httpClient: HttpClient,
}
```

**Respondent** ist die Eigenschaften des Befragten

```javascript
export interface Respondent {
  id: string;
  surveyId?: string;
  panelistId?: string;
  contextUsername?: string;
  resumeUId?: string;
  resumePageId?: string;
  resumeQuestionId?: string;
  startDate: Date;
  voteDate?: Date;
  archiveDate?: Date;
  iPSource?: string;
  changeUID?: string;
  progressSaveDate?: Date;
  languageCode: string;
  timeToEnd?: number;
  validated: boolean;
  userAgent?: string;
  platform?: string;
  platformOS?: number;
  mobileOS?: boolean;
  longitude?: number;
  latitude?: number;
}
```

**Respondent** ist die Eigenschaften des Befragten

```javascript
export interface Respondent {
  id: string;
  surveyId?: string;
  panelistId?: string;
  contextUsername?: string;
  resumeUId?: string;
  resumePageId?: string;
  resumeQuestionId?: string;
  startDate: Date;
  voteDate?: Date;
  archiveDate?: Date;
  iPSource?: string;
  changeUID?: string;
  progressSaveDate?: Date;
  languageCode: string;
  timeToEnd?: number;
  validated: boolean;
  userAgent?: string;
  platform?: string;
  platformOS?: number;
  mobileOS?: boolean;
  longitude?: number;
  latitude?: number;
}
```

&#x20;**SecurityItemAuthorization** verfolgt alle Eigenschaften, die von einem authentifizierten Security Item zurückgegeben werden.

```javascript
export interface SecurityItemAuthorization {
  securityItemId?: string;
  authorizationToken?: string;
  sessionCode?: string;
  sessionRespondent?: NGSRespondent;
  sessionPanelist: NGSPanelist;
  dataAttributesValues?: SecurityItemDataAttributeValue[];
}
```
