Use WebAPI to Retrieve a Data List
For more background information about Infinity Web APIs, see:
Introduction to the Infinity Web Service APIs
Or a for a more in depth discussion, see:
This example is from the WebAPIDemo that comes with samples when you install the Infinity SDK.
The WebAPIDemo project has the following references:
Search is called to retrieve a constituent, and a constituent ID is retrieved from the search results. LoadRecord is called with the constituent ID that uses the WebAPI to retrieve a data list and populate a list view on a win form.
Private Sub LoadRecord(ByVal ID As Guid) 'load the phone numbers using the "Phones List" data list from Blackbaud.AppFx.Constituent.Catalog InitAppFxService() LoadPhones(ID) LoadEmail(ID) End Sub Private Sub LoadPhones(ByVal contextID As Guid) InitAppFxService() With lv_Phones .View = View.Details .FullRowSelect = True .Clear() End With Try Dim req As New ServiceProxy.DataListLoadRequest With req .ClientAppInfo = GetRequestHeader() .DataListID = New Guid("846e0526-3b1e-4d4e-a973-1be20ecb8288") ‘The guid (System record id) is a reference to a data list feature which can be determined by using the feature meta data. .ContextRecordID = contextID.ToString .IncludeMetaData = True End With Dim reply As ServiceProxy.DataListLoadReply reply = _service.DataListLoad(req) If (reply.Rows Is Not Nothing) Then For Each f As Blackbaud.AppFx.XmlTypes.DataListOutputFieldType In reply.MetaData.OutputDefinition.OutputFields lv_Phones.Columns.Add(f.Caption) Next For Each row As ServiceProxy.DataListResultRow In reply.Rows lv_Phones.Items.Add(New ListViewItem(row.Values)) Next lv_Phones.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize) End If MouseWaitStop() Catch exSoap As System.Web.Services.Protocols.SoapException 'If an error occurs we attach a SOAP fault error header. 'You can check the proxy.ResponseErrorHeaderValue to get rich 'error information including a nicer message compared to the raw exception message. Dim wsMsg As String If _service.ResponseErrorHeaderValue Is Not Nothing Then wsMsg = _service.ResponseErrorHeaderValue.ErrorText Else wsMsg = exSoap.Message End If MouseWaitStop() MsgBox(wsMsg) Catch ex As Exception MouseWaitStop() MsgBox(ex.Message) End Try End Sub Private Sub LoadEmail(ByVal contextID As Guid) InitAppFxService() With lv_Email .View = View.Details .FullRowSelect = True .Clear() End With Try Dim req As New ServiceProxy.DataListLoadRequest With req .ClientAppInfo = GetRequestHeader() .DataListID = New Guid("9A688911-B64E-4833-B39F-730472ACD9EB") .ContextRecordID = contextID.ToString .IncludeMetaData = True End With Dim reply As ServiceProxy.DataListLoadReply reply = _service.DataListLoad(req) If (reply.Rows Is Not Nothing) Then lv_Email.View = View.Details For Each f As Blackbaud.AppFx.XmlTypes.DataListOutputFieldType In reply.MetaData.OutputDefinition.OutputFields lv_Email.Columns.Add(f.Caption) Next For Each row As ServiceProxy.DataListResultRow In reply.Rows lv_Email.Items.Add(NewListViewItem(row.Values)) Next lv_Email.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize) End If MouseWaitStop() Catch exSoap As System.Web.Services.Protocols.SoapException 'If an error occurs we attach a SOAP fault error header. 'You can check the proxy.ResponseErrorHeaderValue to get rich 'error information including a nicer message compared to the raw exception message. Dim wsMsg As String If_service.ResponseErrorHeaderValue Is Not Nothing Then wsMsg = _service.ResponseErrorHeaderValue.ErrorText Else wsMsg = exSoap.Message End If MouseWaitStop() MsgBox(wsMsg) Catch ex As Exception MouseWaitStop() MsgBox(ex.Message) End Try End Sub Private Sub InitAppFxService() 'Set the url of the web service _service.Url = txt_ServiceUrl.Text 'Must set credentials since we use Windows authentication. _service.Credentials = System.Net.CredentialCache.DefaultCredentials End Sub Private Function GetRequestHeader() As ServiceProxy.ClientAppInfoHeader 'Create the client app header (all requests require this) Dim header As New ServiceProxy.ClientAppInfoHeader 'Provide some name to distinguish this application using the service. This name will ultimately be passed to the 'database, so don't make this random or per user or you won't benefit from connection pooling. header.ClientAppName = txt_ApplicationName.Text 'A single webservice instance can serve multiple databases. 'You must specify the database for every request. The list of available databases is what you see in the login form. header.REDatabaseToUse = cbo_Databases.Text Return header End Function