Progress Dynamics 2.0 Web

Repository Objects and Attributes

Object:

<% {ry/app/ryobjretri.i} {src/adm2/globals.i} DEFINE VARIABLE cAttrHdls AS CHARACTER NO-UNDO. DEFINE VARIABLE cAttributeList AS CHARACTER NO-UNDO. DEFINE VARIABLE cName AS CHARACTER NO-UNDO. DEFINE VARIABLE cProperties AS CHARACTER NO-UNDO. DEFINE VARIABLE cRunAttribute AS CHARACTER NO-UNDO. DEFINE VARIABLE cSessionResultCodes AS CHARACTER NO-UNDO. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO. DEFINE VARIABLE dCurrentLanguageObj AS DECIMAL NO-UNDO. DEFINE VARIABLE dCurrentUserObj AS DECIMAL NO-UNDO. DEFINE VARIABLE e AS INTEGER NO-UNDO. DEFINE VARIABLE ghObjectBuffer AS HANDLE NO-UNDO. DEFINE VARIABLE hAttributeBuffer AS HANDLE NO-UNDO. DEFINE VARIABLE hBufferCacheBuffer AS HANDLE NO-UNDO. DEFINE VARIABLE hColumn AS HANDLE NO-UNDO. DEFINE VARIABLE hCustomManager AS HANDLE NO-UNDO. DEFINE VARIABLE hCustomizationManager AS HANDLE NO-UNDO. DEFINE VARIABLE iAttributeExtent AS INTEGER NO-UNDO. DEFINE VARIABLE iColumn AS INTEGER NO-UNDO. DEFINE VARIABLE lGotIt AS LOGICAL NO-UNDO. DEFINE VARIABLE pcLogObjName AS CHARACTER NO-UNDO INITIAL "afallmencw". DEFINE VARIABLE plShowAttrs AS LOGICAL NO-UNDO INITIAL TRUE. /*******************************************************************************************/ FUNCTION listRecs RETURNS LOGICAL (INPUT phBuf AS HANDLE): DEFINE VARIABLE i AS INTEGER NO-UNDO. DEFINE VARIABLE hQ AS HANDLE NO-UNDO. CREATE QUERY hQ . hQ:ADD-BUFFER(phBuf). hQ:QUERY-PREPARE("FOR EACH " + phBuf:NAME ). hQ:QUERY-OPEN(). hQ:GET-FIRST(). {&OUT} '
Buffer: ' phBuf:NAME ' (' phBuf:TABLE ') Handle: ' string(phBuf) '
' SKIP '' SKIP ''. /* Column headings */ DO i = 1 TO phBuf:NUM-FIELDS: {&OUT} ''. END. {&OUT} '' SKIP. /* Data rows */ DO WHILE phBuf:AVAILABLE AND hQ:IS-OPEN: {&OUT} ''. DO i = 1 TO phBuf:NUM-FIELDS: {&OUT} ''. END. {&OUT} '' SKIP. hQ:GET-NEXT(). END. {&OUT} '
' phBuf:BUFFER-FIELD(i):NAME '
' (IF phBuf:BUFFER-FIELD(i):BUFFER-VALUE = '' OR phBuf:BUFFER-FIELD(i):BUFFER-VALUE = ? THEN ' ' ELSE phBuf:BUFFER-FIELD(i):BUFFER-VALUE) '

' SKIP. RETURN TRUE. END FUNCTION. /* listRecs */ FUNCTION forEach RETURNS LOGICAL (phBuf AS HANDLE, pcWhere AS CHARACTER, pcProcessFunc AS CHARACTER): DEFINE VARIABLE cQuery AS CHARACTER NO-UNDO. DEFINE VARIABLE cName AS CHARACTER NO-UNDO. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO. DEFINE VARIABLE hCol AS HANDLE NO-UNDO. DEFINE VARIABLE hQ AS HANDLE NO-UNDO. DEFINE VARIABLE i AS INTEGER NO-UNDO. CREATE QUERY hQ . hQ:ADD-BUFFER(phBuf). cQuery = "FOR EACH " + phBuf:NAME + ' ' + pcWhere. {&OUT} '
Query:' cQuery + '
'. hQ:QUERY-PREPARE(cQuery). hQ:QUERY-OPEN(). hQ:GET-FIRST(). /* Loop through records and process. */ DO WHILE phBuf:AVAILABLE AND hQ:IS-OPEN: DYNAMIC-FUNCTION(pcProcessFunc, phBuf) NO-ERROR. hQ:GET-NEXT(). END. RETURN TRUE. END FUNCTION. FUNCTION listObjAttrs RETURNS LOGICAL (INPUT phBuf AS HANDLE): DEFINE VARIABLE hAttributeBuffer AS HANDLE NO-UNDO. DEFINE VARIABLE dRecordIdentifier AS DECIMAL NO-UNDO. DEFINE VARIABLE i AS INTEGER NO-UNDO. DEFINE VARIABLE cObjAttrId AS CHARACTER NO-UNDO. ASSIGN hAttributeBuffer = phBuf:BUFFER-FIELD("tClassBufferHandle":U):BUFFER-VALUE. dRecordIdentifier = phBuf:BUFFER-FIELD("tRecordIdentifier":U):BUFFER-VALUE. /* Show ones already done. */ cObjAttrId = STRING(hAttributeBuffer) + ':' + STRING(dRecordIdentifier). IF LOOKUP(cObjAttrId, cAttrHdls) > 0 THEN DO: {&OUT} '
Skipping attributes for object: ' phBuf:BUFFER-FIELD("tLogicalObjectName":U):BUFFER-VALUE ' as attribute table (HANDLE:recidentifier= ' cObjAttrId ') has already been listed.
' SKIP. RETURN FALSE. END. cAttrHdls = cAttrHdls + ',':U + cObjAttrId. hAttributeBuffer:FIND-FIRST(" WHERE ":U + hAttributeBuffer:NAME + ".tRecordIdentifier = ":U + STRING(dRecordIdentifier)) NO-ERROR. {&OUT} 'Object:' phBuf:BUFFER-FIELD("tLogicalObjectName":U):BUFFER-VALUE '
' skip '(Attribute Buffer: ' hAttributeBuffer:NAME ' (' hAttributeBuffer:TABLE ') Handle: ' string(hAttributeBuffer) '
' SKIP '' SKIP ''. /* Data rows */ DO i = 1 TO hAttributeBuffer:NUM-FIELDS: {&OUT} '' ''. END. {&OUT} '
' hAttributeBuffer:BUFFER-FIELD(i):NAME ' ' (IF hAttributeBuffer:BUFFER-FIELD(i):BUFFER-VALUE = '' OR hAttributeBuffer:BUFFER-FIELD(i):BUFFER-VALUE = ? THEN ' ' ELSE hAttributeBuffer:BUFFER-FIELD(i):BUFFER-VALUE) '

' SKIP. RETURN TRUE. END FUNCTION. /*******************************************************************************************/ IF get-value('object') > '' THEN pcLogObjName = get-value('object'). ASSIGN e = ETIME cProperties = DYNAMIC-FUNCTION("getPropertyList":U IN gshSessionManager, "currentUserObj,currentLanguageObj":U, YES) dCurrentUserObj = DECIMAL(ENTRY(1, cProperties, CHR(3))) dCurrentLanguageObj = DECIMAL(ENTRY(2, cProperties, CHR(3))) hCustomManager = DYNAMIC-FUNCTION("getManagerHandle":U, "CustomizationManager":U) cSessionResultCodes = DYNAMIC-FUNCTION("getSessionResultCodes":U IN hCustomManager) cRunAttribute = ''. RUN clearClientCache IN gshRepositoryManager. /* Retrieve outermost container object and it's children */ ASSIGN lGotIt = DYNAMIC-FUNCTION("cacheObjectOnClient":U IN gshRepositoryManager, INPUT pcLogObjName, INPUT cSessionResultCodes, INPUT cRunAttribute, INPUT NO). IF ERROR-STATUS:ERROR OR NOT lGotIt THEN DO: {&out} "~n

Error:" ERROR-STATUS:GET-MESSAGE(1) "

". RETURN. END. ghObjectBuffer = DYNAMIC-FUNCTION("getCacheObjectBuffer":U IN gshRepositoryManager, INPUT ?). {&OUT} 'Time to run fetchObject: ' ETIME - e '
' SKIP. listRecs(DYNAMIC-FUNCTION("getCachePageBuffer":U IN gshRepositoryManager)). listRecs(DYNAMIC-FUNCTION("getCachePageInstanceBuffer":U IN gshRepositoryManager)). listRecs(DYNAMIC-FUNCTION("getCacheLinkBuffer":U IN gshRepositoryManager)). listRecs(DYNAMIC-FUNCTION("getCacheUIEventBuffer":U IN gshRepositoryManager)). listRecs(ghObjectBuffer). {&OUT} '
' skip '

Attribute Listings

' skip. ASSIGN cWhere = " WHERE ":U + "cache_Object.tContainerObjectName = '" + pcLogObjName + "'":U. forEach(ghObjectBuffer,cWhere,'listObjAttrs'). %>