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

การสนับสนุนสำหรับ Office 2003 สิ้นสุดลงแล้ว

Microsoft ได้หยุดให้การสนับสนุนสำหรับ Office 2003 เมื่อวันที่ 8 เมษายน 2014 การเปลี่ยนแปลงครั้งนี้ได้ส่งผลกระทบต่อการอัปเดตซอฟต์แวร์ของคุณและตัวเลือกในการรักษาความปลอดภัย การเปลี่ยนแปลงนี้จะส่งผลอย่างไรกับคุณและทำอย่างไรเพื่อให้คอมพิวเตอร์ของคุณยังได้รับการปกป้องอยู่

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

ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้: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. ปิดหน้าต่างแสดงตัวอย่าง และย้อนกลับสู่แบบฟอร์มไปยังโหมดออกแบบ
เมื่อต้องการแก้ไขปัญหานี้ ใช้วิธีที่กล่าวถึงในส่วน "การแก้ไข" ของบทความนี้

คำเตือน: บทความนี้ได้รับการแปลโดยอัตโนมัติ

คุณสมบัติ

รหัสบทความ: 826989 - การตรวจสอบครั้งสุดท้าย: 01/11/2015 05:20:25 - ฉบับแก้ไข: 4.0

Microsoft Office InfoPath 2003

  • kbnosurvey kbarchive kbtshoot kbprb kbbug kbmt KB826989 KbMtth
คำติชม