본문 바로가기
PowerBuilder

[파워빌더] 변경내용 로그 저장

by 엔터티 2021. 6. 4.
반응형

GetNextModified 와 GetItemStatus 를 사용하여 변경된 정보를 찾을 수 있다.

Long lRcnt, lRow, lCcnt, lCol
String ls_colname, ls_tag, ls_data, ls_value
String ls_colname_n, ls_tag_n, ls_data_n, ls_value_n
String change_log, now_date, ls_update_log

now_date = String(Now(), "yyyy-mm-dd:hh:mm:ss")


dw_sheet.AcceptText()
lRcnt = dw_sheet.RowCount()
lCcnt = Long(dw_sheet.Describe("DataWindow.Column.Count"))

DO WHILE lRow <= lRcnt
    lRow = dw_sheet.GetNextModified(lRow, Primary!)
    IF lRow = 0 THEN Exit

    CHOOSE CASE dw_sheet.GetITemStatus(lRow, 0, Primary!)
    CASE NewModified!
        //이경우 Row 전체 신규임 모든 칼럼 변경? 신규. (Insert SQL)
          return
    CASE New!
        //추가만되고 아무것도 입력안된상태.. 무시 또는 튕겨내야..
          return
    CASE DataModified!
        //이경우 일부칼럼 수정 (Update SQL)
        FOR lCol = 1 TO lCcnt
            IF dw_sheet.GetItemStatus(lRow, lCol, Primary!) = DataModified! THEN
                //해당 칼럼만 변경된 것임.
                     ls_colname = dw_sheet.Describe("#"+String(lCol)+".Name")        // 컬럼명
                     ls_tag = dw_sheet.Describe("#"+String(lCol)+".tag")                    // 컬럼태그
                     ls_value = dw_sheet.Describe( "Evaluate(&apos;LookUpDisplay("+ls_colname+") &apos;, " + String(lRow) + ")") //컬럼 display
                     ls_data =dw_sheet.Object.Data[lRow, lCol]        //컬럼 DATA

                     ls_colname_n = dw_old.Describe("#"+String(lCol)+".Name")        // 컬럼명
                     ls_tag_n = dw_old.Describe("#"+String(lCol)+".tag")                    // 컬럼태그
                     ls_value_n = dw_old.Describe( "Evaluate(&apos;LookUpDisplay("+ls_colname_n+") &apos;, " + String(lRow) + ")") //컬럼 display
                     ls_data_n =dw_old.Object.Data[lRow, lCol]        //컬럼 DATA                     

                    if ls_tag <> "?" then
                        change_log = now_date+" "+gs_username+"("+gs_userid+")"+"["+ ls_tag +"변경]  : "+ls_value_n+" → "+ls_value

                        ls_update_log = dw_sheet.Object.wl_list_update_log[1]

                         if IsNull(ls_update_log) or ls_update_log="" then
                             ls_update_log = change_log
                        else
                             ls_update_log = ls_update_log+"|"+change_log
                        end if

                         dw_sheet.Object.wl_list_update_log[1] = ls_update_log

                         MessageBox("ls_update_log",ls_update_log)
                    end if
                     //return
            END IF
        NEXT
END CHOOSE
LOOP
반응형

댓글