[ barisha1 @ 16.11.2011. 12:47 ] @
pozdrav
nadam se da sam postavio temu na dobrom mjestu :)
Napravio sam Web servis koji sam vezao za obrazac koji je napravljen u Infopathu 2010. Kada spajam na pojedinačne kontrole(textbox,combobox...) nema nikakvih problema i prilikom submita se sve upiše u bazu. Problem je se pojavio kada sam ubacio Repeating table, upisuje samo prvi redak. To sam mislio rješiti tako što bi radio submit čitavog obrasca. Kod web servisa je slijedeći:

Code:
[WebMethod]
        public void SubmitDocument(XmlDocument doc)
        {
            XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable);
            nsManager.AddNamespace("my", "http://schemas.microsoft.com/o...2003/myXSD/2011-11-15T07:34:16");
            nsManager.AddNamespace("dfs", "http://schemas.microsoft.com/o...infopath/2003/dataFormSolution");

            XmlNode root = doc.DocumentElement;
            XmlNodeList list = root.SelectNodes("/dfs:IPDocument/my:myFields/my:prodList/my:product", nsManager);

            foreach (XmlNode node in list)
            {
                string Name = node.SelectSingleNode("/dfs:IPDocument/my:myFields/my:prodList/my:product/my:Name", nsManager).InnerText;
                string Price = node.SelectSingleNode("/dfs:IPDocument/my:myFields/my:prodList/my:product/my:Price", nsManager).InnerText;
                string Amount = node.SelectSingleNode("/dfs:IPDocument/my:myFields/my:prodList/my:product/my:Amount", nsManager).InnerText;
                SubmitToDataBase(Name, Price, Amount);
            }
        }

        [WebMethod]
        public void SubmitToDataBase(string Name, string Price, string Amount)
        {
            SqlConnection conn =new SqlConnection("Data Source=SERVER;Initial Catalog=PROBA;Integrated Security=True");
                SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
                    cmd.CommandText =
                      "INSERT INTO PRODUCT " +
                      "(Name, Price, Amount) VALUES (@a, @b, @c)";
                    SqlParameter param = new SqlParameter("@a", Name);
                    cmd.Parameters.Add(param);
                    SqlParameter param1 = new SqlParameter("@b", Price);
                    cmd.Parameters.Add(param1);
                    SqlParameter param2 = new SqlParameter("@c", Amount);
                    cmd.Parameters.Add(param2);
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    conn.Close();
                    
                }


Znači u obrascu imam tri polja: Name, Price i Amount. Upišem prvi redak podatke u ova polja i sve se upiše u bazu(isto što je i radilo i bez servisa SubmitDocument). Kada u Infopathu kliknem Insert new item i tu upišem nove podatke,u bazu mi se upisuju oni podaci iz prvog retka.
Grafički bi to izgledalo ovako(a,b,c,....vrijednosti koje upisujem u obrazac):

Infopath:
a,b,c
d,e,f
g,h,i

Baza:
a,b,c
a,b,c
a,b,c

Može li itko prepoznati o čemu se radi, ja smatram da je problem u web servisu SubmitDocument,al opet nemam ideju šta....hvala unaprijed
[ Mihajlo Cvetanović @ 16.11.2011. 13:01 ] @
Pričam napamet, ali mislim da je problem u korišćenju XPath-a. Prvo koristiš apsolutnu putanju da selektuješ odgovarajuće nodove, a onda opet koristiš apsolutne putanje da bi izvukao pojedinačne podatke iz svakog noda. Cenim da u foreach petlji treba da stoje relativne XPath putanje.
[ barisha1 @ 16.11.2011. 13:06 ] @
zaboravio sam napisati,ovo je link odakle sam prepisao većinu stvari
http://www.codeproject.com/Art...e-InfoPath-form-to-web-service

@Mihajlo
ma evo čitavo jutro i to mjenjam al nema pomaka
[ Mihajlo Cvetanović @ 16.11.2011. 13:49 ] @
Navedeni članak na CodeProject-u nema ni jednu ocenu. Niko ga do sada nije procenio, ni pogledao ima li grešaka, ali zato jedan od dva komentatora na kraju članka ima isti problem kao i ti. Ne znam za ostatak članka, ali ovde je problem u XPath putanji. Umesto stringa "/dfs:IPDocument/my:myFields/my:prodList/my:product/my:Name" probaj sa stringom "my:Name". Ako to ne uspe probaj sa "./my:Name".
[ barisha1 @ 17.11.2011. 07:42 ] @
to je to,sada radi
evo rješenja
Code:

string Name = node.SelectSingleNode("my:Name", nsManager).InnerText;
string Price = node.SelectSingleNode("my:Price", nsManager).InnerText;
string Amount = node.SelectSingleNode("my:Amount", nsManager).InnerText;

Mihajlo,hvala ti puno, ovo je samo proba da shvatim kako sve funkcionira. Sada mi je ideja da napravim kao obrazac za prodaju, u zaglavlju bi bili podaci o kupcu a ispod repeating table sa artiklima. Napravio sam 2 tabele u bazi, konfiguracija i artikli(naravno sve povezano uredno). Na koji način bi mogao da sa jednim submitom sve artikle vežem na podatke o kupcu, ovako bi morao kod svakog artikla birati broj(FK_PODACI o kupcu) da se upiše u bazu??

[Ovu poruku je menjao barisha1 dana 17.11.2011. u 10:27 GMT+1]
[ Mihajlo Cvetanović @ 17.11.2011. 09:31 ] @
Na mail sam dobio samo "hvala ti puno", a ostatak poruke je dopisan kasnije, pa ga ljudi možda neće ni konstatovati. Ne znam odgovor na pitanje, to moraju drugi dobri ljudi iz C# da ti odgovore.
[ barisha1 @ 17.11.2011. 09:33 ] @
ok da znam za ubuduće,sve najbolje :)