#734 closed enhancement (fixed)
Permitir la adopción de objetos principales como objetos suplementarios
Reported by: | Pedro Gea | Owned by: | Pedro Gea |
---|---|---|---|
Priority: | critical | Milestone: | Development 1A |
Component: | General | Keywords: | |
Cc: |
Description
Para facilitar y agilizar la creación de un objeto por módulos se solicita la creación de un mecanismo para adoptar objetos previamente creados.
Por ejemplo, si se crea un dataset y a continuación se crea un modelo que éste puede utilizarlo (desapareciéndo éste del contenedor) sin tener que duplicarlo.
Esta mejora viene motivada desde los mecanismos de construcción de modelos definidos en archivos Excel.
Change History (3)
comment:1 Changed 13 years ago by
comment:2 Changed 12 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
Para un tratamiento más independiente de los objetos principales véase el tique #872.
comment:3 Changed 12 years ago by
¿Cómo usar la adopción de objetos de MMS?
Cuando se crea un modelo usando un dataset, el modelo se hace una copia propia del dataset que él mismo contendrá y gestionará, dejando el dataset original para otros usos y la gestión desde el contenedor principal.
Por ejemplo:
#Require MMS; MMS::@DataSet dataSet = MMS::Container::ReplaceDataSet([[ Text _.name = "A" ]]); Real dataSet::GetRoute(?); //-> "MMS::Container::GetDataSet(1)" MMS::@Model model = MMS::Container::ReplaceModel([[ Text _.name = "B"; MMS::@DataSet _.dataSet = dataSet ]]); Real model::GetRoute(?); //-> "MMS::Container::GetModel(1)" // Tras la creación del modelo hay un nuevo dataset: MMS::@DataSet dataSet2 = model::GetDataSet(?); Real dataSet2::GetRoute(?); //-> "MMS::Container::GetModel(1)::GetDataSet(?)" Real SameNameBlock(dataSet, dataSet2); //-> False
A menudo, la creación o carga del dataset, se hace con el único objetivo de crear un modelo con él. La adopción de objetos permite aprovechar el objeto, sin tener que pasar por hacer una copia, con la única desventaja de que el dataset, una vez adoptado deja de estar disponible en el contenedor principal.
Por ejemplo:
#Require MMS; MMS::@DataSet dataSet = MMS::Container::ReplaceDataSet([[ Text _.name = "A" ]]); Real dataSet::GetRoute(?); //-> "MMS::Container::GetDataSet(1)" MMS::@Model model = MMS::Container::ReplaceModel([[ Text _.name = "B"; MMS::@DataSet _.dataSet = dataSet; Real _.objectAdoption = True // <= argumento para indicar la adopción del objeto ]]); Real model::GetRoute(?); //-> "MMS::Container::GetModel(1)" // Tras la creación del modelo no hay un nuevo dataset, // el dataset existente se ha reubicado: Real dataSet::GetRoute(?); //-> "MMS::Container::GetModel(1)::GetDataSet(?)" // El dataset contenido en el modelo y el que creamos es el mismo: MMS::@DataSet dataSet2 = model::GetDataSet(?); Real SameNameBlock(dataSet, dataSet2); //-> True
Esto mismo ocurre para otros pares de objetos principales que mantenga una relación de objeto principal y objeto suplementario, como por ejemplo: una estimación y un modelo.
(In [2600]) Se incorporan mecanismos para la adopción de objetos principales.
Se incorpora un mecanismo para modificar el padre de un objeto principal.
Se amplía el método duplicate para poder indicar el modo con el que se duplica: usa los mismos modos que GetSpecification.
Se amplía el método _DecodeInfo del contenedor principla para que los métodos GetObject y FindObject funcionen en el caso trivial en el que el propio objeto es el argumento.
Refs #734