Server Metadata

FMData can query FileMaker Server for information about the server, databases, layouts, scripts, and field metadata.

Product Information

var info = await client.GetProductInformationAsync();

Console.WriteLine(info.Name);          // e.g., "FileMaker"
Console.WriteLine(info.Version);       // System.Version
Console.WriteLine(info.BuildDate);     // DateTime
Console.WriteLine(info.DateFormat);    // e.g., "MM/dd/yyyy"
Console.WriteLine(info.TimeFormat);    // e.g., "HH:mm:ss"
Console.WriteLine(info.TimeStampFormat);

List Databases

IReadOnlyCollection<string> databases = await client.GetDatabasesAsync();

foreach (var db in databases)
{
    Console.WriteLine(db);
}

List Layouts

IReadOnlyCollection<LayoutListItem> layouts = await client.GetLayoutsAsync();

foreach (var layout in layouts)
{
    Console.WriteLine(layout.Name);

    if (layout.IsFolder)
    {
        foreach (var child in layout.FolderLayoutNames)
        {
            Console.WriteLine($"  {child.Name}");
        }
    }
}

Get Layout Metadata

Retrieve detailed field and value list information for a specific layout:

LayoutMetadata meta = await client.GetLayoutAsync("Invoices");

// Field metadata
foreach (var field in meta.FieldMetaData)
{
    Console.WriteLine($"{field.Name}: {field.Result} ({field.Type})");
    Console.WriteLine($"  AutoEnter: {field.AutoEnter}, NotEmpty: {field.NotEmpty}");
    Console.WriteLine($"  Global: {field.Global}, MaxRepeat: {field.MaxRepeat}");
}

// Value lists
foreach (var vl in meta.ValueLists)
{
    Console.WriteLine($"Value list: {vl.Name} ({vl.Type})");
    foreach (var item in vl.Values)
    {
        Console.WriteLine($"  {item.DisplayValue} = {item.Value}");
    }
}

You can optionally pass a record ID to get value lists that depend on a specific record’s context:

var meta = await client.GetLayoutAsync("Invoices", recordId: 42);

List Scripts

IReadOnlyCollection<ScriptListItem> scripts = await client.GetScriptsAsync();

foreach (var script in scripts)
{
    Console.WriteLine(script.Name);

    if (script.IsFolder)
    {
        foreach (var child in script.FolderScriptNames)
        {
            Console.WriteLine($"  {child.Name}");
        }
    }
}

This site uses Just the Docs, a documentation theme for Jekyll.