I am extracting Representation in my M2Doc export
{ m:for f | self.eAllContents() }
{ m:for rep | f.representationByDescriptionName(‘Logical Architecture Blank’)}
{ m:rep.name}
{ m:endfor }
{ m:endfor }
I receive files in a random order
I would like to order them,
One solution should be to put the order in the file name … Ugly but simple (no external list to handle)
So could look like
001[LAB] …
002[LAB] …
010[LAB] …
011[LAB] …
020[LAB] …
021[LAB] …
with the smart idea to keep some empty numbers between number for the futur
but how can I sort from smallest to greatest the names issued of my for :
{ m:for rep | f.representationByDescriptionName(‘Logical Architecture Blank’)}
Thanks in advance for ideas
You can sort using an AQL expression, for instance:
f.representationByDescriptionName(‘Logical Architecture Blank’)->sortedBy(r | r.name)
If you want to sort all representations you need to do it in one for loop:
self.eAllContents().representationByDescriptionName(‘Logical Architecture Blank’)->sortedBy(r | r.name)
You can also replace the r.name to sort on other criterion.
It works !!! Great ! thank you !
I am now going to try to use another field not to pollute the title
I Talked too fast
I works very well for Logical Architecture Blank but not for Exchange Scenario
{ m:for rep | f.representationByDescriptionName(‘Logical Architecture Blank’)->sortedBy (r | r.name)}
it works fine
001[LAB]
002[LAB]
003[LAB]
004[LAB]
{ m:for rep | f.representationByDescriptionName(’‘Component Exchanges Scenario’)->sortedBy (r | r.name)}
it is the same order that without the SortBy …
I have the feeling that in first case I am sorting a list => ok
and in second I am sorting element of the list per element of the list : sorting itself so no real sorting ???
I anybody have an idea
You should probably sort representations all at once:
I tested your proposal and Capella goes into infinite loop, I crashed the program …
I put the “self” a the element after the .aird (at the same level of Representation per category)
I had this problem several time yesterdays, I guess I do something wrong
in the code I am using For loop
{ m:for f | self.eAllContents()}
{ m:for rep | f.representationByDescriptionName(‘Logical Architecture Blank’)->sortedBy (r | r.name)}
{ m:rep.name }
{ m:endfor }
Like this I have the feeling to better control the items rep and can access it several times
If you have a stack trace in your error log I would like to see it. Maybe we go into an out of memory here. Also there is a missing endfor, and I fixed an issue in the parser recently that could explain the infinit loop in the parser.
But with two loops nothing prove you will get f elements in the rep.name order.
An other way to get all representations would be to navigate de DAnalysis object:
rep.getDescriptor().eContainer(viewpoint::DAnalysis).ownedViews.ownedRepresentationDescriptors
You can store the expression value in a variable using a let. Lets call it descriptors. Then you can filter on the representation description name and sort by the representation name:
descriptors->select(d | d.description.name = ‘Logical Architecture Blank’).representation->sortedBy(r | r.name)
this will give you a list of representation. You can then loop over this list and to get the element f in your previous example you can use:
representation.target
All put together:
{m:let descriptors = rep.getDescriptor().eContainer(viewpoint::DAnalysis).ownedViews.ownedRepresentationDescriptors }
{ m:for representation | descriptors->select(d | d.description.name = 'Logical Architecture Blank').representation->sortedBy(r | r.name) }
{ m:representation.name }
{ m:representation.target }
{ m:endfor }
{ m:for representation | descriptors->select(d | d.description.name = 'Component Exchanges Scenario').representation->sortedBy(r | r.name) }
{ m:representation.name }
{ m:representation.target }
{ m:endfor }
{ m:endlet }