목록으로

Object Table()

Pml Basic 8

1. OBJECT TABLE의 구조

OBJECT TABLE은 기본적으로 두 가지 주요 요소로 구성됩니다:

  • COLLECTION: TABLE에 포함될 데이터를 참조하는 dbref 타입의 Array입니다. 이 Array는 특정 조건에 맞는 데이터베이스 요소들을 수집하여 생성됩니다.
  • COLUMN ARRAY: TABLE에 포함된 각 컬럼을 정의하는 OBJECT COLUMN들의 Array입니다. 각 COLUMN은 해당 컬럼에 대한 데이터를 표현하는 표현식과 추가적인 속성을 포함합니다.

구문:

!table = OBJECT TABLE(!collects, !columns)

2. OBJECT COLUMN의 정의

OBJECT COLUMN은 TABLE의 각 컬럼을 정의하는 객체로, 표현식, 정렬 가능 여부, 그룹화 가능 여부, 컬럼 제목 등의 속성을 포함합니다.

  • EXPRESSION: 이 표현식은 각 컬럼의 데이터를 결정합니다. 예를 들어, 특정 dbref의 이름이나 타입을 추출하는 표현식을 사용할 수 있습니다.
  • BOOLEAN (정렬 가능 여부): 이 컬럼이 정렬 가능한지 여부를 나타냅니다.
  • BOOLEAN (그룹화 가능 여부): 이 컬럼이 그룹화 가능한지 여부를 나타냅니다.
  • STRING (컬럼 제목): 이 컬럼의 제목을 나타내는 문자열입니다.

구문:

!column = OBJECT COLUMN(object expression('expression'), sortBool, groupBool, 'ColumnTitle')

3. OBJECT TABLE 및 OBJECT COLUMN을 사용한 예제

아래는 OBJECT TABLE과 OBJECT COLUMN을 사용하는 예제입니다.

예제 1: 간단한 테이블 생성


!header = object array()
!header[1] = 'SITE'
!header[2] = 'ZONE'
!header[3] = 'NAME'

!collects = !!collectAllFor('PIPE', '', CE)

!columns = object array()
!columns.append(object column(object expression(|NAME OF SITE|), true, true, |SITE|))
!columns.append(object column(object expression(|NAME OF ZONE|), true, true, |ZONE|))
!columns.append(object column(object expression(|NAME|), true, true, |NAME|))

!table = object table(!collects, !columns)

이 예제에서는 'PIPE'라는 타입을 가진 모든 요소를 수집하고, 그 요소들의 SITE, ZONE, NAME을 각 컬럼에 표현하는 테이블을 생성합니다.

4. OBJECT TABLE 메서드

OBJECT TABLE에는 다양한 메서드가 존재하며, 이를 통해 테이블의 데이터에 접근하거나 조작할 수 있습니다.

PrimaryKey()

  • Description: TABLE을 생성할 때 사용한 COLLECTION의 값을 가져옵니다.
  • 사용 예시:
!Key = !table.PrimaryKey()

PrimaryKey(COLLECTION)

  • Description: 현재 TABLE의 PrimaryKey를 다른 COLLECTION으로 변경합니다.
  • 사용 예시:
!changecollects = !!collectAllFor('PIPE', '', /ZONE-PIPING-AREA02-WORKSHOP)
!table.PrimaryKey(!changecollects)

COLUMNS() 및 COLUMN(REAL)

  • Description: TABLE의 전체 COLUMN 값을 가져오거나, 특정 COLUMN의 데이터를 가져옵니다.
  • 사용 예시:
!allColumns = !table.COLUMNS()
!Column1 = !table.COLUMN(1)

ROW(REAL)

  • Description: TABLE의 특정 Row 데이터를 가져옵니다.
  • 사용 예시:
!row1 = !table.Row(1)

CELL(REAL, REAL)

  • Description: TABLE의 특정 Cell 값을 불러옵니다.
  • 사용 예시:
!cell11 = !table.CELL(1, 1)

ADDCOLUMN(COLUMN)

  • Description: TABLE에 새로운 COLUMN을 추가합니다.
  • 사용 예시:
!newcol = object column(object expression(|TYPE|), true, true, |TYPE|)
!table.ADDCOLUMN(!newcol)

5. 추가 예제: TABLE 데이터를 ARRAY로 변환

Example 1: Table 데이터를 엑셀로 추출

!collects = !!collectAllFor('BRAN MEM', '', CE)

!columns = object array()
!columns.append(object column(object expression(|NAME OF SITE|), true, true, |SITE|))
!columns.append(object column(object expression(|NAME OF ZONE|), true, true, |ZONE|))
!columns.append(object column(object expression(|NAME|), true, true, |NAME|))

!table = object table(!collects, !columns)

do !h to !collects.size()
    !cont[$!h] = !table.row($!h)
enddo
!cont.compress()

import 'gridcontrol'
handle any
endhandle

!netgridcontrol = object netgridcontrol()
!data = object netDatasource()
!data.netDataSource('Test', !header, !cont)
!netgridcontrol.bindtoDatasource(!data)
!netgridcontrol.savegridtoexcel(!SavePath)

Example 2: TABLE을 ARRAY로 변환 후 엑셀 저장시 String Type이여야만 하므로 object Block을 이용한 String Type 변환


!SavePath = 'D:\repp.xlsx'
!header = object array()
!header[1] = 'SITE'
!header[2] = 'ZONE'
!header[3] = 'NAME'
!header[4] = 'REFNO'
!header[5] = 'POS'

!collects = !!collectAllFor('BRAN MEM', '', CE)

!columns = object array()
!columns.append(object column(object expression(|NAME OF SITE|), true, true, |SITE|))
!columns.append(object column(object expression(|NAME OF ZONE|), true, true, |ZONE|))
!columns.append(object column(object expression(|NAME|), true, true, |NAME|))
!columns.append(object column(object expression(|POS|), true, true, |POS|))

!table = object table(!collects, !columns)

!newcol = object column(object expression(|REFNO|), true, true, |REFNO|)
!table.ADDCOLUMN(!newcol)

do !h to !collects.size()
    !block = OBJECT BLOCK('!table.row($!h)[!EvalIndex].string()')
    !cont[$!h] = !table.row($!h).EVALUATE(!block)
enddo
!cont.compress()

import 'gridcontrol'
handle any
endhandle

!netgridcontrol = object netgridcontrol()
!data = object netDatasource()
!data.netDataSource('Test', !header, !cont)
!netgridcontrol.bindtoDatasource(!data)
!netgridcontrol.savegridtoexcel(!SavePath)