Ben Spead · Oct 24, 2022 go to post

@Benjamin De Boe - this is a great article ... thank you for the write-up!  

Bumping the thread as more people should be reading from this and can benefit from it :)

Ben Spead · Oct 20, 2022 go to post

Really impressive feature!  I am curious (if you're willing to divulge), is this built on top of "Ens.Deployment.Utils" or did you create your own secret sauce at a lower level?  

Nice work!  This is definitely a pain point for interoperability sites, no question :)

Ben Spead · Oct 19, 2022 go to post

@Shane Nowack  - congratulations on his launch!!  Very exciting and a great addition to the Professional Certification Exam portfolio for ISC technology :)

Ben Spead · Oct 18, 2022 go to post

@Colin Brough - all great questions!  I'll provide some thoughts and I am sure others will chime in as well.  One question that I have which may impact the answers is what your current source control approach is?  Are you using serverside source control hooks with Studio or some other approach?

  • Take Atelier off the list and drop it from consideration... it is deprecated new work shouldn't be started with it
  • VSCode is the path forward for InterSystems technologies; it used the Atelier REST APIs and therefore you can use it on Caché 2018.x (originally added in 2016.2 IIRC)
  • You can typically use VSCode alongside Studio, depending on your answer to the above question about your source control approach.  If you are using no source control, or if you are using serverside source control, then Studio and VSCode can both be used against the instance in mixed mode (my team has been doing this for years)
  • I can't speak to what you lose with VSCode but I believe that at this point the answer is either 'very little' or 'nothing' for all intents and purposes
  • I can't speak to Studio Templates (hopefully someone else can weigh in)

This video may also be helpful to you: https://community.intersystems.com/post/video-visual-studio-code-object…;

Hope this is a good starting point.

Ben Spead · Oct 6, 2022 go to post

Well put Evgeny!  I have frequently accessed parameters from within ObjectScript and as Python is a full first class citizen alongside ObjectScript then we need to be able to access parameters from within Python as well.

Ben Spead · Sep 23, 2022 go to post

"But, to make MergeCPF truly follow idempotent, it should be only one like CreateOrModifyNamespace or to make it declarative way just Namespace.  "  

That is a great point, I agree.

Ben Spead · Sep 23, 2022 go to post

@Dmitry Maslennikov  - I agree with all of your points above except for one:

"CreateNamespace on existing namespace should fail, and so on."  

Per Luca's original statement - "The utility was created to be idempotent" ... this is very important to us - we need to make sure that the same command can be run multiple times and if it is creating new changes to the config that it does so, but if it being asked to create what is already there it will ensure that it is already there and will return success (https://www.infoworld.com/article/3263724/idempotence-and-the-disciplin…).  With this design philosophy in mind, CreateNamespace on existing namespace should succeed and not fail (but of course, verbose output should make it clear that CreateNamespace was a no-op due to the previously existing namespace).  

Ben Spead · Sep 20, 2022 go to post

@Chip Gore  - if it is returning the value and you get it back, then I don't understand what you mean by "it won't/doesn't seem to work when I call the code from a #server() call from my webpage."  What isn't happening resulting in your classification of "not working"?

Ben Spead · Sep 20, 2022 go to post

Does your CSP application have sufficient Call-out Privs?  Check the audit log to see if there are any security failures from the #server() call

Ben Spead · Sep 16, 2022 go to post

It is the actual code as it will be executed, so "Do ##class...."

Ben Spead · Sep 16, 2022 go to post

This is an excellent article and is worth bumping the thread :)

Ben Spead · Sep 13, 2022 go to post

@Scott Roth - you can create a New Task instance via the "Task Schedule Wizard" in the System Management Portal, and in the "Task Type" field, select "RunLegacyTask".  Then in the ExecuteCode field, simply type the command to run the desired method in your class.  Then you can enter the rest of the details of the Task accordingly (when to run, how often, etc) and it will make the call to your class whenever the Task runs.  

Please let me know if more clarification would be helpful.

Ben Spead · Aug 24, 2022 go to post

Thank you for your continued investment in the D.C. platform :)

Ben Spead · Aug 23, 2022 go to post

What an incredible set of starting recommendations! Thank you for taking the time to put this article together :)

Ben Spead · Aug 22, 2022 go to post

what a great demo!  Thank you for writing it up - I hope to be able to experiment with this at some point.  Years ago I wrote my own web scraper in ObjectScript to watch the classified section of my local newspaper for cars going up for sale so I could find something undervalued and jump on it quickly - purchased my favorite used car that way thanks to my ObjectScript web scraper :)  But this library looks like a much easier approach ;)