David Underhill · Feb 16, 2022 go to post

Access Denied is generally either a user permissions or a resource issue.  However, from one of your screenshots it looks like you are connecting to a Cache install running an evaluation license?  These can have limitations so it is also possible you are hitting a license (user/process) limit?

Most likely the user does not have permissions.  Based on screenshots in other comments it looks like you are using the wrong password for the Marco user and that the Admin user is disabled but you have obviously been able to log into the portal and overcome the issue mentioned with selecting events?  Would also be useful to check the console log for that time as well.

If this is still happening perhaps update this query with details on the username, whether that user works in the portal, and the latest errors in event log that relates to the studio failure, look at all entries for that time, not just the login failures, in case the issue is different.

David Underhill · Feb 9, 2022 go to post

43, shortening of Vitaliy's

ClassMethod Solve2(o As %String) As %Integer
{
 f  s c=$p(o,",",$i(i)) q:'$lf($lfs(o),-c) c
}

George James' solution is brilliant though.

David Underhill · Nov 25, 2021 go to post

Microsoft used to have an Excel Viewer but it is retired, though it may still work.
Download the latest online Excel Viewer - Office | Microsoft Docs
If you don't have an MS Office license I'd suggest LibreOffice.
Home | LibreOffice - Free Office Suite - Based on OpenOffice - Compatible with Microsoft
However, you mention CSV files and these are not actually Excel Spreadsheets, they can just be viewed in a text editor if needs be, or any Spreadsheet software will open a formatted view.  There are also CSV specific viewers such as Nirsoft's
CSV / Tab delimited file viewer and converter for Windows (nirsoft.net)
 

David Underhill · Nov 25, 2021 go to post

I hadn't heard of that %SQL method either and, as well as speed, the %File method has advantages such as more file details being returned and better filtering with wildcards.

David Underhill · Nov 23, 2021 go to post

Hi, apologies, I missed that, the fix is now merged.

BTW, do you have an example of the OS commands output when this fails?

David Underhill · Oct 26, 2021 go to post

Ok, the below is from my limited knowledge so may need correcting.

The base file format is simple, the complication is the compression methods (which includes encoding) used and making sure that is all supported as it is part of the actual file format specification.

I have issues with some of the speed claims as they seem to stem from statements that the column based, as opposed to row based layout, means it doesn't have to read the whole file but that is pretty limited, as long as you need to look at a single record and the last field then you still have to read through the whole file.  It also ignores that for most of the usage I have had of CSV files I have needed to ingest the whole file anyway.

Any other speed improvements are likely due to the code and database ingesting/searching the data not the format itself.

That doesn't mean there aren't advantages.  It may be easier to write more efficient code and the built in compression can reduce time and costs.

So the question is how popular is this format.  Well it's pretty new and so hasn't made great inroads as yet, however, given Intersystems interest in "Big Data", ML, and it's integration with Spark etc...  it does make sense as it is part of Hadoop and Spark.

One thing to note though is that python already supports this through the PyArrow package and so this might be the best solution, simply use embedded python to process the files.

David Underhill · Mar 3, 2021 go to post

That command isn't available and versions are held in the Windows Registry (HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Intersystems\IRIS\Configurations\{configuration}).

This is set up when you install an instance/configuration and shouldn't be edited.

David Underhill · Mar 1, 2021 go to post

As far as I recall this isn't logged at the point the status becomes "dead" only when cleaned up.

We once wrote a scheduled task that looks for and logs these processes using IsGhost() as they can sit there a while waiting to be cleaned up at times.

There is a mention in the IRIS documentation that says these are logged to the Event Log but I am not sure what happens if you aren't using Interoperability or Productions in IRIS, I suspect there is no logging then as it is part of Production Monitoring.

David Underhill · Feb 24, 2021 go to post

As Eduard suggests, you need to know the class that the pInput object is derived from as it doesn't seem to be a valid Stream if .Size fails.

It also looks like you might be expecting a file as you retrieve the name so why not use the %File class if the file already exists.

In fact, noting how you get the Filename using the Attributes method this looks like the pInput object is a response with content which means the actual stream will be in pInput.Content

David Underhill · Feb 9, 2021 go to post

It is far too long since I worked on Hospital systems to give an authoritative answer given extra restrictions you may have but for https the connection and data are already secure.

For outbound infrastructure can ensure it is routed outside appropriately and you could even limit traffic to specific external endpoints.

For inbound a load balancer or reverse proxy in the DMZ can keep your system away from the outside world and limit traffic both between the two and only allow specific external endpoints to have access.

David Underhill · Feb 3, 2021 go to post

Assuming CacheBasic supports an asterisk as per ObjectScript (it is not mentioned in that documentation), I think it should be in the 'From' field not the 'To' field, i.e. one less comma before *.

David Underhill · Dec 16, 2020 go to post

Ok, it requires a commercial license for DevExtreme which is a shame.

I think this is best as a configurable built-in dashboard but perhaps the demand is limited.

David Underhill · Dec 11, 2020 go to post

A dashboard for monitoring when SAM or a third party tool is not available.
Make sure there is the ability to add custom elements for the application and to select what elements are displayed to a user.
Also provide access to screens such as locks and processes with granular control over what they are able to do.

Essentially you don't want such users to have full management portal access just selected screens which are useful fronted by a monitor/dashboard that allows them to keep an eye on the database and application.

David Underhill · Sep 7, 2020 go to post

Just as a note, where you are manually building up your global in gbl you could use the $name function instead, for example...

set gbl="^NigelGlobal(""Subscript1"""_","_"""Subscript2"")"

can be

set gbl=$name(^NigelGlobal("Subscript1","Subscript2"))

which makes it easier to handle quotes etc...

update: ignore the very odd formatting this editor applied to the objectscript.

David Underhill · Sep 7, 2020 go to post

Hello Robert,

Did you resolve this or log with our helpdesk?

Regards

David Underhill @ Chess

David Underhill · Jul 29, 2020 go to post

Thanks, that isn't in the Cache documentation but the property does exist and I have found the section in the Iris documantation though it would be helpful if it actually mentioned Implicit or Explicit rather than LegacySSL as this is not very meaningful when creating the connection.

David Underhill · Jul 6, 2020 go to post

All the current suggestions are possible, however, usually if it is a Cache/Ensemble start issue the exe will not crash but will report the database failed to start.

In this case the error is that the EXE itself crashed and this is likely why there is nothing in alerts.log or cconsole.log as it did not progress that far.

This implies either an issue with the EXE or with the config details it will read from the registry.

If you check Windows Event Viewer there may be more information there to help resolve.

Should you be unable to resolve then the simplest option would be to install a fresh copy of Cache/Ensemble, first try the repair option with the same version then try upgrading with a newer version, over the top.  This should not lose anything and will either highlight an installation issue or rebuild the problem configuration.

If that fails, keep a copy of the database files, wipe the existing installation and then rebuild, extreme but it depends on how long you want to spend trying to find the problem.

David Underhill · Jul 6, 2020 go to post

This is bringing back some nightmares memories, good old days of DSM, MSM, MaxiMumps, ISM, showing my age now.

David Underhill · Jul 6, 2020 go to post

Unfortunately Gartner won't accept your review if you work for a company that is linked to Intersystems in any way such as a VAR.

David Underhill · May 20, 2020 go to post

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.

David Underhill · Apr 6, 2020 go to post

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.

David Underhill · Jan 15, 2020 go to post

Combined with the other answer this is working now, seems you MUST prefix a custom header value with an X.