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

发表于:2007-07-02来源:作者:点击数: 标签:
取数据窗口发生变化的一个函数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 datastorelds_source.dataobject = this.dataobjectlds_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-->targetfor 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 ifnext

//target-->sourcell_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 ifnext

int   i,jboolean lb_existfor 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]nextreturn ls_modicontent  

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