Sie können strukturierte XML-Daten an einem Webdienst in InfoPath 2003 nicht automatisch senden

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 826989 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Sie mithilfe der integrierten InfoPath-Funktionalität zum Versenden Informationen von einem InfoPath-Formular an einen Webdienst absenden, treten möglicherweise folgende Symptome auf
  • Ihnen kann eine Fehlermeldung angezeigt werden. Die angezeigte Fehlermeldung variiert je nachdem, welche Informationen gesendet werden und welche Codierung der Methode, die im Webdienst aufgerufen wird, verwendet wird
  • Sie stellen fest, dass unerwartete Daten zum Webdienst versendet werden
Der Artikel behandelt auch die folgenden Themen:
  • Wie InfoPath Daten an einen Webdienst sendet
  • Zwei Methoden zum Versenden von Inhalten eines InfoPath-Formulars an einen Webdienst

Ursache

Wenn InfoPath Daten an einen Webdienst versendet, versendet es die Inhalte des XML-Knotens, der als Parameter gewählt wurde, aber es versendet nicht den XML-Knoten selber Das funktioniert im Allgemeinen gut Sie haben beispielsweise eine Webdienstmethode ähnlich der folgenden
[WebMethod]
   public void SendSampleString( string sampleString )
   {
      //Do something interesting with the sample string.
   } 
Wenn Sie das folgende XML-Element an dieser Webdienstmethode übermitteln, wird der SampleString Parameter (erwartet) mit "Hello, World!" gefüllt.
<sampleElement>"Hello, World!"</sampleElement>
Dieses Verhalten kann jedoch das Versenden von XML-Knoten oder des gesamten InfoPath-Formulars an einen Webdienst leider erschweren Sie haben beispielsweise eine Webdienstmethode ähnlich der folgenden
[WebMethod]
   public string SendXMLElement( System.Xml.XmlElement theElement )
   {
      //Report how many children the submitted node had.
      return "Node with " + theElement.ChildNodes.Count + " children submitted.";
   }
Wenn Sie das Beispiel-XML-Element übermitteln sendet das integrierte InfoPath an diese Methode, indem verwendet, Funktionalität, die Inhalte des TheElement Parameters erzeugen einen Fehler. Dieser Fehler tritt auf, weil nur die Inhalte des XML-Elements ("Hello, World!") an die Webdienstmethode versendet werden Da die Zeichenfolge kein gültige XML-Element ist generiert das FRAMEWORK einen Fehler; die Fehlermeldung wird in InfoPath angezeigt.

Ein ähnliches Problem tritt auf, wenn Sie versuchen, das gesamte InfoPath-Formular an die Beispiel-Webdienstmethode zu versenden In diesem Fall versendet InfoPath alle untergeordneten Knoten des InfoPath-Formulars, jedoch nicht den Stammknoten Das resultiert darin, dass mehrere XML-Knoten der obersten Ebene versendet werden Da das nicht gültiger XML-Code außerdem ist wählt das FRAMEWORK den ersten XML-Knoten der oberste Ebene aus und das FRAMEWORK verwendet es als TheElement den Parameter. Alle anderen Knoten werden ignoriert, und so entsteht der Eindruck, dass sie nicht versendet werden

Lösung

Dieses Problem wird in Microsoft Office 2003 Service Pack 1 behoben. Installieren Sie den neusten Service Pack für Microsoft Office 2003, um dieses Problem zu beheben.

Klicken Sie auf die folgende Artikelanzahl, um weitere Informationen zu erhalten, um den Artikel der Microsoft Knowledge Base zu lesen:
870924 Wie Installieren des neusten Service Pack für Office 2003

Abhilfe

Schreiben Sie in das Skript eine benutzerdefinierte Versendeaktion, um dieses Problem zu umgehen Sie können eine der folgenden Methoden anwenden
  • Verwenden Sie eine sekundäre Datenquelle, um den Versendevorgang durchzuführen
  • Schreiben Sie einen Code, der eine benutzerdefinierte SOAP-Meldung enthält und diese an den Webdienst sendet

Eine sekundäre Datenquelle verwende

  1. Klicken Sie in dem Menü Extras auf Sekundäre Datenquellen.
  2. Klicken Sie in dem Dialogfeld Sekundäre Datenquellen auf Hinzufügen.
  3. Klicken Sie auf die erste Seite von dem Assistent zum Einrichten der Datenquelle auf Webdienst auf die erste Seite von dem Assistent zum Einrichten der Datenquelle, und klicken Sie auf die erste Seite von dem Assistent zum Einrichten der Datenquelle dann auf Weiter.
  4. Angeben der Adresse des Webdiensts, die Sie senden, und klicken Sie dann auf Weiter zu.
  5. Wählen Sie die Webdienstmethode aus, die Sie verwenden möchten, und klicken Sie dann auf Weiter.
  6. Lassen Sie die Parameter leer die Parameter und klicken Sie dann auf Weiter, wenn InfoPath Sie dazu auffordert, das Feld oder das andere Gruppe aus dem Formular, das verwandt wird, um die Parameter der Webdienstmethode aufzufüllen, auszuwählen.
  7. Klicken Sie auf das "Connect to this secondary data source when the form is opened" Kontrolle-Kästchen deaktivieren, auf Fertig stellen klicken, und auf OK dann klicken, um das Dialogfeld Sekundäre Datenquellen zu schließen.
  8. Klicken Sie in dem Menü Extras auf Formulare absenden.
  9. Klicken Sie in dem Dialogfeld Formulare absenden auf Enable Submit.
  10. Klicken Sie in der Liste Absenden auf Submit using Custom Script, und klicken Sie dann auf OK, um Microsoft Skript-Editor zu öffnen.
  11. Verwenden Sie in der Methode XDocument::OnSubmitRequest des folgenden Skripts wie Skript, um das gesamte Formular abzusenden.

    Hinweis: Sie können einzelne Elemente in dem Formular außerdem senden.
    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;
       }

Code schreibe

  1. Klicken Sie in dem Menü Extras auf Formulare absenden.
  2. Klicken Sie in dem Dialogfeld Formulare absenden auf Enable Submit.
  3. Klicken Sie in der Liste Absenden auf Submit using Custom Script, und klicken Sie dann auf OK, um Microsoft Skript-Editor zu öffnen.
  4. Verwenden Sie in der Methode XDocument::OnSubmitRequest des folgenden Skripts wie Skript, um das gesamte Formular abzusenden.

    Hinweis: Sie können einzelne Elemente in dem Formular außerdem senden.
    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); 
       }

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Dieses Verhalten ist von Entwurf in Microsoft Office InfoPath 2003. Dieses Verhalten wird von Microsoft Office InfoPath 2003 Service Pack 1 geändert.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

  1. Erstellen Sie einen Webdienst,der die folgenden zwei Methoden enthält
    • Methode
      [WebMethod]
         public void SendSampleString( string sampleString )
         {
            //Do something interesting with the sample string.
         } 
    • Methode 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. Entwerfen Sie ein neues InfoPath-Formular, indem Sie Neues Formular aus Datenquelle auswählen.
  3. Wählen Sie in dem Assistent zu dem Einrichten der Datenquelle Webdienst aus, und klicken Sie dann auf Weiter.
  4. Klicken Sie auf Receive and Submit Data, und klicken Sie dann auf Weiter.
  5. Gehen Sie für das receive data Webdienstmethode folgendermaßen vor:
    1. Geben Sie an den Webdienst, der zuvor erstellt wurde, die URL ein, und klicken Sie dann auf Weiter.
    2. Klicken Sie in der Liste Select an operation auf SendXMLElement, und klicken Sie dann auf Weiter.
  6. Gehen Sie für das submit data Webdienstmethode folgendermaßen vor:
    1. Geben Sie an den Webdienst, der zuvor erstellt wurde, die URL ein, und klicken Sie dann auf Weiter.
    2. Klicken Sie in der Liste Select an operation auf SendXMLElement, und klicken Sie dann auf Weiter.
  7. Klicken Sie auf das Ändern, um einen Parameter für die Sendoperation auszuwählen.
  8. Klicken Sie in der Liste DataFields auf SendXMLElementResult, klicken Sie auf OK, und klicken Sie dann auf Weiter.
  9. Wählen Sie Datenansicht zuerst entwerfen aus, und klicken Sie dann auf Fertig stellen, um das Assistent zum Einrichten der Datenquelle Dialogfeld zu schließen.
  10. Fügen Sie das SendXMLElementResult Feld dem Formular hinzu.
  11. Zeigen Sie das Formular an
  12. Geben Sie in dem Steuerelement Send XML Node Result ein Hello, World!
  13. Klicken Sie in dem Menü Datei auf Absenden.

    Folgende Fehlermeldung wird angezeigt
    Das Formular kann nicht versendet werden
    Ein Fehler ist während dem Versenden des Formulars aufgetreten

    Details anzeigen
    Die SOAP-Rückmeldung zeigt an, dass ein Fehler aufgetreten ist
    Der Server konnte die Anforderung nicht lesen --> dort tritt ein Fehler in XML-Dokument (1,409) auf. Angegebene Umwandlung ist ungültig.
  14. Schließen Sie das Vorschau-Fenster, und geben Sie dann an Entwurfsmodus das Formular zurück.
Wenden Sie eine der beiden im Abschnitt "Lösung" beschriebenen Methoden an, um dieses Problem zu beheben

Eigenschaften

Artikel-ID: 826989 - Geändert am: Freitag, 28. Juli 2006 - Version: 4.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Office InfoPath 2003
  • Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
Keywords: 
kbtshoot kbprb kbbug KB826989 KbMtde kbmt
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 826989
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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