Δεν μπορείτε να υποβάλετε αυτόματα δομημένα δεδομένα XML σε μια υπηρεσία Web στο InfoPath 2003

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 826989 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Συμπτώματα

Κατά την υποβολή πληροφοριών από το InfoPath λειτουργίας υποβολής φόρμας σε μια υπηρεσία Web, χρησιμοποιώντας την ενσωματωμένη InfoPath, ενδέχεται να αντιμετωπίσετε ένα από τα ακόλουθα συμπτώματα:
  • Ενδέχεται να λάβετε ένα μήνυμα σφάλματος. Το μήνυμα λάθους που λαμβάνετε ποικίλλει ανάλογα με τις πληροφορίες που υποβάλλονται και στην κωδικοποίηση της μεθόδου που καλείται από την υπηρεσία Web.
  • Ενδέχεται να παρατηρήσετε ότι υποβολή μη αναμενόμενα δεδομένα στην υπηρεσία Web.
Αυτό το άρθρο περιγράφει επίσης τα εξής:
  • Με ποιον τρόπο το InfoPath υποβάλλει δεδομένα σε μια υπηρεσία Web.
  • Δύο μεθόδους για την υποβολή των περιεχομένων μιας φόρμας του InfoPath σε μια υπηρεσία Web.

Αιτία

Όταν το InfoPath υποβάλλει δεδομένα σε μια υπηρεσία Web, υποβάλλει το περιεχόμενο του κόμβου XML που επιλέχθηκε ως παράμετρο, αλλά δεν προσκομίσει ο κόμβος XML τον εαυτό. Αυτό συνήθως λειτουργεί καλά. Για παράδειγμα, έχετε μια μέθοδος υπηρεσίας Web ως εξής:
[WebMethod]
   public void SendSampleString( string sampleString )
   {
      //Do something interesting with the sample string.
   } 
Εάν υποβάλετε το ακόλουθο στοιχείο XML σε αυτήν τη μέθοδο υπηρεσίας Web, τοsampleStringη παράμετρος έχει γεμίσει με"Hello, World!"(όπως αναμένεται).
<sampleElement>"Hello, World!"</sampleElement>
Δυστυχώς, αυτή η συμπεριφορά μπορεί να κάνει δύσκολο για την υποβολή των κόμβων XML ή ολόκληρη τη φόρμα InfoPath σε μια υπηρεσία Web. Για παράδειγμα, έχετε μια μέθοδος υπηρεσίας Web ως εξής:
[WebMethod]
   public string SendXMLElement( System.Xml.XmlElement theElement )
   {
      //Report how many children the submitted node had.
      return "Node with " + theElement.ChildNodes.Count + " children submitted.";
   }
Εάν υποβάλετε το στοιχείο XML παράδειγμα αυτής της μεθόδου, χρησιμοποιώντας το ενσωματωμένο λειτουργίας, τα περιεχόμενα της υποβολής InfoPath τοtheElementη παράμετρος δημιουργήσει ένα σφάλμα. Αυτό το σφάλμα παρουσιάζεται επειδή στέλνονται μόνο τα περιεχόμενα του στοιχείου XML ("Hello, World!"), με τη μέθοδο της υπηρεσίας Web. Επειδή η συμβολοσειρά δεν είναι έγκυρο στοιχείο XML, το.NET Framework, παράγει σφάλμα. εμφανίζεται το μήνυμα λάθους του InfoPath.

Ένα παρόμοιο πρόβλημα παρουσιάζεται όταν προσπαθήσετε να υποβάλλετε ολόκληρη τη φόρμα InfoPath στο παράδειγμα μέθοδο υπηρεσίας Web. Σε αυτήν την περίπτωση, το InfoPath υποβάλλει όλες τις εξαρτημένοι κόμβοι φόρμας του InfoPath, αλλά δεν προσκομίσει στο ριζικό κόμβο. Αυτό έχει ως αποτέλεσμα πολλαπλές ανώτατου επιπέδου κόμβων XML έχει υποβληθεί. Επειδή αυτό επίσης δεν είναι έγκυρο XML, το.NET Framework επιλέγει ο πρώτος κόμβος XML ανώτερου επιπέδου και το χρησιμοποιεί ως τοtheElementη παράμετρος. Παραβλέπονται όλες οι άλλες κόμβοι και δίνεται έτσι η αίσθηση ότι δεν έχουν υποβληθεί.

Προτεινόμενη αντιμετώπιση

Αυτό το ζήτημα διορθώνεται στο Microsoft Office 2003 Service Pack 1. Για να επιλύσετε αυτό το ζήτημα, αποκτήστε το πιο πρόσφατο service pack για το Microsoft Office 2003.

Για πρόσθετες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
870924Τρόπος απόκτησης του τελευταίου service pack για το Office 2003

Εναλλακτικός τρόπος αντιμετώπισης

Για να επιλύσετε αυτό το ζήτημα, εγγραφή μια προσαρμοσμένη ενέργεια υποβολής στη δέσμη ενεργειών. Μπορείτε να χρησιμοποιήσετε οποιαδήποτε από τις ακόλουθες μεθόδους:
  • Μπορείτε να χρησιμοποιήσετε ένα δευτερεύον αρχείο προέλευσης δεδομένων για την εκτέλεση της λειτουργίας υποβολής.
  • Σύνταξη κώδικα που δημιουργεί ένα προσαρμοσμένο μήνυμα SOAP και που αποστέλλει στην υπηρεσία Web.

Χρησιμοποιήστε ένα δευτερεύον αρχείο προέλευσης δεδομένων

  1. Σχετικά με τηνΕργαλείαμενού, κάντε κλικ στο κουμπίΔευτερεύοντα αρχεία προέλευσης δεδομένων.
  2. Με τοΔευτερεύοντα αρχεία προέλευσης δεδομένωνστο παράθυρο διαλόγου, κάντε κλικ στο κουμπίΠροσθήκη.
  3. Στην πρώτη σελίδα τουΟδηγός εγκατάστασης αρχείου προέλευσης δεδομένων, κάντε κλικ στο κουμπίΥπηρεσία Web, και στη συνέχεια κάντε κλικ στο κουμπίΕπόμενη.
  4. Πληκτρολογήστε τη θέση της υπηρεσίας Web που θέλετε να υποβάλετε και, στη συνέχεια, κάντε κλικ στο κουμπίΕπόμενη.
  5. Επιλέξτε τη μέθοδο υπηρεσίας Web που θέλετε να χρησιμοποιήσετε και, στη συνέχεια, κάντε κλικ στο κουμπίΕπόμενη.
  6. Όταν το InfoPath σάς ζητά να επιλέξετε το πεδίο ή την ομάδα από τη φόρμα που θα χρησιμοποιηθεί για να συμπληρώσετε τις παραμέτρους της μεθόδου υπηρεσίας Web, αφήστε κενό τις παραμέτρους και, στη συνέχεια, κάντε κλικ στο κουμπίΕπόμενη.
  7. Κάντε κλικ για να καταργήσετε την επιλογή του"Σύνδεση με το δευτερεύον αρχείο προέλευσης δεδομένων όταν ανοίγει η φόρμα"το πλαίσιο ελέγχου, κάντε κλικ στο κουμπίΛήξη, και στη συνέχεια κάντε κλικ στο κουμπίOKΓια να κλείσετε τοΔευτερεύοντα αρχεία προέλευσης δεδομένωνστο παράθυρο διαλόγου.
  8. Σχετικά με τηνΕργαλείαμενού, κάντε κλικ στο κουμπίΥποβολή φορμών.
  9. Με τοΥποβολή φορμώνστο παράθυρο διαλόγου, κάντε κλικ στο κουμπίΕνεργοποίηση υποβολής.
  10. Με τοΥποβολήλίστα, κάντε κλικ στο κουμπίΥποβολή με τη χρήση προσαρμοσμένης δέσμης ενεργειών, και στη συνέχεια κάντε κλικ στο κουμπίOKΓια να ανοίξετε το Microsoft Script Editor.
  11. Με τοXDocument::OnSubmitRequestμέθοδος, χρήση δέσμης ενεργειών, όπως η παρακάτω δέσμη ενεργειών για να υποβάλετε ολόκληρη τη φόρμα.

    ΣημείωσηΜπορείτε επίσης να υποβάλετε μεμονωμένα στοιχεία της φόρμας.
    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;
       }

Σύνταξη κώδικα

  1. Σχετικά με τηνΕργαλείαμενού, κάντε κλικ στο κουμπίΥποβολή φορμών.
  2. Με τοΥποβολή φορμώνστο παράθυρο διαλόγου, κάντε κλικ στο κουμπίΕνεργοποίηση υποβολής.
  3. Με τοΥποβολήλίστα, κάντε κλικ στο κουμπίΥποβολή με τη χρήση προσαρμοσμένης δέσμης ενεργειών, και στη συνέχεια κάντε κλικ στο κουμπίOKΓια να ανοίξετε το Microsoft Script Editor.
  4. Με τοXDocument::OnSubmitRequestμέθοδος, χρήση δέσμης ενεργειών, όπως η παρακάτω δέσμη ενεργειών για να υποβάλετε ολόκληρη τη φόρμα.

    ΣημείωσηΜπορείτε επίσης να υποβάλετε μεμονωμένα στοιχεία της φόρμας.
    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); 
       }

Κατάσταση

Αυτή η συμπεριφορά οφείλεται στη σχεδίαση.

Αυτή η συμπεριφορά οφείλεται στη σχεδίαση στο Microsoft Office InfoPath 2003. Αυτή η συμπεριφορά αλλάζει από το Microsoft Office InfoPath 2003 Service Pack 1.

Περισσότερες πληροφορίες

Βήματα για την αναπαραγωγή της συμπεριφοράς

  1. Δημιουργήστε μια υπηρεσία Web που περιέχει τις ακόλουθες δύο μεθόδους:
    • Η μέθοδος 1
      [WebMethod]
         public void SendSampleString( string sampleString )
         {
            //Do something interesting with the sample string.
         } 
    • Μέθοδος 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. Σχεδίαση μιας νέας φόρμας του InfoPath, επιλέγονταςΔημιουργία από αρχείο προέλευσης δεδομένων.
  3. Με τοΟδηγός εγκατάστασης αρχείου προέλευσης δεδομένων, επιλέξτεΥπηρεσία Web, και στη συνέχεια κάντε κλικ στο κουμπίΕπόμενη.
  4. Κάντε κλικ στο κουμπίΛήψη και υποβολή δεδομένων, και στη συνέχεια κάντε κλικ στο κουμπίΕπόμενη.
  5. Για τολήψη δεδομένωνWeb service μέθοδο, ακολουθήστε τα εξής βήματα:
    1. Πληκτρολογήστε τη διεύθυνση URL για την υπηρεσία Web που δημιουργήσατε προηγουμένως και κατόπιν κάντε κλικ στοΕπόμενη.
    2. Με τοΕπιλέξτε μια λειτουργίαλίστα, κάντε κλικ στο κουμπίSendXMLElement, και στη συνέχεια κάντε κλικ στο κουμπίΕπόμενη.
  6. Για τουποβολή δεδομένωνWeb service μέθοδο, ακολουθήστε τα εξής βήματα:
    1. Πληκτρολογήστε τη διεύθυνση URL για την υπηρεσία Web που δημιουργήσατε προηγουμένως και κατόπιν κάντε κλικ στοΕπόμενη.
    2. Με τοΕπιλέξτε μια λειτουργίαλίστα, κάντε κλικ στο κουμπίSendXMLElement, και στη συνέχεια κάντε κλικ στο κουμπίΕπόμενη.
  7. Κάντε κλικ στην επιλογή τουΤροποποίησηΓια να επιλέξετε μια παράμετρο για τη λειτουργία υποβολής.
  8. Με τοdataFieldsλίστα, κάντε κλικ στο κουμπίSendXMLElementResult, κάντε κλικ στο κουμπίOK, και στη συνέχεια κάντε κλικ στο κουμπίΕπόμενη.
  9. ΕπιλέξτεΣχεδίαση προβολής δεδομένων πρώτα, και στη συνέχεια κάντε κλικ στο κουμπίΛήξηΓια να κλείσετε τοΟδηγός εγκατάστασης αρχείου προέλευσης δεδομένωνστο παράθυρο διαλόγου.
  10. Προσθήκη τουSendXMLElementResultτο πεδίο στη φόρμα.
  11. Προεπισκόπηση της φόρμας.
  12. Με τοΑποστολή αποτελεσμάτων κόμβου XMLστοιχείο ελέγχου, πληκτρολογήστεHello, World!
  13. Σχετικά με τηνΤο αρχείομενού, κάντε κλικ στο κουμπίΥποβολή.

    Λαμβάνετε το ακόλουθο μήνυμα λάθους:
    Το InfoPath δεν είναι δυνατό να υποβάλει τη φόρμα.
    Παρουσιάστηκε σφάλμα κατά την υποβολή της φόρμας.

    Εμφάνιση λεπτομερειών:
    Η απόκριση SOAP υποδηλώνει ότι παρουσιάστηκε σφάλμα:
    Διακομιστής δεν ήταν δυνατή η ανάγνωση της αίτησης. --> Εκεί είναι ένα σφάλμα σε έγγραφο XML (1,409). --> Μετατροπή που καθορίστηκε δεν είναι έγκυρη.
  14. Κλείστε το παράθυρο προεπισκόπησης και, στη συνέχεια, να επιστρέψετε τη φόρμα σε κατάσταση σχεδίασης.
Για να επιλύσετε αυτό το ζήτημα, χρησιμοποιήστε μία από τις μεθόδους που αναφέρονται στην ενότητα "Προτεινόμενη αντιμετώπιση" αυτού του άρθρου.

Ιδιότητες

Αναγν. άρθρου: 826989 - Τελευταία αναθεώρηση: Πέμπτη, 22 Σεπτεμβρίου 2011 - Αναθεώρηση: 3.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Office InfoPath 2003
Λέξεις-κλειδιά: 
kbtshoot kbprb kbbug kbmt KB826989 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:826989

Αποστολή σχολίων

 

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