Opened 14 years ago
Closed 14 years ago
#424 closed enhancement (fixed)
Ampliación de funcionalidad métodos Get de MMS::Container: si no existe el Objeto en memoria, cargarlo de repositorio
Reported by: | atorre | Owned by: | Pedro Gea |
---|---|---|---|
Priority: | critical | Milestone: | Release 0.6 |
Component: | Persistence | Keywords: | Container, métodos Get, Load, Repository |
Cc: |
Description (last modified by )
Hola MMS,
creo que se podría ampliar la funcionalidad de los métodos Get del contenedor de MMS. Si no existe en el contenedor, lo podría intentar cargar de un repositorio (¿o un conjunto de repositorios ordenados?) que se pasaría como argumento adicional en el Anything info.
Sigue un ejemplo de una función que lo hace:
NameBlock GetDataSet_INELO(Anything info) // INELO: If Not Exists, LOad { Real dsFound = MMS::Container::FindDataSet(info); If(dsFound, MMS::Container::GetDataSet(dsFound), { WriteLn("GetDataSet_INELO:\nDataSet "<< info["DataSetName"] +" not loaded", "W"); NameBlock repo = info["Repository"]; repo::LoadDataSet(info) }) }; MMS::@DataSet Prueba = GetDataSet_INELO( [[ Text DataSetName = "<DATA_SET_NAME>", Text DataSetVersion = "<DATA_SET_VERSION>", MMS::@Repository Repository = KNOWN_REPOSITORY_OBJECT ]]);
Change History (3)
comment:1 Changed 14 years ago by
Component: | General → Persistence |
---|---|
Description: | modified (diff) |
comment:2 Changed 14 years ago by
comment:3 Changed 14 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
El método solicitado se implementa con el nombre: Get[Object]_Load
.
El método recibe necesarimente dos argumentos:
- el primero es la información del objeto que desea ser cargado (el mismo argumento de
Get[Object]
) - el segundo es una lista de ubicaciones (repositorios) donde buscar en caso de no encontrarse el objeto cargado.
El método admite que se le indique directamente un repositorio en lugar de una lista.
El método busca ordenadamente en los respositorios indicados cargando el objeto del primer repositorio en el que lo encuentre.
Si el segundo argumento fuese Empty
actuaría como Get[Object]
pues no buscaría en ningún .
A continuación se indican algunas variantes de uso:
// Usando el nombre del modelo y el nombre de un repositorio: MMS::@Model model = MMS::Container::GetModel_Load("Mat.Veh", "Default"); // Usando el identificador del modelo y la instancia de un repositorio: MMS::@Model model = MMS::Container::GetModel_Load("Mat.Veh__1.0", MMS::Container::GetRepository(1)); // Usando el par nombre-versión del modelo y una lista de objetos repositorio: MMS::@Model model = MMS::Container::GetModel_Load([["Mat.Veh", "1.0"]], MMS::Container::GetRepositories(?));
Este tique está relacionado con #385. Podrían tratarse conjuntamente.