Also, the $ZF calls made by Studio via your source control class will operate with the server credentials that the InterSystems superserver (port 1972, typically) uses. On Windows that's the logon account of the Caché/Ensemble/HealthShare service. Whereas when you launch a Caché terminal onto you local instance from your Windows desktop, your $ZF calls will use the credentials you logged in to the Windows desktop with. Similarly on non-Windows platforms.

One way is to create a SYSTEM^%ZSTART subroutine and put some COS code in there. Read the doc here about how to do this.

Take care to read the documentation carefully. For example, if your SYSTEM^%ZSTART causes an error your environment startup could fail. Here's a simple error handler to wrap your startup actions in:

 try {
  // Your code here
 }
 catch e {
  d ##class(%SYS.System).WriteToConsoleLog("SYSTEM^%ZSTART error: "_e.AsSystemError(),,1)
 }

Also note that if you are using InterSystems mirroring you may want to run your startup code only on the primary. In that case I recommend creating/editing the ZMIRROR routine in %SYS (on all mirror nodes) and using its NotifyBecomePrimary entrypoint instead of SYSTEM^%ZSTART. Another benefit of NotifyBecomePrimary is that it only runs after the databases are ready to be written to. In contrast, in a mirroring configuration SYSTEM^%ZSTART runs at a point where the databases are readonly.

Manoj, I respectfully suggest that your response isn't an answer to Sansa's question, but instead it is a comment on the question. I encourage you to use the "comment" link below a question in future in this kind of situation.

Also, our question here seems to be the same as Sansa's. Are you and Sansa perhaps working on the same project? If yes, coordinating your efforts to post a single question could be useful. In some cases you may even discover your own answer as you discuss the problem, saving you the trouble of posting a question here. In that case you might still choose to post an article sharing a tip with the community.

I'll echo Katherine and say I don't think 5.0 provided that capability directly. Perhaps your 5.0 instance tied telnet logins to your own app-level authentication routine. In that case, you could be doing this kind of thing . For example, using $ZIO to discover the telnet client's address or hostname.

Please also note that there's no Cache version 2016. Rather, there are 2016.1 and 2016.2. Some things available in 2016.2 won't be available to you if you're using 2016.1 (though nothing likely to be relevant to this specific question). I recommend you (and anyone posting on this forum) specify at least the second piece of the version identifier. Even better, give us your complete $ZVERSION string.

I can't reproduce what you report.

Please confirm that in the "Debugging Target" dialog the upper radiobutton is set and the adjacent input field contains this:

##class( %SourceControl.UnitTest).Test()

And if you comment out the "D $ZF(..." line in the classmethod, then recompile it, does that resolve the problem. If not, then I think this proves that the problem isn't caused by the $ZF() call.

Also to say that if you need a response urgently you should contact InterSystems Support, a.k.a. WRC. This forum (Developer Community) is not a substitute for WRC.

I don't need it, but my experience is that InterSystems consistently maintains a very high standard of technical and professional competence among its staff, so knowing that the author of a post or a response is a member of ISC staff may be useful to readers.

Additionally, an ISC person may find it helpful in the event that someone whose name they do not recognize as being a colleague posts something that might benefit from follow-up through internal channels.

Think of it as equivalent to the way in which Global Summit badges usually give a discreet indication that the wearer is a company employee.

Their client app is a GUI built in MSM-Workstation, correct? And presumably this app is talking to Caché using the InterSystems VisM.ocx, right?

Assuming VisM.ocx dispatches a double-precision value using the correct datatype, maybe MSM-Workstation's COM handling code doesn't deal with that datatype correctly.

Can they test VisM.ocx in a different client to see if it works there when retrieving their double-precision property?

I think your code is vulnerable to a <MAXSTRING> error in the case of records with a large number of long values.

How about this instead, which might be a bit faster too?

set crc = 0
for i=1:1:in {
 set crc = $zcrc($char(i#256)_in(i), 7, crc)
}
return crc

Prefixing the input string to each $zcrc call with a character derived from the argument position number is intended to prevent us getting an unchanged CRC in the event that a substring has been removed from the beginning of one argument and appended to the previous argument (or removed from the end of one argument and prepended to the next argument)

The #256 is probably overkill because (a) you might be on a Unicode instance of Caché and (b) it might not even be possible to pass more than 255 arguments to the method (I haven't investigated).

Travis, are you aware of our well-established native Caché/Ensemble/HealthShare source code management and deployment tool? Previously known as VC/m, it's now called Deltanji.

As well as dealing with code versioning Deltanji also handles deployment. It integrates with Atelier, Studio and Portal.

Some members of this Developer Community may be willing to share their experiences of using our tool.

Perhaps you have specific reasons for wanting to go with Git, but it might be worthwhile considering Deltanji as an alternative route.

John Murray
George James Software