﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
1594	Tol no es capaz de aplicar un método a un nameblock cuando es devuelto por una función	jmarinero	Víctor de Buen Remiro	"DevuelveNameBlockMasReciente es una función que recibe como argumento un conjunto de objetos forecast y que devuelve un NameBlock forecast de acuerdo a un criterio (que sea el más reciente)

Si ejecuto 


{{{
DevuelveNameBlockMasReciente(Set ModCliNuA   )
}}}


me devuelve un NameBlock sin problema alguno cuya ruta, por cierto, es:


{{{
MMS::Container::GetForecast(1)
}}}


Si yo ahora ejecuto:


{{{
MMS::Container::GetForecast(1)::GetModel.Forecast(?)
}}}


no hay ningún problema. Obtengo el nameblock deseado sin problema alguno.

Pero si ejecuto:


{{{
DevuelveNameBlockMasReciente(Set ModCliNuA)::GetModel.Forecast(?)
}}}


lo que obtengo es un warning:


{{{
Warning: [2] La función :: ha fallado en : 
DevuelveNameBlockMasReciente(Set ModCliNuA)::GetModel.Forecast(?)
}}}


He probado con varias combinaciones de paréntesis rodeando el nameblock devuelto por la función a la que quiero aplicar el ::getmodel, pero no hay forma.

{{{
(DevuelveNameBlockMasReciente(Set ModCliNuA))::GetModel.Forecast(?)
}}}

produce exactamente el mismo resultado.

He probado con:

{{{
(  [[DevuelveNameBlockMasReciente(Set ModCliNuA)]])[1]::GetModel.Forecast(?)
}}}


Obteniendo el error:


{{{
ERROR: [10] Element (ó [ ] ):Indice de conjunto inválido, debe ser Real o Text
}}}


Y si rodeo con paréntesis la expresión anterior:


{{{
(( [[DevuelveNameBlockMasReciente(Set ModCliNuA)]])[1])::GetModel.Forecast(?)
}}}


obtengo el warning


{{{
Warning: [15] La función :: ha fallado en : 
((SetOfAnything[[DevuelveNameBlockMasReciente(Set ModCliNuA)]])[[1])::GetModel.Forecast(?)
}}}


Curiosamente, si accedo directamente el elemento 1 del conjunto ModCliNuA en vez de utilizar la función DevuelveNameBlockMasReciente sí funciona:


{{{
(ModCliNuA[1])::GetModel.Forecast(?)
}}}


y produce el resultado deseado.

El problema es que en mi caso no siempre quiero acceder al elemento número 1 del conjunto. La forma que tengo de decidir el elemento al que quiero acceder es la función DevuelveNameBlockMasReciente.

Tampoco puedo utilizar


{{{
MMS::Container::GetForecast(1)::GetModel.Forecast(?)
}}}


porque igual que no funciona el ::GetModel tampoco funciona el ::GetRoute y no puedo obtener su ruta

Por si fuera útil, el código de esta función es el siguiente. Lo que hace es ordenar en orden alfabético inverso por el nombre de los nameblocks en el conjunto que se le pasa y devolver el primero de la lista:


{{{
NameBlock DevuelveNameBlockMasReciente(Set setNameBlocks)
  {
    //Ordeno el conjunto por orden alfabético inverso
    Set ord = Sort(Set setNameBlocks, Real(NameBlock k1_, NameBlock k2_)
      {
        Text k1 = Name(NameBlock k1_);
        Text k2 = Name(NameBlock k2_);
        Real 0 + 1 * (Text k1 < Text k2) - 1 * (Text k2 < Text k1)
      });
    //Me quedo con el primero elemento, que (a no se que cambien la nomenclatura 
    //en los nombres de los objetos) será el objeto forecast más reciente
    NameBlock ord[1]
  };
}}}


Gracias, un saludo.
"	defect	closed	normal	Mantainance	OOP	3.1	normal	goodtrick		
