คุณไม่สามารถส่งข้อมูล XML เป็นโครงสร้างเพื่อการบริการเว็บใน InfoPath 2003 ได้โดยอัตโนมัติ

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 826989 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

เมื่อคุณส่งข้อมูล จาก InfoPath มี แบบฟอร์มบริการเว็บโดยใช้ InfoPath ที่มีอยู่ภายในส่งฟังก์ชันการทำงาน คุณอาจพบอาการต่อไปนี้อย่างใดอย่างหนึ่ง:
  • คุณอาจได้รับข้อความแสดงข้อผิดพลาด ข้อความแสดงข้อผิดพลาดที่คุณได้รับแตกต่างกันไปตามข้อมูลที่กำลังถูกส่ง และในการเขียนโค้ดของวิธีการที่กำลังเรียกใช้บนบริการเว็บ
  • คุณอาจสังเกตเห็นว่า มีส่งข้อมูลที่ไม่คาดคิดไปยังบริการบนเว็บ
บทความนี้ยังกล่าวต่อไปนี้:
  • วิธี InfoPath ส่งข้อมูลไปยังบริการเว็บ
  • วิธีที่สองสำหรับการส่งเนื้อหาของฟอร์ม InfoPath เพื่อการบริการเว็บ

สาเหตุ

เมื่อ InfoPath ส่งข้อมูลไปยังบริการเว็บ จะส่งเนื้อหาของโหนด XML ที่ถูกเลือกเป็นพารามิเตอร์ แต่จะไม่ส่งโหนด XML เอง ใช้งานโดยทั่วไปจะได้ดีขึ้น ตัวอย่างเช่น คุณมีวิธีการบริการเว็บดังต่อไปนี้:
[WebMethod]
   public void SendSampleString( string sampleString )
   {
      //Do something interesting with the sample string.
   } 
ถ้าคุณส่งองค์ประกอบ XML ต่อไปนี้ให้ใช้วิธีนี้บริการเว็บ การsampleStringพารามิเตอร์จะถูกกรอกข้อมูลด้วย"Hello, World(ตามที่คุณคาดว่า)
<sampleElement>"Hello, World!"</sampleElement>
อภัย การทำงานนี้สามารถทำได้ยากส่งโหน XML หรือแบบฟอร์ม InfoPath ทั้งหมดเพื่อการบริการเว็บ ตัวอย่างเช่น คุณมีวิธีการบริการเว็บดังต่อไปนี้:
[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 !"), วิธีการบริการเว็บ เนื่องจากไม่มีสายอักขระ XML องค์ประกอบถูกต้อง อยู่NET Framework สร้างข้อผิดพลาด ข้อความแสดงข้อผิดพลาดปรากฏขึ้นใน InfoPath

ปัญหาที่คล้ายคลึงกันเกิดขึ้นถ้าคุณพยายามที่จะส่งฟอร์ม InfoPath ทั้งหมดเป็นตัวอย่างวิธีการบริการเว็บ ในกรณีนี้ 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 แบบกำหนดเอง และการที่ส่งไปยังบริการบนเว็บ

ใช้แหล่งข้อมูลทุติยภูมิ

  1. บนเครื่องเครื่องมือเมนู คลิกแหล่งข้อมูลทุติยภูมิ.
  2. ในการแหล่งข้อมูลทุติยภูมิกล่องโต้ตอบ คลิกเพิ่ม.
  3. บนหน้าแรกของการตัวช่วยสร้างการตั้งค่าแหล่งข้อมูลคลิกบริการเว็บแล้ว คลิกถัดไป.
  4. ใส่ตำแหน่งที่ตั้งของบริการบนเว็บที่คุณต้อง การส่ง แล้ว คลิกถัดไป.
  5. เลือกวิธีการบริการเว็บที่คุณต้อง การใช้ แล้ว คลิกถัดไป.
  6. เมื่อ InfoPath พร้อมท์ให้คุณเลือกเขตข้อมูลหรือกลุ่มจากแบบฟอร์มที่จะใช้เติมพารามิเตอร์ของวิธีการบริการเว็บ ปล่อยพารามิเตอร์ว่าง จากนั้น คลิกถัดไป.
  7. คลิกเพื่อยกเลิกการเชื่อมต่อ "เข้ากับแหล่งข้อมูลทุติยภูมินี้เมื่อมีเปิดแบบฟอร์ม"กล่องกาเครื่องหมาย คลิกเสร็จสิ้นแล้ว คลิกตกลงเมื่อต้องการปิดเครื่องแหล่งข้อมูลทุติยภูมิกล่องโต้ตอบ
  8. บนเครื่องเครื่องมือเมนู คลิกการส่งฟอร์ม.
  9. ในการการส่งฟอร์มกล่องโต้ตอบ คลิกการเปิดใช้งานการส่ง.
  10. ในการส่งแสดงรายการ คลิกส่งโดยใช้สคริปต์แบบกำหนดเองแล้ว คลิกตกลงเมื่อต้องการเปิด 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. ในการส่งแสดงรายการ คลิกส่งโดยใช้สคริปต์แบบกำหนดเองแล้ว คลิกตกลงเมื่อต้องการเปิด 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. สร้างบริการเว็บที่ประกอบด้วยสองวิธีต่อไปนี้:
    • วิธีที่ 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. ในการตัวช่วยสร้างการตั้งค่าแหล่งข้อมูลเลือกบริการเว็บแล้ว คลิกถัดไป.
  4. คลิกรับ และส่งข้อมูลแล้ว คลิกถัดไป.
  5. สำหรับการได้รับข้อมูลเว็บวิธีการบริการ การทำตามขั้นตอนเหล่านี้:
    1. ป้อน URL ไปยังบริการบนเว็บที่คุณสร้างไว้ก่อนหน้านี้ จากนั้น คลิกถัดไป.
    2. ในการเลือกการดำเนินการแสดงรายการ คลิกSendXMLElementแล้ว คลิกถัดไป.
  6. สำหรับการส่งข้อมูลเว็บวิธีการบริการ การทำตามขั้นตอนเหล่านี้:
    1. ป้อน URL ไปยังบริการบนเว็บที่คุณสร้างไว้ก่อนหน้านี้ จากนั้น คลิกถัดไป.
    2. ในการเลือกการดำเนินการแสดงรายการ คลิกSendXMLElementแล้ว คลิกถัดไป.
  7. คลิกการปรับเปลี่ยนปุ่มเพื่อเลือกพารามิเตอร์สำหรับการดำเนินการส่ง
  8. ในการdataFieldsแสดงรายการ คลิกSendXMLElementResultคลิกตกลงแล้ว คลิกถัดไป.
  9. เลือกการออกแบบมุมมองข้อมูลก่อนแล้ว คลิกเสร็จสิ้นเมื่อต้องการปิดเครื่องตัวช่วยสร้างการตั้งค่าแหล่งข้อมูลกล่องโต้ตอบ
  10. เพิ่มการSendXMLElementResultเขตข้อมูลไปยังฟอร์ม
  11. การแสดงตัวอย่างฟอร์ม
  12. ในการส่งผลลัพธ์ของโหนด XMLควบคุม ชนิดHello, World
  13. บนเครื่องแฟ้มเมนู คลิกส่ง.

    คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:
    InfoPath ไม่สามารถส่งฟอร์ม
    ข้อผิดพลาดเกิดขึ้นขณะกำลังส่งแบบฟอร์ม

    แสดงรายละเอียด:
    การตอบสนอง SOAP บ่งชี้ว่า มีข้อผิดพลาดเกิดขึ้น:
    เซิร์ฟเวอร์ไม่สามารถอ่านการร้องขอ -->นั่นคือข้อผิดพลาดในเอกสาร XML (1,409) -->เพี้ยนที่ระบุไม่ถูกต้อง
  14. ปิดหน้าต่างแสดงตัวอย่าง และย้อนกลับสู่แบบฟอร์มไปยังโหมดออกแบบ
เมื่อต้องการแก้ไขปัญหานี้ ใช้วิธีที่กล่าวถึงในส่วน "การแก้ไข" ของบทความนี้

คุณสมบัติ

หมายเลขบทความ (Article ID): 826989 - รีวิวครั้งสุดท้าย: 22 กันยายน 2554 - Revision: 3.0
ใช้กับ
  • Microsoft Office InfoPath 2003
Keywords: 
kbtshoot kbprb kbbug kbmt KB826989 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ 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