Nested DataWindow (reports DW) 컨트롤 하기...
주말에 밤새는게 제일싫어 ㅠㅠ
그래도 난제를 하나 풀어서 다행이네요
Nested reports 에 DataWindowChild 선언하기...
해결하고 나니 별거 없어 뿌듯하면서도 허무한 ㅡ,,ㅡ
DW에 Nested DataWindow 찾아와서 자동으로 조회해 주는 스크립트 입니다.
composit dw 에서는 어떻게 작동하려나 ^^ 그건 테스트 안해봤습니다.
Long m, n, p
if jTier then
Dec dTemp
DateTime dtmTemp
Date dtTemp
Time tTemp
Long i, j, c, iTemp, iCnt, iRcnt, iColCnt, iIRow
String sTemp, sDwType, sNested, sObjects, sType, sDataObject, sNest_Arguments, sColtype
String sTemps[], sArrObjects[], sCompDws[], sRetrieve_Cols[], sRetrieve_Args[]
// 0-(Default)Form or Group or Tabular, 1-Grid, 2-Label,3-Graph,4-Crosstab, 5-Composite, 7-RichText
sDwType = this.Describe("DataWindow.Processing")
sNested = Upper(this.Describe("DataWindow.Nested")) /* Return = 'yes' */
if sNested = 'YES' then
sObjects = this.Describe("DataWindow.Objects")
m = f.str2arr( sObjects, '~t', sArrObjects[])
for n = 1 to m
sType = this.Describe( sArrObjects[n] + ".Type")
if sType = 'report' then
p++
sCompDws[p] = sArrObjects[n]
end if
next
end if
sTemp = this.Modify("Datawindow.processing=5")
sTemp = this.Describe("DataWindow.Processing")
ads_jTier ds_Nested
n_tr_a ltr
DataWindowChild dwc
ds_Nested = Create ads_jTier
for n = 1 to p
iTemp = this.GetChild ( sCompDws[n], dwc )
sDataObject = this.Describe(sCompDws[n] + ".DataObject")
ds_Nested.DataObject = sDataObject
ltr = this.gettransobjectj( )
ds_Nested.SetTransObjectj( ltr )
sNest_Arguments = this.Describe(sCompDws[n] + ".Nest_Arguments")
sNest_Arguments = trim(sNest_Arguments)
if len(sNest_Arguments) >= 2 then
//((" cow_regno "),(" cow_coi "))
sNest_Arguments = mid(sNest_Arguments, 2, len(sNest_Arguments) - 2)
//(" cow_regno "),(" cow_coi ")
sNest_Arguments = f.Replace( sNest_Arguments, '("','')
sNest_Arguments = f.Replace( sNest_Arguments, '")','')
// cow_regno , cow_coi
sRetrieve_Cols[] = sTemps[]
sRetrieve_Args[] = sTemps[]
iCnt = f.Str2Arr( sNest_Arguments, ',', sRetrieve_Cols[], true, '')
if iCnt >= 1 then
for i = 1 to iCnt
sColtype = this.Describe( sRetrieve_Cols[i] + ".Coltype")
iTemp = Pos(sColType, '(')
if iTemp = 0 then
iTemp = Len(sColType) + 1
end if
iTemp = iTemp - 1
sColType = left(sColType, iTemp)
Choose case SColType
case 'char', 'string'
sRetrieve_Args[i] = this.getitemString( 1, sRetrieve_Cols[i] )
case 'number', 'int', 'long', 'ulong'
sRetrieve_Args[i] = String(this.getitemNumber( 1, sRetrieve_Cols[i] ))
case 'decimal', 'real', 'unsignedinteger', 'unsignedlong', 'double'
sRetrieve_Args[i] = String(this.getitemDecimal( 1, sRetrieve_Cols[i] ))
case 'datetime'
sRetrieve_Args[i] = String(this.getitemDateTime( 1, sRetrieve_Cols[i] ))
case 'date'
sRetrieve_Args[i] = String(this.getitemDate( 1, sRetrieve_Cols[i] ))
case 'time'
sRetrieve_Args[i] = String(this.getitemTime( 1, sRetrieve_Cols[i] ))
end choose
next
end if // if iCnt >= 1 then
end if // if len(sNest_Arguments) >= 2 then
iRcnt = sqldb.Retrieve_jtier( ds_Nested, sRetrieve_Args[])
if iRcnt >= 1 then
for j = 1 to iRcnt
iColCnt = Long(ds_Nested.Describe("DataWindow.Column.Count"))
iIRow = dwc.InsertRow(0)
for c = 1 to iColCnt
sColtype = ds_Nested.Describe( "#" + String(c) + ".Coltype")
iTemp = Pos(sColType, '(')
if iTemp = 0 then
iTemp = Len(sColType) + 1
end if
iTemp = iTemp - 1
sColType = left(sColType, iTemp)
Choose case SColType
case 'char', 'string'
sTemp = ds_Nested.getitemString( j, c )
iTemp = dwc.setitem( j, c, sTemp )
case 'number', 'int', 'long', 'ulong'
iTemp = ds_Nested.getitemNumber( j, c )
iTemp = dwc.setitem( j, c, iTemp )
case 'decimal', 'real', 'unsignedinteger', 'unsignedlong', 'double'
dTemp = ds_Nested.getitemDecimal( j, c )
iTemp = dwc.setitem( j, c, dTemp )
case 'datetime'
dtmTemp = ds_Nested.getitemDateTime( j, c )
iTemp = dwc.setitem( j, c, dtmTemp )
case 'date'
dtTemp = ds_Nested.getitemDate( j, c )
iTemp = dwc.setitem( j, c, dtTemp )
case 'time'
tTemp = ds_Nested.getitemTime( j, c )
iTemp = dwc.setitem( j, c, tTemp )
end choose
next
next
dwc.ResetUpdate()
end if
next
end if
그래도 난제를 하나 풀어서 다행이네요
Nested reports 에 DataWindowChild 선언하기...
해결하고 나니 별거 없어 뿌듯하면서도 허무한 ㅡ,,ㅡ
DW에 Nested DataWindow 찾아와서 자동으로 조회해 주는 스크립트 입니다.
composit dw 에서는 어떻게 작동하려나 ^^ 그건 테스트 안해봤습니다.
Long m, n, p
if jTier then
Dec dTemp
DateTime dtmTemp
Date dtTemp
Time tTemp
Long i, j, c, iTemp, iCnt, iRcnt, iColCnt, iIRow
String sTemp, sDwType, sNested, sObjects, sType, sDataObject, sNest_Arguments, sColtype
String sTemps[], sArrObjects[], sCompDws[], sRetrieve_Cols[], sRetrieve_Args[]
// 0-(Default)Form or Group or Tabular, 1-Grid, 2-Label,3-Graph,4-Crosstab, 5-Composite, 7-RichText
sDwType = this.Describe("DataWindow.Processing")
sNested = Upper(this.Describe("DataWindow.Nested")) /* Return = 'yes' */
if sNested = 'YES' then
sObjects = this.Describe("DataWindow.Objects")
m = f.str2arr( sObjects, '~t', sArrObjects[])
for n = 1 to m
sType = this.Describe( sArrObjects[n] + ".Type")
if sType = 'report' then
p++
sCompDws[p] = sArrObjects[n]
end if
next
end if
sTemp = this.Modify("Datawindow.processing=5")
sTemp = this.Describe("DataWindow.Processing")
ads_jTier ds_Nested
n_tr_a ltr
DataWindowChild dwc
ds_Nested = Create ads_jTier
for n = 1 to p
iTemp = this.GetChild ( sCompDws[n], dwc )
sDataObject = this.Describe(sCompDws[n] + ".DataObject")
ds_Nested.DataObject = sDataObject
ltr = this.gettransobjectj( )
ds_Nested.SetTransObjectj( ltr )
sNest_Arguments = this.Describe(sCompDws[n] + ".Nest_Arguments")
sNest_Arguments = trim(sNest_Arguments)
if len(sNest_Arguments) >= 2 then
//((" cow_regno "),(" cow_coi "))
sNest_Arguments = mid(sNest_Arguments, 2, len(sNest_Arguments) - 2)
//(" cow_regno "),(" cow_coi ")
sNest_Arguments = f.Replace( sNest_Arguments, '("','')
sNest_Arguments = f.Replace( sNest_Arguments, '")','')
// cow_regno , cow_coi
sRetrieve_Cols[] = sTemps[]
sRetrieve_Args[] = sTemps[]
iCnt = f.Str2Arr( sNest_Arguments, ',', sRetrieve_Cols[], true, '')
if iCnt >= 1 then
for i = 1 to iCnt
sColtype = this.Describe( sRetrieve_Cols[i] + ".Coltype")
iTemp = Pos(sColType, '(')
if iTemp = 0 then
iTemp = Len(sColType) + 1
end if
iTemp = iTemp - 1
sColType = left(sColType, iTemp)
Choose case SColType
case 'char', 'string'
sRetrieve_Args[i] = this.getitemString( 1, sRetrieve_Cols[i] )
case 'number', 'int', 'long', 'ulong'
sRetrieve_Args[i] = String(this.getitemNumber( 1, sRetrieve_Cols[i] ))
case 'decimal', 'real', 'unsignedinteger', 'unsignedlong', 'double'
sRetrieve_Args[i] = String(this.getitemDecimal( 1, sRetrieve_Cols[i] ))
case 'datetime'
sRetrieve_Args[i] = String(this.getitemDateTime( 1, sRetrieve_Cols[i] ))
case 'date'
sRetrieve_Args[i] = String(this.getitemDate( 1, sRetrieve_Cols[i] ))
case 'time'
sRetrieve_Args[i] = String(this.getitemTime( 1, sRetrieve_Cols[i] ))
end choose
next
end if // if iCnt >= 1 then
end if // if len(sNest_Arguments) >= 2 then
iRcnt = sqldb.Retrieve_jtier( ds_Nested, sRetrieve_Args[])
if iRcnt >= 1 then
for j = 1 to iRcnt
iColCnt = Long(ds_Nested.Describe("DataWindow.Column.Count"))
iIRow = dwc.InsertRow(0)
for c = 1 to iColCnt
sColtype = ds_Nested.Describe( "#" + String(c) + ".Coltype")
iTemp = Pos(sColType, '(')
if iTemp = 0 then
iTemp = Len(sColType) + 1
end if
iTemp = iTemp - 1
sColType = left(sColType, iTemp)
Choose case SColType
case 'char', 'string'
sTemp = ds_Nested.getitemString( j, c )
iTemp = dwc.setitem( j, c, sTemp )
case 'number', 'int', 'long', 'ulong'
iTemp = ds_Nested.getitemNumber( j, c )
iTemp = dwc.setitem( j, c, iTemp )
case 'decimal', 'real', 'unsignedinteger', 'unsignedlong', 'double'
dTemp = ds_Nested.getitemDecimal( j, c )
iTemp = dwc.setitem( j, c, dTemp )
case 'datetime'
dtmTemp = ds_Nested.getitemDateTime( j, c )
iTemp = dwc.setitem( j, c, dtmTemp )
case 'date'
dtTemp = ds_Nested.getitemDate( j, c )
iTemp = dwc.setitem( j, c, dtTemp )
case 'time'
tTemp = ds_Nested.getitemTime( j, c )
iTemp = dwc.setitem( j, c, tTemp )
end choose
next
next
dwc.ResetUpdate()
end if
next
end if