是否可以使用VersionOne Java SDK获取对象的深层副本?

时间:2014-06-01 18:15:32

标签: java versionone

让我们说我想计算我的缺陷的累积估计。我做了

double estimate = 0.0;
Double tEstimate = 0.0;
Collection<Defect> defects = project.getDefects(null);
for(Defect d : defects){
   tEstimate = d.getEstimate();
   if(tEstimate != null){
      estimate += tEstimate;
   }
}

这里每次调用d.getEstimate()都会对服务器进行回调,这意味着此代码的运行速度非常慢。我想预先考虑一次性能并下载所有信息以及缺陷对象,可能包括获取我不会使用的一些信息,但避免在每次迭代期间达到服务器回调的延迟。循环。

2 个答案:

答案 0 :(得分:2)

您正在使用VersionOne Object model SDK。由于你抱怨的东西,它确实缺乏稳健性。其中一个低效率是它如何知道您正在请求资产列表,但首先获得具有一组预定属性(如AssetState)的所有资产,并检查它是否为死资产。在此之后,它再次调用以获取相同的资产列表,但使用您指定的属性。这可以通过应用贪婪算法来解决,该算法可以获取一组属性,这样无论在.get_()方法中请求哪些属性,都会返回此集合的每个成员。为什么?这已经(某种程度上)发生在基于Rest的VersionOne API中。如果查询返回了所有属性,那么可能会浪费一些特别是对于大量的积压。

无论如何,VersionOne将在不久的将来弃用对象模型,所以如果您计划使用OM进行大量编码,请考虑这一点。

以下是解决此问题的一些方法

1)重写您的代码以使用VersionOne APIClient SDK。它有XML管道,因此您可以节省大量时间编写自己的。这有点冗长,但它更强大,更快速,更高效。 Object模型实际上是建立在APIClient上的。

2)使用Java和原始VersionOne Rest API重写代码 - 要求您了解http和VersionOne Rest API。

3)如果您无法从对象模型更改,则可以混合使用2个sdks。当您需要读取大量数据时,只需使用API​​Client代码来管理该段代码。当你只能学习APIclient并使用它时,除非你在使用Object模型方面投入巨大而且无法改变,否则有点无意义。代码变得非常快。不推荐。

答案 1 :(得分:1)

rest-1.v1 API端点公开资产的操作,包括DeepCopy。没有客户端代码枚举所有操作,因此您必须首先使用meta.v1 API端点explore the asset。使用API Client backdoor from the Object Model,您可以在知道名称后访问允许您call an operation的类。