0

フォルダ全体をコピーしようとしています。

そうするために、私は新しいフォルダを作成し、その中にすべてを再び入れています:フォルダとドキュメント。

しかし、ドキュメントを作成しようとすると、AlfrescoServiceExceptionが発生します。

新しく作成されたオブジェクトはドキュメントではありません!

私のコードは以下の通りです:

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)
  • プロパティは空のマップです:

    マッププロパティ=newHashMap();

  • 私は.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);
    }
4

1 に答える 1

2

エラーメッセージが説明したように:新しく作成されたオブジェクトはドキュメントではありません!このエラーは、ドキュメントの作成後に、現在のノードが正しく作成され、正しい属性を持っているかどうかをメソッドがチェックするときに発生します。

SDK側のバグなのか、メソッドがカバーしていない特定のバグなのかを知るために、より多くの情報(スタックトレース、ノードのタイプなど)が必要です。情報を教えていただけませんか

  • プロパティ値:空のマップですか?コピーしたものと同じ地図?
  • それはすべてのドキュメントで発生しますか、それとも特定の種類のドキュメントで発生しますか?
  • 例外が発生したときのノードのタイプは何ですか?

しかし、2番目の方法が機能する場合、簡単な修正は次のようになります。

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);
    }

注意:プロパティはオプションのパラメータであるため、nullにすることができます。

于 2013-02-01T22:50:01.813 に答える