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();

posted @ 2013-05-21 14:55  喜来乐  阅读(471)  评论(0编辑  收藏  举报