取数据窗口发生变化的一个函数
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