Nelze automaticky odeslat strukturovaných dat XML do webové služby v aplikaci InfoPath 2003

Překlady článku Překlady článku
ID článku: 826989 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Při odeslání informací z aplikace InfoPath odeslání formuláře webové služby pomocí aplikace InfoPath integrované funkce, může nastat jeden z následujících příznaků:
  • Může se zobrazit chybová zpráva. Chybová zpráva se liší podle informací, které je odesílán a kódování metody vyvolání na webové službě.
  • Můžete si všimnout, že neočekávané data odeslat webové službě.
Tento článek také popisuje následující:
  • Jak InfoPath odešle data webové službě.
  • Dvě metody pro odeslání obsah formuláře aplikace InfoPath do webové služby.

Příčina

Když InfoPath odešle data webové službě, odešle obsah uzel XML, který byl vybrán jako parametr, ale není odeslat uzel XML samotného. To obecně pracuje dobře. Máte například metodu webové služby následujícím způsobem:
[WebMethod]
   public void SendSampleString( string sampleString )
   {
      //Do something interesting with the sample string.
   } 
Pokud odešlete na tuto metodu webové služby následující element XML parametr sampleString vyplněno "Ahoj, World!" (podle očekávání).
<sampleElement>"Hello, World!"</sampleElement>
Bohužel toto chování může být obtížné odeslat uzlů XML nebo celý formulář do webové služby. Máte například metodu webové služby následujícím způsobem:
[WebMethod]
   public string SendXMLElement( System.Xml.XmlElement theElement )
   {
      //Report how many children the submitted node had.
      return "Node with " + theElement.ChildNodes.Count + " children submitted.";
   }
Pokud odeslat příkladu prvek XML k odeslání Tato metoda pomocí aplikace InfoPath integrované funkce, obsah parametru theElement generovat chybu. K této chybě dochází, protože obsah prvek XML ("Ahoj, World!"), jsou odesílány do metodu webové služby. Generuje chybu, protože řetězec není platný prvek XML, .NET Framework; zobrazí se chybová zpráva v aplikaci InfoPath.

Podobné potížím dochází, pokud se pokusíte odeslat celý formulář příkladu metodu webové služby. V tomto případě InfoPath odešle všechny podřízené uzly formulář, ale není odeslat kořenový uzel. Výsledkem je více nejvyšší úrovně uzlů XML odesílán. Protože to není také platný XML, .NET Framework vybere první uzel XML nejvyšší úrovně a používá jako parametr theElement. Všechny ostatní uzly jsou ignorovány a tím poskytuje vzhledu, jejich nebudou odeslány.

Řešení

Tento problém je opraven aktualizací Office 2003 Service Pack 1. Problém vyřešíte instalací nejnovější aktualizace Service Pack pro sadu Microsoft Office 2003.

Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
870924Jak získat nejnovější aktualizaci service pack pro sadu Office 2003

Jak potíže obejít

Chcete-li tento problém vyřešit, Odeslat zápis vlastní akci skriptu. Použijte některou z následujících metod:
  • Sekundární zdroj dat použít k provedení operace odeslání.
  • Zápis kódu, který vytvoří vlastní zprávy SOAP a, které odešle webové služby.

Použít zdroj dat sekundární

  1. V nabídce Nástroje klepněte na Sekundární zdroje dat.
  2. V dialogovém okně Sekundární zdroje dat klepněte na tlačítko Přidat.
  3. Na první stránce Průvodce nastavením zdroje dat klepněte na Webovou službu a potom klepněte na tlačítko Další.
  4. Zadejte umístění webové služby, které chcete odeslat a potom klepněte na tlačítko Další.
  5. Vyberte metodu webové služby, které chcete použít a potom klepněte na tlačítko Další.
  6. Když budete vyzváni k vyberte pole nebo skupiny z formuláře, který bude použit k vyplnění parametry metodu webové služby, ponechejte prázdné parametry a klepněte na tlačítko Další.
  7. Klepnutím zrušte zaškrtnutí políčka "Připojit k tomuto sekundárnímu zdroji dat při otevření formuláře", klepněte na tlačítko Dokončit a potom klepněte na tlačítko OK zavřete dialogové okno Sekundární zdroje dat
  8. V nabídce Nástroje klepněte na příkaz Odeslání formulářů.
  9. V dialogovém okně Odesílání formulářů příkaz Povolit odeslání.
  10. V seznamu Odeslat klepněte na tlačítko Odeslat pomocí vlastního skriptu a potom klepněte na tlačítko OK otevřete Microsoft Script Editor.
  11. V metodě XDocument::OnSubmitRequest použít skript podobně jako následující skript odeslat celý formulář.

    Poznámka: Můžete také odeslat jednotlivé prvky ve formuláři. Zkuste
    try{
          //Get a reference to the SendXMLElement secondary data source.
          var objSendXMLElement = XDocument.GetDOM("SendXMLElement");
          objSendXMLElement.setProperty( "SelectionNamespaces",
             'xmlns:s1="http://joelallxp.microsoft.com/schema" ' +
             'xmlns:s0="http://tempuri.org/" ' +
             'xmlns:dfs="http://schemas.microsoft.com/office/infopath/2003/dataFormSolution"' );
     
          //Remove any data from the SendXMLElement secondary data source.
          var objData = objSendXMLElement.selectSingleNode(
             "/dfs:myFields/dfs:queryFields/s0:SendXMLElement/s0:theElement");
          var objCurrentData = objData.selectNodes("@* | node()");
          objCurrentData.removeAll();
     
          //Clone the XDocument.
          var objClonedDocument = XDocument.DOM.documentElement.cloneNode(true );
          objData.appendChild( objClonedDocument );
       
          //Call the "Query" method of the secondary data source to send the data.
          XDocument.DataObjects("SendXMLElement").Query();
       
          //Report the results of the submit.
          XDocument.UI.Alert( 
             objSendXMLElement.selectSingleNode(
                "/dfs:myFields/dfs:dataFields/s0:SendXMLElementResponse/s0:SendXMLElementResult").text );
          eventObj.ReturnStatus = true;
       }
       catch(ex)
       {
          eventObj.ReturnStatus = false;
       }

Psát kód

  1. V nabídce Nástroje klepněte na příkaz Odeslání formulářů.
  2. V dialogovém okně Odesílání formulářů příkaz Povolit odeslání.
  3. V seznamu Odeslat klepněte na tlačítko Odeslat pomocí vlastního skriptu a potom klepněte na tlačítko OK otevřete Microsoft Script Editor.
  4. V metodě XDocument::OnSubmitRequest použít skript podobně jako následující skript odeslat celý formulář.

    Poznámka: Můžete také odeslat jednotlivé prvky ve formuláři.
    try
       { 
          //Create a SOAP object.
          var objSOAPConnector = new ActiveXObject("MSOSOAP.HttpConnector30");
       
          //Set the EndPointURL property to point to the Web service.
          objSOAPConnector.Property("EndPointURL") = "http://server/WebService1/Submit.asmx";
     
          //Set the SoapAction property to point to the Web service method. You can find this URI 
          //in the WSDL file of the Web service.
          objSOAPConnector.Property("SoapAction") = "http://tempuri.org/SendXMLElement";
          objSOAPConnector.Connect();
          
          //Begin construction of a SOAP message to send to the Web service.
          objSOAPConnector.BeginMessage();
     
          var objSOAPSerializer = new ActiveXObject("MSOSoap.SoapSerializer30");
          objSOAPSerializer.Init( objSOAPConnector.InputStream );
          objSOAPSerializer.startEnvelope();
          objSOAPSerializer.startBody();
     
          //Construct the structure that marks the method name and the parameter name 
          //that you are sending.
          objSOAPSerializer.StartElement( "SendXMLElement", "http://tempuri.org/" );
          objSOAPSerializer.StartElement( "theNode", "http://tempuri.org/" );
     
          //Write out the XML of the document.
          objSOAPSerializer.WriteXml( XDocument.DOM.documentElement.xml );
     
          //Finish each element.
          objSOAPSerializer.EndElement();
          objSOAPSerializer.EndElement();
     
          //Call EndMessage to complete the SOAP message and send it to the Web service method.
          //This results in the Web service method being called.
          objSOAPSerializer.endBody();
          objSOAPSerializer.endEnvelope(); 
          objSOAPConnector.EndMessage();
     
          //Use a SoapReader to read the response from the Web service method .
          var ResponseReader = new ActiveXObject("MSOSOAP.SoapReader30");
          ResponseReader.Load( objSOAPConnector.OutputStream );
     
          //If there was no error, return true.
          if (ResponseReader.Fault != null)
          {
             eventObj.ReturnStatus = false;
             throw "Error submitting data: " + ResponseReader.Fault.xml;
          }
          eventObj.ReturnStatus = true;
       } 
       catch (ex)
       { 
          XDocument.UI.Alert("Failed to submit document: " + ex.description); 
       }

Prohlášení

Toto chování je záměrné.

Toto chování je záměrné Microsoft Office InfoPath 2003. Toto chování změnit Microsoft Office InfoPath 2003 Service Pack 1.

Další informace

Kroky pro reprodukci tohoto chování

  1. Vytvořit webové službě, která obsahuje následující dvě metody:
    • Metoda 1
      [WebMethod]
         public void SendSampleString( string sampleString )
         {
            //Do something interesting with the sample string.
         } 
    • Metoda 2
      [WebMethod]
         public string SendXMLElement( System.Xml.XmlElement theElement )
         {
            //Report how many children the submitted node had.
            return "Node with " + theElement.ChildNodes.Count + " children submitted.";
         }
  2. Navrhnout nový formulář InfoPath výběrem Nový ze zdroje dat.
  3. V okně Průvodce nastavením zdroje dat vyberte Webové služby a potom klepněte na tlačítko Další.
  4. Klepněte na tlačítko Přijmout a odeslat a potom klepněte na tlačítko Další.
  5. Pro příjem dat metodu webové služby postupujte takto:
    1. Zadejte adresu webové služby, které jste vytvořili a potom klepněte na tlačítko Další.
    2. V seznamu Vyberte operaci klepnutím SendXMLElement a potom klepněte na tlačítko Další.
  6. Pro odeslání dat metodu webové služby postupujte takto:
    1. Zadejte adresu webové služby, které jste vytvořili a potom klepněte na tlačítko Další.
    2. V seznamu Vyberte operaci klepnutím SendXMLElement a potom klepněte na tlačítko Další.
  7. Klepněte na tlačítko změnit vyberte parametr operace odeslání.
  8. V seznamu dataFields klepněte SendXMLElementResult, klepněte na tlačítko OK a potom klepněte na tlačítko Další.
  9. Vyberte Navrhnout nejprve zobrazení dat a potom klepněte na tlačítko Dokončit zavřete dialogové okno Průvodce nastavením zdroje dat.
  10. Do formuláře přidat pole SendXMLElementResult.
  11. Náhled formuláře.
  12. V ovládacím prvku Odeslat výsledek uzel XML zadejte Ahoj, World!
  13. V nabídce soubor klepněte na tlačítko Odeslat.

    Zobrazí se následující chybová zpráva:
    Aplikace InfoPath nemůže odeslat formulář.
    Při odeslání formuláře došlo k chybě.

    Zobrazit detaily:
    Odpověď SOAP naznačuje, že došlo k chybě:
    Server nemohl přečíst požadavek. --> Tam je chyba v dokumentu XML (1,409). --> Určené přetypování není platné.
  14. Zavřete okno Náhled a odeslat formulář do režimu návrhu.
Chcete-li tento problém vyřešit, použijte některou z metod zmíněné v tomto článku v části "Řešení".

Vlastnosti

ID článku: 826989 - Poslední aktualizace: 28. července 2006 - Revize: 4.3
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Office InfoPath 2003
  • Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
Klíčová slova: 
kbmt kbtshoot kbprb kbbug KB826989 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:826989

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com