Ordenação da hierarquia de PIPES (REORDER)

 
  • Bom dia,

    preciso ordenar minha hierarquia de pipes com base em um trecho do nome (substring), compondo a letra que identifica o fluido e o sequencial, conforme exemplo abaixo.
    /1-0005-[COLOR=#ff0000]P-0040[/COLOR][/U]-(Ba)
    /1-0005-[COLOR=#ff0000]P-0038[/COLOR][/U]-(Ba)
    /1-0005-[COLOR=#ff0000]P-0039[/COLOR][/U]-(Ba)

    Tendo em vista a quantidade de pipes que tenho em cada zone, fazer isto pelo modify>hierarchy é inviável, então preciso montar um script que faça isso por mim. Pesquisando na internet eu consegui este (abaixo) que segundo o autor faz a ordenação dentro do PARAGON, eu preciso adequá-lo ao DESIGN ou montar um outro que faça isso por mim, alguém poderia me ajudar? Talvez já tenham tido essa necessidade.


    !AA.SCOPE(!!CE)
    !SPRFCOLL = !AA.results()


    $* !PART1 = Evaluation of PARA[1]
    !PART1 = !SPRFCOLL.EVALUATE(OBJECT BLOCK('!SPRFCOLL[!EVALINDEX].PARA[1]'))


    $* !PART2 = Evaluation of PARA[2]
    !PART2 = !SPRFCOLL.EVALUATE(OBJECT BLOCK('!SPRFCOLL[!EVALINDEX].PARA[2]'))


    $* VAR !SORTORDER EVALUATE ( PARA[1] )FOR ALL SPRF FOR CE




    VAR !SORTORDER SORT !PART1 NUMERIC ASCENDING !PART2 NUMERIC ASCENDING


    !NEWINDEX = !SORTORDER.EVALUATE(OBJECT BLOCK('!SORTORDER[!EVALINDEX].REAL()'))
    !SPRFCOLL.REINDEX(!NEWINDEX)


    !NLINEE=!SPRFCOLL.SIZE()


    DO !X FROM 1 TO !NLINEE
    REORDER $!SPRFCOLL[$!X] BEFORE $!SPRFCOLL[$!NLINEE]
    ENDDO


    Muito obrigado,
    Filipe Duarte Sales
  • Consegui encontrar está função aqui no FÓRUM, já me adianta, mas agora preciso adequá-lo para reordenar com base na substring citada acima pois este código reordena pelo diâmetro.

    --define Function !!SORT()


    !CS = CURRENT SESSION
    !COLL = !!COLLECTMEMBERSOF(CE , '')
    !NAME = !COLL.EVALUATE(OBJECT BLOCK('!COLL[!EVALINDEX].NAME'))
    !NEWPOSITION = !NAME.SORTEDINDICES()
    !NAME.SORT()
    !COLL.REINDEX(!NEWPOSITION)
    !MCOUNT = !COLL.SIZE()


    DO !X values !COLL
    !Lock = False
    IF !X.USERCLAIM.EQ('') OR !X.USERCLAIM.EQ(!CS.USER().NAME) Then
    REORDER $!X AFTER $!MCOUNT
    ELSE
    $P$!X IS CLAIM BY $!X.USERCLAIM
    ENDIF
    ENDDO


    --endfunction