What is The Global With Persistence Data For A Class?
Hi Devs!
Is there a way to get a Global that contains pesistence data for a class?
In early versions of IRIS it was classname_"D", like ^Sample.PersonD. Now, at least in IRIS 2022.1 it is something random.
Comments
When doing a create table, it is indeed a hashed global name, but when defining a new class in Studio, it is still clasname_"D" (unless the global name becomes too long).
The parameter USEEXTENTSET=1 will alter this behaviour (in class definition or CREATE table statement) :
Global Naming Strategy: you can use the USEEXTENTSET parameter to specify shorter and more efficient hashed global names for data and index lookup operations.
You can use %Library.CompiledStorage to find out what the global name is for a class : https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic…
Thanks, @Danny Wijnschenk ! Yes, but what if I already have it?
I added the way to find out which global name is used in my first reply : try
This is what I need! Thanks a lot, @Danny Wijnschenk !
There is a faster way without opening the object:
Class dc.test Extends %Persistent
{
ClassMethod Test()
{
s classname="dc.test", storagename="Default"
w $$$defMemberKeyGet(classname,$$$cCLASSstorage,storagename,$$$cSDEFdatalocation)
}
Storage Default
{
<Data name="testDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
<DataLocation>^abc.1</DataLocation>
<DefaultData>testDefaultData</DefaultData>
<IdLocation>^dc.testD</IdLocation>
<IndexLocation>^dc.testI</IndexLocation>
<StreamLocation>^dc.testS</StreamLocation>
<Type>%Library.CacheStorage</Type>
}
}Result:
^abc.1
Thank you @Vitaliy Serdtsev
In System Explorer -> Globals check "Show SQL Table Names". You'll see information on how particular global is used.
Thank you, @Alexander Koblov