AS400 データを提供する Web サービスがあります。この Web サービスには、動的にしたい固定接続文字列があります。以下のコードを参照してください。
Public Function GetData(sql As String) As DataTable
Dim _data As DataTable
Try
Dim s As String = "Provider=IBMDA400"
s &= ";Data Source=" & "x.x.x.x"
s &= ";User Id=" & "USER"
s &= ";Password=" & "PASS"
s &= ";Default Collection=" & "AAABBB"
con = New OleDbConnection(s)
Dim cmd As New OleDbCommand
With cmd
.Connection = con
.CommandType = CommandType.Text
.CommandText = sql
End With
Dim dap As New OleDbDataAdapter(cmd)
con.Open()
Dim dat As New DataSet
dap.Fill(dat)
con.Close()
con.Dispose()
_data = dat.Tables(0)
Catch ex As Exception
_data = New DataTable
End Try
Return _data
End Function
上記を使用するサンプル Web サービス関数:
<WebMethod()> _
Public Function GetPicklistLines(picklist As String) As List(Of PicklistLine)
Dim lines As New List(Of PicklistLine)
Dim line As PicklistLine
sql = "select " & _
"OLPLNO,OLPLLI,OLORNO,OLLINE,OLPRDC,OLDESC,OLOQTS,OLCQTS,OLUNIT,OLORDS,PGDRNR, AAV01, AAV02, NAV03 " & _
"from SRBSOL " & _
"left outer join SRBPRG on PGPRDC=OLPRDC " & _
"left outer join Z2OOCFGF on F0ERNC=OLORNO and F0A2NB=OLLINE " & _
"where OLPLNO=" & picklist & " and OLSTAT <>' D'"
data = GetData(sql)
' TODO: insert ROW 0 to set active:
sql = "insert " & _
"into SRBSOL " & _
"(OLPLNO, OLPLLI) " & _
"values " & _
"(" & picklist & "," & 0 & ") " & _
"where OLPLNO=" & picklist & " and OLSTAT <>' D'"
For Each dr As DataRow In data.Rows
' TODO: get reported quantity:
sql = "select " & _
"RCBAQT " & _
"from Z2OOREXC " & _
"where RCPLNO='" & picklist & "' and RCPLLI='" & dr("OLPLLI") & "'"
line = New PicklistLine
With line
.PicklistNumber = picklist
.OrderNumber = IIf(TypeOf (dr("OLORNO")) Is DBNull, "", dr("OLORNO"))
.PicklistLinenumber = IIf(TypeOf (dr("OLPLLI")) Is DBNull, "", dr("OLPLLI"))
.Item = IIf(TypeOf (dr("OLPRDC")) Is DBNull, "", dr("OLPRDC"))
.ItemDescription = IIf(TypeOf (dr("OLDESC")) Is DBNull, "", dr("OLDESC"))
.InnerColor = IIf(TypeOf (dr("AAV01")) Is DBNull, "", dr("AAV01"))
.OuterColor = IIf(TypeOf (dr("AAV02")) Is DBNull, "", dr("AAV02"))
.Length = IIf(TypeOf (dr("NAV03")) Is DBNull, "", dr("NAV03"))
.Unit = IIf(TypeOf (dr("OLUNIT")) Is DBNull, "", dr("OLUNIT"))
.Quantity = IIf(TypeOf (dr("OLCQTS")) Is DBNull, "", CInt(dr("OLCQTS")))
.Needed = IIf(TypeOf (dr("OLOQTS")) Is DBNull, "", CInt(dr("OLOQTS")))
End With
lines.Add(line)
Next
Return lines
End Function
上記の関数は jquery によって呼び出されます。
function GetAllPicklists() {
$('#page_overview_search').addClass('ui-disabled');
$("#Picklists").html('');
//$("#MemberList").addClass("loading");
$.ajax({
type: "POST",
url: "http://" + host + "/services/picklists.asmx/GetAllPicklists",
data: "{'customer':'" + $('#select-customer').val() + "', 'route':'" + $('#select-route').val() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnGetAllPicklistsSuccess,
error: OnError
});
}
JSONを提供するようにWebサービス機能を変更しましたが、それは進行中です... :)
すべてが期待どおりに機能していますが、 GetData からの接続文字列を動的にしたいと考えています。Data Source (IP)、User Id、Password、およびDefault Collectionの値を使用して (まだ定義されていない) 接続オブジェクトを設定するにはどうすればよいですか。具体的には、jquery POSTデータパラメータでその接続オブジェクトとサービス関数呼び出しパラメータを渡す方法は? 将来、ログイン時にこの接続オブジェクトを設定することは可能ですか?
ご不明な点がございましたら、お気軽にご質問ください。
前もって感謝します!