12.1.3. OAF. Как присоединиться к 2 View Object, которые заполняются программно?
У меня есть 2 View Object, которые заполняются программно, то есть эти объекты не имеют SQL-запроса в области оператора запроса. Есть HeaderVO и LinesVO. Моя задача - отобразить расширенную таблицу в расширенной таблице. И это продвинутые таблицы на основе HeaderVO и LinesVO. Если я использую View Link, тогда в таблице HeaderVO отображаются данные, а в таблице LinesVO отображается только "Поиск не проводился". Это логично, и я понимаю, почему это так.
Но как мне соединить эти 2 таблицы (View Objects)?
2 ответа
Поскольку VO заполняется программно, вы можете попытаться создать ссылку View между этими VO также программно. Вы можете использовать метод ниже для того же:
Предположим, что 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
Чтобы иметь отношение Master-Detail в компоненте OTF advancedTable, дочерний атрибут VO detail должен быть правильно сопоставлен. Поскольку вы программно определяете Master VO и Child VO, убедитесь, что этот шаг выполнен. Вы создаете AdvancedTable декларативно или программно?
API createViewLinkBetweenViewObjects
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);