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

Last modified 13 years ago

#628 closed defect

Creación de una variable con datos y sin expresión — at Version 2

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 (2)

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.

Note: See TracTickets for help on using tickets.