I forbindelse med et Infopath projekt, havde kunden brug for at kunne udvælge specifikke produkter i et datointerval fra en database. Så vidt jeg kunne læse mig frem til, er det ikke noget Infopath understøtter "out-of-the-box", derfor blev løsningen at kode en knap som havde den funktionalitet.
Min søgefunktion var tilknyttet en gentaget tabel og så sådan ud:
En simple opstilling, hvor der er mulighed for at kombinere 3 produkter med et datointerval.
Søg-funktionen:
//Hent værdien af felterne som du vil have med i søgningen
XPathNavigator queryField1 = MainDataSource.CreateNavigator().SelectSingleNode("/dfs:myFields/my:produkt1", NamespaceManager);
string querySeed1 = queryField1.Value;
XPathNavigator queryField2 = MainDataSource.CreateNavigator().SelectSingleNode("/dfs:myFields/my:produkt2", NamespaceManager);
string querySeed2 = queryField2.Value;
XPathNavigator queryField3 = MainDataSource.CreateNavigator().SelectSingleNode("/dfs:myFields/my:produkt3", NamespaceManager);
string querySeed3 = queryField3.Value;
XPathNavigator queryField4 = MainDataSource.CreateNavigator().SelectSingleNode("/dfs:myFields/my:date1", NamespaceManager);
string querySeed4 = queryField4.Value;
XPathNavigator queryField5 = MainDataSource.CreateNavigator().SelectSingleNode("/dfs:myFields/my:date2", NamespaceManager);
string querySeed5 = queryField5.Value;
//Sæt værdien for datoen hvis den er tom.
if (querySeed4.Equals(""))
{
querySeed4 = "01-01-2000";
}
if (querySeed5.Equals(""))
{
querySeed5 = "01-01-2050";
}
//Ryd værdien af felterne så de ikke kommer med i søgningen
queryField1.SetValue("");
queryField2.SetValue("");
queryField3.SetValue("");
queryField4.SetValue("");
queryField5.SetValue("");
//Søgestrengen med de felter fra infopath formularen
string customQuery = " where [impl] BETWEEN #" + querySeed4 + "# AND #" + querySeed5 + "# AND ([solution] = '" + querySeed1 + "' OR [solution] = '" + querySeed2 + "' OR [solution] = '" + querySeed3 + "')";
//Databaseforbindelsen
AdoQueryConnection newQuery = (AdoQueryConnection)MainDataSource.QueryConnection;
string origCommand = newQuery.Command.ToString();
//Forspørgelsen med vores søgestreng
newQuery.Command = origCommand + customQuery;
//Eksekver kommandoen
newQuery.Execute();
//Reset strengen
newQuery.Command = origCommand;
//set felterne til det som brugeren har tastet ind!
queryField1.SetValue(querySeed1);
queryField2.SetValue(querySeed2);
queryField3.SetValue(querySeed3);
//Hvis der ikke er tastet dato sættes den til tom ellers værdien af feltet
if (querySeed4.Equals("01-01-2000"))
{
queryField4.SetValue("");
}
else
{
queryField4.SetValue(querySeed4);
}
if (querySeed5.Equals("01-01-2050"))
{
queryField5.SetValue("");
}
else
{
queryField5.SetValue(querySeed5);
}
Det er lavet med en Access database som ligger i et Sharepoint dok. Men det kunne ligeså vel ligge i en SQL database.
Ingen kommentarer:
Send en kommentar