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 14 years ago

Closed 13 years ago

#628 closed defect (fixed)

Creación de una variable con datos y sin expresión

Reported by: imendez Owned by: Pedro Gea
Priority: critical Milestone: Release 0.6
Component: Variables Keywords:
Cc:

Description (last modified by Pedro Gea)

Hola, a la hora de añadir una variable a un DataSet hay (al menos) dos opciones:

  • Con una expresión TOL
  • Apostándole los datos de forma explícita.

Al hacerlo de la segunda forma, me da error al intentar recuperar los datos, creo que porque intenta obtener la expresión:

NameBlock aux =  DataSet.Ejemplo::CreateVariable
([[
  Text _.name = "Aux";
  Text _.description = "Prueba";
  Text _.type = "Serie";
  Serie _.data = SubSer(CalInd(WD(5), Diario), y2009, y2010)
]]);  
Serie auxData = aux::GetData(?);
Warning: [37] La función Eval ha fallado en : 
Eval(expression3)

Warning: [38] La función :: ha fallado en : 
space::LocalEval(expression)

ERROR: [49] data no se pudo crear.

[Call stack]
  [2] Anything MMS::@Variable::_.ObtainData (Text expression, Set variables, Text scenario, NameBlock parent)
  [1] Anything aux::variable::variable::GetData (Real void)

ERROR: [50] [@Variable::_.ObtainData] Error en el acceso a los datos.

Por cierto, al intentar crear la variable con el atributo _.data y sin el _.type da error: ¿no podría deducir el tipo de datos a partir de la gramática de éstos, al igual que hace cuando se crea la variable con _.expression?

Gracias.

Change History (7)

comment:1 Changed 14 years ago by imendez

Si se definen los datos de dos maneras, mediante _.expression y _.data, tiene prioridad _.expression:

NameBlock aux3 =  MPAPME.DataSet.Economia::CreateVariable
([[
  Text _.name = "Aux3";
  Text _.description = "Prueba";
  Text _.expression = "SubSer(CalInd(WD(4), Diario), y2009, y2010)";
  Text _.type = "Serie";
  Serie _.data = SubSer(CalInd(WD(5), Diario), y2009, y2010)
]]);  
Serie aux3Data = aux3::GetData(?);

Creo que en este caso debería dar al menos un Warning (avisando que se utilizará la expresión en lugar de los datos) o quizá incluso un error, pues como ocurre en el ejemplo anterior ambas definiciones pueden ser contradictorias.

Un saludo.

comment:2 Changed 14 years ago by Pedro Gea

Description: modified (diff)
Milestone: Release 0.6
Status: newaccepted

El comportamiento que indicas es consecuencia de que el argumento _.data se está ignorando. El argumento implementado para incluir los datos es Set _.data..

Si hacemos la llamada así:

NameBlock aux = DataSet.Ejemplo::CreateVariable([[
  Text _.name = "Aux";
  Text _.description = "Prueba";
  Text _.type = "Serie";
  Set _.data. = [[ Serie SubSer(CalInd(WD(5), Diario), y2009, y2010) ]]
]]);

no encontrarás esos problemas.

Haciéndolo así, el argumento _.type es opcional y el argumento _.expression es secundario y solo se usará al hacer un UpdateData.

comment:3 Changed 14 years ago by Pedro Gea

¿Por qué el argumento es _.data. (con punto) y no _.data?

Internamente este argumento para la creación de la variables se corresponde con el atributo (que también es un conjunto) denominado _.data..

El nombre _.data. acabado en punto (".") quiere indicar que el atributo en sí mismo (los datos) no es el conjunto en sí mismo sino el elemento que contiene. Este convenio para los atributos se utiliza en más de un sitio en MMS aunque quizá no en todos.

La razón de usar un conjunto para albergar un atributo responde a varias razones entre ellas:

  • Hacer posible que el atributo sea opcional.
  • Permitir que el atributo pueda ser de distinto tipo para distintas instancias ya que no se trabaja bien con atributos de tipo Anything.
  • Permitir que el atributo mantenga su nombre. En este caso el nombre de la serie es Name(_.data.[1] y ahorrándonos así tener que darle un nombre en cada llamada a GetData.

comment:4 Changed 14 years ago by Pedro Gea

Description: modified (diff)
Resolution: fixed
Status: acceptedclosed

comment:5 Changed 14 years ago by Pedro Gea

Resolution: fixed
Status: closedreopened

Se sugiere habilitar también el funcionamiento del argumento _.data como una variante admitida.

Quizá podría obtenerse también el atributo _.name del nombre del elemento del argumento _.data. (variante Set) si no se indica un argumento _.name explícitamnete.

comment:6 Changed 13 years ago by Daniel Eduardo Castro Morell

(In [2607]) Nuevo test relacionado con creación de variables
Refs #628

comment:7 Changed 13 years ago by Daniel Eduardo Castro Morell

Resolution: fixed
Status: reopenedclosed

(In [2608]) Permite crear variables sin expresión, a partir de los datos especificados en _.data además de la opción tradicional (de especificarlo Set _.data. )
Se permite crear una variable sin especificar el nombre. El nombre lo tomará del nombre de _.data.[1]
Closes #628

Note: See TracTickets for help on using tickets.