tirsdag den 2. februar 2010

Infopath date range search with multiple selections

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.

Cannot Access a local SharePoint site from server console

Jeg har set dette problem på flere servere og det virker til at være ret vilkårligt, hvornår eller om det opstår. Det virker fint hvis du tilgår sharepoint sitet, fra en klient pc. Efter at have brugt en del tid på at undersøge problemet, fandt jeg en løsning:

"From what I've gathered it's a loopback check issue. I've seen it come up as a result of installing WSS SP2 a few times as well. I've seen it "randomly" happen on customers' servers all over the place. I say randomly because I'm guessing that customers have installed Windows updates on these servers which may have installed an update which has caused it.

The fix is to disable the loopback check in the registry. I pulled the instructions on how to from MS KB 896861."

Method 2: Disable the loopback check

Follow these steps:

  1. Click Start, click Run, type regedit, and then click OK.
  2. In Registry Editor, locate and then click the following registry key:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
  3. Right-click Lsa, point to New, and then click DWORD Value.
  4. Type DisableLoopbackCheck, and then press ENTER.
  5. Right-click DisableLoopbackCheck, and then click Modify.
  6. In the Value data box, type 1, and then click OK.
  7. Quit Registry Editor, and then restart your computer.


Kilde: DavidLozzi

Sharepoint - Attach content database, som ikke er samme version(Windows server 32bit/64bit).

Når man skal genskabe en content DB fra en anden Sharepoint server, som har en ældre/nyere version eller er 32/64 bit version, så melder den en fejl om at det er en forkert version man prøver at attach'e.
Løsningen er at, der findes en tabel i sharepoint content databasen, som har et versionsnummer. Tabellen hedder: dbo.Versions.
Hvis man ændre versionen til den ælste version, vil man kunne tilføje DB'en og bruge dens content.
OBS! Begge felter skal ændres!