Olá pessoal, pesquisei aqui no fórum e não encontrei nada sobre isso. Tenho um Appserver já configurado e rodando com o nome "appteste". Gostaria de conectar a ele pelo meu editor progress. Na documentação do Progress encontrei algumas maneiras mas nao consegui fazer rodar. Segue o código que estou tentando rodar: Código: DEFINE VARIABLE gscSessionID AS CHARACTER NO-UNDO. DEFINE VARIABLE gshAstraAppServer AS HANDLE NO-UNDO. DEFINE TEMP-TABLE ttService FIELD cServiceName AS CHAR FIELD cConnectParams AS CHAR. DEFINE TEMP-TABLE AppSrv-TT FIELD partition AS CHAR FIELD Configuration AS LOG. /*DEFINE SHARED TEMP-TABLE AppSrv-TT FIELD Partition AS CHARACTER FORMAT "X(25)" FIELD Host AS CHARACTER FORMAT "X(15)" /* NS -H parameter */ FIELD Service AS CHARACTER FORMAT "X(15)" /* NS -S parameter */ FIELD Configuration AS LOGICAL FORMAT "Remote/Local" FIELD Security AS LOGICAL FORMAT "Prompt/No" FIELD Info AS CHARACTER LABEL "AppServer Information" FORMAT "X(255)" FIELD AS-Handle AS HANDLE /* Handle if connected */ FIELD App-Service AS CHARACTER LABEL "Application Service" FORMAT "X(25)" FIELD Conn-Count AS INTEGER LABEL "Pseudo connections" INITIAL 0 FIELD PartitionType AS CHARACTER FORMAT "X(10)" FIELD ServerURL AS CHARACTER FORMAT "X(255)" INDEX Partition IS PRIMARY UNIQUE Partition INDEX App-Service App-Service INDEX PartitionType PartitionType.*/ DEFINE VARIABLE hDynUser AS HANDLE NO-UNDO. FUNCTION isConnected RETURNS LOGICAL ( INPUT pcServiceName AS CHARACTER ) FORWARD. FUNCTION parseConnectionParams RETURNS CHARACTER (INPUT pcParams AS CHARACTER ) FORWARD. PROCEDURE connectService : /*------------------------------------------------------------------------------ Purpose: Connects a physical service for a given service name Parameters: <none> Notes: This procedure is a required entry point for the Connection Manager. ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER pcServiceName AS CHARACTER NO-UNDO. DEFINE OUTPUT PARAMETER pcHandle AS CHARACTER NO-UNDO. RUN connectServiceWithParams( INPUT pcServiceName, INPUT "":U, INPUT "":U, OUTPUT pchandle). END PROCEDURE. PROCEDURE connectServiceWithParams : /*------------------------------------------------------------------------------ Purpose: Parameters: <none> Notes: ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER pcServiceName AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER pcParameterList AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER pcSubstitutionList AS CHARACTER NO-UNDO. DEFINE OUTPUT PARAMETER pcHandle AS CHARACTER NO-UNDO. DEFINE VARIABLE cConnectString AS CHARACTER NO-UNDO. DEFINE VARIABLE cUserName AS CHARACTER NO-UNDO. DEFINE VARIABLE cPassword AS CHARACTER NO-UNDO. DEFINE VARIABLE lRunLocal AS LOGICAL NO-UNDO. DEFINE VARIABLE hServer AS HANDLE NO-UNDO. DEFINE VARIABLE lAns AS LOGICAL NO-UNDO. DEFINE VARIABLE lDefault AS LOGICAL NO-UNDO. DEFINE VARIABLE cAppServerInfo AS CHARACTER NO-UNDO. DEFINE VARIABLE cSessionType AS CHARACTER NO-UNDO. DEFINE VARIABLE cPhysSessType AS CHARACTER NO-UNDO. define variable cPhysicalService as character no-undo. /* Check whether there's a connection already made to the actual AppServer (ie the physical service). If so, re-use the connection, while keeping the (logical) service name. */ cPhysicalService = {fnarg getPhysicalService pcServiceName}. hServer = dynamic-function('findConnectedPhysicalService':u in target-procedure, cPhysicalService, '':u /* service name not required */). /* We use this value regardless of whether we've reused the connection. */ lDefault = {fnarg isDefaultService pcServiceName}. if not valid-handle(hServer) then do: /* cAppServerInfo contains several parameters in a string. This string is passed as the AppServerInfo parameter in the connect method so that the as_connect.p procedure can parse these values out for use by the AppServer. */ cPhysSessType = DYNAMIC-FUNCTION("getPhysicalSessionType":U IN THIS-PROCEDURE). IF cPhysSessType = ? THEN cPhysSessType = "?":U. cAppServerInfo = "VER:2.1A":U + CHR(3) + cPhysSessType + CHR(3) + SESSION:NUMERIC-SEPARATOR + CHR(3) + SESSION:NUMERIC-DECIMAL-POINT + CHR(3) + SESSION:DATE-FORMAT + CHR(3) + STRING(SESSION:YEAR-OFFSET) + CHR(3). cSessionType = DYNAMIC-FUNCTION("getSessionParam":U IN THIS-PROCEDURE, "ICFSESSTYPE":U). IF cSessionType = ? THEN cSessionType = "?":U. cAppServerInfo = cAppServerInfo + cSessionType + CHR(3). IF lDefault AND gscSessionID <> "":U AND gscSessionID <> ? THEN cAppServerInfo = cAppServerInfo + gscSessionID. /*{aficfcheck.i} */ /* Get the connection parameters */ cConnectString = DYNAMIC-FUNCTION("getConnectionString":U IN THIS-PROCEDURE, INPUT pcServiceName ). IF cConnectString = ? THEN RETURN "INVALID CONNECTION STRING":U. lRunLocal = cConnectString = "<LOCAL>":U. IF NOT lRunLocal THEN DO: /* Now append the parameter list to the connection string */ IF ( pcParameterList > "":U ) THEN ASSIGN cConnectString = cConnectString + " ":U + pcParameterList. /* Now invoke the substitute param to substitute list */ RUN substituteParams IN TARGET-PROCEDURE (INPUT cConnectString, INPUT pcSubstitutionList, OUTPUT cConnectString). lRunLocal = DYNAMIC-FUNCTION("getSessionParam":U IN THIS-PROCEDURE, "run_local":U) = "YES":U. END. IF lRunLocal THEN DO: pcHandle = STRING(SESSION). DYNAMIC-FUNCTION("setServiceHandle":U IN THIS-PROCEDURE, pcServiceName, pcHandle). RETURN. END. IF isConnected(pcServiceName) THEN RUN disconnectService (pcServiceName). /* Connect to the AppServer with a generated user name and password */ cUserName = DYNAMIC-FUNCTION("generateUserName":U IN hDynUser). cPassword = DYNAMIC-FUNCTION("createPassword":U IN hDynUser, cUserName). /* Now create the server and connect it */ CREATE SERVER hServer. lAns = hServer:CONNECT(cConnectString,cUserName,cPassword,cAppServerInfo) NO-ERROR. IF ERROR-STATUS:ERROR OR ERROR-STATUS:NUM-MESSAGES <> 0 OR lAns <> YES THEN RETURN DYNAMIC-FUNCTION('buildErrorList':U IN THIS-PROCEDURE). end. /* Re-usable connection */ pcHandle = STRING(hServer). DYNAMIC-FUNCTION('setServiceHandle':U IN THIS-PROCEDURE, INPUT pcServiceName, INPUT pcHandle). IF lDefault = YES THEN DO: gshAstraAppServer = hServer. gscSessionID = hServer:CLIENT-CONNECTION-ID. END. END PROCEDURE. PROCEDURE disconnectService : /*------------------------------------------------------------------------------ Purpose: This procedure is responsible for disconnecting a physical service. Parameters: <none> Notes: This procedure is a required entry point for the Connection Manager. ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER pcServiceName AS CHARACTER NO-UNDO. DEFINE VARIABLE hServer AS HANDLE NO-UNDO. DEFINE VARIABLE lAns AS LOGICAL NO-UNDO. DEFINE VARIABLE lDefault AS LOGICAL NO-UNDO. define variable hOtherServer as handle no-undo. define variable cPhysicalService as character no-undo. /* Get the handle to the AppServer */ hServer = WIDGET-HANDLE(DYNAMIC-FUNCTION('getServiceHandle':U IN THIS-PROCEDURE, INPUT pcServiceName)). IF NOT VALID-HANDLE(hServer) OR hServer = SESSION:HANDLE THEN RETURN. /* Look for another logical connection using this physical connection. */ cPhysicalService = {fnarg getPhysicalService pcServiceName}. hOtherServer = dynamic-function('findConnectedPhysicalService':u in target-procedure, cPhysicalService, pcServiceName). lDefault = DYNAMIC-FUNCTION("isDefaultService":U IN THIS-PROCEDURE, INPUT pcServiceName ). /* Only delete the service if there's no connection sharing going on. If there's another logical service using this physical service, then don't delete the physical service. */ if hServer ne hOtherServer then do: IF hServer:CONNECTED() THEN hServer:DISCONNECT(). DELETE OBJECT hServer. end. /* there's another service on this connection */ DYNAMIC-FUNCTION('setServiceHandle':U IN THIS-PROCEDURE, INPUT pcServiceName, INPUT ?). IF lDefault = YES THEN gshAstraAppServer = ?. END PROCEDURE. PROCEDURE initializeSelf : /*------------------------------------------------------------------------------ Purpose: Parameters: <none> Notes: ------------------------------------------------------------------------------*/ /* Get the handle to af/app/afddo.p - ICF is not running so we can't get this from the Session manager. The function "getProcedureHandle" lives in the Configuration File Manager which is a SESSION super procedure */ RUN startProcedure IN THIS-PROCEDURE ("ONCE|af/app/afdynuser.p":U, OUTPUT hDynUser) NO-ERROR. /* If the handle to hDynUser is invalid, then start it. */ IF NOT VALID-HANDLE(hDynUser) THEN RUN "af/app/afdynuser.p":U PERSISTENT SET hDynUser. END PROCEDURE. PROCEDURE plipShutdown : /*------------------------------------------------------------------------------ Purpose: Cleans up the AppServer connections when the AppServer Manager is shut down. Parameters: <none> Notes: ------------------------------------------------------------------------------*/ DEFINE BUFFER bttService FOR ttService. FOR EACH bttService: RUN disconnectService(bttService.cServiceName). END. EMPTY TEMP-TABLE AppSrv-TT. gshAstraAppServer = ?. IF NOT VALID-HANDLE(hDynUser) THEN DELETE OBJECT hDynUser. DELETE OBJECT THIS-PROCEDURE. END PROCEDURE. PROCEDURE reconnectService : /*------------------------------------------------------------------------------ Purpose: Parameters: <none> Notes: ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER pcServiceName AS CHARACTER NO-UNDO. DEFINE OUTPUT PARAMETER pcHandle AS CHARACTER NO-UNDO. /* Clean up the old handle */ RUN disconnectService (pcServiceName). /* Connect the service again */ RUN connectService (pcServiceName, OUTPUT pcHandle). END PROCEDURE. PROCEDURE registerService : /*------------------------------------------------------------------------------ Purpose: Super Override Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER phServiceBuff AS HANDLE NO-UNDO. DEFINE VARIABLE cParseConnect AS CHARACTER NO-UNDO. /* Code placed here will execute PRIOR to standard behavior. */ RUN SUPER(INPUT phServiceBuff). IF AVAILABLE(ttService) THEN DO: ASSIGN cParseConnect = parseConnectionParams(ttService.cConnectParams). FIND AppSrv-TT WHERE AppSrv-TT.partition = ttService.cServiceName NO-ERROR. IF NOT AVAILABLE AppSrv-TT THEN DO: CREATE AppSrv-TT. ASSIGN AppSrv-TT.partition = ttService.cServiceName. END. ASSIGN AppSrv-TT.Configuration = NOT (cParseConnect = "<LOCAL>":U). END. /* Code placed here will execute AFTER standard behavior. */ END PROCEDURE. PROCEDURE security_prompt : /*------------------------------------------------------------------------------ Purpose: This is a procedure that was called in the as-utils. This is here for backward compatibility. Parameters: <none> Notes: ------------------------------------------------------------------------------*/ DEFINE OUTPUT PARAMETER lCancel AS LOGICAL NO-UNDO. lCancel = FALSE. END PROCEDURE. FUNCTION isConnected RETURNS LOGICAL ( INPUT pcServiceName AS CHARACTER ) : /*------------------------------------------------------------------------------ Purpose: Determines whether the requested service type is connected. Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE lAns AS LOGICAL NO-UNDO. DEFINE VARIABLE hServer AS HANDLE NO-UNDO. /* Get the handle to the AppServer */ hServer = WIDGET-HANDLE(DYNAMIC-FUNCTION('getServiceHandle':U IN THIS-PROCEDURE, INPUT pcServiceName)). IF VALID-HANDLE(hServer) THEN DO: IF hServer = SESSION:HANDLE THEN lAns = YES. ELSE lAns = hServer:CONNECTED(). END. RETURN lAns. /* Function return value. */ END FUNCTION. FUNCTION parseConnectionParams RETURNS CHARACTER (INPUT pcParams AS CHARACTER ) : /*------------------------------------------------------------------------------ Purpose: Parses pcParams and returns the connection string. Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE cConnectString AS CHARACTER NO-UNDO. DEFINE VARIABLE cMode AS CHARACTER NO-UNDO. DEFINE VARIABLE cString1 AS CHARACTER NO-UNDO. DEFINE VARIABLE cString2 AS CHARACTER NO-UNDO. DEFINE VARIABLE cClientType AS CHARACTER NO-UNDO. /* Parse the string to determine what parameters to use */ cMode = ENTRY(1,pcParams,CHR(3)). IF NUM-ENTRIES(pcParams,CHR(3)) > 1 THEN cString1 = ENTRY(2,pcParams,CHR(3)). IF NUM-ENTRIES(pcParams,CHR(3)) > 2 THEN cString2 = ENTRY(3,pcParams,CHR(3)). CASE cMode: WHEN "R":U OR WHEN "U":U THEN cConnectString = cString1. WHEN "D":U THEN DO: cClientType = DYNAMIC-FUNCTION("getPhysicalSessionType":U IN THIS-PROCEDURE). IF cClientType = "WBC":U THEN cConnectString = cString2. ELSE cConnectString = cString1. END. OTHERWISE cConnectString = "<LOCAL>":U. END. RETURN cConnectString. /* Function return value. */ END FUNCTION. DEFINE VARIABLE pcHandle AS HANDLE NO-UNDO. RUN connectService (INPUT "appteste", OUTPUT pcHandle).´ Quero conectar ao appserver, usar as conexoes existentes dele. Não quero conectar aos bancos com o PF do appserver. Quando rodo o codigo acima, ocorre os seguintes erros: Funcao definida pelo usuario 'getPhysicalService', foi chamada dinamicamente mas nao pode ser encontrada. (5639) Funcao definida pelo usuario 'findConnectedPhysicalService', foi chamada dinamicamente mas nao pode ser encontrada. (5639) Funcao definida pelo usuario 'isDefaultService', foi chamada dinamicamente mas nao pode ser encontrada. (5639) Funcao definida pelo usuario 'getPhysicalSessionType', foi chamada dinamicamente mas nao pode ser encontrada. (5639) Funcao definida pelo usuario 'getSessionParam', foi chamada dinamicamente mas nao pode ser encontrada. (5639) Funcao definida pelo usuario 'getConnectionString', foi chamada dinamicamente mas nao pode ser encontrada. (5639) Alguém pode me ajudar?
Re: Editor progress conectar ao Appserver. Segundo a documentacao do Progress (CONNECT method, AppServer) posso fazer assim: Código: DEFINE VARIABLE vconnectstring AS CHARACTER NO-UNDO. DEFINE VARIABLE hServer AS HANDLE NO-UNDO. DEFINE VARIABLE lconectou AS LOGICAL NO-UNDO. ASSIGN vconnectstring = "-H localhost -S 6080 -AppService appteste". CREATE SERVER hServer. /***********************/ ASSIGN lconectou = hServer:CONNECT(vConnectString, ?, ?, ?) . /***********************/ MESSAGE "conectou: " lconectou VIEW-AS ALERT-BOX. mas ao fazer isso, ocorre o seguinte erro: --------------------------- Erro --------------------------- Connection failure for host localhost port 6080 transport UDP. (9407) --------------------------- OK --------------------------- E não conecta, alguem pode me ajudar?
Re: Editor progress conectar ao Appserver. samuelfac, No parâmetro -S você deve informar a porta do NameServer, que normalmente é 5162. Confirma essa porta e verifica se o NameServer está ativo.
Re: Editor progress conectar ao Appserver. Vaaaleuuu!! era isso mesmo. Funcionou com a porta 5162!!! Muito Obrigado kirchner. Código que funcionou a conexão: Código: DEFINE VARIABLE vconnectstring AS CHARACTER NO-UNDO. DEFINE VARIABLE hServer AS HANDLE NO-UNDO. DEFINE VARIABLE conectou AS LOGICAL NO-UNDO. ASSIGN vconnectstring = "-H 127.0.0.1 -S 5162 -AppService appteste". CREATE SERVER hServer. ASSIGN conectou = hServer:CONNECT(vConnectString, ?, ?, ?) . MESSAGE "conectou: " conectou VIEW-AS ALERT-BOX.