Persistent table with %GUID As property

How to set the property 

 Property myguid As %GUID [ Required ];

S obj=class object

S obj.myguid ="guid string"

  • 0
  • 0
  • 97
  • 1
  • 2

Answers

do you look for $System.Util.CreateGUID() ?
http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?PAGE=CLASS&LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.Util#METHOD_CreateGUID

Property myguid As %GUID Required ];

Will not work as %Lbrary.GUID is an abstract utility class and does not extend %DataType.  So it is no DataType and has no Accessors!
http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?PAGE=CLASS&LIBRARY=%25SYS&CLASSNAME=%25Library.GUID

use instead.:

Property myguid As  %String  [Required];

and

S obj.myguid = $System. Util.CreateGUID()

But you are free to define your own data type combining %String and %GUID

Pattern can be used:

Property GUID As %String(PATTERN = "8AN1""-""4AN1""-""4AN1""-""4AN1""-""12AN") [ InitialExpression = {$SYSTEM.Util.CreateGUID()} ];

And A can be replaced with L or U to store GUIDs in one case.

You can also try overriding the GUIDENABLED parameter from %Persistent:

Class User.Test1 Extends %Persistent

{

Parameter GUIDENABLED = 1;

Property Property1 as %String;

Storage Default

{

<Data name="Test1DefaultData">

<Value name="1">

<Value>%%CLASSNAME</Value>

</Value>

<Value name="2">

<Value>Property1</Value>

</Value>

</Data>

<DataLocation>^User.Test1D</DataLocation>

<DefaultData>Test1DefaultData</DefaultData>

<IdLocation>^User.Test1D</IdLocation>

<IndexLocation>^User.Test1I</IndexLocation>

<StreamLocation>^User.Test1S</StreamLocation>

<Type>%Library.CacheStorage</Type>

}


}

Will give you:

USER>set obj = ##class(Test1).%New()

USER>set obj.Property1 = "Hello"

USER>w obj.%Save()

1

USER>w obj."%%GUID"

FC381F94-277E-11E8-82F0-005056B479AA

The ^OBJ.GUID index that this creates can be accessed via %ExtentMgr.GUID.