Infopath 2003'te bir Web hizmetine yapılandırılmış XML veri otomatik olarak gönderemiyor

Makale çevirileri Makale çevirileri
Makale numarası: 826989 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Bilgi gönderdiğinizde bir ınfopath işlevselliği yerleşik ınfopath kullanarak bir Web hizmetine form göndermek, aşağıdaki belirtilerden biriyle karşılaşabilirsiniz:
  • Bir hata iletisi alabilirsiniz. Aldığınız hata iletisinin teslim ediliyor bilgileri ve Web hizmetini temel çağrılan yöntemin kodlama için göre değişir.
  • Beklenmedik veriler Web hizmetine gönderilen görebilirsiniz.
Bu makalede, ayrıca aşağıda anlatılmaktadır:
  • Infopath, nasıl bir Web hizmetine veri gönderir.
  • ınfopath formu bir Web hizmetine içeriği göndermek için iki yöntem sağlar.

Neden

Infopath bir Web hizmetine veri gönderdiğinde, parametre olarak seçilen XML düğümü içeriğini gönderdikten ancak XML düğümü gönderin. Bu genellikle iyi çalışır. Örneğin, Web hizmeti yöntem aşağıdaki gibi sahip:
[WebMethod]
   public void SendSampleString( string sampleString )
   {
      //Do something interesting with the sample string.
   } 
Bu Web hizmeti yöntemi aşağıdaki XML öğesine gönderirseniz, sampleString parametresi "Merhaba, World!" ile doldurulur (beklediğiniz gibi).
<sampleElement>"Hello, World!"</sampleElement>
Ne yazık ki, bu davranış, XML düğümleri ya da tüm ınfopath formu bir Web hizmetine gönderebilirsiniz zorlaştırabilir. Örneğin, Web hizmeti yöntem aşağıdaki gibi sahip:
[WebMethod]
   public string SendXMLElement( System.Xml.XmlElement theElement )
   {
      //Report how many children the submitted node had.
      return "Node with " + theElement.ChildNodes.Count + " children submitted.";
   }
örnek XML öğesine göndermek, bu yöntem, yerleşik ınfopath kullanarak gönder işlevselliği için theElement parametre içeriğini bir hata oluşturabilir. Bu hata Web hizmeti yöntemine ("Merhaba, World!"), XML öğesi içeriğini gönderilen nedeniyle oluşur. Dize geçerli bir XML öğesi olmadığı için .NET Framework hata üretir; ınfopath'de hata iletisi görüntülenir.

Örnek Web hizmeti yöntemi tüm ınfopath formu göndermeye çalışırsanız, benzer bir sorun oluşur. Bu durumda, ınfopath, ınfopath formu, tüm alt düğümlerin gönderir, ancak kök düğümü gönderin. Bu, gönderilmesi birden çok üst düzey XML düğümlerin olur. Bu da geçerli XML olmadığı için .NET Framework, ilk en üst düzey XML düğümü seçer ve theElement parametre olarak kullanır. Diğer tüm düğümlerle göz ardı edilir ve bu bunlar değil verdiğini bir görünümünü sağlar.

Çözüm

Bu sorun, Microsoft Office 2003 Service Pack 1'de düzeltilmiştir. Bu sorunu gidermek için <a0></a0>, Microsoft Office 2003 için en son hizmet paketini edinin.

Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
870924En son Office 2003 hizmet paketi nasıl elde edilir

Pratik Çözüm

Bu soruna geçici bir çözüm bulmak için <a0></a0>, <a1>Yazma</a1> özel bir komut dosyası eylemi gönderin. Aşağıdaki yöntemlerden birini kullanabilirsiniz:
  • Gönderme işlemi gerçekleştirmek için ikincil bir veri kaynağı'nı kullanın.
  • Özel bir SOAP iletisi oluşturur ve bu, Web hizmetine göndermeden kodunu yazın.

Bir ikincil veri kaynağı'nı kullanın

  1. Araçlar menüsünde, İkincil veri kaynakları ' ı tıklatın.
  2. Ikincil veri kaynakları iletişim kutusunda, <a3>Ekle</a3>'yi tıklatın.
  3. Veri kaynağı Kur Sihirbazı ' nın ilk sayfasında, Web Service ' ı tıklatın ve sonra ileri ' yi tıklatın.
  4. Göndermek istediğiniz Web hizmetinin konumunu girin ve ileri ' yi tıklatın.
  5. Kullanmak istediğiniz Web hizmeti yöntemi seçin ve ileri ' yi tıklatın.
  6. Infopath, Web hizmeti Yöntem parametrelerinin doldurmak için kullanılacak olan formdan, alan veya grup seçmek için istemde bulunduğunda, Parametreler boş bırakın ve sonra ileri ' yi tıklatın.
  7. "Form açıldığında bu ikincil veri kaynağına bağlan" onay kutusunu temizleyin, son ' u tıklatın ve sonra <a0>İkincil veri kaynakları</a0> iletişim kutusunu kapatmak için Tamam ' ı tıklatın, bu seçeneği tıklatın.
  8. Araçlar menüsünde Form gönderme'yi tıklatın.
  9. Form gönderme iletişim kutusunda Etkinleştir Gönder ' i tıklatın.
  10. Gönder listesinde, Gönder, özel komut dosyası kullanarak tıklatın ve Microsoft Kod Düzenleyicisi'ni açmak için Tamam ' ı tıklatın.
  11. XDocument::OnSubmitRequest yönteminde, aşağıdaki komut dosyası gibi komut dosyası, tüm formu göndermek için kullanın.

    Not Tek tek öğeleri formunda da gönderebilirsiniz.
    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;
       }

Kod yazma

  1. Araçlar menüsünde Form gönderme'yi tıklatın.
  2. Form gönderme iletişim kutusunda Etkinleştir Gönder ' i tıklatın.
  3. Gönder listesinde, Gönder, özel komut dosyası kullanarak tıklatın ve Microsoft Kod Düzenleyicisi'ni açmak için Tamam ' ı tıklatın.
  4. XDocument::OnSubmitRequest yönteminde, aşağıdaki komut dosyası gibi komut dosyası, tüm formu göndermek için kullanın.

    Not Tek tek öğeleri formunda da gönderebilirsiniz.
    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); 
       }

Durum

Bu davranış tasarım yüzündendir.

Bu davranış, Microsoft Office ınfopath 2003'deki tasarım gereğidir. Bu davranış, Microsoft Office ınfopath 2003 Service Pack 1 ile değiştirilir.

Daha fazla bilgi

Davranışı Yeniden Oluşturma Adımları

  1. Aşağıdaki iki yöntemden içeren bir Web hizmetini oluşturma:
    • Yöntem 1
      [WebMethod]
         public void SendSampleString( string sampleString )
         {
            //Do something interesting with the sample string.
         } 
    • Yöntem 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. Yeni veri kaynağından seçerek yeni bir ınfopath formu tasarlayın.
  3. Veri kaynağı Kur Sihirbazı, Web Service ' ı seçin ve ileri ' yi tıklatın.
  4. Alma ve veri Gönder'i tıklatın ve sonra ileri ' yi tıklatın.
  5. Veri almak için Web hizmeti yöntemi, aşağıdaki adımları izleyin:
    1. Web hizmeti için daha önce oluşturduğunuz URL'YI girin ve ileri ' yi tıklatın.
    2. Bir operasyon seçin) listesinde, SendXMLElement ' ı tıklatın ve sonra ileri ' yi tıklatın.
  6. Veri göndermek için Web hizmeti yöntemi, aşağıdaki adımları izleyin:
    1. Web hizmeti için daha önce oluşturduğunuz URL'YI girin ve ileri ' yi tıklatın.
    2. Bir operasyon seçin) listesinde, SendXMLElement ' ı tıklatın ve sonra ileri ' yi tıklatın.
  7. Gönderme işlemi için bir parametre seçmek için Değiştir düğmesini tıklatın.
  8. DataFields listesinde, SendXMLElementResult ' ı tıklatın, sonra da Tamam ' ı tıklatın ve sonra ileri ' yi tıklatın.
  9. Ilk veri görünümünü tasarla seçin ve sonra da <a2>Veri kaynağı Kur Sihirbazı</a0> iletişim kutusunu kapatmak için son</a2>'ı tıklatın.
  10. SendXMLElementResult alanı forma ekleyin.
  11. Formun önizlemesini yapın.
  12. Gönder XML düğümü sonucu denetimde yazın Merhaba, World!
  13. Dosya menüsünde Gönder ' i tıklatın.

    Aşağıdaki hata iletisini alıyorsunuz:
    Infopath formu gönderemiyor.
    Form gönderildi bir hata oluştu.

    Ayrıntıları Göster:
    SOAP yanıtı bir hata oluştuğunu gösteriyor:
    Sunucu isteği okuyamadı. Burada--> (1,409) XML belgesinde bir hatadır. --> Belirtilen atama geçerli değil.
  14. Önizleme penceresini kapatın ve sonra formu Tasarım moduna geri dönün.
Bu sorunu gidermek için <a0></a0>, bu makalenin "Çözüm" bölümünde açıklanan yöntemlerden birini kullanın.

Özellikler

Makale numarası: 826989 - Last Review: 28 Temmuz 2006 Cuma - Gözden geçirme: 4.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Office InfoPath 2003
  • Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
Anahtar Kelimeler: 
kbmt kbtshoot kbprb kbbug KB826989 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:826989

Geri Bildirim Ver

 

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