John Murray · Feb 8, 2018 go to post

This didn't work for me. Here's what result contained:

The /D switch is only valid with the /S switch.

Anyway, AFAIK the Read-only attribute of a Windows folder is of limited use. Even if you set it using the attrib command this won't prevent you from being able to modify files within the folder (provided those files don't have their Read-only attribute set).

I think the OP was referring to permissions on the folder, not attributes. And in my testing, even if I explicitly deny Write permission on a folder to my user, the ##class(%File).Writeable(...) method still tells me I can write to a file that's in the folder. Of course, when I actually try to open it for write, the timed OPEN command fails correctly.

John Murray · Feb 6, 2018 go to post

See Robert's answers. The %File.Writeable(...) method's underlying implementation ($zutil(140,12,filename,2)=0) is apparently not able to determine whether or not a directory is writeable, despite the method doc stating "Return true if the file/directory is writable and false if it is not"

See this older doc for $zutil(140) information.

You could try raising the issue with InterSystems WRC, but my guess is they'll say it's a bug in the comment on the method.

John Murray · Feb 6, 2018 go to post

My reading of the post is that the OP is saying that %File.Writeable(...) on the Windows platform returns the correct answer for a file but not for a directory. I haven't investigated yet.

John Murray · Feb 2, 2018 go to post

Good point Jon. Here's a concrete example, taken from the CheckLinkAccess classmethod of %CSP.Portal.Utils (2017.2 version). I have done the macro expansion myself and highlighted the expansions:

  Set tHaveAllRole = 0
  Do 
  . New $roles
  . Set $roles=""
  . If ($extract($roles,1,$length("%All"))="%All")Set tHaveAllRole = 1
  If tHaveAllRole {

  ...

John Murray · Feb 1, 2018 go to post

I just had this happen, but not on Mac. I'm using Eclipse Oxygen on Windows 10 (64bit), with Atelier 1.1.391.

Things were working fine, then I restarted Eclipse and found my connections to servers were failing. When I used "Edit Connection" and clicked the "Test Connection" button I got this:

Restarting Eclipse didn't resolve it, nor did "Check for updates" find anything out of date. So I used Help\Install New Software, chose the repository I'd previously installed Atelier from (https://atelier.artifactoryonline.com/atelier/updates/beta/latest/), cleared the "Hide items that are already installed", then selected both "Core" and "Optional" and clicked "Next". Eclipse reported that most pieces weren't needed, but it did install one, which I think was "TM Terminal via Remote API Connector Extensions".

When it had finished it told me to restart Eclipse, and now my connections worked.

John Murray · Feb 1, 2018 go to post

Evgeny was too modest to mention that he excluded himself from the awards on the basis that it's sort of his job to make lots of contributions to DC. The raw data shows just how prolific he is in doing that.

A minor quirk in the table is that "DC Expert 2017 - 4th-10th places" only lists 6 names rather than the expected 7. But looking at the raw data I see that 2 authors tied for the position below Rubens Silva. So I guess either they both get the badge or neither does.

John Murray · Feb 1, 2018 go to post

Yes, sometimes the license restrictions that apply to evaluation of a downloaded copy of Cache (i.e. without having contacted InterSystems for a loan key) lead to opaque and unfortunate failures that may give the impression that the product isn't worth the effort.

John Murray · Jan 30, 2018 go to post

Thanks, that makes sense. To clarify for others, in the example you gave, Sample.Person was included as an "expanded class" because it's the superclass of Sample.Employee.

John Murray · Jan 29, 2018 go to post

The superserver port is recorded in the cache.cpf file, and I think it can be changed there by simply editing the file and then restarting Cache.

I'm guessing that the Cache installer uses the registry to discover the locations of the CPF files it needs to check when picking a "free" port to offer as the superserver port for a new instance. So if one of your instances wasn't properly registered at the time you installed another instance then the installer may have defaulted to a port that was actually already taken.

John Murray · Jan 26, 2018 go to post

I also like this style, as it helps me spot the lines where execution at the current level might terminate.

John Murray · Jan 26, 2018 go to post

There's some documentation here.

In your case it sounds like a Cache instance was moved onto the server but not added to the registry that Cache's ccontrol command uses. On Windows I think Cache uses the Windows Registry. On other platforms it uses a file, and offers commands ccontrol create, ccontrol update and  ccontrol delete to maintain entries in this registry.

John Murray · Jan 19, 2018 go to post

If you're not already committed(!) to using Git, maybe consider Deltanji from George James Software (my employer) as a source code management solution running natively inside the InterSystems environment.

John Murray · Jan 19, 2018 go to post

Possibly the OP has to work with a version of Cache / Ensemble etc that doesn't support Atelier?

John Murray · Jan 19, 2018 go to post

Robert, my understanding of the h:\dev5\ suffix on the error string is that this indicates the directory holding the CACHE.DAT database where Malcolm's webservice class is located. I'm guessing his web application definition in Portal doesn't even have READ permission on that database.

John Murray · Jan 17, 2018 go to post

Why not just use the "=" operator to compare your values, exactly as you have written in your examples?

John Murray · Jan 15, 2018 go to post

I'm not clear what you mean by "access the Class Database". Connect Atelier to the SAMPLES namespace and you'll be able to view/edit classes from the SAMPLES database. Please expand on what else you're trying to do.

John Murray · Jan 12, 2018 go to post

Alex, if you code it as an instance method (private or public) then you won't be able to call it from a classmethod (private or public) unless the caller has (or creates) an instance of its class. In other words, the decision about whether to code an instance method or a classmethod is surely independent of the decision about whether to mark that method private or public, no?

John Murray · Jan 9, 2018 go to post

Using my DC mod superpowers I changed this post from a Question into an Article.

John Murray · Jan 8, 2018 go to post

The page at http://www.georgejames.com/ws/ looks like this:

Use the link I've highlighted.

You may also need some of the Hints & Tips entries, and/or Patches entries.

If you get stuck I suggest you contact me directly, using the "John Murray" link near the top of that page.

John Murray · Jan 8, 2018 go to post

Brian, if you don't mind using 20-year-old software, the link in my previous reply goes to a page from where I think MSM-Workstation can still be downloaded.

John Murray · Jan 8, 2018 go to post

I have removed the "Developer Community FAQ" tag from this post. Please do not use this tag.

John Murray · Jan 8, 2018 go to post

What sort of webserver is at http://xyzx.x.edu ?

How was it set up and configured to use CSP Web Gateway?

I suggest you contact InterSystems Support (a.k.a WRC) for help resolving your issue.

John Murray · Jan 8, 2018 go to post

That'll be the problem, because /api/atelier is how Atelier talks to the server.

John Murray · Jan 8, 2018 go to post

OK, I've just seen your version info in a comment on another answer.

Given you're using accessing port 80 on server xyz.x.edu I assume a regular webserver (e.g. IIS or Apache) has been set up on that server and the CSP Web Gateway added to it, then configured to connect to an InterSystems instance (perhaps on the same server, or perhaps elsewhere).

In that case, is your webserver set up to dispatch /api/atelier to the 2017.1 instance?