go to post Eduard Lebedyuk · Aug 13, 2021 What do you want your $list to look like? If you want the end result to be like this: $lb("das", "is", "wp", "dsa", "nmk") try this code (assumes dir is shorter that 3 641 144 chars): ClassMethod test(dir = "test.txt") { set file = ##class(%Stream.FileCharacter).%New() set file.LineTerminator = $c(1) do file.LinkToFile(dir) set str = file.Read($$$MaxStringLength) kill file set separator = $c(13,10) do { set newstr = str set str = $replace(str, separator _ separator, separator) } while newstr'=str set:$e(str, 1, $l(separator))=separator str=$e(str, 1 + $l(separator), *) set:$e(str, *-$l(separator)+1, *)=separator str=$e(str, 1, *-$l(separator)) set list = $lfs(str, separator) quit list } This is a naive implementation assuming you don't care about the speed. Faster solution would go through file line by line.
go to post Eduard Lebedyuk · Aug 12, 2021 Thanks for your question -- we will communicate with you via DM.
go to post Eduard Lebedyuk · Aug 12, 2021 You have to include a slash before EmergencyId : It depends on OS. In Linux there's no slash. Windows is with slash.
go to post Eduard Lebedyuk · Aug 8, 2021 You need to: Open Training.NewProduction in the Management portal Start Training.NewProduction Stop Training.NewProduction Open your new production in the Management portal After that you'll be able to start your new production.
go to post Eduard Lebedyuk · Aug 4, 2021 There are two parts to it. 1. Create a trigger after INSERT/UPDATE/DELETE. Triggers can work for both sql and object access: Trigger NewTrigger1 [ Event = INSERT/UPDATE/DELETE, Foreach = row/object, Language = objectscript, Time = AFTER ] { set ^dbg={fieldname*N} } 2. In the trigger code send an SMS. You can either use an API (a lot of them available) or talk to a GSM modem.
go to post Eduard Lebedyuk · Aug 4, 2021 First you need to create corresponding classed. You can do that by either importing the XSD or manually. Here's a manual approach: Class test.mensajeWS Extends (%RegisteredObject, %XML.Adaptor) { Parameter NAMESPACE = "https://wslexnet.webservices.lexnet/3.22"; Property respuestaEnvioMensaje As respuestaEnvioMensaje; } Class test.respuestaEnvioMensaje Extends (%RegisteredObject, %XML.Adaptor) { Property idEnvio As %Integer; Property tamBloque As %Integer; Property bytesMIME As %VarString; } After that in your BS convert incoming XML string like this: set reader = ##class(%XML.Reader).%New() set sc = reader.OpenString(pRequest.EnviarIniciadoresGeneralOut) quit:$$$ISERR(sc) sc do reader.Correlate("mensajeWS","test.mensajeWS") do reader.Next(.mensajeWSObj,.sc) quit:$$$ISERR(sc) sc // Process mensajeWSObj
go to post Eduard Lebedyuk · Aug 2, 2021 Great article. Some comments on formatting: Move large code blocks under spoiler to improve readability using button. There are a lot of empty lines in code blocks, they can be safely removed. On the article itself my only issue is you create 5 methods per class: GET /class POST /class GET /class/object PUT /class/object DELETE /class/object That's a lot of code even for 4 classes, but what about a case where there are 10 classes? 50? 100? Generally I would recommend writing 5 methods which would process objects of any allowed class (see RESTForms2).
go to post Eduard Lebedyuk · Jul 30, 2021 I think the preferred way is to use $SYSTEM.OBJ.Export (or even better - VCS) instead of direct global manipulation to export code.
go to post Eduard Lebedyuk · Jul 29, 2021 Set in the BP/BPL classes: Parameter SKIPMESSAGEHISTORY = 1; it would improve journaling.
go to post Eduard Lebedyuk · Jul 28, 2021 The BP (and the entire production) is down for the entire modification/compilation/update. The issue is that for existing instances ResponseHandlers should be updated after BP compilation to point to the new values.
go to post Eduard Lebedyuk · Jul 28, 2021 For the case where only a new OnResponse method is added the workaround is executing these update queries: UPDATE process.Context__ResponseHandlers SET "_ResponseHandlers" = 'OnResponseXYZ' WHERE "_ResponseHandlers" = 'OnResponseABC' Where ABC is an old method name, XYZ is a new method name. In a case of several new methods they should be executed from the largest number first.
go to post Eduard Lebedyuk · Jul 27, 2021 Do you have a Swagger? If so you can generate a client using Open API Client Gen community project by @Lorenzo Scalese.
go to post Eduard Lebedyuk · Jul 27, 2021 Unable to reproduce. Here's my test routine: ByRef kill a set a = 1 set a(1) = 2 do Test(.a) zw a Test(a) set a(1) = a(1) + 1 set a(2) = -1 And here's an invocation result: >d ^ByRef a=1 a(1)=3 a(2)=-1 as you can see a new subscript has been added successfully.
go to post Eduard Lebedyuk · Jul 27, 2021 Change httpd.conf in <iris>\httpd\conf and restart iris (or at least the web server).
go to post Eduard Lebedyuk · Jul 27, 2021 Are you using Apache2 (private web server is Apache2)? What's your AllowEncodedSlashes value? You need both AllowEncodedSlashes = true and encoding the parameter for this to work.