Olas pessoal estou quase concluindo meu menu dinamico, agora ja nao tem mais o problema de nao carregar as telas, estou usando a seguinte procedure para carregar os programas: Eu peguei na net nao sei que é o dono.. Código: DEF INPUT PARAMETER p-program AS CHAR NO-UNDO. DEF VAR hPrograma AS HANDLE NO-UNDO. DEF VAR hObject AS HANDLE NO-UNDO. DEF VAR hObjTemp AS HANDLE NO-UNDO. DEF VAR v-programa AS CHAR. v-programa = SUBSTRING(p-program,index(p-program,"/") + 1,LENGTH(p-program)). ASSIGN hObject = SESSION:FIRST-PROCEDURE. DO WHILE hObject <> ?: ASSIGN hObjTemp = hObject hObject = hObject:NEXT-SIBLING. /*name da erro ??? */ IF hObjTemp:NAME = v-programa THEN DO: ASSIGN hPrograma = hObjTemp. RUN viewObject IN hPrograma NO-ERROR. END. END. IF NOT VALID-HANDLE(hPrograma) THEN DO: RUN VALUE(p-program) PERSISTENT SET hObjTemp NO-ERROR. RUN initializeObject IN hObjTemp NO-ERROR. END. O problema é que abre varias vezes a mesma janela pq o seguinte codigo da erro Código: hObjTemp:NAME NAME nao é um atributo queryable para procedure widget(4052) ai o que acontece se eu tiro esta parte do codigo funciona mas ai abre uma nova janela meu progress é 9.1C
É gambiarra, mas se você declarar uma variável char para o nome do objeto, aí você consegue usar o no-error da seguinte forma: Código: DEF VAR v-obj-name AS CHAR. ... ASSIGN v-obj-name = hObjTemp:NAME NO-ERROR. IF v-obj-name = v-programa THEN ...
Opas valeu pela ajuda o name nao funcionou mas o file name sim, deu melhor que a encomenda menu dinamico funcionando e nao tem mais o problema de a tela abrir uma vez e depois nao abrir mais.. Código: DEF INPUT PARAMETER p-program AS CHAR NO-UNDO. DEF VAR hPrograma AS HANDLE NO-UNDO. DEF VAR hObject AS HANDLE NO-UNDO. DEF VAR hObjTemp AS HANDLE NO-UNDO. DEF VAR v-obj-name AS CHAR. DEF VAR v-programa AS CHAR. v-programa = SUBSTRING(p-program,index(p-program,"/") + 1,LENGTH(p-program)). ASSIGN hObject = SESSION:FIRST-PROCEDURE. DO WHILE hObject <> ?: ASSIGN hObjTemp = hObject hObject = hObject:NEXT-SIBLING. ASSIGN v-obj-name = hObjTemp:FILE-NAME NO-ERROR. IF v-obj-name = p-program THEN DO: ASSIGN hPrograma = hObjTemp. RUN viewObject IN hPrograma NO-ERROR. END. END. IF NOT VALID-HANDLE(hPrograma) THEN DO: RUN VALUE(p-program) PERSISTENT SET hObjTemp NO-ERROR. RUN initializeObject IN hObjTemp NO-ERROR. END. Quem precisar, so pedir.
Pessoal so mais uma coisa: Como faco para quando o programa estiver em execucao ele mostrar o programa em execucao, pq qdo clico no menu ele fica atras do menu. Código: ASSIGN v-obj-name = hObjTemp:FILE-NAME NO-ERROR. IF v-obj-name = p-program THEN DO: ASSIGN hPrograma = hObjTemp. RUN viewObject IN hPrograma NO-ERROR. /*trazer programa para frente*/ END.