Check out Caché FileServer project for a sample of file upload/download.
- Log in to post comments
Check out Caché FileServer project for a sample of file upload/download.
Use any of the existing Git hooks for Studio or Atelier. They would work with GitHub and GitLab both.
Check EvaluateRules method of Ens.Rule.Definition class. It evaluates rule by name and context. You can call it from Studio or Terminal.
Got it. Usually after enabling HTTPS I add server-wide redirect from HTTP to HTTPS. So in cube I specify port 80 and it automatically redirects to HTTPS.
HTTPS access is implemented and easily configurable.
If Caché does not work through IIS, you need to configure it. On Windows you can configure Caché to work with IIS, Apache or Nginx.
After you have configured the web server to work with Caché, add https support. For example use Let's encrypt as a CA.
Learning.intersystems.com has a lot of courses you can access for free. They start right from the basics.
while i was using your code, i am getting this error in response, which says "read" method is unknown
You're getting this error because list of objects does not have this method. Check your list of objects for contents. Seems like json is already converted so you don't need to do that.
What do you mean?
If you have month and year just add 01 and produce the date.
For SQL, use LAST_DAY function - it's a date function that returns the date of the last day of the month for a date expression:
SELECT LAST_DAY('2004-02-25')
It's also available in Caché ObjectScript:
Write $SYSTEM.SQL.LASTDAY("2004-02-25")Convert json to proxy object (list of in your case) and iterate over it
set json = "[{""Name"":""bat""},{""Name"":""Cat""},{""Name"":""rat""},{""Name"":""mat""},{""Name"":""hat""},{""Name"":""chat""},{""Name"":""please""},{""Name"":""help""},{""Name"":""me""},{""Name"":""in""},{""Name"":""getting""},{""Name"":""the""},{""Name"":""value""},{""Name"":""of""},{""Name"":""nameFromObjectInsideArray""}]"
set sc = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(json,,.obj,1)
for i=1:1:obj.Count() {
write obj.GetAt(i).Name,!
}To get json string from request:
set json = %request.Content.Read($$$MaxStringLength)
You may also need to convert request into UTF8:
set json = $ZCVT(json,"I","UTF8")
Sorry I'm lost here. and not sure what you in 1,2 or 3 !?
It's an iterative process to pinpoint and remove errors. You start by establishing a channel which can send valid requests. For example using Postman. Next you compare valid request (which you can now consistently send) with your request which does not pass. Next you iteratively break valid request or fix failed request or send failed request via Postman. Sooner or later you understand what causes your request to fail and fix that.
the other difference is that Now they also require a Header, before they they only had a Body in their API.
You need to add all required headers via SetHeader method.
I think my date is already like that!? do you mean removing the double quotes or changing it to YYYY-DD-MM?
You're sending:
"PaymentRecordTransactionD":"PaymentRecordTransactionD"
But API expects:
PaymentRecordTransactionD": "2014-12-31"
Looks different for me.
The error says parse error, but in this case I think it means either datatype validation (probably) or fixed property order (less probable, but that can actually happen). My default advice in cases like this is as follows:
In your case the first modification I would do is replacing dates with real dates, for example with 2014-01-11.
Doubtful. Web browsers security policies probably forbid this kind of thing.
Why do you need that?
Well, yes, it returns the sender of the message. If you're sending message from BS to BO directly sender would be BS. If you're sending BS-BP-BO, for BO the sender would be BP because it is.
If you want to get BS from BO in BS-BP-BO you can implement it via several approaches:
I'd like to add that second approach without careful planning and optimizing may negatively impact performance if stored messages are in millions. Starting new SessionId for each new message sent from BS may help. (because BS MessageId would then be equal to SessionId in BO).
Use %RequestHeader property instead:
Set tSrcCfg = ..%RequestHeader.SourceConfigName
I think that's for services only. They store information about processed rows in: these 2 globals
$$$DoneRowTable(key) ^CacheTemp.Adapter.sqlrow(..BusinessHost.%ConfigName, ..%InstKey, key)
Where DoneRowTable macro is resolved into
^Ens.AppData(..BusinessHost.%ConfigName, "adapter.sqlrow", key)
You can check if there's anything for your BO.
The globals are set in OnTask method of inbound adapter.
What happens if you don't declare a Persistent value when you call ExecuteQuery()?
What is " Persistent value"?
What does Ensemble set as the key value for your query?
What is "key value"?
That said, if you execute the same query against external database, and the data in the external database does not change you should get the same results.
After you finish working with resultset the first time (and before creating it a second time) you can call:
Set sc = rs.Close()
Maybe that would help.
Some possible code improvements:
1. Instead of:
s sc = httprequest.Post("http://127.0.0.1:57772/api/v0/bwxpert/visiocheck/account")it's enough to specify:
s sc = httprequest.Post("/api/v0/bwxpert/visiocheck/account")as the rest of the address is defined beforehand.
2. Instead of:
s httprequest.Authorization = "Basic X1N5c3RlbTpTWVM="
you can specify:
s httprequest.Username = "_SYSTEM" s httprequest.Password = "SYS"
Which is more readable
3. When specifying server, protocol in not required, incorrect even:
s httprequest.Server="127.0.0.1"
4. Finally, don't use short syntax (s, d) and use one naming convention consistently - in your example some commands are in lowercase and some start with a capital letter.
Private is not important in that case - it only affects from where method could be called. Private methods can be invoked only by methods of this class or its subclasses.
The difference between class methods and instance methods is that instance methods can access object context. For example you can access current object property from instance methods. Use instance methods only when you need access to object context. In all other cases use class methods.
Here's a sample code, highlighting the difference:
Class Test.Person Extends %RegisteredObject {
Property Name As %String;
Method PrintName() {
Write ..Name
}
ClassMethod PrintText(text) {
Write text
}
}What's your version?
To pinpoint the error, please:
After that try to open:
Store $lb maybe? Or is there some drawbacks?
%ZEN.Auxiliary.jsonProvider is available since 2009.2. You'll need to upgrade.
and by the way, is Set Request.Https=1 correct given that Set Request.Https=$$$YES not supported in Ensemble 2014?
Yes, it's the same thing $$$YES macro resolves into 1.
but I get this error :
{"Errors":["The request entity's media type 'text/html' is not supported for this resource."],"StatusCode":415}
Specify content type. For example:
Set Request.ContentType = "application/json"
or whatever content type the api requires.
They are various jobs required for Caché to function. They run tasks, write to database, etc.
Is there any specific reason you ask this question?
Not really. KeyFieldName only affects the tracking of processed records. Example 5 shows configuration where each row is passed each time the service querying the database is ran.
SQL Inbound Adapter always passes rows one by one.
Your options are:
What option to choose? Here are several questions, which may help you:
so is there a way to get it working with SSLConfig
As I said:
Where SSLConfiguration is the name of your ssl config.
You need to create a SSL config. Docs explain how.
test 0 or 1 means as the doc doesn't mention it!?
Test values
location in Post method is optional given that we set Set Request.Location = "/STP_IF/rest/Employee/Create"?
Yes, it's enough to specify Location property.