2006

Jun

26

Av

Många vill använda FileMaker som databas för ASP.NET-lösningar, kanske inte som enda databas men för att hämta viss information i en större lösning. Jag har tidigare visat att det är relativt enkelt att arbeta mot FileMaker som databas, men inte visat exakt hur. För de som är bevandrade i antingen ODBC eller XML och web-anrop är det kanske en smal sak, för er andra ska jag visa ett sätt att göra det.

Att kommunicera med FileMaker kan göras på 2 sätt, antingen med ODBC eller med XML, jag har uteslutande valt XML för att slippa göra ODBC-kopplingar på web-servern och kanske också för att det är snabbare(?). 

XML-kommunkation består av 2 saker. Till en början måste man sätta ihop URL-strängen som ska skickas till FileMaker-servern såsom FileMaker önskar. Enklast är att titta i dokumentationen till FileMaker Advanced Server, där finns massor med exempel och råd. En URL kan se ut så här:

http://ip-adress/fmi/xml/fmresultset.xml?-db=Databasnamn
&-lay=Layoutnamm&Data=2006&-find

Denna förfrågan till FileMaker returnerar alla poster i databasen “Databasnamn” med alla fält som finns på layouten “Layoutnamn” och där fältet “Data” innehåller värdet “2006″. Resultatet kommer i form av ett XML-dokument med en viss grammatik som anges till “fmresultset.xml” (det finns några olika att välja mellan, denna är den som förespråkas).

Om du vill ha hjälp att sätta ihop URL-strängar med rätt syntax rekommenderas open source-biblioteket fmDotNet frånwww.connectingdata.com som jag tidigare tipsat om. Med hjälp av detta får du givetvis ut information också som lätt kan presenteras på valfri ASP.NET-sida, vilket är nästa steg.

Om det bara finns text och numeriska fält på layouten är det ofta enklare att sätta ihop URL-frågan för hand, stoppa in den i en ObjectDataSource och göra om XML-resultatet till en tabell som med hjälp av några dra-släpp-operationer i Visual Studio blir en uppställning där du kan gå mellan olika sidor osv. som i mitt tidigare exempel. Där fanns en funktion GetData som returnerar en DataTable enligt följande:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URL); 
// Skicka frågan

..
// ladda in i XMLDocument
..

DataTable dt = new DataTable("records");
XmlNode eNode = x.DocumentElement;

// skapa kolumner i DataTable
dt.Columns.Add("record_id", System.Type.GetType("System.String"));
XmlNodeList list = 
 eNode.SelectNodes("./fm:metadata/fm:field-definition", nsmanager);
foreach (XmlNode n in list)
{
    XmlNode attr = n.Attributes.GetNamedItem("name");
    dt.Columns.Add(attr.Value, System.Type.GetType("System.String"));
};

// Gå genom XML-dokument och skapa nya rader i tabellen DataTable
XmlNodeList recordlist = 
   eNode.SelectNodes("./fm:resultset/fm:record", nsmanager);
foreach (XmlNode record in recordlist)
{
    DataRow dRow = dt.NewRow();

    XmlNode attr = record.Attributes.GetNamedItem("record-id");
    dRow["record_id"] = attr.InnerText;

    XmlNodeList fieldlist = 
       record.SelectNodes("fm:field", nsmanager);
    foreach (XmlNode field in fieldlist)
    {
        attr = field.Attributes.GetNamedItem("name");
        string s = field.SelectSingleNode("fm:data", nsmanager).InnerText;
        dRow[attr.Value] = field.SelectSingleNode("fm:data", nsmanager).InnerText;
    };
    dt.Rows.Add(dRow);
};

// returnera tabellen
return dt;

Denna kodsnutt är i princip allt som behövs för att hämta data från FileMaker, snabbt och lätt, i kombination med en GridView eller liknande, se mitt tidigare exempel. Jag har använt den i flera web-lösningar som använder FileMaker som enda databas, eller som en av flera datakällor, med mycket bra resultat.

Skriv en kommentar

  • (will not be published)
  • − 3 = six

Läs också: