我有 2 个以编程方式填充的视图对象,即该对象在查询语句区域中没有 SQL 查询。有 HeaderVO 和 LinesVO。我的任务是在高级表中显示高级表。而这个基于 HeaderVO 和 LinesVO 的高级表格。如果我使用 View Link 而不是 HeaderVO 表显示数据,但 LinesVO 表仅显示“未进行搜索”。这是合乎逻辑的,我明白为什么会这样。
但是我怎样才能连接这 2 个表(视图对象)?
我有 2 个以编程方式填充的视图对象,即该对象在查询语句区域中没有 SQL 查询。有 HeaderVO 和 LinesVO。我的任务是在高级表中显示高级表。而这个基于 HeaderVO 和 LinesVO 的高级表格。如果我使用 View Link 而不是 HeaderVO 表显示数据,但 LinesVO 表仅显示“未进行搜索”。这是合乎逻辑的,我明白为什么会这样。
但是我怎样才能连接这 2 个表(视图对象)?
由于 VO 以编程方式填充,您可以尝试通过在这些 VO 之间创建 View Link 也以编程方式进行。您可以使用以下方法进行相同的操作:
假设 Master VO 为 deptVO,Detail VO 为 empVO。
// Build an attribute array, consisting of deptVO.DeptNum for Master VO
AttributeDef[] deptAttrs = new AttributeDef[1];
deptAttrs[0] = deptVO.findAttributeDef("DeptNum");
// Build an attribute array, consisting of empVO.DeptNum for Detail VO
AttributeDef[] empAttrs = new Attributedef[1];
empAttrs[0] = empVO.findAttributeDef("DeptNum");
ViewLink vl = myAM.createViewLinkBetweenViewObjects("yourVLName",
"VLAccessor", //accessor name
deptVO, //master VO
deptAttrs, //master VO attribute
empVO, //detail VO
empAttrs, //detail VO attribute
null); //association clause
为了在 OAF advancedTable 组件中拥有 Master-Detail 关系,必须正确映射 detail VO 子属性。由于您是编程定义的 Master VO 和 Child VO,请确保此步骤已完成。您是以声明方式还是以编程方式创建高级表?
createViewLinkBetweenViewObjects API
ViewObject voDept = am.createViewObject("MyDeptVO", "package1.DeptView");
ViewObject voEmp = am.createViewObject("MyEmpVO", "package1.EmpView");
AttributeDef[] deptLinkAttrs = new AttributeDef[] { voDept.findAttributeDef("Deptno") };
AttributeDef[] empLinkAttrs = new AttributeDef[] { voEmp.findAttributeDef("Deptno") };
ViewLink vl = am.createViewLinkFromEntityAssocName("MyDeptEmpLink",
"Employees",
voDept, deptLinkAttrs,
voEmp, empLinkAttrs,
null);