取数据窗口发生变化情况的一个函数

发表于:2007-06-07来源:作者:点击数: 标签:
取数据窗口发生变化的一个函数 by ...---... ( QQ: 21417511 ) 当我们在数据窗口发生数据变化时,有时需要将变化的情况(变化的列,变化前后的值)记录下来,为此,写了一个函数,不敢独享,贴上来望各位大侠指证! / *------------------------------------

取数据窗口发生变化的一个函数
by ...---... ( QQ: 21417511 )

当我们在数据窗口发生数据变化时,有时需要将变化的情况(变化的列,变化前后的值)记录下来,为此,写了一个函数,不敢独享,贴上来望各位大侠指证!

/*------------------------------------------------------------------------------

 Function:   public u_dw.of_Getmodi

 Returns:         String

 Parameters:      reference String as_modicol[]

 Description:  

--------------------------------------------------------------------------------
 2005-04-20 2.0.0  Initial version by cuixuf (Mail:cuixuf@sina.com)
------------------------------------------------------------------------------*/

string ls_modi[], &
   ls_col[], &
   ls_coltext[], &
   ls_modicol[], &
   ls_key[], &
   ls_type[], &
   ls_keycontent[], &
   ls_filter, &
   ls_find, &
   ls_modicontent   
any  la_data_s[], &
   la_data_t[]
long  ll_colcnt, &
   ll_index, &
   ll_find, &
   ll_row_s, &
   ll_rowcnt_s, &
   ll_row_t, &
   ll_rowcnt_t
datastore lds_source

this.aclearcase/" target="_blank" >ccepttext( )

lds_source = create datastore
lds_source.dataobject = this.dataobject
lds_source.settransobject(sqlca)
ls_filter = this.Describe("DataWindow.Table.Filter")
lds_source.setfilter( ls_filter )
lds_source.filter()
ll_rowcnt_s = lds_source.retrieve( )

ll_colcnt = long(this.Describe("DataWindow.Column.Count"))
for ll_index = 1 to ll_colcnt
 ls_col[ll_index] = this.Describe("#"+string(ll_index)+".Name")
 ls_key[ll_index] = this.Describe("#"+string(ll_index) + ".Key")
 ls_type[ll_index] = this.Describe( "#" + String(ll_Index) + ".ColType")
 ls_coltext[ll_index] = of_Strip(this.Describe( ls_col[ll_index] + "_t.Text"))
next
//source-->target
for ll_row_s = 1 to ll_rowcnt_s
 //get col name(key name) and value
 ls_keycontent[ll_row_s] = ''
 ls_modi[ll_row_s] = ''
 ls_find = ''
 for ll_index = 1 to ll_colcnt
  la_data_s[ll_index] = of_getitem( lds_source, ll_row_s, ll_index, ls_type[ll_index])
  If ls_key[ll_index] = "yes" then
   If gnv_fun.uf_isnull(ls_find) then
    ls_find = "(" + ls_col[ll_index] + "=" + of_getstring(la_data_s[ll_index], ls_type[ll_index]) + ")"
   else
    ls_find = ls_find + " and (" + ls_col[ll_index] + "=" + of_getstring(la_data_s[ll_index], ls_type[ll_index]) + ")"
   end if
   if gnv_fun.uf_isnull(ls_keycontent[ll_row_s]) then
    ls_keycontent[ll_row_s] = ls_coltext[ll_index]+":"+of_getstring(la_data_s[ll_index], ls_type[ll_index])
   else
    ls_keycontent[ll_row_s] = ls_keycontent[ll_row_s]+","+ls_coltext[ll_index]+":"+of_getstring(la_data_s[ll_index], ls_type[ll_index])
   end if
  end if
 next
 
 ll_find = this.find( ls_find , 1, this.rowcount())
 //find > 0 -->edit
 If ll_find > 0 and ll_find <= this.rowcount( ) then
  for ll_index = 1 to ll_colcnt
   la_data_t[ll_index] = this.of_getitem( ll_find, ll_index, ls_type[ll_index])
   If (la_data_s[ll_index] <> la_data_t[ll_index]) or &
    (isNull(la_data_s[ll_index]) and Not isNull(la_data_t[ll_index])) or &
    (Not isNull(la_data_s[ll_index]) and isNull(la_data_t[ll_index])) then
    If gnv_fun.uf_isNull(ls_modi[ll_row_s]) then
     ls_modi[ll_row_s] = ls_coltext[ll_index]+":"+of_getstring(la_data_s[ll_index], ls_type[ll_index])+" -> " + of_getstring(la_data_t[ll_index], ls_type[ll_index])
    else
     ls_modi[ll_row_s] = ls_modi[ll_row_s] + ","+ls_coltext[ll_index]+":"+of_getstring(la_data_s[ll_index], ls_type[ll_index])+" -> " + of_getstring(la_data_t[ll_index], ls_type[ll_index])
    end if
    ls_modicol[Upperbound(ls_modicol) + 1] = ls_coltext[ll_index]
   end if
  next
 //find = 0 -->delete
 else
  for ll_index = 1 to ll_colcnt
   If gnv_fun.uf_isNull(ls_modi[ll_row_s]) then
    ls_modi[ll_row_s] = ls_coltext[ll_index]+":"+of_getstring(la_data_s[ll_index], ls_type[ll_index])+" -> [Null]"
   else
    ls_modi[ll_row_s] = ls_modi[ll_row_s] + ","+ls_coltext[ll_index]+":"+of_getstring(la_data_s[ll_index], ls_type[ll_index])+" -> [Null]"
   end if
   ls_modicol[Upperbound(ls_modicol) + 1] = ls_coltext[ll_index]
  next
 end if
 //modi content
 If not gnv_fun.uf_isnull( ls_modi[ll_row_s]) then
  if gnv_fun.uf_isnull( ls_modicontent ) then
   ls_modicontent = ls_keycontent[ll_row_s] + "~t" + ls_modi[ll_row_s]
  else
   ls_modicontent = ls_modicontent + "~r~n" + ls_keycontent[ll_row_s] + "~t" + ls_modi[ll_row_s]
  end if
 end if
next

//target-->source
ll_rowcnt_t = this.rowcount( )
for ll_row_t = 1 to ll_rowcnt_t
 ls_keycontent[ll_row_t] = ''
 ls_modi[ll_row_t] = ''
 ls_find = ''
 //get col name(key name) and value
 for ll_index = 1 to ll_colcnt
  la_data_t[ll_index] = of_getitem( ll_row_t, ll_index, ls_type[ll_index])
  If ls_key[ll_index] = "yes" then
   If gnv_fun.uf_isnull(ls_find) then
    ls_find = "(" + ls_col[ll_index] + "=" + of_getstring(la_data_t[ll_index], ls_type[ll_index]) + ")"
   else
    ls_find = ls_find + " and (" + ls_col[ll_index] + "=" + of_getstring(la_data_t[ll_index], ls_type[ll_index]) + ")"
   end if
   if gnv_fun.uf_isnull(ls_keycontent[ll_row_t]) then
    ls_keycontent[ll_row_t] = ls_coltext[ll_index]+":"+of_getstring(la_data_t[ll_index], ls_type[ll_index])
   else
    ls_keycontent[ll_row_t] = ls_keycontent[ll_row_t]+","+ls_coltext[ll_index]+":"+of_getstring(la_data_t[ll_index], ls_type[ll_index])
   end if
  end if
 next
 
 ll_find = lds_source.find( ls_find , 1, lds_source.rowcount())
 //find > 0 -->have done
 If ll_find > 0 and ll_find <= this.rowcount( ) then
 //find = 0 -->new
 else
  for ll_index = 1 to ll_colcnt
   if not isnull(la_data_t[ll_index]) then
    If gnv_fun.uf_isNull(ls_modi[ll_row_t]) then
     ls_modi[ll_row_t] = ls_coltext[ll_index]+": [Null] -> " +of_getstring(la_data_t[ll_index], ls_type[ll_index])
    else
     ls_modi[ll_row_t] = ls_modi[ll_row_t] + ","+ls_coltext[ll_index]+": [Null] -> " +of_getstring(la_data_t[ll_index], ls_type[ll_index])
    end if
    ls_modicol[Upperbound(ls_modicol) + 1] = ls_coltext[ll_index]
   end if
  next
 end if
 //modi content
 if not gnv_fun.uf_isnull( ls_modi[ll_row_t] ) then
  if gnv_fun.uf_isnull( ls_modicontent ) then
   ls_modicontent = ls_keycontent[ll_row_t] + "~t" + ls_modi[ll_row_t]
  else
   ls_modicontent = ls_modicontent + "~r~n" + ls_keycontent[ll_row_t] + "~t" + ls_modi[ll_row_t]
  end if
 end if
next

int   i,j
boolean lb_exist
for i = 1 to Upperbound(ls_modicol)
 lb_exist = false
 for j = 1 to UpperBound(as_modicol)
  If ls_modicol[i] = as_modicol[j] then
   lb_exist = true
   exit
  End If
 next
 If not lb_exist then as_modicol[Upperbound(as_modicol)+1] = ls_modicol[i]
next
return ls_modicontent  


原文转自:http://www.ltesting.net