go to post Eduard Lebedyuk · Sep 14, 2018 As a direct solution you can do write $zcvt("<CheckContractResponse><code>-1</code><message>ÐевеÑнÑй Ñип договоÑа</message></CheckContractResp>","I","UTF8") <CheckContractResponse><code>-1</code><message>Неверный тип договора</message></CheckContractResp>
go to post Eduard Lebedyuk · Sep 14, 2018 You need to add POST route: Class Rest.UsuarioSvc Extends %CSP.REST { XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ] { <Routes> <Route Url="/Oi/:xpto" Method="GET" Call="Oi"/> <Route Url="/Oi/:xpto" Method="POST" Call="Oi"/> </Routes> } ClassMethod Oi(xpto As %String) As %Status { Set tSC = $$$OK If 'tSC Quit tSC Set tProxy = ##class(%ZEN.proxyObject).%New() Set tProxy.Oi = xpto _ "1234" Set %response.ContentType = "application/json" set %response.Status = 200 Do tProxy.%ToJSON() Quit tSC } }
go to post Eduard Lebedyuk · Sep 14, 2018 I'd try to avoid giving user an ability to enter arbitrary code.1. Offer user a list of predefined operations ( >,<,=,<> or Equals,More, Not Equals,...)2. Get input from user.3. Check that input is actually one option on a list and not something else. 4. Perform the check using IF, for example. ClassMethod main(a As %Integer, b As %Integer, operation As %String(VALUELIST="Equals,Not Equals") = "Equals") As %Boolean { set operationList = $lb("Equals", "Not Equals") throw:'$lf(operationList, operation) ##class(%Exception.General).%New("<INVALID OPERATION>") if operation = "Equals" { set result = (a = b) } elseif operation = "Not Equals" { set result = (a '= b) } else { throw ##class(%Exception.General).%New("<INVALID OPERATION>") } quit result }
go to post Eduard Lebedyuk · Sep 14, 2018 What does it actually do?I have a table SQLUser.Person for example, it returns nothing.
go to post Eduard Lebedyuk · Sep 13, 2018 Try application/xml instead of text/xml for content type.If it does not help, check API docs for correct type.For accept try */*.
go to post Eduard Lebedyuk · Sep 11, 2018 I think I encountered something similar. I added to target class: Class Proxy.Class Extends (%Persistent, %XML.Adaptor) { Parameter XMLIGNOREINVALIDTAG =1; Parameter XMLIGNOREINVALIDATTRIBUTE= 1; ... } And it helped.
go to post Eduard Lebedyuk · Sep 8, 2018 I mean response body may contain additional info print(response.content)
go to post Eduard Lebedyuk · Sep 8, 2018 Check response with 500 error code, it probably contains error information
go to post Eduard Lebedyuk · Sep 8, 2018 201 looks like a correct response.500 on the other hand is an error. Check what's the error.
go to post Eduard Lebedyuk · Sep 8, 2018 What's the status_code on response = session.post(getPropertyUrl(property), params= {"type":"%Numeric", "path": property, "unique":0}, headers=header) print(response.status_code)
go to post Eduard Lebedyuk · Sep 8, 2018 It actually doesn't create neither database or property.Check that %Service_DocDB is enabled. Your screenshot also shows that database gets created.if I have 20 properties... this would be a long codeYou need to cycle over all properties, so +2 lines probably.
go to post Eduard Lebedyuk · Sep 8, 2018 Made an erro in URL, it's not .../db/DBName/Propname but .../prop/db/DBName/Propname.Here's a sample code that creates a db and a property. import requests def getBaseUrl(host = "127.0.0.1", port = 52773, namespace = "user", db = "test"): return "http://{}:{}/api/docdb/v1/{}/db/{}" .format(*[host, port, namespace, db]) def getPropertyUrl(property, host = "127.0.0.1", port = 52773, namespace = "user", db = "test"): return "http://{}:{}/api/docdb/v1/{}/prop/{}/{}" .format(*[host, port, namespace, db, property]) def main(): url = getBaseUrl() print(url) header = { 'Content-Type': 'application/json', } session = requests.Session() session.auth = ("_SYSTEM", "SYS") response = session.get(url, headers=header) #response = requests.get(url, headers=header) print(response.status_code) # Number of error if response.status_code == 404: print('DB not found, create DB ...') response = session.post(url, headers=header) print(response.status_code) elif response.status_code != 200: print('Unknown error: ' + response.status_code + ' ' + response.reason) else: property = "Ergebniszuf" # check that property exist response = session.get(getPropertyUrl(property), headers=header) if response.status_code == 404: print('Property not found, creating property: ' + property) response = session.post(getPropertyUrl(property), params= {"type":"%Numeric", "path": property, "unique":0}, headers=header) print(response) elif response.status_code != 200: print('Unknown error: ' + response.status_code + ' ' + response.reason) else: print('DB found, load data...') return 1 if __name__ == '__main__': print(main())
go to post Eduard Lebedyuk · Sep 8, 2018 2012.1.4 has JSON support via %ZEN.proxyObject set obj = ##class(%ZEN.proxyObject).%New() set obj.createTransactionRequest= ##class(%ZEN.proxyObject).%New() set obj.createTransactionRequest.merchantAuthentication = ##class(%ZEN.proxyObject).%New() set obj.createTransactionRequest.merchantAuthentication.name = "gfufet9QVgT5P" do obj.%ToJSON() Also you can use %ZEN.Auxiliary.jsonProvider to convert object into JSON.
go to post Eduard Lebedyuk · Sep 7, 2018 To create one property call: http://127.0.0.1:52773/api/docdb/v1/NamespaceName/db/DBName/propertyName?type=propertyType&path=propertyPath&unique=propertyUnique You'll need one call per property. For your property Ergebniszuf, url would be: http://127.0.0.1:52773/api/docdb/v1/NamespaceName/db/DBName/Ergebniszuf?type=%String&path=Ergebniszuf&unique=0
go to post Eduard Lebedyuk · Sep 7, 2018 Interesting. Check this article - I think you'll need either HTTP Debugging proxy (probably) or Packet analyzer (maybe) to debug this further.As you have reference implementation (Postman) you can start by comparing Postman request/response and Ensemble request/response using HTTP Debugging proxy.
go to post Eduard Lebedyuk · Sep 7, 2018 When you get sc=1 , what about: set resp=httpRequest.HttpResponse zw resp do resp.Data.OutputToDevice()