Artículo
Ricardo Paiva · Ago 19 Lectura de 2 min

Persistencia atípica

Este es el ejemplo de un código que funciona en Caché 2018.1.3 e IRIS 2020.2 
No se mantendrá sincronizado con las nuevas versiones 
¡Además NO cuenta con el servicio de Soporte de InterSystems!

Durante mi búsqueda de un snapshot de un objeto persistente, conocí una característica que me gustaría compartir, ya que podría ser útil en algunas situaciones especiales. Mi objetivo era tener una imagen del antes y el después durante las pruebas unitarias.Una clase persistente típica puede tener una definición de almacenamiento como esta:

Storage Default
{
 <Data name="kDefaultData">
 +<Value name="1">
 </Value>
 </Data>
 <DataLocation>^rcc.kD</DataLocation>
 <DefaultData>kDefaultData</DefaultData>
 <IdLocation>^rcc.kD</IdLocation>
 <IndexLocation>^rcc.kI</IndexLocation>
 <StreamLocation>^rcc.kS</StreamLocation>
 <Type>%Storage.Persistent</Type>
}

Ahora apliqué este cambio: 

  Parameter MANAGEDEXTENT = 0; ;extent manager dislikes this change

Storage Default
{
 <Data name="kDefaultData">
 +<Value name="1">
  </Value>
 </Data>
 <DataLocation>@(%storage_"D")</DataLocation>
 <DefaultData>kDefaultData</DefaultData>
 <IdLocation>@(%storage_"D")</IdLocation>
 <IndexLocation>@(%storage_"I")</IndexLocation>
 <StreamLocation>@(%storage_"S")</StreamLocation>
 <Type>%Storage.Persistent</Type>
}

Todo lo que tienes que hacer ahora para utilizarlo:

set %storage="^myGlobal"         ;; normal use with ROLLBACK

set %storage="%myLocalVariable"  ;; no ROLLBACK
o
set %storage="^||myPPG"          ;; no ROLLBACK

y funciona como estás acostumbrado a que lo haga. Excepto en el caso de ROLLBACK (Reversión) ya que, por supuesto, no hay ningún Journal detrás de PPG o de las variables locales 

Una secuencia de uso habitual para preparar una verificación de cambios podría ser similar a la siguiente:

set %storage="^rcc.k" 
set obj=##class(rcc.k).%OpenId(id)       ;; get original
do obj.%SetModified(1)                    ;; prepare for %Save
set %storage="^||rcc"                    ;; location of copy
set sc=obj.%Save()                        ;; write copy to temp storage
//// carry on with testing and changes and find what happened

 

 Creo que merece la pena compartirlo.

00
2 0 0 31
Log in or sign up to continue