Можно автоматически не удается отправить структурированных данных XML в веб-службы в InfoPath 2003

Переводы статьи Переводы статьи
Код статьи: 826989 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

При отправке данных из 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 с пакетом обновления 1 (SP1). Чтобы решить эту проблему, получите последний пакет обновления для Microsoft Office 2003.

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
870924Как получить последний пакет обновления для Office 2003

Временное решение

Для временного решения этой проблемы записи пользовательского отправить действие в сценарий. Можно использовать любой из следующих способов:
  • Использование дополнительного источника данных для выполнения операции отправки.
  • Написать код, который создает сообщение SOAP и отправляет его на веб-службы.

Использование дополнительного источника данных

  1. НаСредстваменю, нажмите кнопкуДополнительные источники данных.
  2. ВДополнительные источники данныхдиалоговое окно, нажмите кнопкуДобавить.
  3. На первой страницеМастер настройки источника данныхщелкнитеВеб-службы, а затем нажмите кнопкуСледующий.
  4. Введите расположение веб-службы, которые требуется отправить, а затем нажмите кнопкуСледующий.
  5. Выберите метод веб-службы, которые требуется использовать, а затем нажмите кнопкуСледующий.
  6. Когда InfoPath предлагает выбрать поле или группу из формы, которые будут использоваться для заполнения параметров метода веб-службы, оставьте поле пустым, параметры и нажмите кнопкуСледующий.
  7. Снимите"Подключение к этому дополнительному источнику данных при открытии формы"флажок в поле, нажмите кнопкуОкончание, а затем нажмите кнопкуОКЗакрытьДополнительные источники данныхдиалоговое окно.
  8. НаСредстваменю, нажмите кнопкуОтправка формы.
  9. ВОтправка формыдиалоговое окно, нажмите кнопкуВключение отправки.
  10. ВОтправитьсписок, нажмите кнопкуОтправка с помощью пользовательского сценария, а затем нажмите кнопкуОКЧтобы открыть редактор сценариев Microsoft.
  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.
  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 с пакетом обновления 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. НаФайлменю, нажмите кнопкуОтправить.

    Появляется следующее сообщение об ошибке:
    Невозможно отправить форму.
    Отправки формы произошла ошибка.

    Показать сведения О:
    Ответ the SOAP указывает, что произошла ошибка:
    Серверу не удалось прочитать запрос.--> есть происходит ошибка в XML-документа (1,409).--> указанное приведение недопустимо.
  14. Закройте окно предварительного просмотра, а затем вернитесь формы в режиме конструктора.
Для решения этой проблемы используйте один из способов, перечисленных в разделе «Решение» этой статьи.

Свойства

Код статьи: 826989 - Последний отзыв: 4 октября 2011 г. - Revision: 3.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Office InfoPath 2003
Ключевые слова: 
kbtshoot kbprb kbbug kbmt KB826989 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: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