close Warning: Can't synchronize with repository "(default)" (/var/svn/mms does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 13 years ago

Last modified 13 years ago

#823 new enhancement

Acceso a un DataSet del repositorio a partir de un atributo

Reported by: imendez Owned by: Pedro Gea
Priority: major Milestone: Next
Component: Persistence Keywords:
Cc:

Description

Hola, tengo una duda:

La manera que yo conozco de cargar un DataSet de un repositorio es por su nombre y versión:

  NameBlock ds   = MMS::Container::GetObject_Load(
  "DataSet",
  [[
    Text DataSetName = "XXX",
    Text DataSetVersion = 1.0
  ]],
  Repositorio); 

¿Se puede hacer lo mismo pero con cualquier otro atributo? Algo tipo:

  NameBlock ds2 = MMS::Container::GetObject_Load(
  "DataSet",
  [[
    Text _.por = "CrCa",
    Text _.vir = "N"
  ]],
  Repositorio);

Tengo un DataSet que tiene esos atributos, pero obtengo un error:

Warning: [26] [@MainContainer$GetObject_Load] No se ha encontrado el objeto '[[  "CrCa", "N"]]' (DataSet).
ERROR: [65] Fallo en la función "GetObject_Load"
[Call stack]
  [1] NameBlock MMS::Container::Container::GetObject_Load (Text subclass, Anything info, Anything where)
Warning: [27] La función :: ha fallado en : 
MMS::Container::GetObject_Load("DataSet", SetOfAnything(Text _.por="CrCa", Text _.vir="N"), OptCob.Repo)
ERROR: [66] ds2 no se pudo crear.

Si no se puede hacer, creo que sería una buena mejora.

Gracias, un saludo.

Change History (2)

comment:1 Changed 13 years ago by Pedro Gea

Milestone: Release 0.6
Type: doubtenhancement
version: 0.6

Los mecanismos de carga necesitan recibir el nombre o el identificador del objeto, o en su defecto un conjunto (Set) con el par nombre-versión (en ese orden), de modo que no se pueden usar los atributos para ello.

comment:2 Changed 13 years ago by Pedro Gea

Para intentar reproducir el mecanismo de carga solicitado puede hacerse algo como:

Text objectType = ...; // Ej. "DataSet"
MMS::@Repository repository = ...; // Ej.  MMS::Network::GetRepository(1)
Text attributeName = ...; // Ej. "_.por"
Text attributeValue = ...; // Ej. "CrCa"

Set selection = Select(repository::GetObjectsCatalog(objectType), Real (NameBlock ne) { 
  Text title = getOptArg(ne::attributes, attributeName , "");
  title == attributeValue 
});
Anything If(Card(selection), {
  NameBlock ne = selection[1];
  repository::LoadObject(objectType, [[ne::name, ne::version]])
});
Note: See TracTickets for help on using tickets.