go to post Dmitry Maslennikov · Sep 10, 2020 Check the value stored in ^%SYS("CSP","DefaultFileCharset"), if there is no value or there is something different to utf-8, try to change it there.
go to post Dmitry Maslennikov · Sep 5, 2020 To find a good replacement, the most important to know is a reason, why you need this information in the browser? The first sample looks like you are looking for a default printer in the system. And the second one, looking for a specific disk drive, with the letter U, and it should be network drive. How are you going to use this information after that? Maybe the best way will be to completely change the way how you doing it or just forget about it. Anyway, this happens due to a wish from browsers vendors, to increase a security level, so, they completely declined to use NPAPI and ActiveX. And as a side-effect of it, it's now impossible to use Java applets as well. And usually, to fix it, the simplest way was to create own simple application, which has to be installed on the users machine, and web-application application was able to connect to locally installed application through WebSockets or simple rest API in that application. ps. I can help you with development if you need any help.
go to post Dmitry Maslennikov · Aug 26, 2020 You need to write your own %ZSTOP routine, which can catch it. Look at the documentation
go to post Dmitry Maslennikov · Aug 24, 2020 menu.mac ROUTINE menu menu(routine) { Set rtn = ##class(%RoutineMgr).%OpenId(routine_".mac") Quit:'$IsObject(rtn) Set menu = "" While 'rtn.Code.AtEnd { Set line = rtn.Code.ReadLine() Continue:$Char(9,32,35)[$Extract(line) Continue:line'[" ; " Set label = $Piece($Piece(line, " "), "(") Set title = $Piece(line, " ; ", 2, *) Set menu = menu _ $Listbuild($Listbuild(label, title)) } Quit menu } asLine(menu, pos) public { Set menuItem = $Listget(menu, pos) Quit:menuItem="" """""" Set $Listbuild(label,title) = menuItem Quit "$Char(13,10)_""" _ $Justify(pos, 4) _ ". " _ title_ """" } menu.inc ROUTINE menu [Type=INC] #Execute Set menu = $$^menu(rtname) Write !,"--------Menu---------" write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) write ##Expression($$asLine^menu(menu,$Increment(menuLineNum))) Write !! do { Write $Char(13),"Option? ",*27,"[0K" Read menuOption Quit:menuOption="" Quit:"qQ"[$Extract(menuOption) Quit:$Listget(menu,+menuOption)'="" } while 1 Write ! if (+menuOption) { Set label = $Listget($Listget(menu, menuOption)) Do @label } Quit And some routine which will have to have menu ROUTINE test #; just include menu, at the place where you need it #Include menu quit task1 ; Task 1 Write !,"Some work 1" quit task2 ; Task 2 Write !,"Some work 2" quit task3 ; Task 3 Write !,"Some work 3" quit task4 ; Task 4 Write !,"Some work 4" quit task5 ; Task 5 Write !,"Some work 5" quit task6 ; Task 6 Write !,"Some work 6" quit task7 ; Task 7 Write !,"Some work 7" quit task8 ; Task 8 Write !,"Some work 8" quit task9 ; Task 9 Write !,"Some work 9" quit task10 ; Task 10 Write !,"Some work 10" quit and call it USER>d ^test --------Menu--------- 1. Task 1 2. Task 2 3. Task 3 4. Task 4 5. Task 5 6. Task 6 7. Task 7 8. Task 8 9. Task 9 10. Task 10 Option? 1 Some work 1 Menu list changed after compile, but routine should be saved as MAC. The final INT code contains the generated menu.
go to post Dmitry Maslennikov · Aug 21, 2020 I did not find any mention of ECDSA in InterSystems products, so, not sure if it's supported natively. I would look at some external tools which could help you with it. And you can start from openssl. And If I undestood correctly, you'll also need a public certificate, which used to make such a signature.
go to post Dmitry Maslennikov · Aug 16, 2020 I have a configuration with Caché 2018.1 as an ECP Data server and a few ECP Application servers on Ensemble 2012.2. The code is compiled and deployed for 2012, only, but stored on 2018.1. The data server even does not have a namespace for an application. It only mounts databases, and code databases just like any other data, which used by application servers. Ensemble Production works on a separate application server. And ECP Data server uses mirroring, so, my ensemble production and integrations does not care about IP migration at all, they work in the same place all the time. In case of when ECP Application server may work on different versions, I would recommend storing all the versions of code in one place anyway on ECP Data Server. Just mount a specific code version on different platforms.
go to post Dmitry Maslennikov · Aug 10, 2020 what do you mean by integrating with IS? Is it just Integrating with application working on IS? Years ago, I've implemented some of the video services into our application. So, I have some experience. But this time it could be even less complex, or completely different. And anyway depends on how exactly you would like to see it. I can help you with it, please contact me directly dmitry@caretdev.com, I co-founder of a company, where we can help you to implement this or anything else.
go to post Dmitry Maslennikov · Aug 2, 2020 Muni, First of all, you have to copy all of your journals, you currently have, so, they will not be purged by schedule. Next, it depends, on how that data was deleted. If it happened in the transaction, so, you are lucky. It will be possible to restore that data, if not, again depends on how it was killed. Just Kill ^Global, outside of the transaction, just kills it, with no useful information for restore. I think you can actually do what you with ^ZJRNFILT. But I prefer direct access to journals through their API, in %SYS.Journal classes.
go to post Dmitry Maslennikov · Jul 11, 2020 This is explorer view, supposed to be only to view the source of code on the server and read-only. There are two ways Preferable, store any code locally, and when you save it, it will upload to server and compile it there. If you already have some of your code on server, you can export it from the explorer view. Use virtual filesystem named isfs, in this case, all of your code stored only on server. Documentation You can find some useful videos on youtube on Developer Community channel, for instance ObjectScript with Visual Studio Code Introduction to VSCode-ObjectScript Webinar
go to post Dmitry Maslennikov · Jul 2, 2020 As Kai, already mentioned, this icon, will appear only if you have any folder opened. Such a folder is a kind of project in VSCode. And, while Server Explorer view, which can be opened available by this icon, is supposed to be as just a server explorer, without editing. So, there are no reasons to make it available until any project will be opened.
go to post Dmitry Maslennikov · Jun 21, 2020 Not sure if it should work there, the minimal version of Caché is 2016.2
go to post Dmitry Maslennikov · Jun 4, 2020 InterSystems itself does not have to support access via ssh, it's just a task for OS. Could you have a look at Theia-IDE? This is a web-based alternative for VSCode, and there you already should be able to install extension VSCode-ObjectScript. This can be installed on the server, and you will have access through the web as you trying to do with WebTerminal. Would it work for you, your customers? It may not work so well as it works in VSCode, but, I think we are going to dive into it. VSCode itself developed by Microsoft, and they already offer it online as well, but on their Azure platform. With VSCode right now you can access your servers remotely via the web, where you can use SSL. If your server 2016.2+
go to post Dmitry Maslennikov · Jun 1, 2020 First of all, you should not think, that using docker is the same as you would install it natively. You have to build your own per-project environment with docker. Where to find information Here in Community, you can find many articles related to using Docker with InterSystems products, you can find them by tag Docker. You can look at my articles, Containerization Caché, part2 Learning InterSystems has a course about using Docker, worth to look Many videos on InterSystems Developers Community youtube channel, from global summits, webinars In addition, you would need a code editor, and you can use cross-platform VSCode with extension VSCode-ObjectScript. Brief info about how to install and configure it on Learning.
go to post Dmitry Maslennikov · May 24, 2020 In the context of complex docker images, one more feature worth to be mentioned. It is multi-stage builds. It makes sense when you have to do some build something in your project, but you don't need any immediate files, for instance, source code, or any temporary files. Or some part of your app written in the compilable language, like go, and you can't compile it let's say it on IRIS image. You can first run go image, build it, and then build your final image base on IRIS where you just copy the result from the first stage. In case of IRIS, you can build this way, deployable code. Just build your application from source code, deploy, and copy the result to the fresh image, and it will keep you from the error of letting your source code go with the final image.
go to post Dmitry Maslennikov · May 24, 2020 There is no such way as merging two images. If you need only one image, the only way is to make a new one, which would combine the main from both images. So, you should choose which one is going to be as a base image, I would suggest it supposed to be IRIS. Then you can create install inside nodejs, and your node application. The issue is here you may face is that you will have only one init process after that. While I suppose you have to have started IRIS and NodeJS application at the moment. You can add a script which will run in a background nodejs application, and pass it to iris-main through CMD directive in conjunction with '-a', '-b', '-c' or '-t' parameterSo, it can be something like this FROM intersystestems/iris:2020.2.0.204.0 USER root # script which will run nodejs application in background COPY app-entrypoint.sh / # copy your nodejs application COPY ./nodeapp /opt/nodeapp # install nodejs v10, and node_modules RUN apt-get -y update && \ DEBIAN_FRONTEND=noninteractive apt-get -y install curl --no-install-recommends && \ curl -sL https://deb.nodesource.com/setup_10.x | bash - && \ DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs --no-install-recommends && \ rm -rf /var/lib/apt/lists/* && \ chmod +x /app-entrypoint && \ cd /opt/nodeapp && \ npm install USER ${ISC_PACKAGE_MGRUSER} # say to start your nodejs application after IRIS start CMD ["-a", "/node-entrypoint.sh"]
go to post Dmitry Maslennikov · May 6, 2020 Depends on how you call it, you can just kill that process which runs such query. If you did it in the System Management portal, wait for a connection timeout, or open a new session in another browser or in incognito mode, go to processes, discover your hanging process, and terminate there.
go to post Dmitry Maslennikov · May 5, 2020 As I said for server side it show linux for os/arch. You should find the switcher in context menu in tray on docker icon.
go to post Dmitry Maslennikov · May 5, 2020 I have recently implemented SAML Authentication for one of the projects where I participated, with some SAML providers. I have not tested it with Shibboleth, but with some online providers, including GSuite. It's not so difficult actually and can be solved with SAML classes already implemented in IRIS for SOAP. But this is the only Authentication, while SAML supports also supports provisioning, which I have not Implemented at the moment.
go to post Dmitry Maslennikov · Apr 19, 2020 There two open-source projects isc-tar - it's my library that works the same as tar tool in Linux, and with native support of gzip in InterSystems products you can easily compress files as tar.gz and decompress them. This project used in production as part of Package Manager project. isc_zip - should work with zip files