Hello Alexander,

I did eventually find that, we don't use Ensemble and I had expected some central classes but they are only available in an Ensemble enabled namespace.

It does look like the EnsLib.FTP.InboundAdaptor eventually breaks down the strings from LIST using expressions defined in OnInit based on the remote OS which I assume they get using SYST.

I still don't understand why this isn't part of %Net.FtpSession as I cannot use this without Ensemble and Ensemble namespaces have their own complications, such as 2 extra databases, we currently avoid.

I think I will raise a WRC to request this.

Thanks for the help.

To get the remote filesize over SFTP you would use the FileInfo method in %Net.SSH.SFTP.

To get the stream size you would use the SizeGet method on the stream.

However, be aware that during the transfer, depending on OS and methods used there may be translations of line terminators which would affect file size (often called ASCII mode).  This is not very common in SFTP, unlike standard FTP, but can still occur.  Also, I have found in the past that on a non-file stream the SizeGet is not always the same as the final file size when saved but that might just be my findings in special cases.

That was very helpfull as it shows the value is not available, it does not appear in the list of CGI variables.

However, both the clients log and the CSP Gateway trace show the request had this in

Client record from SoapUI

CSP trace

CGI Variables from the details provided by the suggested output is attached as a PDF <update> attaching is failing unfortunately.

I am obviously doing something wrong so any pointers would be helpfull

It is interesting that you are asking this as we have tried, for well over a year, via various mediums, at various levels within Intersystems, to get an answer as to the future of IDE's given that previous announcements and responses from WRC state that both Atelier and Studio are end-of-life.

We have never received a response even after Evgeny pinged such a request to John fried and others after some posts.

Your statements seem to indicate that Studio is not end-of-life so it would be nice to have some clarification as even WRC are saying non-critical fixes or changes will not be done.  You also indicate work being done on VSCode integration, again any details would be appreciated.

The reason for wanting to know is that is difficult to commit to a particular toolset or plan changes to DevOps etc... if the future of the tools to be used is unknown, the actual answer and whether it is an individuals or companies preference is immaterial, it is simply that an answer is required but everyone has been reluctant for a long time now to commit to anything.

Coming back to your questions, we use Studio with our own version control based on StudioHooks and some use of Serenji for debugging.

We have tried Atelier but noone liked using it and we have worked in VSCode via Dmitry's plugin and have also tried the Serenji plugin both of which were generally a good experience but migration would require changes to development processes and version control. 

We are likely to move to a GIT based Version control and whether this is intergrated with Studio or VSCode will likely depend on Intersystems commitment to the IDE though I suspect there would be a preference to stick with Studio as it is familiar and has integration to Cube etc... though as we continue to do more Web based development in VSCode this may change.

As you are talking about locks and transactions, and as others have noted, you can nest transactions it might be worth warning people about locks inside transactions and the fact that the unlock will not take place until the tcommit.

These can cause issues, especially where this is a method using transactions and locks which calls another that does the same.

Open devices for a process can be seen in the Processes section of the portal.  The initial process list shows the principal or current device and in the individual process page it shows all open devices, this can also be found using the %SYS.ProcessQuery OpenDevices
 method so you could write code that goes through all processes checking.

What these show may depend on how you open the device in the first place.

I am in the same position as you, only selectively using full commands or function names, being too much in the habit of MUMPs abbrevations.  Like you though I tend to extend when iterating or using something less usual in the code, I have also found curly braces to be much better for readability than the old block structure.

I also agree that I find it faster to read and write abbrevated code for things like sets and do's and especially for functions such as $p and $g.  Hopefully I can get into the habit of less abreviation as I do notice the new programmers finding this harder.

Probably the biggest habit I have broken is also shown in the bad examples given and shows how long I have been using MUMPS, yes it's entering everything in UPPERCASE.  I finally use camel case and also more meaningful/longer routine and variable names.