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.