go to post Dmitry Maslennikov · Oct 12, 2020 Are two of these dates 202010011000 and 8/6/2018 9:10 PM equal? Or, what the format for the numeric one?
go to post Dmitry Maslennikov · Oct 10, 2020 Having separate Apache it's not something unordinary, and in fact, is just a recommended way for web-based applications. And Apache in docker or not have no difference. The configuration will be exactly the same. You can look at my example I made some time ago. It uses docker-compose, but the key feature, that it should use the same network, which creates by default in docker-compose configuration for the services in the same project. So, you just have to prepare apache with webgateway, and properly configured. Or like in my case, webgateway can be configured by environment variables, so, the same image can be used multiple times with different IRIS servers.
go to post Dmitry Maslennikov · Oct 9, 2020 Look at my project, it implements a backend, where frontend can be any, In my example it uses Vue by default, and Angular and React as option. Frontend, is that something, that completely not related to InterSystems at all. You can do it in any way you like. In project RealWorld you can find lots of realizations of exactly the same frontend. And any of this realization can be used with any of realization of backend, and in our case, it can be IRIS as well. And this project is very cool in case, when you would like to see, how to do the same in a different way.
go to post Dmitry Maslennikov · Oct 6, 2020 There is only one way to do it, is to use any supported webserver, Apache or Nginx, and do not use built-in apache. Configure the chosen server to work with InterSystems products. And configure SSL for that server, in any way by instructions you can find on the internet.
go to post Dmitry Maslennikov · Oct 4, 2020 You can use property "links" in "objectscript.conn", to add some links to your projects, which you will be able to open quickly "objectscript.conn": { "active": true, "username": "_system", "password": "SYS", "ns": "MYAPP", "port": 52773, "links": { "MyApp": "http://${host}:${port}/csp/${namespace}/main.csp" } } After this, you will get a new item in the menu shown by click on the status bar with connection info.
go to post Dmitry Maslennikov · Oct 2, 2020 While you are working with JSON, I would recommend to not do it manually and use native JSON support, available since 2016.2 (2016.1 with notes). So, you can do it just set json = {}.%FromJSON(str) or set json = {}.%FromJSON(stream) and value will be available by write json."Not Working Example" If you have a version with no native JSON support, look at this project
go to post Dmitry Maslennikov · Sep 30, 2020 I don't see XML here, but for your examples, I would use Regex Set regex = ##class(%Regex.Matcher).%New("(""[^""]*""):\s(""[^""]*""|[^,]*)") Set regex.Text = """Working Example"": xyz," Write !,regex.Text,! If regex.Locate() { Write !?5,regex.Group(1) Write !?5,regex.Group(2) } Write ! Set regex.Text = """Not Working Example"": ""x, y""," Write !,regex.Text,! If regex.Locate() { Write !?5,regex.Group(1) Write !?5,regex.Group(2) } And the output will be "Working Example": xyz, "Working Example" xyz "Not Working Example": "x, y", "Not Working Example" "x, y"
go to post Dmitry Maslennikov · Sep 25, 2020 On the other side, for globals, I don't know any better solution than XML, at the moment.
go to post Dmitry Maslennikov · Sep 25, 2020 project awesome, is completely different, it's not about snippets, it's about real projects, complete and awesome so, I would name our project, just as simple, objectscript-snippets
go to post Dmitry Maslennikov · Sep 25, 2020 Look here. You can implement snippets in the project, and store it in source control close to your sources.
go to post Dmitry Maslennikov · Sep 25, 2020 Yeah, the simplest way, then to share it, will be to have it as an extension
go to post Dmitry Maslennikov · Sep 25, 2020 Yeah, having some dedicated repo for objectscript snippets, looks great.
go to post Dmitry Maslennikov · Sep 25, 2020 By code sections, I would get some code snippets. In VSCode, you can easily add any amount of snippets, look at this article. And VSCode will offer to insert code snippet, while you typing text written in prefix of the snippet.
go to post Dmitry Maslennikov · Sep 23, 2020 There is no xsd. And much better would be to convert sources from xml to udl, and it’s possible to do it even with the history of changes. Our company can help with it, please contact us, info@caretdev.com
go to post Dmitry Maslennikov · Sep 23, 2020 The only way to get it worked with CSP files right now, is to configure isfs. In this case, you will edit any files only remotely, with no local files.You need file with code-workspace extension and content like this. { "folders": { "uri": "isfs://yourserver/csp/user?ns=USER&csp" } } More details, on how to configure and work with isfs, in the documentation
go to post Dmitry Maslennikov · Sep 22, 2020 And just a note, for one more issue. The description to method %JSONNew says, that I can pass JSON which will be imported to the just created object /// Get an instance of an JSON enabled class.<br><br> /// /// You may override this method to do custom processing (such as initializing /// the object instance) before returning an instance of this class. /// However, this method should not be called directly from user code.<br> /// Arguments:<br> /// dynamicObject is the dynamic object with thee values to be assigned to the new object.<br> /// containerOref is the containing object instance when called from JSONImport. ClassMethod %JSONNew(dynamicObject As %DynamicObject, containerOref As %RegisteredObject = "") As %RegisteredObject [ CodeMode = generator, GenerateAfter = %JSONGenerate, ServerOnly = 1 ] { Quit ##class(%JSON.Generator).JSONNew(.%mode,.%class,.%property,.%method,.%parameter,.%codemode,.%code,.%classmodify,.%context) } But in fact, it does does nothing with it, and generated code, just returns new object %JSONNew(dynamicObject,containerOref="") public { Quit ##class(Conduit.Model.User).%New() }
go to post Dmitry Maslennikov · Sep 22, 2020 To be able to export %Id() as id property in JSON, I had to add this. Property id As %Integer [ Calculated, SqlComputeCode = { Set {*} = {%%ID} }, SqlComputed ]; I think, that it would be better to have some parameter in a class which would enable to output id easier without hacks.
go to post Dmitry Maslennikov · Sep 22, 2020 Yeah, I know that I can do %FromJSON, but it looks like overhead, here. Look at this article, you can generate API implementation just from swagger specification. It generates a bunch of methods for each call in swagger spec. Something like this /// Get an article. Auth not required<br/> /// The method arguments hold values for:<br/> /// slug, Slug of the article to get<br/> ClassMethod GetArticle(slug As %String) As %DynamicObject { //(Place business logic here) //Do ..%SetStatusCode(<HTTP_status_code>) //Do ..%SetHeader(<name>,<value>) //Quit (Place response here) ; response may be a string, stream or dynamic object } So, in this method, I would add code like this /// Get an article. Auth not required<br/> /// The method arguments hold values for:<br/> /// slug, Slug of the article to get<br/> ClassMethod GetArticle(slug As %String) As %DynamicObject { Set article = ##class(Article).slugOpen(slug,, .tSC) If $$$ISERR(tSC) { Do ..%SetStatusCode(404) Return } Return article #; Or Return article.%JSONExport() } But this will not work. The only ways to make to work is to return string or stream Return article.%JSONExportToString() Return article.%JSONExportToStream() But, I have to wrap the output. And the best would be to get something like this Return { "article": (article.%JSONExport()) } While I have to write this, and hope do not get MAXSTRING error, for some cases Return "{ ""article"": " _ article.%JSONExportToString() _ "}" And it's just only a case with one object, while for some cases I have to return an array.
go to post Dmitry Maslennikov · Sep 22, 2020 Robert , while you are just beginning, I would recommend do not waste your time for Atelier, and start with VSCode