go to post Eduard Lebedyuk · Jan 27, 2019 Thank you,. Alexander.Really didn't think that it could be any undefined variable.
go to post Eduard Lebedyuk · Jan 27, 2019 Thank you, Robert!I'll file a prodlog (about the docs), so we'll see.
go to post Eduard Lebedyuk · Jan 27, 2019 Yes, tested it in Ensemble 2017.2 and InterSystems IRIS 2018.1.
go to post Eduard Lebedyuk · Jan 25, 2019 About everything quoted is a valid property name: Property "WHY( *?""*?";
go to post Eduard Lebedyuk · Jan 25, 2019 You need to do these three steps in order:Compact Globals in a Database (optional)Compact a DatabaseTruncate a DatabaseIn can be done via ^DATABASE utility or in management portal.
go to post Eduard Lebedyuk · Jan 24, 2019 If you have an XSD, it's as simple as importing it and using imported classes.If you do not have a schema, you'll need to either generate an XSD from XML (there are many tools online) or just plain create Caché classes and make them XML-enabled.Documentation:XMLHTTP RequestThat said, is XML really a part of the url?
go to post Eduard Lebedyuk · Jan 24, 2019 Validation process is unable to process the message in 2 seconds. Probably because of the queue.There are several ways to remedy that:1. Increase timeout.2. Make the call ASYNC.3. Increase pool size for Validation process4. Make validation process work faster.
go to post Eduard Lebedyuk · Jan 24, 2019 File selection dialog sorts by file type (extension).I agree that by Name would be better probably.
go to post Eduard Lebedyuk · Jan 24, 2019 Nice feature to have.One note about the code: if you have a BO that accepts only one type of messages, you can (I myself prefer to - as it immediately notifies the reader that this BO works with only one type of messages, and not just a small BO in development) remove Message map altogether and define an OnRequest method, which would process these messages. Pull request.
go to post Eduard Lebedyuk · Jan 22, 2019 You use 8bit Caché. Maybe you need to convert GraphQL.xml into your local encoding.Or use Unicode Caché.
go to post Eduard Lebedyuk · Jan 21, 2019 If you want, you can pass current IP as a header or inside the message body.Do you want it for logging purposes, such as what actions were performed from which IP?
go to post Eduard Lebedyuk · Jan 21, 2019 My go-to https redirect: RewriteEngine on RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
go to post Eduard Lebedyuk · Jan 21, 2019 Strange, as that should not be hit for AbstractREST at all.Does you class looks the same as in repo?Just compiled successfully on: Cache for Windows (x86-64) 2017.2 (Build 744U) Fri Sep 29 2017 10:58:27 EDT
go to post Eduard Lebedyuk · Jan 21, 2019 Looks like NAT. Cloud server only sees external address (214.17.17) as it should.Why do you want to get internal address?
go to post Eduard Lebedyuk · Jan 20, 2019 Try installing httpd from the package manager for your OS..Add http to https redirect.Maybe plugins go to https first, so redirect all traffic to https. Good for various cached links, etc.
go to post Eduard Lebedyuk · Jan 18, 2019 If someone is interested, here's the same code but as a class: /// Utility to match input against comma-separated string of masks. Class util.Matcher { /// Returns $$$YES if input matches at least one element from the list /// input - string to match /// list - comma separated list of masks containig * and ? /// write ##class(util.Matcher).MatchOr() ClassMethod MatchOr(input As %String, list As %String) As %Boolean { set ok = $$$NO for pie=1:1:$L(list,",") { set mask=$P(list,",",pie) if mask'="",..Match(input,mask) { set ok = $$$YES } } quit ok } /// Returns $$$YES if input matches all elements from the list /// input - string to match /// list - comma separated list of masks containig * and ? /// write ##class(util.Matcher).MatchAnd() ClassMethod MatchAnd(input As %String, list As %String) As %Boolean { set ok = $$$YES for pie=1:1:$L(list,",") { set mask=$P(list,",",pie) if mask'="",'..Match(input,mask) { set ok = $$$NO } } quit ok } /// Returns $$$YES if input matches the mask /// write ##class(util.Matcher).Match() ClassMethod Match(input As %String, mask As %String) As %Boolean [ CodeMode = expression ] { input?@..MaskToPattern(mask) } /// Translate mask into a pattern /// write ##class(util.Matcher).MaskToPattern() ClassMethod MaskToPattern(mask As %String) As %String { set pattern = "" set char = "" for pos = 1:1:$length(mask) { set curChar = $extract(mask, pos) if curChar = "*" { set pattern = pattern _ $select(char="":"", 1:"1"""_char_"""") _ ".E" set char = "" } elseif curChar = "?" { set pattern = pattern _ $select(char="":"", 1:"1"""_char_"""") _ "1E" set char = "" } else { set char = char _ curChar } } set pattern = pattern _ $select(char="":"", 1:"1"""_char_"""") quit pattern } }