我正在尝试复制整个文件夹。
为此,我创建了一个新文件夹并再次将所有文件夹放入其中:文件夹和文档。
但是我在尝试创建文档时遇到Alfresco服务异常:
新创建的对象不是文档!
我的代码如下:
List<Document> documentsChildren = documentFolderService.getDocuments(folderToCopy);
for (Document document:documentsChildren){
ContentFile contentFileToCopy = documentFolderService.getContent(document);
String nameFileToCopy = document.getName();
// problem there
documentFolderService.createDocument(folderCopied, nameFileToCopy, properties, contentFileToCopy);
}
奇怪的是,我仍然以相同的方式在存储库中实现简单文档的副本,并且它运行良好:
Document documentToCopy = (Document) documentFolderService.getNodeByIdentifier(fileToCopy.getIdentifier());
ContentFile contentFileToCopy = documentFolderService.getContent(documentToCopy);
String nameFileToCopy = fileToCopy.getName();
documentFolderService.createDocument(folderParent, nameFileToCopy, properties, contentFileToCopy);
唯一改变的是获取文档的方式 :通过获取文件夹的子文档或获取带有其标识符的文档。
问题更新 :
确切的错误消息是:
Caused by: org.alfresco.mobile.android.api.exceptions.AlfrescoServiceException: Newly created object is not a document! New id: workspace://SpacesStore/85753128-1ac9-4b5e-b909-91dcb7d5ff5d
at org.alfresco.mobile.android.api.services.impl.AbstractDocumentFolderServiceImpl.createDocument(AbstractDocumentFolderServiceImpl.java:482)
属性为空映射:
映射属性 = 新的哈希映射();
我测试.ppt文档,当你提出问题时,我也测试.docx和.jpg
引发异常时节点的类型是文件夹
您提出的快速修复不起作用。也许我在某处犯了一个愚蠢的错误,但我无法找到它。
完整代码 :
List<Folder> foldersChildren = null;
List<Document> documentsChildren = null;
try {
ServiceRegistry serviceRegistry = Login.session.getServiceRegistry();
DocumentFolderService documentFolderService = serviceRegistry.getDocumentFolderService();
Folder folderParent = (Folder) documentFolderService.getNodeByIdentifier(repositoryParent.getIdentifier());
// create the folder
Map<String,Serializable> properties = new HashMap<String,Serializable>();
Folder folderToCopy = (Folder) documentFolderService.getNodeByIdentifier(repositoryToCopy.getIdentifier());
String nameRepositoryToCopy = repositoryToCopy.getName();
Folder folderCopied = documentFolderService.createFolder(folderParent, nameRepositoryToCopy, properties);
foldersChildren = documentFolderService.getFolders(folderToCopy);
documentsChildren = documentFolderService.getDocuments(folderToCopy);
// create the files inside the folder
ContentFile contentFileToCopy = null;
String nameFileToCopy = null;
for (Document document : documentsChildren){
contentFileToCopy = documentFolderService.getContent(document);
nameFileToCopy = document.getName();
// this operation doesn't work
documentFolderService.createDocument(folderCopied, nameFileToCopy, properties, contentFileToCopy);
}
} catch (Exception e){
this.cancel(true);
UIAlertDialog.runOnUIThreadOperationFailed(activity, context);
}
正如错误消息所解释的那样:新创建的对象不是文档!创建文档后,当该方法检查当前节点是否已正确创建并具有正确的属性时,会发生此错误。
我需要更多信息(堆栈跟踪、节点类型......)来了解它是 SDK 端的错误还是该方法未涵盖的特定错误。你能提供信息吗
- 属性值:是空地图吗? 与复制的地图相同?
- 它是针对每个文档还是仅针对某些类型的文档?
- 引发异常时节点的类型是什么?
但是,如果第二种方法有效,则快速修复可能是:
List<Document> documentsChildren = documentFolderService.getDocuments(folderToCopy);
Document documentToCopy = null;
ContentFile contentFileToCopy = null;
String nameFileToCopy = null;
for (Document document : documentsChildren){
documentToCopy = (Document) documentFolderService.getNodeByIdentifier(document .getIdentifier());
contentFileToCopy = documentFolderService.getContent(documentToCopy);
nameFileToCopy = fileToCopy.getName();
documentFolderService.createDocument(folderParent, nameFileToCopy, properties, contentFileToCopy);
}
编辑06.02
显然,documentFolderService.createFolder() 中的属性对象存在问题引用。在此方法之后,映射不为空,并且包含干扰代码下一部分的信息。因此,要更正它(如果对您来说,在复制操作期间属性并不重要),请找到解决方案
List<Folder> foldersChildren = null;
List<Document> documentsChildren = null;
try {
ServiceRegistry serviceRegistry = Login.session.getServiceRegistry();
DocumentFolderService documentFolderService = serviceRegistry.getDocumentFolderService();
Folder folderParent = (Folder) documentFolderService.getNodeByIdentifier(repositoryParent.getIdentifier());
// create the folder
Folder folderToCopy = (Folder) documentFolderService.getNodeByIdentifier(repositoryToCopy.getIdentifier());
String nameRepositoryToCopy = repositoryToCopy.getName();
Folder folderCopied = documentFolderService.createFolder(folderParent, nameRepositoryToCopy, null);
foldersChildren = documentFolderService.getFolders(folderToCopy);
documentsChildren = documentFolderService.getDocuments(folderToCopy);
// create the files inside the folder
ContentFile contentFileToCopy = null;
String nameFileToCopy = null;
for (Document document : documentsChildren){
contentFileToCopy = documentFolderService.getContent(document);
nameFileToCopy = document.getName();
// this operation doesn't work
documentFolderService.createDocument(folderCopied, nameFileToCopy, null, contentFileToCopy);
}
} catch (Exception e){
this.cancel(true);
UIAlertDialog.runOnUIThreadOperationFailed(activity, context);
}
注意:属性是一个可选参数,因此它可以为空。