我有一个包含父记录和几个子记录的页面。有一个字段(级别1)是一个复选框,它是一个“最终草稿”字段 - 在检查完之后,不能再进行任何更改(即使在校正模式下);必须插入新的行/ effdt。儿童记录都在2级。现在,我所拥有的是:
&RS7 = GetRowset(Scroll.AVZ_JD_DTL_TBL);
&final_draft = &RS7.GetRow(1).getrecord(Record.AVZ_JD_DTL_TBL).getfield (Field.FINAL_VALUE).Value;
If &final_draft = "Y" Then
Page.AVZ_JD_DTL_PG.DisplayOnly = True;
Else
Page.AVZ_JD_DTL_PG.DisplayOnly = False;
End-If;
所以,假设我处于校正模式,我有3行 - 例如2012年1月1日,2012年5月1日和6/1/2012,并选中了复选框5/1的行/ 2012,因为我在生效日期“分页”/“滚动”,我希望2012年1月1日的行可编辑,日期为5/1/2012的行只读,然后是6行/ 1/2012可编辑。
我想也许我需要单独“禁用”每个行集,而不是整个页面。我只是围绕行集/卷轴,在程序的早期我正在做一些操作:
& RS1 = GetLevel0()。GetRow(1)。GetRowset(Scroll.AVZ_JD_DTL_TBL).GetRow(1).GetRowset(Scroll.AVZ_JD_RESP_TBL); & RS2 = GetLevel0()。GetRow(1)。GetRowset(Scroll.AVZ_JD_DTL_TBL).GetRow(1)。GetRowset(Scroll.AVZ_JD_EXPR_TBL);
& RS1.Sort(AVZ_JD_RESP_TBL.ORDER_SEQ,“A”); & RS2.Sort(AVZ_JD_EXPR_TBL.ORDER_SEQ,“A”);
问题是,如何知道我当前正在查看哪一行,然后获取该行的FINAL_VALUE字段,然后灰显/禁用该页面上的所有内容? (当然,如果你超过那个没有勾选复选框的那个,那么一切都需要再次编辑)。
由于
答案 0 :(得分:0)
你可以遍历1级scolls寻找复选框,然后如果找到循环通过2级滚动,然后将该行的 Active 属性设置为false。
我没有可用于测试此代码的PeopleSoft系统,但它会是这样的:
&LEVEL0 = your level 0 record
&LEVEL1 = &LEVEL0.GetRowset(Scroll.AVZ_JD_DTL_TBL); /* handle to level 1 */
For &I = 1 To &LEVEL1.ActiveRowCount
if &LEVEL1(&I).final_draft = "Y" then /* check box is on */
&LEVEL2 = &LEVEL0(1).&LEVEL1(&I).GetRowset(Scroll.AVZ_JD_EXPR_TBL);
For &J = 1 to &LEVEL2.ActiveRowCount
&LEVEL0(1).&LEVEL1(&I).&LEVEL2(&J).AVZ_JD_EXPR_TBL.Active = "False";
End-For;
End-If;
End-For;
假设您的等级1记录 AVZ_JD_DTL_TBL 且您的等级2为 AVZ_JD_EXPR_TBL 。请仔细检查PeopleBooks的确切语法,但我认为这是正确的。