Private Sub LoadProgressUpdate(FY As String)
Dim job As HttpJob
Dim xml As String = File.ReadString(File.DirAssets,"get_progress_update.xml")
xml = xml.Replace("$query$",FY)
job.Initialize("MyJob",Me)
job.PostString(API,xml)
job.GetRequest.SetHeader("SOAPAction", $""http://tempuri.org/IServiceReport/get_progress_update""$)
job.GetRequest.SetHeader("User-Agent", "Apache-HttpClient/4.5.2 (Java/1.8.0_181)")
job.GetRequest.SetContentType("text/xml; charset=utf-8")
ProgressDialogShow2("Retreving Physical Progress data...",False)
Wait For (job) JobDone (j As HttpJob)
ProgressDialogHide
If j.Success Then
Dim response As String = j.GetString
Dim JsonOut As String = Generic.xmlGetTagContent(response,"get_progress_updateResult")
'Log(JsonOut)
JsonOut = JsonOut.Replace("
","")
Dim Json As JSONParser
Json.Initialize(JsonOut)
Dim mylist As List
mylist.Initialize
mylist = Json.NextArray
Dim dt As List
dt.Initialize
Dim totalNew As Int, totalCO As Int, totalCCA As Double, _
totalDetailedSurvey As Int, totalPPRCompleted As Int, _
totalPPROngoing As Int, totalPPRAgreement As Int, _
totalConstructionStarted As Int, _
totalProjectCompleted As Int, totalachievedCCA As Double, Totalprogress As Double, TotalTarget As Int
'For i = 0 To mylist.Size -1
Dim index As Int
For Each m As Map In mylist
index = ShowProgress(progressbar_op)
Sleep(50)
Dim new As Int = m.Get("no_is_new")
Dim co As Int = m.Get("no_carried")
Dim total As Int = new + co
dt.Add(Array(m.Get("districtname"),total,m.Get("no_is_new"),m.Get("no_carried"),Round2(m.Get("tot_cca"),0), _
m.Get("no_detailed_survey"),m.Get("no_ppr_completed"),m.Get("no_ppr_ongoing"), _
m.Get("no_ppr_agreement"),m.Get("no_construction_started"),Round2(m.Get("avg_const_progress"),2), _
m.Get("no_project_completed"),Round2(m.Get("achieved_cca"),0)))
totalNew = totalNew + m.Get("no_is_new")
totalCO = totalCO + m.Get("no_carried")
totalCCA = totalCCA + m.Get("tot_cca")
totalDetailedSurvey = totalDetailedSurvey + m.Get("no_detailed_survey")
totalPPRCompleted= totalPPRCompleted + m.Get("no_ppr_completed")
totalPPROngoing = totalPPROngoing + m.Get("no_ppr_ongoing")
totalPPRAgreement = totalPPRAgreement + m.Get("no_ppr_agreement")
totalConstructionStarted = totalConstructionStarted + m.Get("no_construction_started")
totalProjectCompleted = totalProjectCompleted + m.Get("no_project_completed")
totalachievedCCA = totalachievedCCA + m.Get("achieved_cca")
Totalprogress = Totalprogress + m.Get("avg_const_progress")
TotalTarget = TotalTarget + total
Next
dt.Add(Array("Total",TotalTarget,totalNew,totalCO,Round2(totalCCA,0),totalDetailedSurvey,totalPPRCompleted,totalPPROngoing,totalPPRAgreement,totalConstructionStarted,Round2(Totalprogress/8,2),totalProjectCompleted,Round2(totalachievedCCA,0)))
dgv.SetData(dt)
'cell alignment
SetCellAlignment_OP
'xui.MsgboxAsync(xmlGetTagContent(response,"ReadTableSQLResult"),"B4x")
HideProgress(progressbar_op, index)
Else
ToastMessageShow("No Respone. Please check your Internet Connection",True)
'xui.MsgboxAsync(j.ErrorMessage,"B4x")
End If
j.Release
End Sub
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:get_progress_update>
<!--Optional:-->
<tem:fiscalyear>$query$</tem:fiscalyear>
</tem:get_progress_update>
</soapenv:Body>
</soapenv:Envelope>
to create XML Body and Read responses from the service, use XML2MAPHere you can start. I have been so confused when I have started project using Asmx webservice. But at the end I found solution.
Call Asmx or Wcf webservices from B4x:Private Sub LoadProgressUpdate(FY As String) Dim job As HttpJob Dim xml As String = File.ReadString(File.DirAssets,"get_progress_update.xml") xml = xml.Replace("$query$",FY) job.Initialize("MyJob",Me) job.PostString(API,xml) job.GetRequest.SetHeader("SOAPAction", $""http://tempuri.org/IServiceReport/get_progress_update""$) job.GetRequest.SetHeader("User-Agent", "Apache-HttpClient/4.5.2 (Java/1.8.0_181)") job.GetRequest.SetContentType("text/xml; charset=utf-8") ProgressDialogShow2("Retreving Physical Progress data...",False) Wait For (job) JobDone (j As HttpJob) ProgressDialogHide If j.Success Then Dim response As String = j.GetString Dim JsonOut As String = Generic.xmlGetTagContent(response,"get_progress_updateResult") 'Log(JsonOut) JsonOut = JsonOut.Replace("
","") Dim Json As JSONParser Json.Initialize(JsonOut) Dim mylist As List mylist.Initialize mylist = Json.NextArray Dim dt As List dt.Initialize Dim totalNew As Int, totalCO As Int, totalCCA As Double, _ totalDetailedSurvey As Int, totalPPRCompleted As Int, _ totalPPROngoing As Int, totalPPRAgreement As Int, _ totalConstructionStarted As Int, _ totalProjectCompleted As Int, totalachievedCCA As Double, Totalprogress As Double, TotalTarget As Int 'For i = 0 To mylist.Size -1 Dim index As Int For Each m As Map In mylist index = ShowProgress(progressbar_op) Sleep(50) Dim new As Int = m.Get("no_is_new") Dim co As Int = m.Get("no_carried") Dim total As Int = new + co dt.Add(Array(m.Get("districtname"),total,m.Get("no_is_new"),m.Get("no_carried"),Round2(m.Get("tot_cca"),0), _ m.Get("no_detailed_survey"),m.Get("no_ppr_completed"),m.Get("no_ppr_ongoing"), _ m.Get("no_ppr_agreement"),m.Get("no_construction_started"),Round2(m.Get("avg_const_progress"),2), _ m.Get("no_project_completed"),Round2(m.Get("achieved_cca"),0))) totalNew = totalNew + m.Get("no_is_new") totalCO = totalCO + m.Get("no_carried") totalCCA = totalCCA + m.Get("tot_cca") totalDetailedSurvey = totalDetailedSurvey + m.Get("no_detailed_survey") totalPPRCompleted= totalPPRCompleted + m.Get("no_ppr_completed") totalPPROngoing = totalPPROngoing + m.Get("no_ppr_ongoing") totalPPRAgreement = totalPPRAgreement + m.Get("no_ppr_agreement") totalConstructionStarted = totalConstructionStarted + m.Get("no_construction_started") totalProjectCompleted = totalProjectCompleted + m.Get("no_project_completed") totalachievedCCA = totalachievedCCA + m.Get("achieved_cca") Totalprogress = Totalprogress + m.Get("avg_const_progress") TotalTarget = TotalTarget + total Next dt.Add(Array("Total",TotalTarget,totalNew,totalCO,Round2(totalCCA,0),totalDetailedSurvey,totalPPRCompleted,totalPPROngoing,totalPPRAgreement,totalConstructionStarted,Round2(Totalprogress/8,2),totalProjectCompleted,Round2(totalachievedCCA,0))) dgv.SetData(dt) 'cell alignment SetCellAlignment_OP 'xui.MsgboxAsync(xmlGetTagContent(response,"ReadTableSQLResult"),"B4x") HideProgress(progressbar_op, index) Else ToastMessageShow("No Respone. Please check your Internet Connection",True) 'xui.MsgboxAsync(j.ErrorMessage,"B4x") End If j.Release End Sub
Some of the variable area listed which as used above (Highlighted bold and underlined) :
API = "http://***.com.np/Service.asmx"
"get_progress_update.xml"
get_progress_update.xml:<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> <soapenv:Header/> <soapenv:Body> <tem:get_progress_update> <!--Optional:--> <tem:fiscalyear>$query$</tem:fiscalyear> </tem:get_progress_update> </soapenv:Body> </soapenv:Envelope>
This xml part is taken from the asmx webservice.
The response can be checked using Postman or ReadyAPI.
At last read the content within the result part in output xml.
Thanks for reply...to create XML Body and Read responses from the service, use XML2MAP
Sample (sorry spanish)[B4X] Xml2Map - Simple way to parse XML documents
Nobody likes to parse XML. Parsing JSON is simple and fun. Parsing XML is tedious and boring. That is the reason behind the Xml2Map class. It internally parses the XML document and returns a Map with the parsed data. It is similar to parsing JSON. Tip: You can use this tool to help you with...www.b4x.com
[SOLUCIONADO] ¿Cómo consultar un webservice SOAP?
Hola, nunca he hecho esto en Android, con otro lenguaje que uso para windows tengo componentes que lo hacen todo "milagrosamente". He mirado varios hilos y no me entero porque no son muy genéricos, a ver si podéis ayudarme. Pongamos un ejemplo sencillo, hago una llamada con una divisa y me...www.b4x.com
Public Sub WSCallSoapURL(URL As String, Parameters As String) As ResumableSub
Dim Result As String
Dim j As HttpJob
Try
j.Initialize("", Me)
j.PostString (URL, Parameters)
j.GetRequest.SetHeader("Content-Type","text/xml")
j.GetRequest.SetHeader("Content-length", Parameters.Length)
Wait For (j) JobDone(j As HttpJob)
If j.Success Then
Result = j.GetString
Else
ToastMessageShow("¡Hummm...!",False)
End If
Catch
Log(LastException)
End Try
j.Release
Return Result
End Sub
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("ProductionEntry")
WSCallSoapURL("http://103.76.188.138:85/StageEntry/StageEntry.asmx?op=GetStageList","")
End Sub
create the body by viewing the properties that the web service hasThanks for reply...
I have tried below code but its showing as error.Please help to solve this issues
** Activity (productionentry) Create (first time) **
** Activity (productionentry) Resume **
ResponseError. Reason: Internal Server Error, Response: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Receiver</soap:Value></soap:Code><soap:Reason><soap:Text xml:lang="en">System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Xml.XmlException: Root element is missing.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read()
at System.Xml.XmlReader.MoveToContent()
at System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement()
at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()
at System.Web.Services.Protocols.SoapServerProtocol.Initialize()
at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
--- End of inner exception stack trace ---</soap:Text></soap:Reason><soapetail /></soap:Fault></soap:Body></soap:Envelope>
** Activity (productionentry) Pause, UserClosed = true **
*** Service (starter) Create ***
** Service (starter) Start **
Code : -
Code:Public Sub WSCallSoapURL(URL As String, Parameters As String) As ResumableSub Dim Result As String Dim j As HttpJob Try j.Initialize("", Me) j.PostString (URL, Parameters) j.GetRequest.SetHeader("Content-Type","text/xml") j.GetRequest.SetHeader("Content-length", Parameters.Length) Wait For (j) JobDone(j As HttpJob) If j.Success Then Result = j.GetString Else ToastMessageShow("¡Hummm...!",False) End If Catch Log(LastException) End Try j.Release Return Result End Sub Sub Activity_Create(FirstTime As Boolean) 'Do not forget to load the layout file created with the visual designer. For example: Activity.LoadLayout("ProductionEntry") WSCallSoapURL("http://103.76.188.138:85/StageEntry/StageEntry.asmx?op=GetStageList","") End Sub
Thanks for reply...create the body by viewing the properties that the web service has
here
result:
View attachment 143681
Note:
I can post the code, but the idea is that you understand what you are developing.
my darlingThanks for reply...
I would like to read data from GetStageList (Soap Request) and loaded in to combobox...
sorry........my darling
I have to know the results of the web service and what values it wants in the combobox.
You can post the valid values of:
<FSlNo>int</FSlNo>
<TSlNo>int</TSlNo>
what data do you wantoh .........
sorry........
these two values are parameter
FSlNo = 10
TSlNo = 50
{
"soap:Envelope": {
"Attributes": {
"xmlns:xsd": "http:\/\/www.w3.org\/2001\/XMLSchema",
"xmlns:soap": "http:\/\/schemas.xmlsoap.org\/soap\/envelope\/",
"xmlns:xsi": "http:\/\/www.w3.org\/2001\/XMLSchema-instance"
},
"soap:Body": {
"GetStageListResponse": {
"Attributes": {
"xmlns": "http:\/\/tempuri.org\/"
},
"GetStageListResult": {
"xs:schema": {
"Attributes": {
"xmlns": "",
"xmlns:msdata": "urn:schemas-microsoft-com:xml-msdata",
"id": "NewDataSet",
"xmlns:xs": "http:\/\/www.w3.org\/2001\/XMLSchema"
},
"xs:element": {
"xs:complexType": {
"xs:choice": {
"Attributes": {
"minOccurs": "0",
"maxOccurs": "unbounded"
},
"xs:element": {
"xs:complexType": {
"xs:sequence": {
"xs:element": [
{
"Attributes": {
"minOccurs": "0",
"name": "Serial",
"type": "xs:short"
},
"Text": ""
},
{
"Attributes": {
"minOccurs": "0",
"name": "Stage",
"type": "xs:string"
},
"Text": ""
}
]
}
},
"Attributes": {
"name": "Table"
}
}
}
},
"Attributes": {
"msdata:IsDataSet": "true",
"msdata:UseCurrentLocale": "true",
"name": "NewDataSet"
}
}
},
"diffgr:diffgram": {
"NewDataSet": {
"Table": [
{
"Serial": "10",
"Attributes": {
"msdata:rowOrder": "0",
"diffgr:id": "Table1"
},
"Stage": "Cutting In"
},
{
"Serial": "20",
"Attributes": {
"msdata:rowOrder": "1",
"diffgr:id": "Table2"
},
"Stage": "Cutting Out"
},
{
"Serial": "30",
"Attributes": {
"msdata:rowOrder": "2",
"diffgr:id": "Table3"
},
"Stage": "Marking Out"
},
{
"Serial": "35",
"Attributes": {
"msdata:rowOrder": "3",
"diffgr:id": "Table4"
},
"Stage": "Spray In"
},
{
"Serial": "40",
"Attributes": {
"msdata:rowOrder": "4",
"diffgr:id": "Table5"
},
"Stage": "Spray Out"
},
{
"Serial": "45",
"Attributes": {
"msdata:rowOrder": "5",
"diffgr:id": "Table6"
},
"Stage": "Slitting In"
},
{
"Serial": "50",
"Attributes": {
"msdata:rowOrder": "6",
"diffgr:id": "Table7"
},
"Stage": "Slitting Out"
}
],
"Attributes": {
"xmlns": ""
}
},
"Attributes": {
"xmlns:msdata": "urn:schemas-microsoft-com:xml-msdata",
"xmlns:diffgr": "urn:schemas-microsoft-com:xml-diffgram-v1"
}
}
}
}
}
}
}
Thanks for reply...what data do you want
JSON:{ "soap:Envelope": { "Attributes": { "xmlns:xsd": "http:\/\/www.w3.org\/2001\/XMLSchema", "xmlns:soap": "http:\/\/schemas.xmlsoap.org\/soap\/envelope\/", "xmlns:xsi": "http:\/\/www.w3.org\/2001\/XMLSchema-instance" }, "soap:Body": { "GetStageListResponse": { "Attributes": { "xmlns": "http:\/\/tempuri.org\/" }, "GetStageListResult": { "xs:schema": { "Attributes": { "xmlns": "", "xmlns:msdata": "urn:schemas-microsoft-com:xml-msdata", "id": "NewDataSet", "xmlns:xs": "http:\/\/www.w3.org\/2001\/XMLSchema" }, "xs:element": { "xs:complexType": { "xs:choice": { "Attributes": { "minOccurs": "0", "maxOccurs": "unbounded" }, "xs:element": { "xs:complexType": { "xs:sequence": { "xs:element": [ { "Attributes": { "minOccurs": "0", "name": "Serial", "type": "xs:short" }, "Text": "" }, { "Attributes": { "minOccurs": "0", "name": "Stage", "type": "xs:string" }, "Text": "" } ] } }, "Attributes": { "name": "Table" } } } }, "Attributes": { "msdata:IsDataSet": "true", "msdata:UseCurrentLocale": "true", "name": "NewDataSet" } } }, "diffgr:diffgram": { "NewDataSet": { "Table": [ { "Serial": "10", "Attributes": { "msdata:rowOrder": "0", "diffgr:id": "Table1" }, "Stage": "Cutting In" }, { "Serial": "20", "Attributes": { "msdata:rowOrder": "1", "diffgr:id": "Table2" }, "Stage": "Cutting Out" }, { "Serial": "30", "Attributes": { "msdata:rowOrder": "2", "diffgr:id": "Table3" }, "Stage": "Marking Out" }, { "Serial": "35", "Attributes": { "msdata:rowOrder": "3", "diffgr:id": "Table4" }, "Stage": "Spray In" }, { "Serial": "40", "Attributes": { "msdata:rowOrder": "4", "diffgr:id": "Table5" }, "Stage": "Spray Out" }, { "Serial": "45", "Attributes": { "msdata:rowOrder": "5", "diffgr:id": "Table6" }, "Stage": "Slitting In" }, { "Serial": "50", "Attributes": { "msdata:rowOrder": "6", "diffgr:id": "Table7" }, "Stage": "Slitting Out" } ], "Attributes": { "xmlns": "" } }, "Attributes": { "xmlns:msdata": "urn:schemas-microsoft-com:xml-msdata", "xmlns:diffgr": "urn:schemas-microsoft-com:xml-diffgram-v1" } } } } } } }
"NewDataSet": {
"Table": [
{
"Serial": "10",
"Attributes": {
"msdata:rowOrder": "0",
"diffgr:id": "Table1"
},
"Stage": "Cutting In"
},
{
"Serial": "20",
"Attributes": {
"msdata:rowOrder": "1",
"diffgr:id": "Table2"
},
"Stage": "Cutting Out"
},
{
"Serial": "30",
"Attributes": {
"msdata:rowOrder": "2",
"diffgr:id": "Table3"
},
"Stage": "Marking Out"
},
{
"Serial": "35",
"Attributes": {
"msdata:rowOrder": "3",
"diffgr:id": "Table4"
},
"Stage": "Spray In"
},
{
"Serial": "40",
"Attributes": {
"msdata:rowOrder": "4",
"diffgr:id": "Table5"
},
"Stage": "Spray Out"
},
{
"Serial": "45",
"Attributes": {
"msdata:rowOrder": "5",
"diffgr:id": "Table6"
},
"Stage": "Slitting In"
},
{
"Serial": "50",
"Attributes": {
"msdata:rowOrder": "6",
"diffgr:id": "Table7"
},
"Stage": "Slitting Out"
}
],
please helpThanks for reply...
Please check my below requirement
Need Dataset:"NewDataSet": { "Table": [ { "Serial": "10", "Attributes": { "msdata:rowOrder": "0", "diffgr:id": "Table1" }, "Stage": "Cutting In" }, { "Serial": "20", "Attributes": { "msdata:rowOrder": "1", "diffgr:id": "Table2" }, "Stage": "Cutting Out" }, { "Serial": "30", "Attributes": { "msdata:rowOrder": "2", "diffgr:id": "Table3" }, "Stage": "Marking Out" }, { "Serial": "35", "Attributes": { "msdata:rowOrder": "3", "diffgr:id": "Table4" }, "Stage": "Spray In" }, { "Serial": "40", "Attributes": { "msdata:rowOrder": "4", "diffgr:id": "Table5" }, "Stage": "Spray Out" }, { "Serial": "45", "Attributes": { "msdata:rowOrder": "5", "diffgr:id": "Table6" }, "Stage": "Slitting In" }, { "Serial": "50", "Attributes": { "msdata:rowOrder": "6", "diffgr:id": "Table7" }, "Stage": "Slitting Out" } ],
Public Sub TestSoapURL(FSlNo As Int, TSlNo As Int)
Dim XMLLink As String = "http://103.76.188.138:85/StageEntry/StageEntry.asmx?op=GetStageList"
Dim XMLBody As XMLBuilder
XMLBody = XMLBody.create("soap:Envelope")
XMLBody = XMLBody.attribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance")
XMLBody = XMLBody.attribute("xmlns:xsd","http://www.w3.org/2001/XMLSchema")
XMLBody = XMLBody.attribute("xmlns:soap","http://schemas.xmlsoap.org/soap/envelope/")
XMLBody = XMLBody.element("soap:Body")
XMLBody = XMLBody.element2("GetStageList","http://tempuri.org/")
XMLBody = XMLBody.element("FSlNo").text(FSlNo).up
XMLBody = XMLBody.element("TSlNo").text(TSlNo).up
Dim XMLBodyRequest As String = XMLBody.asString2(CreateMap("indent": "yes"))
' Log(XMLBodyRequest)
Dim XMLSoapAction As String = "http://tempuri.org/GetStageList"
Wait For(WSCallSoapURL(XMLLink, XMLBodyRequest, XMLSoapAction)) Complete (XMLResult As String)
If XMLResult.Length = 0 Then Return
' Log("--- Result XML to Json ---")
Dim Xml2Map1 As Xml2Map
Xml2Map1.Initialize
Dim mRoot As Map = Xml2Map1.Parse(XMLResult)
Dim Body As Map = mRoot.Get("soap:Envelope").As(Map).Get("soap:Body")
Dim GetStageListResponse As Map = Body.Get("GetStageListResponse")
Dim GetStageListResult As Map = GetStageListResponse.Get("GetStageListResult")
Dim Diffgram As Map = GetStageListResult.Get("diffgr:diffgram")
Dim NewDataSet As Map = Diffgram.Get("NewDataSet")
Dim Table As List = NewDataSet.Get("Table")
For Each colTable As Map In Table
Dim Serial As String = colTable.Get("Serial")
Dim rowOrder As String = colTable.Get("Attributes").As(Map).Get("msdata:rowOrder")
Dim id As String = colTable.Get("Attributes").As(Map).Get("diffgr:id")
Dim Stage As String = colTable.Get("Stage")
Log($"${id} | ${Serial} | ${rowOrder} | ${Stage}"$)
Next
End Sub
Public Sub WSCallSoapURL(URL As String, Parameters As String, SoapAction As String) As ResumableSub
Dim Result As String
Dim j As HttpJob
Try
j.Initialize("", Me)
j.PostString (URL, Parameters)
j.GetRequest.SetHeader("Content-length", Parameters.Length)
j.GetRequest.SetContentType("text/xml; charset=utf-8")
j.GetRequest.SetHeader("SOAPAction", SoapAction)
Wait For (j) JobDone(j As HttpJob)
If j.Success Then
Result = j.GetString
Else
Log(j.ErrorMessage)
End If
Catch
Log(LastException)
End Try
j.Release
Return Result
End Sub
ThanksThis is the result of the response data you want.
Now you can fill the combobox
Attached B4X demo file
View attachment 143696
B4X:Public Sub TestSoapURL(FSlNo As Int, TSlNo As Int) Dim XMLLink As String = "http://103.76.188.138:85/StageEntry/StageEntry.asmx?op=GetStageList" Dim XMLBody As XMLBuilder XMLBody = XMLBody.create("soap:Envelope") XMLBody = XMLBody.attribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance") XMLBody = XMLBody.attribute("xmlns:xsd","http://www.w3.org/2001/XMLSchema") XMLBody = XMLBody.attribute("xmlns:soap","http://schemas.xmlsoap.org/soap/envelope/") XMLBody = XMLBody.element("soap:Body") XMLBody = XMLBody.element2("GetStageList","http://tempuri.org/") XMLBody = XMLBody.element("FSlNo").text(FSlNo).up XMLBody = XMLBody.element("TSlNo").text(TSlNo).up Dim XMLBodyRequest As String = XMLBody.asString2(CreateMap("indent": "yes")) ' Log(XMLBodyRequest) Dim XMLSoapAction As String = "http://tempuri.org/GetStageList" Wait For(WSCallSoapURL(XMLLink, XMLBodyRequest, XMLSoapAction)) Complete (XMLResult As String) If XMLResult.Length = 0 Then Return ' Log("--- Result XML to Json ---") Dim Xml2Map1 As Xml2Map Xml2Map1.Initialize Dim mRoot As Map = Xml2Map1.Parse(XMLResult) Dim Body As Map = mRoot.Get("soap:Envelope").As(Map).Get("soap:Body") Dim GetStageListResponse As Map = Body.Get("GetStageListResponse") Dim GetStageListResult As Map = GetStageListResponse.Get("GetStageListResult") Dim Diffgram As Map = GetStageListResult.Get("diffgr:diffgram") Dim NewDataSet As Map = Diffgram.Get("NewDataSet") Dim Table As List = NewDataSet.Get("Table") For Each colTable As Map In Table Dim Serial As String = colTable.Get("Serial") Dim rowOrder As String = colTable.Get("Attributes").As(Map).Get("msdata:rowOrder") Dim id As String = colTable.Get("Attributes").As(Map).Get("diffgr:id") Dim Stage As String = colTable.Get("Stage") Log($"${id} | ${Serial} | ${rowOrder} | ${Stage}"$) Next End Sub Public Sub WSCallSoapURL(URL As String, Parameters As String, SoapAction As String) As ResumableSub Dim Result As String Dim j As HttpJob Try j.Initialize("", Me) j.PostString (URL, Parameters) j.GetRequest.SetHeader("Content-length", Parameters.Length) j.GetRequest.SetContentType("text/xml; charset=utf-8") j.GetRequest.SetHeader("SOAPAction", SoapAction) Wait For (j) JobDone(j As HttpJob) If j.Success Then Result = j.GetString Else Log(j.ErrorMessage) End If Catch Log(LastException) End Try j.Release Return Result End Sub
sorry for late reply....This is the result of the response data you want.
Now you can fill the combobox
Attached B4X demo file
View attachment 143696
B4X:Public Sub TestSoapURL(FSlNo As Int, TSlNo As Int) Dim XMLLink As String = "http://103.76.188.138:85/StageEntry/StageEntry.asmx?op=GetStageList" Dim XMLBody As XMLBuilder XMLBody = XMLBody.create("soap:Envelope") XMLBody = XMLBody.attribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance") XMLBody = XMLBody.attribute("xmlns:xsd","http://www.w3.org/2001/XMLSchema") XMLBody = XMLBody.attribute("xmlns:soap","http://schemas.xmlsoap.org/soap/envelope/") XMLBody = XMLBody.element("soap:Body") XMLBody = XMLBody.element2("GetStageList","http://tempuri.org/") XMLBody = XMLBody.element("FSlNo").text(FSlNo).up XMLBody = XMLBody.element("TSlNo").text(TSlNo).up Dim XMLBodyRequest As String = XMLBody.asString2(CreateMap("indent": "yes")) ' Log(XMLBodyRequest) Dim XMLSoapAction As String = "http://tempuri.org/GetStageList" Wait For(WSCallSoapURL(XMLLink, XMLBodyRequest, XMLSoapAction)) Complete (XMLResult As String) If XMLResult.Length = 0 Then Return ' Log("--- Result XML to Json ---") Dim Xml2Map1 As Xml2Map Xml2Map1.Initialize Dim mRoot As Map = Xml2Map1.Parse(XMLResult) Dim Body As Map = mRoot.Get("soap:Envelope").As(Map).Get("soap:Body") Dim GetStageListResponse As Map = Body.Get("GetStageListResponse") Dim GetStageListResult As Map = GetStageListResponse.Get("GetStageListResult") Dim Diffgram As Map = GetStageListResult.Get("diffgr:diffgram") Dim NewDataSet As Map = Diffgram.Get("NewDataSet") Dim Table As List = NewDataSet.Get("Table") For Each colTable As Map In Table Dim Serial As String = colTable.Get("Serial") Dim rowOrder As String = colTable.Get("Attributes").As(Map).Get("msdata:rowOrder") Dim id As String = colTable.Get("Attributes").As(Map).Get("diffgr:id") Dim Stage As String = colTable.Get("Stage") Log($"${id} | ${Serial} | ${rowOrder} | ${Stage}"$) Next End Sub Public Sub WSCallSoapURL(URL As String, Parameters As String, SoapAction As String) As ResumableSub Dim Result As String Dim j As HttpJob Try j.Initialize("", Me) j.PostString (URL, Parameters) j.GetRequest.SetHeader("Content-length", Parameters.Length) j.GetRequest.SetContentType("text/xml; charset=utf-8") j.GetRequest.SetHeader("SOAPAction", SoapAction) Wait For (j) JobDone(j As HttpJob) If j.Success Then Result = j.GetString Else Log(j.ErrorMessage) End If Catch Log(LastException) End Try j.Release Return Result End Sub
*** Receiver (httputils2service) Receive (first time) ***
(Http client initialized with accept all option.)
Error occurred on line: 53 (B4XMainPage)
java.lang.RuntimeException: Object should first be initialized (Map).
at anywheresoftware.b4a.AbsObjectWrapper.getObject(AbsObjectWrapper.java:67)
at anywheresoftware.b4a.objects.collections.Map.Get(Map.java:65)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:348)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:157)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:201)
at anywheresoftware.b4a.shell.DebugResumableSub$RemoteResumableSub.resume(DebugResumableSub.java:22)
at anywheresoftware.b4a.BA.checkAndRunWaitForEvent(BA.java:275)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:150)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:201)
at anywheresoftware.b4a.keywords.Common$15.run(Common.java:1804)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8577)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Log("--- Result XML to Json ---")
Dim Xml2Map1 As Xml2Map
Xml2Map1.Initialize
Dim mRoot As Map = Xml2Map1.Parse(XMLResult)
Dim Body As Map = mRoot.Get("Envelope").As(Map).Get("Body")
Dim GetStageListResponse As Map = Body.Get("GetStageListResponse")
Dim GetStageListResult As Map = GetStageListResponse.Get("GetStageListResult")
Dim Diffgram As Map = GetStageListResult.Get("diffgram")
Dim NewDataSet As Map = Diffgram.Get("NewDataSet")
Dim Table As List = NewDataSet.Get("Table")
For Each colTable As Map In Table
Dim Serial As String = colTable.Get("Serial")
Dim rowOrder As String = colTable.Get("Attributes").As(Map).Get("rowOrder")
Dim id As String = colTable.Get("Attributes").As(Map).Get("id")
Dim Stage As String = colTable.Get("Stage")
Log($"${id} | ${Serial} | ${rowOrder} | ${Stage}"$)
Next
B4AmRoot.Get("soap:Envelope").As(Map).Get("soap:Body")
mRoot.Get("Envelope").As(Map).Get("Body")
please check the below error messge after changing the above code...Note:
XML2Map lib in B4J includes double dot tags and in B4A it doesn't.
I have corrected this class so that they are the same in both environments.
But I haven't asked @Erel to make the changes.
Sample:
B4J:
B4A
*** Receiver (httputils2service) Receive (first time) ***
(Http client initialized with accept all option.)
Error occurred on line: 60 (B4XMainPage)
java.lang.RuntimeException: Object should first be initialized (Map).
at anywheresoftware.b4a.AbsObjectWrapper.getObject(AbsObjectWrapper.java:67)
at anywheresoftware.b4a.objects.collections.Map.Get(Map.java:65)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:348)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:157)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:201)
at anywheresoftware.b4a.shell.DebugResumableSub$RemoteResumableSub.resume(DebugResumableSub.java:22)
at anywheresoftware.b4a.BA.checkAndRunWaitForEvent(BA.java:275)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:150)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:201)
at anywheresoftware.b4a.keywords.Common$15.run(Common.java:1804)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8577)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Dim Xml2Map1 As Xml2Map
Xml2Map1.Initialize
Dim mRoot As Map = Xml2Map1.Parse(XMLResult)
Dim Body As Map = mRoot.Get("Envelope").As(Map).Get("Body")
Dim GetStageListResponse As Map = Body.Get("GetStageListResponse")
Dim GetStageListResult As Map = GetStageListResponse.Get("GetStageListResult")
Dim Diffgram As Map = GetStageListResult.Get("diffgr:diffgram")
Dim NewDataSet As Map = Diffgram.Get("NewDataSet")
Dim Table As List = NewDataSet.Get("Table")
For Each colTable As Map In Table
Dim Serial As String = colTable.Get("Serial")
Dim rowOrder As String = colTable.Get("Attributes").As(Map).Get("msdata:rowOrder")
Dim id As String = colTable.Get("Attributes").As(Map).Get("diffgr:id")
Dim Stage As String = colTable.Get("Stage")
Log($"${id} | ${Serial} | ${rowOrder} | ${Stage}"$)
Next
Dim Body As Map = mRoot.Get("Envelope").As(Map).Get("Body")
Dim GetStageListResponse As Map = Body.Get("GetStageListResponse")
Dim GetStageListResult As Map = GetStageListResponse.Get("GetStageListResult")
Dim Diffgram As Map = GetStageListResult.Get("diffgram")
Dim NewDataSet As Map = Diffgram.Get("NewDataSet")
Dim Table As List = NewDataSet.Get("Table")
For Each colTable As Map In Table
Dim Serial As String = colTable.Get("Serial")
Dim rowOrder As String = colTable.Get("Attributes").As(Map).Get("rowOrder")
Dim id As String = colTable.Get("Attributes").As(Map).Get("id")
Dim Stage As String = colTable.Get("Stage")
Log($"${id} | ${Serial} | ${rowOrder} | ${Stage}"$)
Next
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?