0
头像

为什么 WriteableDatabaseService.moveDocument(doc,progList) 不移动我的文档?

你好 

我在这里与另一个问题作斗争:

//获取当前文件夹
WritableDatabaseService db = (WritableDatabaseService) annotatedDocuments[0].getDatabase();
字符串结果文件夹名称;
WritableDatabaseService resultFolder = null;
//创建子文件夹工作OKAY
尝试 {
resultFolderName= DocumentUtilities.getUniqueNameForDocument("启动序列", db);
resultFolder = db.createChildFolder(resultFolderName);
} catch (DatabaseServiceException e) {
throw new DocumentOperationException("无法保存结果");
}

列表<AnnotatedPluginDocument>结果 = 新的 ArrayList<AnnotatedPluginDocument> ();

//做东西
//将文档添加到结果中

//现在将结果移动到子文件夹中,不起作用
for (AnnotatedPluginDocument doc:results) {
尝试 {
//这里没有移动
resultFolder.moveDocument(doc, ProgressListener.EMPTY);
} catch (DatabaseServiceException e) {
new DocumentOperationException("无法保存结果");
}
}


任何想法为什么 

resultFolder.moveDocument(文档,ProgressListener.EMPTY)

不是我的文件吗?

谢谢,
斯蒂芬

斯蒂芬·雅诺施

7 条评论

0
头像

嗨,斯蒂芬,

您创建的结果文档是否已添加到数据库中?如果没有,则需要将它们添加到其中而不是移动。

您可以使用 addDocumentCopy() 方法执行此操作。

如果它们已经在数据库中,那么您能告诉我您是否遇到异常或者 move 方法是否返回 false?

干杯,
马修

马修·张 0 票
评论动作 永久链接
0
头像

我从来不知道我需要将文档添加到数据库中。会试试这个。

 

谢谢,
斯蒂芬

斯蒂芬·雅诺施 0 票
评论动作 永久链接
0
头像

嗨,斯蒂芬,

澄清一下,Geneious 核心将处理我们许多插件类型的结果,并将它们添加到数据库中。  如果您想要执行 API 当前不支持的操作,或者您正在编写一种通常没有输出的插件,您只需手动添加它们。

例如,如果您正在编写 DocumentOperation,那么您添加到 OperationCallback 或在结果列表中返回的任何文档都会自动添加到与输入文档相同的文件夹中。

如果您需要一个子文件夹,您可以使用 DocumentOperation.OperationCallback.setSubFolder(String name) 并且任何结果都将添加到子文件夹中。

但是,如果您想做一些更复杂的事情,例如将文档保存到不相关的文件夹,则必须手动添加它们。

干杯,
马修

马修·张 0 票
评论动作 永久链接
0
头像

但根据文档,我不应该使用performOperation

斯蒂芬·雅诺施 0 票
评论动作 永久链接
0
头像

 嗨,斯蒂芬,

有多个具有不同签名的 performOperation 变体。  您应该能够使用其他变体之一来实现您的需要。

如果您正在实现不使用 OperationCallback 的变体之一,那么您只需要返回列表中的文档。

如果你告诉我你正在实现什么类型的插件/类,那么我可能会提供更多帮助。

干杯,
马修

聚苯乙烯建议不要使用它以避免在未来版本的 Geneious 中出现任何问题。  我们将在 API 的下一个主要版本(不是 Geneious 的下一个版本)中删除该特定的 performOperation 方法。  需要记住的是,我们的 API 在过去 9 年中一直保持在同一主要版本上。

Geneious Team 0 票
评论动作 永久链接
0
头像

案件已结! 

周一重新开始解决了一些最奇怪的问题。 

对于其他寻求帮助的人,我记录了以下解决方案:

@覆盖
public void performOperation(AnnotatedPluginDocument[] annotatedDocuments, ProgressListener progressListener, Options options, SequenceSelection sequenceSelection, OperationCallback callback) 抛出 DocumentOperationException
{
....

DocumentOperation primeOperation = PluginUtilities.getDocumentOperation("Operation_com.biomatters.plugins.primerDesign.DesignAnnotationGenerator");

...

尝试 {
callback.setSubFolder("启动序列");
} catch (DatabaseServiceException e) {
e.printStackTrace();
}

primerOperation.performOperation(new AnnotatedPluginDocument[]{document},ProgressListener.EMPTY,primerOperationOptions,sequenceSelection,callback);

}


感谢马修的所有有用评论!
斯蒂芬

斯蒂芬·雅诺施 0 票
评论动作 永久链接
0
头像

那太棒了!  真高兴你做到了。

马修·张 0 票
评论动作 永久链接