• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

WebServis çağırma

tirEdsOuL

Altın Üye
Katılım
3 Şubat 2009
Mesajlar
326
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Kullanmakta olduğum e-fatura portalının webservis dökümanları ve kullanıcı bilgileri elimde mevcut. SOAP üzerinden sorgu yapabiliyorum, ama bunu excel üzerinden de yapabilir miyim? Örnek SOAP sorgusu aşağıdaki gibidir. Ben bunu nasıl macro ile sorgulayabilirim ? Yani Sorguladığım web adresini, sorgu parametresini, kullanıcı adı şifremi nasıl belirtip bir sorgu oluşturabilirim ve dönen sonucu da istediğim hücre aralığına nasıl yazdırabilirim?

XML:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ein="http://isisbilisim.com.tr/services/einvoice" xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
   <soapenv:Header/>
   <soapenv:Body>
      <ein:GetActiveListByVknList>
         <!--Optional:-->
         <ein:vknList>
            <!--Zero or more repetitions:-->
            <arr:string>6160000009</arr:string>
         </ein:vknList>
      </ein:GetActiveListByVknList>
   </soapenv:Body>
</soapenv:Envelope>
 
E-Fatura değil ama aşağıdaki kısa videoda görüldüğü gibi başka bir web servisinden Excel ile SOAP üzerinden kullanıcı adı ve şifreyle veri alma işini yapmıştım.

Eğer isterseniz, ücretli olarak yardımcı olabilirim... İlgilenirseniz, özel mesajla bana ulaşabilirsiniz.




.
 
Son düzenleme:
İlginiz için teşekkürler Haluk bey,

Yabancı forumlarda yaptığım araştırmalar sonucu birazcık ilerleyebildim. Tek sıkıntım gelen datanın tamamını alamamak, aşağıdaki kodda sorgu sonucundaki ilk verinin datalarını getiriyor, ben istiyorum ki bulduğu tüm sonuçları belirtilen hücrenin altından devam ettirmesi..

Kod:
Private Sub CommandButton1_Click()
 'Set and instantiate our working objects
    Dim Req As Object
    Dim sEnv As String
    Dim Resp As New MSXML2.DOMDocument60
    Set Req = CreateObject("MSXML2.XMLHTTP")
    Set Resp = CreateObject("MSXML2.DOMDocument.6.0")
    Req.Open "Post", "https://xxxxx.yyyyy.com.tr/MaestroCoreEkstre/services/xxxxService", False
    
 ' we create our SOAP envelope for submission to the Web Service
     sEnv = sEnv & "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:has=""http://xxxxekstre.yyyyyekstre.driver.yyyy.ccccc.com"">"
     sEnv = sEnv & "  <soapenv:Header/>"
     sEnv = sEnv & "  <soapenv:Body>"
     sEnv = sEnv & "  <has:getTransactionInfo>"
     sEnv = sEnv & "  <transactionInfo>"
     sEnv = sEnv & "  <password>XXXXXXXX</password>"
     sEnv = sEnv & "  <transactionInfoInputType>"
     sEnv = sEnv & "  <accountNo>11111111</accountNo>"
     sEnv = sEnv & "  <endDate>2018-12-26T18:00:00</endDate>"
     sEnv = sEnv & "  <startDate>2018-12-26T00:00:00</startDate>"
     sEnv = sEnv & "  </transactionInfoInputType>"
     sEnv = sEnv & "  <userName>YYYYYY</userName>"
     sEnv = sEnv & "   </transactionInfo>"
     sEnv = sEnv & "   </has:getTransactionInfo>"
     sEnv = sEnv & "  </soapenv:Body>"
     sEnv = sEnv & "</soapenv:Envelope>"
    Req.send (sEnv)

    Resp.LoadXML Req.responseText
    Range("B6").Value = Resp.SelectSingleNode("//transactionDescription").Text
    Range("C6").Value = Resp.SelectSingleNode("//valueDate").Text
    Range("D6").Value = Resp.SelectSingleNode("//transactionAmount").Text
    
  'clean up code
    Set Req = Nothing
    Set Resp = Nothing
    
    
End Sub
 
Kod:
 Req.send (sEnv)
den sonra
Kod:
[a1]= Req.responseText
veya
Kod:
debug.print Req.responseText

ekleyip a1 deki veriyi veya vba daki immediate panelindeki metni text dosyasına yapıştırıp, buraya eklersiniz, bir ilgilenen çıkabilir.
 
Başka bir yolu yok mudur? Çünkü "Req.responseText" ile dönen sonuçta özel bilgiler içermektedir.
 
Var kendiniz uğraşıp çözebilirsiniz ya da bi zahmet oradaki verileri yapıyı bozmadan değiştirip ekleyebilirsiniz.

@tirEdsOuL,

3ncü bir çözüm olarak; yukarıda benim 2nci mesajımdan sonra bana gönderdiğiniz özel mesaja istinaden size yolladığım ancak, sizin cevap vermediğiniz özel mesajımı dikkate alabilirdiniz.

.
 
Son düzenleme:
Kod:
    Set mylist = Resp.SelectNodes("//transactions")
    For i = 0 To mylist.Length - 1
        Cells(i + 7, "B") = mylist(i).SelectSingleNode("transactionDescription").Text
        Cells(i + 7, "C") = mylist(i).SelectSingleNode("valueDate").Text
        Cells(i + 7, "D") = mylist(i).SelectSingleNode("transactionAmount").Text
    Next i
 
@tirEdsOuL,

3ncü bir çözüm olarak; yukarıda benim 2nci mesajımdan sonra bana gönderdiğiniz özel mesaja istinaden size yolladığım ancak, sizin cevap vermediğiniz özel mesajımı dikkate alabilirdiniz.

.

Sn. @Haluk bey, özel mesajınızı dikkate alarak aşağıdaki cevabı verdim diye düşünüyordum, mesajınızı cevapsız bıraktığımı düşündüyseniz kusuruma bakmayın lütfen.
İlginiz için teşekkürler Haluk bey,

Sn. @veyselemre ilginiz için çok teşekkür ederim, sorun çözülmüştür.
Kod:
    Set mylist = Resp.SelectNodes("//transactions")
    For i = 0 To mylist.Length - 1
        Cells(i + 7, "B") = mylist(i).SelectSingleNode("transactionDescription").Text
        Cells(i + 7, "C") = mylist(i).SelectSingleNode("valueDate").Text
        Cells(i + 7, "D") = mylist(i).SelectSingleNode("transactionAmount").Text
    Next i
 
Geri
Üst