PS中OriginalValue的使用(转)
Originalvalue的使用注意:
Peoplecode是这么解释Originalvalue的使用方法的:
Originalvalue返回一个Field的值,这个值是从数据库中取得的,不管用户是否改变了这个值,它始终都是来至数据库。(需要注意的是:由于它是来至数据库的,所以对于那些Derived/work record来说是不会起作用的,应为这些record根本就不是存储数据的,根本从数据库中取不到数据)
案例分析:
今天遇到一种情况,在一个非Derived/work record的field的fieldchanged事件中确取不到Originalvalue的值。
WinMessage(GHAC_FOR_PRINT.EMPLID.OriginalValue);
但是WinMessage(GHAC_FOR_PRINT.EMPLID.Value);却是可以的。
后来使用&rs =GetLevel0()(1).GetRowset(Scroll.GHAC_FOR_PRINT);来获取到一行的数据再使用winmessage弹出其Originalvalue结果还是空值。百思不得其解,难道是fieldchanged中不能使用Originalvalue?但是好像没有这个限制。然后就看一些用到Originalvalue的代码,发现没有这个限制。然后就又尝试如下代码:
&rs =CreateRowset(Record.GHAC_FOR_PRINT);
&i = &rs.Fill("where EMPLID=:1", &emplid);
&rs.GetRow(1).GHAC_FOR_PRINT.EMPLID.Value = "234455";
WinMessage(&rs.GetRow(1).GHAC_FOR_PRINT.EMPLID.OriginalValue |"%%%%%%" | &rs.GetRow(1).GHAC_FOR_PRINT.EMPLID.Value);
我自己从数据库中筛选出来一些值,然后试试Originalvalue有没有值,结果一试有值。
这证明使用Originalvalue它的record是有一定限制的,必须是从数据库直接取到的。我就去查自己的代码,发现原来使用&rs =GetLevel0()(1).GetRowset(Scroll.GHAC_FOR_PRINT)的集合数据都是后来才插进这个rowset的,并不是直接从数据库中取到的,这更加印证了这一点。
&getInfo =GetSQL(SQL.GHAC_GETINFO_APPLY, &emplId, &startDT, &endDT,&status, &resOprid);
&rs.Flush();
&isFirstFetch = True;
While&getInfo.Fetch(&emplIdInfo, &dateApplied, &dateRange,&incomeType, &formatReq, &nationalId, &income,&income_prom, &printStatus, &applyOpr, &applyDate,&PrintOpr, &printDate)
If &isFirstFetch = True Then
&isFirstFetch = False;
&i = 1;
Else
&rs.InsertRow(&i);
&i = &i + 1;
End-If;
&rs(&i).GHAC_FOR_PRINT.EMPLID.Value= &emplIdInfo;
&rs(&i).GHAC_FOR_PRINT.DATE_APPLIED.Value = &dateApplied;
&rs(&i).GHAC_FOR_PRINT.GHAC_DATE_RANGE.Value = &dateRange;
&rs(&i).GHAC_FOR_PRINT.GHAC_INCOME_TYPE.Value = &incomeType;
&rs(&i).GHAC_FOR_PRINT.GHAC_FORMAT_REQ.Value= &formatReq;
&rs(&i).GHAC_FOR_PRINT.NATIONAL_ID.Value = &nationalId;
&rs(&i).GHAC_FOR_PRINT.GHAC_INCOME.Value = &income;
&rs(&i).GHAC_FOR_PRINT.GHAC_INCOME_PROMPT.Value =&income_prom;
&rs(&i).GHAC_FOR_PRINT.GHAC_PRINT_STATUS.Value= &printStatus;
&rs(&i).GHAC_FOR_PRINT.LAST_UPDT_OPRID.Value = &applyOpr;
&rs(&i).GHAC_FOR_PRINT.GHAC_APPLY_DT.Value = &applyDate;
&rs(&i).GHAC_FOR_PRINT.OPRID2.Value= &PrintOpr;
&rs(&i).GHAC_FOR_PRINT.DATETIME_PRINTED.Value= &printDate;
End-While;
&getInfo.Close();