Word veya Excel'de Office VBA Makrosundan ASP.NET Kullanarak XML Web Hizmeti Kullanma

Özet

Bu makalede, Word veya Excel'de Visual Basic for Applications (VBA) makrosundan ASP.NET kullanarak XML Web hizmetinin nasıl kullanılacağı gösterilmektedir.

Daha Fazla Bilgi

Office makrosundan ASP.NET kullanarak XML Web hizmetiyle başarılı bir şekilde iletişim kurmak için, SOAP Araç Seti'nin makronun çalıştığı istemci bilgisayara yüklenmesi gerekir. Buna göre, bu makaledeki tanıtım için SOAP Araç Seti gereklidir. İNDIRME yönergeleri de dahil olmak üzere SOAP Araç Seti ile ilgili ayrıntılar için.

ASP.NET kullanarak XML Web Hizmeti oluşturma

  1. Microsoft Visual Studio .NET'i başlatın. Dosya menüsünde Yeni'ye ve ardından Proje'ye tıklayın. Yeni Proje iletişim kutusunda, Proje türleri'nin altında Visual Basic Projeleri'ne tıklayın ve ardından Şablonlar'ın altındaki ASP.NET kullanarak XML Web Hizmeti'ne tıklayın. Projeyi SQLQuery olarak adlandırın ve Tamam'a tıklayın. Service1 için tasarım formu varsayılan olarak görüntülenir.

  2. Görünüm menüsünde Kod'a tıklayarak Service1 için kod penceresini görüntüleyin.

  3. Aşağıdaki kodu kod penceresinin en üstüne yapıştırın:

    Imports System.Data.SqlClient
    
  4. Aşağıdaki kodu Service1 sınıfına yapıştırın (End Sınıfı'nın hemen öncesinde).

    Not Bu kodu çalıştırmadan önce Kullanıcı Kimliği <kullanıcı adı> ve parola =<strong parola> değerlerini doğru değerlerle değiştirmeniz gerekir. Kullanıcı Kimliği'nin veritabanında bu işlemi gerçekleştirmek için uygun izinlere sahip olduğundan emin olun.

    Private Const strConn = "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=localhost"
    
    <WebMethod()> Public Function GetIDs() As String()
        Dim i As Integer
    
    ' Create an open connection.
        Dim oConn As New SqlConnection(strConn)
        oConn.Open()
    
    Dim oDataset As New System.Data.DataSet()
        ' Execute the query.
        Dim oAdapter As New SqlDataAdapter("SELECT au_id FROM authors", oConn)
        ' Fill the dataset.
        oAdapter.Fill(oDataset)
    
    Dim s(oDataset.Tables(0).Rows.Count - 1) As String
        ' Create an array of IDs.
        For i = 0 To oDataset.Tables(0).Rows.Count - 1
            s(i) = oDataset.Tables(0).Rows(i).ItemArray.GetValue(0)
        Next i
        ' Return the array.
        Return s
    End Function
    
    <WebMethod()> Public Function QueryDatabase(ByVal sID As String) As String()
        Dim i As Integer
    
    ' Create an open a connection.
        Dim oConn As New SqlConnection(strConn)
        oConn.Open()
    
    Dim oCommand As New SqlCommand("SELECT * FROM authors WHERE au_id='" + sID + "'", oConn)
        Dim oReader As SqlDataReader
        ' Execute the query and assign results to a SqlDataReader.
        oReader = oCommand.ExecuteReader()
        oReader.Read()
    
    Dim s(7) As String
        ' Build an array of results.
        For i = 0 To 7
            s(i) = CType(oReader.GetValue(i), String)
        Next
        ' Return the array.
        Return s
    End Function
    
    

Not

koddaki strConn sabitini, SQL Server pubs veritabanı için geçerli bir bağlantı dizesi olacak şekilde değiştirin.

Web Hizmetini Test Edin

  1. Web hizmeti çözümünü derlemek ve çalıştırmak için F5 tuşuna basın. Web hizmetini .NET Tümleşik Geliştirme Ortamı'ndan (IDE) çalıştırdığınızda, Microsoft Internet Explorer çözümünüzden Service1.asmx dosyasını yükler.

  2. GetIDs yöntemini test edin. Bunu yapmak için GetIDs köprüsüne ve ardından Çağır'a tıklayın.

    yöntemi, Web hizmetinin pubs veritabanından ayıklandığı yazar kimliklerinin listesini döndürür. Sonuçlar tarayıcıda XML olarak görüntülenir.

  3. Tarayıcı penceresini veya pencerelerini kapatın ve Visual Studio'ya dönün.

  4. Web hizmetini çalıştırmak için F5 tuşuna yeniden basın.

  5. QueryDatabase yöntemini test edin. Bunu yapmak için QueryDatabase köprüsüne tıklayın, ardından sID parametresi için 409-56-7008 yazın ve Çağır'a tıklayın.

    yöntemi, 409-56-7008 kimliğine sahip yazarın ayrıntılarını döndürür. Sonuçlar tarayıcıda XML olarak görüntülenir.

  6. Web hizmetini sonlandırmak için tarayıcı penceresini veya pencerelerini kapatın.

Word'den Web Hizmeti'ni kullanma

Bu örnekte, Word ile birlikte gelen Zarif Faks şablonu kullanılmaktadır. Bu örnek, bu şablon olmadan çalışmaz. Şablonu yüklemek için şu adımları izleyin:

  1. Office Kurulum sihirbazını başlatın.
  2. Sihirbazda Özellik Ekle veya Kaldır'a tıklayın.
  3. Yüklenecek Özellikler'in altında Windows için Microsoft Excel'i genişletin. Elektronik Tablo Şablonları'nı tıklatın, Bilgisayarımdan Çalıştır'ı ve ardından Güncelleştir'i tıklatın.

Word'den Web hizmetini kullanmak için şu adımları izleyin:

  1. Word'ü başlatın. Varsayılan olarak boş bir belge oluşturulur.

  2. Araçlar menüsünde Makro'ya ve ardından Visual Basic Düzenleyicisi'ne tıklayın. Ekle menüsünde Modül'e tıklayarak boş bir kod modülü ekleyin.

  3. **Araçlar **menüsünde Başvurular'a tıklayın.

  4. Başvurular iletişim kutusunda Microsoft SOAP Tür Kitaplığı'nı seçin ve ardından Tamam'a tıklayın.

    NotBaşvurular iletişim kutusunda Microsoft SOAP Tür Kitaplığı kullanılamıyorsa Gözat'a tıklayın. Başvuru Ekle iletişim kutusunda C:\Program Files\Common Files\MSSoap\Binaries dizinine gidin ve mssoap1.dll'ı seçin. Aç'a ve ardından Tamam'a tıklayın.

  5. Kod modülüne aşağıdaki kodu yapıştırın:

    Public Const sServer = "localhost"
    
    Sub GenerateForm(sID As String)
        Dim oSOAPClient As Object
    
    On Error GoTo errhand
        Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
        oSOAPClient.mssoapinit "http://" + sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    Dim arrTemp() As String
        arrTemp = oSOAPClient.QueryDatabase(sID)
    
    Dim oDoc As Word.Document
    
    Set oDoc = Application.Documents.Add("Elegant Fax.dot")
        oDoc.Bookmarks("Company").Range.Text = arrTemp(2) + " " + arrTemp(1) + vbCrLf + _
                arrTemp(4) + vbCrLf + arrTemp(5) + ", " + arrTemp(6) + "  " + arrTemp(7) + vbCrLf + _
                arrTemp(3)           
        Exit Sub
    errhand:
        MsgBox "Error #" + Err.Number + ": " + Err.Description
    End Sub
    
    Sub ShowForm()
      ' Show the dialog box to the user.
      UserForm1.Show
    End Sub
    
    

    NOT sServer sabitini, yeni oluşturduğunuz Web hizmetini barındıran sunucuya işaret eden şekilde değiştirin.

  6. Ekle menüsünde Kullanıcı Formu'na tıklayarak boş bir kullanıcı formu ekleyin.

  7. Forma büyük bir liste kutusu ve komut düğmesi yerleştirin.

  8. Görünüm menüsünde Kod'a tıklayarak kullanıcı formunun kod penceresine geçin.

  9. Kod penceresinin içeriğini aşağıdakilerle değiştirin:

    Private Sub CommandButton1_Click()
        ' Generate a FAX based on the ID.
        GenerateForm ListBox1.List(ListBox1.ListIndex)
        UserForm1.Hide
    End Sub
    
    Private Sub UserForm_Initialize()
        Dim oSOAPClient As Object
    
    ' Create a SOAP client.
        Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
        ' Initialize the SOAP client to the Web service.
        oSOAPClient.mssoapinit "http://" + Module1.sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    Dim arrTemp() As String
        ' Get an array of IDs.
        arrTemp = oSOAPClient.GetIDs()
    
    ' Fill the list box with IDs.
        For i = 0 To UBound(arrTemp)
          ListBox1.AddItem arrTemp(i)
        Next
    End Sub
    
  10. Belgeye dönmek için VBA Düzenleyicisi'ni kapatın.

  11. Araçlar menüsünde Makro'ya ve ardından Makrolar'a tıklayın. Makrolar iletişim kutusunda, Kimlik listesini görüntülemek için ShowForm makrosunu çalıştırın. Listeden bir kimlik seçin ve bu kullanıcının bilgilerini içeren bir faks belgesi oluşturmak için komut düğmesine tıklayın.

Excel'den Web Hizmeti'ni kullanma

Bu örnek, Excel ile birlikte gelen Satış Faturası şablonunu kullanır. Bu örnek, bu şablon olmadan çalışmaz. Şablonu yüklemek için şu adımları izleyin:

  1. Office Kurulum sihirbazını başlatın.
  2. Sihirbazda Özellik Ekle veya Kaldır'a tıklayın.
  3. Yüklenecek Özellikler'in altında Windows için Microsoft Excel'i genişletin, Elektronik Tablo Şablonları'nı genişletin ve ardından Satış Faturası'na tıklayın. Bilgisayarımdan Çalıştır'a ve güncelleştir'e tıklayın.

Excel'den Web hizmetini kullanmak için şu adımları izleyin:

  1. Excel'i başlatın. Varsayılan olarak boş bir çalışma kitabı oluşturulur.

  2. Araçlar menüsünde Makro'ya ve ardından Visual Basic Düzenleyicisi'ne tıklayın. Ekle menüsünde Modül'e tıklayarak boş bir kod modülü ekleyin.

  3. **Araçlar **menüsünde Başvurular'a tıklayın.

  4. Başvurular iletişim kutusunda Microsoft SOAP Tür Kitaplığı'nı seçin ve ardından Tamam'a tıklayın.

    NotBaşvurular iletişim kutusunda Microsoft SOAP Tür Kitaplığı kullanılamıyorsa Gözat'a tıklayın. Başvuru Ekleiletişim kutusunda C:\Program Files\Common Files\MSSoap\Binaries dizinine gidin ve mssoap1.dll'ı seçin. Aç'a ve ardından Tamam'a tıklayın.

  5. Kod modülüne aşağıdaki kodu yapıştırın:

    Const sTemplatePath = "C:\Microsoft Office\Templates\1033\Sales Invoice.xlt"
    Public Const sServer = "localhost"
    
    Sub GenerateForm(sID As String)
        Dim oSOAPClient As Object
    
    On Error GoTo errhand
        Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
        oSOAPClient.mssoapinit "http://" + sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    Dim arrTemp() As String
        arrTemp = oSOAPClient.QueryDatabase(sID)
    
    Dim oBook As Excel.Workbook
    
    Set oBook = Application.Workbooks.Add(sTemplatePath)
        With oBook.ActiveSheet
          If If CInt(Application.Version) = 10 Or CInt(Application.Version) = 11 Then
            .Range("D13").Value = arrTemp(2) + " " + arrTemp(1)
            .Range("D14").Value = arrTemp(4)
            .Range("D15").Value = arrTemp(5)
            .Range("F15").Value = arrTemp(6)
            .Range("H15").Value = arrTemp(7)
            .Range("D16").Value = arrTemp(3)
    
    .Range("M13").Value = CStr(Date)
            .Range("C19").Value = "45.8"
            .Range("D19").Value = "Consulting hours"
            .Range("L19").Value = "75"
          ElseIf CInt(Application.Version) = 9 Then
            .Range("data5").Value = arrTemp(2) + " " + arrTemp(1)
            .Range("data6").Value = arrTemp(4)
            .Range("data7").Value = arrTemp(5)
            .Range("data8").Value = arrTemp(6)
            .Range("data9").Value = arrTemp(7)
            .Range("data10").Value = arrTemp(3)
    
    .Range("data11").Value = "45.8"
            .Range("data12").Value = "Consulting hours"
            .Range("data13").Value = "75"
          End If
        End With
        Exit Sub
    errhand:
        MsgBox "Error #" + Err.Number + ": " + Err.Description
    End Sub
    
    Sub ShowForm()
      ' Show the dialog box to the user.
      UserForm1.Show
    End Sub
    
    

    Not sServer sabitini, yeni oluşturduğunuz Web hizmetini barındıran sunucuya işaret eden şekilde değiştirin. Fatura dosyasının doğru yoluna işaret etmek için sTemplatePath sabitini değiştirin. Office 2000 için, bu dosyanın varsayılan konumu C:\Microsoft Office\Templates\1033\Invoice.xlt'tir. Office XP için varsayılan konum C:\Microsoft Office\Templates\1033\Sales Invoice.xlt'tir.

  6. Ekle menüsünde Kullanıcı Formu'na tıklayarak boş bir kullanıcı formu ekleyin.

  7. Forma büyük bir liste kutusu ve komut düğmesi yerleştirin.

  8. Görünüm menüsünde Kod'a tıklayarak kullanıcı formunun kod penceresine geçin.

  9. Kod penceresinin içeriğini aşağıdakilerle değiştirin:

    Private Sub CommandButton1_Click()
        ' Generate a FAX based on the ID.
        GenerateForm ListBox1.List(ListBox1.ListIndex)
        UserForm1.Hide
    End Sub
    
    Private Sub UserForm_Initialize()
        Dim oSOAPClient As Object
    
    ' Create a SOAP client.
        Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
        ' Initialize the SOAP client to the Web service.
        oSOAPClient.mssoapinit "http://" + Module1.sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    Dim arrTemp() As String
        ' Get an array of IDs.
        arrTemp = oSOAPClient.GetIDs()
    
    ' Fill the list box with IDs.
        For i = 0 To UBound(arrTemp)
          ListBox1.AddItem arrTemp(i)
        Next
    End Sub
    
    
  10. Çalışma kitabına dönmek için VBA Düzenleyicisi'ni kapatın.

  11. Araçlar menüsünde Makro'ya ve ardından Makrolar'a tıklayın. Makrolar iletişim kutusunda, Kimlik listesini görüntülemek için ShowForm makrosunu çalıştırın. Listeden bir kimlik seçin ve komut düğmesine tıklayarak kullanıcının bilgileriyle bir fatura oluşturun.

Başvurular

Web hizmetleri hakkında ek bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntüleyin:

Visual Basic .NET Kullanarak Basit Bir Web Hizmeti Yazma 301273