go to post Eduard Lebedyuk · Jan 22, 2018 Header itself is another layer because it's meta information for the BPL state machine, which you're inside of. So I don't see how you can get header Id from inside the state machine without violating abstractions in place.Still, %Context, %Process and %LastError are documented and acceptable to use.
go to post Eduard Lebedyuk · Jan 22, 2018 You can access %Ensemble("%Process") as ..%Process so: ..%Process.%PrimaryRequestHeader.%Id()
go to post Eduard Lebedyuk · Jan 19, 2018 Why would you want to do that? Here's sample production class: Class Test.Production Extends Ens.Production { XData ProductionDefinition { <Production Name="Test.Production" TestingEnabled="true" LogGeneralTraceEvents="true"> <Description></Description> <ActorPoolSize>1</ActorPoolSize> ion> } } Ens.Config.Production serialized is XData ProductionDefinition and not the class itself. To create production class automatically you need to: Create %Dictionary.ClassDefinition object for your test productionCreate Ens.Config.Production objectCreate %Dictionary.XDataDefinitionSerialize (2) into (3)Insert XData (3) into (1)Save and compile (1)
go to post Eduard Lebedyuk · Jan 19, 2018 Check out Caché FileServer project for a sample of file upload/download.
go to post Eduard Lebedyuk · Jan 19, 2018 Use any of the existing Git hooks for Studio or Atelier. They would work with GitHub and GitLab both.
go to post Eduard Lebedyuk · Jan 18, 2018 Check EvaluateRules method of Ens.Rule.Definition class. It evaluates rule by name and context. You can call it from Studio or Terminal.
go to post Eduard Lebedyuk · Jan 17, 2018 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.
go to post Eduard Lebedyuk · Jan 17, 2018 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.
go to post Eduard Lebedyuk · Jan 17, 2018 You can use DATEPART function: w $SYSTEM.SQL.DATEPART("year", $h) >2018 w $SYSTEM.SQL.DATEPART("month", $h) >1 The advantage of this approach is more readable code.
go to post Eduard Lebedyuk · Jan 17, 2018 Learning.intersystems.com has a lot of courses you can access for free. They start right from the basics.
go to post Eduard Lebedyuk · Jan 17, 2018 while i was using your code, i am getting this error in response, which says "read" method is unknownYou'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.
go to post Eduard Lebedyuk · Jan 17, 2018 What do you mean?If you have month and year just add 01 and produce the date.
go to post Eduard Lebedyuk · Jan 16, 2018 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")
go to post Eduard Lebedyuk · Jan 16, 2018 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")
go to post Eduard Lebedyuk · Jan 16, 2018 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.
go to post Eduard Lebedyuk · Jan 16, 2018 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:Set up a way to send valid requestsSend request via Caché/EnsembleCompare (DiffDog, etc) requests from 1 and 2, here you need to:Modify valid request till it failsModify invalid request till it succeedsIn your case the first modification I would do is replacing dates with real dates, for example with 2014-01-11.
go to post Eduard Lebedyuk · Jan 15, 2018 Doubtful. Web browsers security policies probably forbid this kind of thing.Why do you need that?