2006

Jun

26

Av Rolf

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

Din epost-adress stannar hos oss.