> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Ereignisprotokoll aus System Monitor

> Laden Sie das Ereignisprotokoll des ABBYY FlexiCapture System Monitor als CSV über die GetEventsCSV-POST-Anfrage herunter, mit Filter-, Spalten-, Sortier- und Mandantenparametern.

Dieses Protokoll erfasst alle Ereignisse und Fehler in ABBYY FlexiCapture, z. B. An- und Abmeldeereignisse von System Administratoren sowie das Starten und Stoppen des Application Server und von Processing Stations. Es enthält keine Ereignisse, die in Mandanten aufgetreten sind.

<Warning>
  Nur Benutzer mit den Berechtigungen eines System Administrator können Ereignisprotokolle aus System Monitor herunterladen. Ein System Administrator ist der Administrator eines Standardmandanten.
</Warning>

Verwenden Sie zum Herunterladen dieses Protokolls eine POST-Anfrage:

```http theme={null}
POST https://<server address>/FlexiCapture12/Monitoring/Tenant/GetEventsCSV
```

<div id="request-parameters">
  ## Anfrageparameter
</div>

Alle Parameter sind erforderlich. Stellen Sie sicher, dass sie korrekt angegeben werden.

<Info>
  Die Suche in Oracle Database unterscheidet zwischen Groß- und Kleinschreibung. Berücksichtigen Sie dies, wenn Sie Oracle Database verwenden.
</Info>

| Parameter         | Typ    | Beschreibung                                                                                                                                                                                                                                                                 |
| ----------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `filter`          | string | Filterbedingungen für das Protokoll. Kombinieren Sie Bedingungen ausschließlich mit den Operatoren `AND` und `OR`, die im Parameter `GeneralOperator` festgelegt sind. Weitere Informationen finden Sie unter [Erstellen des Filterparameters](#build-the-filter-parameter). |
| `columnsOrder`    | string | Kommagetrennte Liste der Spalten, die in den Bericht aufgenommen werden: `ID`, `Date`, `EventType`, `Comment`, `UserFullName`, `Workstation`, `BatchId`, `BatchName`, `BatchTypeName`, `StageFromName`, `StageToName`, `ProjectName`, `RoleName`, `TenantName`.              |
| `sortColumnindex` | int    | Index der Spalte, die zum Sortieren der Datensätze im Protokoll verwendet wird.                                                                                                                                                                                              |
| `sortOrder`       | bool   | Sortierreihenfolge: `true` sortiert in absteigender Reihenfolge, `false` in aufsteigender Reihenfolge.                                                                                                                                                                       |
| `tenantId`        | int    | Mandanten, die in das Protokoll aufgenommen werden sollen: `-1` für alle verfügbaren Mandanten, `0` für den Standardmandanten oder eine bestimmte Mandanten-ID (`1` oder höher).                                                                                             |

<div id="build-the-filter-parameter">
  ### Filterparameter erstellen
</div>

Der Parameter `filter` erwartet ein JSON-Objekt. Zum Beispiel:

```json theme={null}
{
  "GeneralOperator": "AND",
  "FilterItems": [
    {
      "PropertyKey": "Date",
      "PropertyOperator": "BETWEEN",
      "PropertyValues": [
        "2022-09-12",
        "00:00:00",
        "2023-10-12",
        "23:59:59"
      ]
    }
  ]
}
```

Um die Werte für die Parameter `PropertyKey` und `PropertyOperator` zu finden, erstellen Sie in der Administration and Monitoring Console einen Filter:

<Steps>
  <Step title="Öffnen Sie die Entwicklertools des Browsers">
    Klicken Sie im Browsermenü auf **More tools → Developer tools** und wechseln Sie zur Registerkarte **Network**.
  </Step>

  <Step title="Erstellen Sie einen Filter in der Konsole">
    Starten Sie die Administration and Monitoring Console, wechseln Sie zu **System Monitor → Event log** und klicken Sie auf die Schaltfläche <img src="https://mintcdn.com/abbyy/39LtOHLEp1q7pm1x/images/flexi-capture/Add_filter.png?fit=max&auto=format&n=39LtOHLEp1q7pm1x&q=85&s=7fca1d511f8470021946ae439989fb68" alt="Schaltfläche „Filter hinzufügen“" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="22" height="22" data-path="images/flexi-capture/Add_filter.png" />.
  </Step>

  <Step title="Wenden Sie die Filterkriterien an">
    Geben Sie die Filterkriterien an und klicken Sie auf **Apply**.
  </Step>

  <Step title="Lesen Sie die Filterparameter ab">
    Klicken Sie auf die Anfrage `GetFilteredEvents`. Die Filterparameter sind auf der Registerkarte **Payload** aufgeführt.
  </Step>
</Steps>

Um Ereignisse für den Standardmandanten zu filtern, geben Sie statt `TenantName` den Parameter `TenantNameExt` an:

```json theme={null}
"FilterItems": [
  {
    "PropertyKey": "TenantNameExt",
    "PropertyOperator": "=",
    "PropertyValues": ["Default tenant"]
  }
]
```

<Note>
  Behalten Sie für den Standardmandanten im Parameter `columnsOrder` den Wert `TenantName` bei.
</Note>

<div id="example-script">
  ## Beispielskript
</div>

Das folgende PowerShell-Skript zeigt, wie Sie diese API zum Herunterladen des Ereignisprotokolls verwenden.

<Note>
  Ersetzen Sie die Parameter in diesem Skript durch die Serveradresse und Ihre Zugangsdaten.
</Note>

```powershell theme={null}
#------------------------------------------------------------------------------
# parameters
$server = "https://<server address>"
$user = "<user name>"
$password = "<password>"
# Pfad zum Ordner, in dem das Protokoll gespeichert wird
$folder = "C:\Temp\Logs\Stage"
$reportFileName = "Tenant_Events-{0:yyMMdd-HHmmss}.csv" -f (Get-Date)
# Protokollparameter
$requestBody =  @"
filter={
    "Name": "Filter Name",
    "GeneralOperator": "AND",
    "FilterItems": [
        {
            "PropertyKey": "Date",
            "PropertyOperator": "BETWEEN",
            "PropertyValues": [
                "2022-09-12",
                "00:00:00",
                "2023-10-12",
                "23:59:59"
            ]
        }
    ]
}
&columnsOrder=Id,Date,EventType,Comment,UserFullName,Workstation,BatchId,BatchName,BatchTypeName,StageFromName,StageToName,ProjectName,RoleName,TenantName,
&sortColumnindex=0
&sortOrder=true
&tenantId=0
"@
#------------------------------------------------------------------------------
$tenant = "" # Nur Standard-Mandant
$methodUri = "/Tenant/GetEventsCSV"
$authServer = $server
$ServerSitePath = "/FlexiCapture12/Monitoring"

function Write-Line($str, $color = "White")
{
    Write-Host $str -ForegroundColor $color
}

function Join-Uri
{
    param([Parameter(Mandatory, ValueFromPipeline)] [string]$parent, [string]$child)
    if ($parent -eq "") {return $child;}
    if ($child -eq ""){return $parent}
    if ($parent.endswith("/") -or $parent.endswith("\\")) {$parent = $parent.substring(0,$parent.Length-1)}
    if ($child.startswith("/") -or $child.startswith("\\")) {$child = $child.substring(1,$child.Length-1)}
    return "$parent/$child"
}

function Get-AuthTicket($server, $user, $password, $tenant)
{
    $tenantSuffix=""
    if ($tenant -ne ''){ $tenantSuffix = "?tenant=$tenant"}
    $URL = Join-Uri $authServer "/FlexiCapture12/Server/FCAuth/API/Soap$tenantSuffix"
    $SOAPRequest = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><FindUser xmlns="urn:http://www.abbyy.com/FlexiCapture"><userLogin>user</userLogin></FindUser></soap:Body></soap:Envelope>'
    $Headers = @{
        'SOAPAction' = '"#FindUser"'
        'Content-Type' = 'text/xml; charset=utf-8'
        'Authorization' = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$($user):$($password)")))"
    }
    try
    {
        $response1 = Invoke-WebRequest -Uri $URL -Headers $Headers -Body $SOAPRequest -Method 'POST'
        return $response1.Headers['AuthTicket']
    }
    catch{
        Write-Line -str "Couldn't get 'AuthTicket': $_" -color "Red"
        return ""
    }
}

function Download-CSVReport($server, $tenant, $authTicket, $methodUri, $requestBody, $folder, $reportFileName)
{
    $reportFullFilePath = Join-Path $folder $reportFileName
    #Ordner automatisch erstellen (falls nicht vorhanden)
    New-Item -ItemType Directory -Force -Path $folder | Out-Null
    if ($authTicket -eq "" -or $authTicket -eq $null)
    {
        Write-Line -str "Couldn't get 'CSV-Report'" -color "Red"
    }
    else
    {
        $header = @{ "Accept" = "*/*"}
        $session = [Microsoft.PowerShell.Commands.WebRequestSession]::new()
        $session.Cookies.Add($server, [System.NET.Cookie]::new('FlexiCaptureTmpPrn', "Ticket=$authTicket"))
        $tenantInUrl=""
        if ($tenant -ne '') { $tenantInUrl = "/$tenant"}
        $uri = Join-Uri $server $ServerSitePath | Join-Uri -child $tenantInUrl | Join-Uri -child $methodUri
        try{
            $response = Invoke-WebRequest -Uri $uri -Method 'POST' -Headers $header -WebSession $session -Body $requestBody -OutFile $reportFullFilePath -MaximumRedirection 0 -ErrorAction Ignore -PassThru
            if ($response.StatusCode -lt 300)
            {
                Write-Line "CSV-Report done: $reportFullFilePath" "Green"
            }
            else
            {
                Write-Line -str "HttpStatus $($response.StatusCode) in getting CSV-Report." -color "Red"
            }
        }
        catch{
            Write-Line -str "Couldn't get CSV-Report: $_" -color "Red"
            return ""
        }
    }
}

$authTicket = Get-AuthTicket -server $server -user $user -password $password -tenant $tenant
Download-CSVReport -server $server -tenant $tenant -authTicket $authTicket -methodUri $methodUri -requestBody $requestBody -folder $folder -reportFileName $reportFileName
```
