&ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12 &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Procedure /*------------------------------------------------------------------------ File : Purpose : Syntax : Description : Author(s) : Created : Notes : ----------------------------------------------------------------------*/ /* This .W file was created with the Progress AppBuilder. */ /*----------------------------------------------------------------------*/ /* *************************** Definitions ************************** */ USING System.*. USING OpenEdge.Net.URI. { incl/properties.i } DEFINE INPUT PARAMETER ipIntern AS INT NO-UNDO. DEFINE INPUT PARAMETER ipPassword AS CHAR NO-UNDO. DEFINE INPUT PARAMETER ipTelNummer AS CHAR NO-UNDO. DEFINE OUTPUT PARAMETER opMeldung AS CHAR NO-UNDO. /* DEFINE VARIABLE ipIntern AS INT NO-UNDO INIT 12. */ /* DEFINE VARIABLE ipPassword AS CHAR NO-UNDO INIT '12x8=T?m'. */ /* DEFINE VARIABLE ipTelNummer AS CHAR NO-UNDO INIT '0+41792610510'. */ DEFINE VARIABLE oURI AS URI NO-UNDO. DEFINE VARIABLE HttpClient AS CLASS System.Net.WebClient. DEFINE VARIABLE webResponse AS LONGCHAR NO-UNDO. DEFINE VARIABLE ii AS INTEGER NO-UNDO. DEFINE VARIABLE lok AS LOG NO-UNDO. DEFINE VARIABLE iZeile AS INTEGER NO-UNDO. DEFINE VARIABLE cipNummer AS CHARACTER NO-UNDO. DEFINE VARIABLE cDateiName AS CHARACTER NO-UNDO. DEFINE VARIABLE cSession AS CHARACTER NO-UNDO. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO. DEFINE VARIABLE cNumber AS CHARACTER NO-UNDO. FIX-CODEPAGE (webResponse) = "UTF-8". DEF VAR cString AS CHAR NO-UNDO. DEF VAR cName AS CHAR NO-UNDO. DEF TEMP-TABLE tElemente FIELD iZeile AS INT FIELD cName AS CHAR FIELD cValue AS CHAR FIELD cAttribute AS CHAR INDEX tElemente-k1 IS PRIMARY iZeile. . /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK /* ******************** Preprocessor Definitions ******************** */ &Scoped-define PROCEDURE-TYPE Procedure &Scoped-define DB-AWARE no /* _UIB-PREPROCESSOR-BLOCK-END */ &ANALYZE-RESUME /* ************************ Function Prototypes ********************** */ &IF DEFINED(EXCLUDE-createElemente) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createElemente Procedure FUNCTION createElemente RETURNS LOGICAL ( iphXmlNode AS HANDLE ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-getAttributeValue) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getAttributeValue Procedure FUNCTION getAttributeValue RETURNS CHARACTER ( ipcListe AS CHAR, ipcAttrib AS CHAR ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF /* *********************** Procedure Settings ************************ */ &ANALYZE-SUSPEND _PROCEDURE-SETTINGS /* Settings for THIS-PROCEDURE Type: Procedure Allow: Frames: 0 Add Fields to: Neither Other Settings: CODE-ONLY COMPILE */ &ANALYZE-RESUME _END-PROCEDURE-SETTINGS /* ************************* Create Window ************************** */ &ANALYZE-SUSPEND _CREATE-WINDOW /* DESIGN Window definition (used by the UIB) CREATE WINDOW Procedure ASSIGN HEIGHT = 15 WIDTH = 60. /* END WINDOW DEFINITION */ */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure /* *************************** Main Block *************************** */ DEF VAR cErlaubt AS CHAR NO-UNDO INIT '+0123456789'. DEF VAR cZeichen AS CHAR NO-UNDO. DEF VAR cTemp AS CHAR NO-UNDO. cTemp = REPLACE(REPLACE(STRING(TODAY,'99.99.9999') + STRING(TIME,'HH:MM:SS'), '.', ''), ':', ''). cDateiName = SUBSTITUTE('&1&2&3Entity.xml', SESSION:TEMP-DIRECTORY, ipIntern, cTemp). iZeile = 0. opMeldung = ''. cipNummer = '0'. DO ii = 1 TO LENGTH(ipTelNummer): cZeichen = SUBSTRING(ipTelNummer, ii, 01). IF INDEX(cErlaubt, cZeichen) = 0 THEN NEXT. cipNummer = cipNummer + cZeichen. END. ipTelNummer = cipNummer. RUN LOGON (OUTPUT cSession , OUTPUT opMeldung) NO-ERROR. IF opMeldung <> '' THEN RETURN. RUN GETDEVICESTATE ( OUTPUT opMeldung ). IF opMeldung <> '' THEN DO: /* RUN CLEAR_CONNECTION. */ RETURN. END. RUN CALL_NUMBER (OUTPUT cNumber, OUTPUT opMeldung) NO-ERROR. IF cNumber = '' THEN RETURN. IF opMeldung <> '' THEN RETURN. /* PAUSE 1 NO-MESSAGE. */ /* RUN GETDEVICESTATE ( OUTPUT opMeldung ). */ /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* ********************** Internal Procedures *********************** */ &IF DEFINED(EXCLUDE-CALL_NUMBER) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE CALL_NUMBER Procedure PROCEDURE CALL_NUMBER : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF OUTPUT PARAMETER opNumber AS CHAR NO-UNDO. DEF OUTPUT PARAMETER opMessage AS CHAR NO-UNDO. DEFINE VARIABLE hXmlDoc AS HANDLE NO-UNDO. DEFINE VARIABLE hXmlNode AS HANDLE NO-UNDO. oURI = OpenEdge.Net.URI:Parse(cTelefonIP). oURI:Port = iTelefonPort. oURI:Path = cTelefonPfad. oURI:AddQuery("cmd" , "MakeCall"). oURI:AddQuery("callingDevice" , STRING(ipIntern) ). oURI:AddQuery("calledDirectoryNumber", ipTelNummer ). oURI:AddQuery("gsSession" , cSession). System.Net.ServicePointManager:CertificatePolicy = NEW AllowCertificatePolicy(). HttpClient = NEW System.Net.WebClient(). cString = oURI:ToString(). webResponse = HttpClient:DownloadString(oURI:ToString()). CREATE X-DOCUMENT hXmlDoc . CREATE X-NODEREF hXmlNode. hXmlDoc:LOAD("LONGCHAR",webResponse,FALSE). hXmlDoc:SAVE('file', cDateiName). EMPTY TEMP-TABLE tElemente. iZeile = 0. hXmlDoc:GET-DOCUMENT-ELEMENT(hXmlNode). IF hXmlNode:SUBTYPE = "element" THEN DO: DYNAMIC-FUNCTION('createElemente':U, hXmlNode ) NO-ERROR. END. RUN GetChildren ( hXmlNode ). FOR EACH tElemente: CASE tElemente.cName: WHEN 'CallID' THEN opNumber = tElemente.cValue. WHEN 'ERROR' THEN opMessage = tElemente.cValue. END CASE. END. /* OUTPUT TO 'C:\Temp\CallNumber.csv'. */ /* FOR EACH tElemente: */ /* EXPORT DELIMITER ';' tElemente. */ /* END. */ /* OUTPUT CLOSE. */ FINALLY: IF VALID-HANDLE (hXmlDoc) THEN DELETE OBJECT hXmlDoc. IF VALID-HANDLE (hXmlNode) THEN DELETE OBJECT hXmlNode . IF VALID-OBJECT (HttpClient) THEN DO: HttpClient:Dispose(). DELETE OBJECT HttpClient. END. END FINALLY. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-CLEAR_CONNECTION) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE CLEAR_CONNECTION Procedure PROCEDURE CLEAR_CONNECTION : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE hXmlDoc AS HANDLE NO-UNDO. DEFINE VARIABLE hXmlNode AS HANDLE NO-UNDO. oURI = OpenEdge.Net.URI:Parse(cTelefonIP). oURI:Port = iTelefonPort. oURI:Path = cTelefonPfad. oURI:AddQuery("cmd" , "ClearConnection"). oURI:AddQuery("deviceId" , cNumber ). oURI:AddQuery("gsSession", cSession). System.Net.ServicePointManager:CertificatePolicy = NEW AllowCertificatePolicy(). HttpClient = NEW System.Net.WebClient(). cString = oURI:ToString(). webResponse = HttpClient:DownloadString(oURI:ToString()). CREATE X-DOCUMENT hXmlDoc . CREATE X-NODEREF hXmlNode. hXmlDoc:LOAD("LONGCHAR",webResponse,FALSE). hXmlDoc:SAVE('file', cDateiName). EMPTY TEMP-TABLE tElemente. iZeile = 0. hXmlDoc:GET-DOCUMENT-ELEMENT(hXmlNode). IF hXmlNode:SUBTYPE = "element" THEN DO: DYNAMIC-FUNCTION('createElemente':U, hXmlNode ) NO-ERROR. END. RUN GetChildren ( hXmlNode ). /* OUTPUT TO 'C:\Temp\ClearConnection.csv'. */ /* FOR EACH tElemente: */ /* EXPORT DELIMITER ';' tElemente. */ /* END. */ /* OUTPUT CLOSE. */ FINALLY: IF VALID-HANDLE (hXmlDoc) THEN DELETE OBJECT hXmlDoc. IF VALID-HANDLE (hXmlNode) THEN DELETE OBJECT hXmlNode . IF VALID-OBJECT (HttpClient) THEN DO: HttpClient:Dispose(). DELETE OBJECT HttpClient. END. END FINALLY. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-GetChildren) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE GetChildren Procedure PROCEDURE GetChildren : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER hParent AS HANDLE NO-UNDO. DEFINE VARIABLE ii AS INTEGER NO-UNDO. DEFINE VARIABLE hXmlNode AS HANDLE NO-UNDO. CREATE X-NODEREF hXmlNode. REPEAT ii = 1 TO hParent:NUM-CHILDREN: lok = hParent:GET-CHILD(hXmlNode,ii) NO-ERROR. IF NOT lok THEN LEAVE. IF hXmlNode:SUBTYPE <> "element" THEN NEXT. DYNAMIC-FUNCTION('createElemente':U, hXmlNode ) NO-ERROR. RUN GetChildren ( hXmlNode ). END. DELETE OBJECT hXmlNode. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-GETDEVICESTATE) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE GETDEVICESTATE Procedure PROCEDURE GETDEVICESTATE : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE OUTPUT PARAMETER opMessage AS CHARACTER NO-UNDO. DEFINE VARIABLE hXmlDoc AS HANDLE NO-UNDO. DEFINE VARIABLE hXmlNode AS HANDLE NO-UNDO. DEFINE VARIABLE lFrei AS LOGICAL NO-UNDO. DEFINE VARIABLE cParam AS CHARACTER EXTENT 10 NO-UNDO. oURI = OpenEdge.Net.URI:Parse(cTelefonIP). oURI:Port = iTelefonPort. oURI:Path = cTelefonPfad. oURI:AddQuery("cmd" , "GetDeviceState"). oURI:AddQuery("device" , STRING(ipIntern) ). oURI:AddQuery("gsSession" , cSession). System.Net.ServicePointManager:CertificatePolicy = NEW AllowCertificatePolicy(). HttpClient = NEW System.Net.WebClient(). cString = oURI:ToString(). webResponse = HttpClient:DownloadString(oURI:ToString()). CREATE X-DOCUMENT hXmlDoc . CREATE X-NODEREF hXmlNode. hXmlDoc:LOAD("LONGCHAR",webResponse,FALSE). hXmlDoc:SAVE('file', cDateiName). EMPTY TEMP-TABLE tElemente. iZeile = 0. hXmlDoc:GET-DOCUMENT-ELEMENT(hXmlNode). IF hXmlNode:SUBTYPE = "element" THEN DO: DYNAMIC-FUNCTION('createElemente':U, hXmlNode ) NO-ERROR. END. RUN GetChildren ( hXmlNode ). lFrei = TRUE. cParam = ''. FIND FIRST tElemente NO-LOCK WHERE tElemente.cName = 'Calling' NO-ERROR. DO WHILE TRUE: IF NOT AVAILABLE tElemente THEN LEAVE. lFrei = FALSE. IF tElemente.cValue = STRING(ipIntern) THEN DO: cParam[01] = DYNAMIC-FUNCTION('getAttributeValue':U, tElemente.cAttribute, 'Name') NO-ERROR. FIND FIRST tElemente NO-LOCK WHERE tElemente.cName = 'Called' NO-ERROR. IF AVAILABLE tElemente THEN cParam[02] = tElemente.cValue. LEAVE. END. cParam[02] = tElemente.cValue. FIND FIRST tElemente NO-LOCK WHERE tElemente.cName = 'Called' NO-ERROR. IF AVAILABLE tElemente THEN cParam[01] = DYNAMIC-FUNCTION('getAttributeValue':U, tElemente.cAttribute, 'Name') NO-ERROR. LEAVE. END. IF NOT lFrei THEN opMessage = SUBSTITUTE('Leitung besetzt durch &1 mit Nummer &2', cParam[01], cParam[02]). /* OUTPUT TO 'C:\Temp\GetDeviceStatus.csv'. */ /* FOR EACH tElemente: */ /* EXPORT DELIMITER ';' tElemente. */ /* END. */ /* OUTPUT CLOSE. */ FINALLY: IF VALID-HANDLE (hXmlDoc) THEN DELETE OBJECT hXmlDoc. IF VALID-HANDLE (hXmlNode) THEN DELETE OBJECT hXmlNode . IF VALID-OBJECT (HttpClient) THEN DO: HttpClient:Dispose(). DELETE OBJECT HttpClient. END. END FINALLY. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-LOGON) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE LOGON Procedure PROCEDURE LOGON : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF OUTPUT PARAMETER opSession AS CHAR NO-UNDO. DEF OUTPUT PARAMETER opMessage AS CHAR NO-UNDO. DEFINE VARIABLE hXmlDoc AS HANDLE NO-UNDO. DEFINE VARIABLE hXmlNode AS HANDLE NO-UNDO. oURI = OpenEdge.Net.URI:Parse(cTelefonIP). oURI:Port = iTelefonPort. oURI:Path = cTelefonPfad. oURI:AddQuery("cmd" , "Login"). oURI:AddQuery("gsUser", STRING(ipIntern) ). oURI:AddQuery("gsPass", ipPassword). System.Net.ServicePointManager:CertificatePolicy = NEW AllowCertificatePolicy(). HttpClient = NEW System.Net.WebClient(). cString = oURI:ToString(). webResponse = HttpClient:DownloadString(oURI:ToString()). CREATE X-DOCUMENT hXmlDoc . CREATE X-NODEREF hXmlNode. hXmlDoc:LOAD("LONGCHAR",webResponse,FALSE). hXmlDoc:SAVE('file', cDateiName). EMPTY TEMP-TABLE tElemente. iZeile = 0. hXmlDoc:GET-DOCUMENT-ELEMENT(hXmlNode). IF hXmlNode:SUBTYPE = "element" THEN DO: DYNAMIC-FUNCTION('createElemente':U, hXmlNode ) NO-ERROR. END. RUN GetChildren ( hXmlNode ). FOR EACH tElemente: CASE tElemente.cName: WHEN 'ID' THEN opSession = tElemente.cValue. WHEN 'ERROR' THEN opMessage = tElemente.cValue. WHEN 'REASON' THEN opMessage = tElemente.cValue. END CASE. END. /* OUTPUT TO 'C:\Temp\Logon.csv'. */ /* FOR EACH tElemente: */ /* EXPORT DELIMITER ';' tElemente. */ /* END. */ /* OUTPUT CLOSE. */ FINALLY: IF VALID-HANDLE (hXmlDoc) THEN DELETE OBJECT hXmlDoc. IF VALID-HANDLE (hXmlNode) THEN DELETE OBJECT hXmlNode . IF VALID-OBJECT (HttpClient) THEN DO: HttpClient:Dispose(). DELETE OBJECT HttpClient. END. END FINALLY. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF /* ************************ Function Implementations ***************** */ &IF DEFINED(EXCLUDE-createElemente) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createElemente Procedure FUNCTION createElemente RETURNS LOGICAL ( iphXmlNode AS HANDLE ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE hXmlAttr AS HANDLE NO-UNDO. DEFINE VARIABLE hXmlChild AS HANDLE NO-UNDO. DEFINE VARIABLE cNames AS CHAR NO-UNDO. DEFINE VARIABLE cAttribute AS CHAR NO-UNDO. DEFINE VARIABLE i1 AS INT NO-UNDO. DEFINE VARIABLE cValue AS CHAR NO-UNDO. iZeile = iZeile + 1. CREATE tElemente. ASSIGN tElemente.iZeile = iZeile tElemente.cName = iphXmlNode:NAME tELemente.cValue = iphXmlNode:NODE-VALUE. IF iphXmlNode:NUM-CHILDREN > 0 THEN DO: cValue = ''. CREATE X-NODEREF hXmlAttr. iphXmlNode:GET-CHILD(hXmlAttr, 1). IF hXmlAttr:NUM-CHILDREN = 0 THEN DO: cValue = hXmlAttr:NODE-VALUE. cValue = REPLACE(REPLACE(cValue, CHR(13), ''), CHR(10), ''). ASSIGN tElemente.cValue = cValue. /* MESSAGE 'Null ' iphXmlNode:NAME '/' hXmlAttr:NAME '->' cValue '-' hXmlAttr:SUBTYPE '-' hXmlAttr:ATTRIBUTE-NAMES view-as alert-box. */ END. DELETE OBJECT hXmlAttr. END. cNames = iphXmlNode:ATTRIBUTE-NAMES. IF cNames <> '' THEN DO: DO i1 = 1 TO NUM-ENTRIES(cNames). cValue = ''. cAttribute = ENTRY(i1, cNames, ','). cValue = iphXmlNode:GET-ATTRIBUTE(cAttribute). cValue = REPLACE(REPLACE(cValue, CHR(13), ''), CHR(10), ''). tElemente.cAttribute = tElemente.cAttribute + (IF tElemente.cAttribute = '' THEN '' ELSE CHR(01)) + cAttribute + CHR(02) + cValue. END. END. /* message 'createElemente ' tElemente.cName '-' tElemente.cValue '-' tElemente.cattribute view-as alert-box. */ RETURN TRUE. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-getAttributeValue) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getAttributeValue Procedure FUNCTION getAttributeValue RETURNS CHARACTER ( ipcListe AS CHAR, ipcAttrib AS CHAR ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE cAttribute AS CHARACTER NO-UNDO. DEFINE VARIABLE cName AS CHARACTER NO-UNDO. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO. DEFINE VARIABLE i1 AS INT NO-UNDO. DO i1 = 1 TO NUM-ENTRIES(ipcListe, CHR(01)): cAttribute = ENTRY(i1, ipcListe, CHR(01)). cName = ENTRY(1, cAttribute, CHR(02)). cValue = ENTRY(2, cAttribute, CHR(02)). CASE cName: WHEN ipcAttrib THEN LEAVE. END CASE. END. RETURN cValue. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF