Árvore de páginas

Algunas veces puede ser que no sea tan obvio visualizar una duplicación de código. Cuando hay bloques que hacen la misma cosa, pero con detalles diferentes, aún así es posible evitar la duplicación de comportamientos semejantes extrayendo la parte en común para funciones separadas.

 

Por ejemplo, en lugar de:

 


Local cStatus := Substr(cParams, (At("<STATUS>",cParams) + Len("<STATUS>")),; (At("</STATUS>",cParams)-At("<STATUS>",cParams)-Len("<STATUS>")) )
Local cObsEcm := Substr(cParams, (At("<OBS>",cParams) + Len("<OBS>")),; (At("</OBS>",cParams)-At("<OBS>",cParams)-Len("<OBS>")) )
Local cChamado := Substr(cParams, (At("<CODADE>",cParams) + Len("<CODADE>")),; (At("</CODADE>",cParams)-At("<CODADE>",cParams)-Len("<CODADE>")) )
Local cItemCh := Substr(cParams, (At("<CODITEM>",cParams) + Len("<CODITEM>")),; (At("</CODITEM>",cParams)-At("<CODITEM>",cParams)-Len("<CODITEM>")) )
Local cUsuario := Substr(cParams, (At("<USER>",cParams) + Len("<USER>")),; (At("</USER>",cParams)-At("<USER>",cParams)-Len("<USER>")) )


 Cree una función para ejecutar el procedimiento estándar y solo repita las llamadas a esta:

 


Local cStatus:= EntreTags(cParams, "<STATUS>" , "</STATUS>")
Local cObsEcm:= EntreTags(cParams, "<OBS>" , "</OBS>")
Local cChamado:= EntreTags(cParams, "<CODADE>" , "</CODADE>")
Local cItemCh := EntreTags(cParams, "<CODITEM>" , "</CODITEM>")
Local cUsuario := EntreTags(cParams, "<USER>" , "</USER>")
….
….
Function EntreTags(cTexto, cTagIni, cTagFim)
Local cStrRet := '' // Texto que se extraerá y retornará
Local nPosIni := At(cTagIni,cTexto) // Posición inicial de la tag
Local nPosFim := At(cTagFim,cTexto) // Posición final de la tag
cStrRet := Substr(cTexto, (nPosIni + Len(cTagIni)),; (nPosFim-nPosIni-Len(cTagIni)) )
Return cStrRet

  • Sem rótulos