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)