好像看到好多人讨论这个,但是没有人给出
代码,我想应该不说很复杂吧,把自己先前实现的
代码放出来吧。
我做了一个维护工程材料的无状态对象,效果如下:
其中一级
目录和二级
目录联动。基本思路是:当一级
目录的内容发生变化时,通过查询找到对应的二级
目录的值,然后把结果set到二级
目录字段。
字段如下:其中一级目录和二级目录都是reference的对象。
一级目录对象的字段:
二级目录对象的字段:
材料对象的字段:
材料对象中,一级目录字段 更改的值
设置的hook如下:
$entity->SetFieldValue("二级目录","");
$sessionObj = $entity->GetSession();
my @choices;
my $selectedName = $entity->GetFieldValue("一级目录")->GetValue();
$queryObj = $sessionObj->BuildQuery("材料二级目录");
$queryObj->BuildField("名称");
$filterObj = $queryObj->BuildFilterOperator($CQPerlExt::CQ_BOOL_OP_AND);
$filterObj->BuildFilter("一级目录",$CQPerlExt::CQ_COMP_OP_EQ,[$selectedName]);
$resultSetObj = $sessionObj->BuildResultSet($queryObj);
$resultSetObj->Execute();
while ($resultSetObj->MoveNext() == $CQPerlExt::CQ_SUCCESS) {
$name = $resultSetObj->GetColumnValue(1);
push(@choices,$name);
}
$entity->SetFieldChoiceList("二级目录",\@choices);
OK,这样就搞定了。如果扩展到三级目录联动,也没问题,和上面类似加些代码就可以了。