项目浏览器未使用包删除脚本更新
问题描述:
以下方法删除包。问题是项目浏览器从不刷新。调用Repository.RefreshModelView(0)强制更新,但它重新打开模型并杀死脚本执行。项目浏览器未使用包删除脚本更新
这里是方法:
function clearPackage(pkg) {
var parent as EA.Package;
parent = Repository.GetPackageByID(pkg.ParentID);
var pkgList as EA.Collection;
pkgList = parent.Packages;
for (var i = 0; i < pkgList.Count; i++) {
var p as EA.Package;
p = pkgList.GetAt(i);
if (p.PackageGUID == pkg.PackageGUID) {
pkgList.Delete(i);
pkgList.Refresh();
parent.Update(); // have tried with and without
return;
}
}
}
检查pkgList.Count前后pkgList.Refresh的确显示尺寸的变化。同样,这个问题似乎仅限于项目浏览器。
关于如何刷新项目浏览器的任何想法?
交叉贴在Sparx Forums。
答
要删除一个软件包,您只需要删除软件包本身。对不起,Perl的,但多数民众赞成我的驴:-)
my $p = $rep->GetTreeSelectedObject();
my $par = $rep->GetPackageByID ($p->ParentID);
my $idx = 0;
for my $sp (in $par->Packages) {
if ($sp->PackageID == $p->PackageID) {
$par->Packages->DeleteAt ($idx, 1);
last;
}
$idx++;
}
$rep->RefreshModelView ($par->PackageID);
答
尝试
Repository.RefreshModelView(parent.PackageID);
这将只刷新父包,而不是整个模型的内容。
谢谢,但我真的没有看到代码的区别(除了刷新父代),如果程序包挂在根目录下,它仍会重新加载整个模型。此外,DeleteAt似乎没有什么区别 - 第二个参数(刷新)被记录为未实现。 – Chris 2014-11-02 21:42:43
第二个参数是强制性的(不使用 - 它是EA)。实际上它与Delete相同: -/ 关于在Refresh(0)处停止执行脚本,您应该发送一个错误报告。看起来不太好。由于我单独运行测试脚本,因此我并没有注意到这一点。 – 2014-11-03 07:01:54
P.S.为了克服刷新问题,只需将标记推迟到整个脚本的末尾(或者按照Geert的建议)即可。如果您需要遍历已清除的子包列表,只需再次加载对象(使用GetPackageByID或-GUID)。在任何情况下,我从不使用刷新。这是一个最多余的方法。 – 2014-11-03 07:22:35