Table of Contents

ML-Column

Framework Studio bietet einen Mechanismus, um Dateninhalte in mehreren Sprachen zu speichern.

Eine beliebige Tabellen-Spalte, in der eine Zeichenkette abgelegt ist, kann im Tabelleneditor als MLColumn markiert werden. Vorraussetzung ist jedoch, dass die Tabelle die Spalte FSRowID enthält, weil diese als eindeutige Referenz auf den Datensatz benötigt wird.

Ist eine Tabellen-Spalte als MLColumn gekennzeichnet, dann werden die fremdsprachigen Texte in der Tabelle dbRun_MLStrings abgelegt. Die normale Tabellen-Spalte beinhaltet die Texte in Default-Sprache.

Caution

Fehlt einer Component das Property ROWID (mit Mapping auf die DB-Column FSRowID), ist der Mechanismus für diese Component deaktiviert.

Join-Components können keine ML-Columns aus mehreren Tabellen verabreiten, da die Component lediglich ein ROWID-Property betrachtet. Werden mehrere ROWID-Properties aus verschiedenen Tabellen eingebunden, dann ist es Zufall, welche ROWID für den MLColumn-Mechanismus herangezogen wird.

Customizing-Package

Die Eigenschaft MLColumn kann im Customizing-Package gesetzt werden. Somit kann man in Kunden-Umgebungen den Mechanismus gezielt für die gewünschten Tabellen-Spalten aktivieren.

Anwendung in Default-Sprache

Die Default-Sprache ist de - außer man definiert der Datenbank-Tabelle dbRun_Config mit dem ConfigKey ML_DEFAULT_LANGUAGE eine andere Default-Sprache.

Wird die Anwendung in der Default-Sprache gestartet, dann arbeitet Framework Studio mit der ganz normalen Spalte der Tabelle - ohne jegliche Sonder-Logik.

Die fremdsprachigen Texte können nicht beeinflusst werden. Ändert man einen Text, dann bleiben die ggf. existierenden Übersetzungen unverändert erhalten. Bei Bedarf müsste man die Anwendung anschließend in den Fremdsprachen starten und den gewünschten Text dort ebenfalls anpassen.

Anwendung in Fremdsprache

Startet man die Anwendung mit einer Fremdsprache, dann greifen besondere Mechanismen. Die entsprechenden Component-Properties behandeln dann ausschließlich den fremdsprachigen Text mit einem Fallback auf die Default-Sprache.

Die ML-Column-Logik wird von den ganz normalen Component-Properties behandelt. Dadurch wirkt sie sich automatisch auf alle Bereiche der Anwendung aus - inkl. Form-Databinding und Reporting.

  • Load: Beim Zugriff auf das entsprechende Component-Property wird der Text aus der Tabelle dbRun_MLStrings gelesen. Existiert dort kein Eintrag, wird der Text der Default-Sprache aus der normalen Tabellen-Spalte verwendet.

  • Update: Wird der Text geändert, dann wird der Eintrag in der entsprechenden Fremdsprache überschrieben. Der Text in der Default-Sprache kann nicht verändert werden. Wird der fremdsprachige Text geleert, dann wird beim Save der Component der Eintrag aus der Übersetzungs-Tabelle gelöscht und das Component-Property fällt auf die Default-Sprache zurück.

  • Insert: Beim Anlegen eines neuen Datensatzes wird der eingegebene Text sowohl in der normalen Tabelle als auch in der Fremdsprache gespeichert.

  • Delete: Wird der Datensatz aus der Datenbank gelöscht, dann werden auch alle zu dieser FSROWID gespeicherten Texte aus der Übersetzungs-Tabelle gelöscht.

Such-Funktion

Note

Dieses Feature muss in der Datenbank-Tabelle dbRun_Config mit dem ConfigKey ML_SEARCH_ENABLED aktiviert werden.

Bei automatischen Suchfeldern werden die Fremdsprachen-Texte zusätzlich berücksichtigt.

Wird die Anwendung in einer Fremdsprache ausgeführt, dann enthält die erzeugte SQL-Bedingung beinhaltet sowohl die normale Bedingung, welche den Treffer in der Default-Sprache sucht als auch einen Lookup auf die Texte in der entsprechenden Fremdsprache.

-- Beipiel:
Select [....] FROM Tabelle
WHERE (Spalte LIKE 'abc%'
    OR EXISTS (SELECT 1 FROM dbRun_MLStrings
        WHERE ML_TableName = 'TABELLE' AND ML_ColumnName = 'SPALTE'
        AND ML_Iso = 'en' AND ML_FSROWID = FSROWID
        AND ML_SearchText LIKE 'abc%'))
Note

Der Lookup berücksichtigt die ersten 200 Zeichen des Textes.

Die Fremdsprachen-Texte können auch Langtexte speichern. Diese lassen sich nicht indizieren. Aus Performance-Gründen erfolgt der Lookup über eine separate indiziere Spalte ML_SearchText. Diese wird (wenn das Feature aktiviert ist) von der Anwendung zusammen mit dem Langtext gespeichert.

Sprache zur Laufzeit ändern

Die Sprache ist mit dem Start der Anwendung an Global.SelectedLanguage festgelegt.

Wird für einen bestimmten Code eine abweichende Sprache benötigt, dann kann dies über Global.UseMLColumnLanguage geschehen. Während der übergebenen Action kann so ein abweichender Iso-Code gesetzt werden. Über das Property Global.MLColumnLanguage kann die aktuell gültige Sprache ermittelt werden.

this.Global.UseMLColumnLanguage("fr", () =>
{
    // Erzeugen des Reports in französischer Sprache.
});
Important

Diese Funktion beeinflusst nicht die in der Oberfläche angezeigten Daten. Es gibt keine Möglichkeit dauerhaft auf die Sprache Einfluss zu nehmen.

Tips für Entwickler

Finden von MLColumns

Wird eine DBColumn als MLColumn gekennzeichnet wird dafür der folgende Code generiert:

public class Package_FSColumnName : FS.Demo.MDT.ArticleName
{
    public Package_FSColumnName()
    {
        this.m_IsMLColumn = true;
    }
}

Dadurch können alle MLColumns mit dem Text this.m_IsMLColumn = true; über die Code-Suche gefunden werden. Dabei die Suche auf die DBTables einschränken.