DQL-Abfrage, um alle fileen in einem Aktenschrank in Documentum zurückzugeben?

Ich möchte alle fileen aus einem Kabinett ('Wombat Insurance Co') abrufen. Derzeit verwende ich diese DQL-Abfrage:

select r_object_id, object_name from dm_document(all) where folder('/Wombat Insurance Co', descend); 

Dies ist in Ordnung, außer es gibt nur maximal 100 Ergebnisse zurück. Wenn 5000 fileen im Schrank sind, möchte ich alle 5000 Ergebnisse erhalten. Gibt es eine Möglichkeit, Paginierung zu verwenden, um alle Ergebnisse zu erhalten?

Ich habe diese Abfrage versucht:

 select r_object_id, object_name from dm_document(all) where folder('/Wombat Insurance Co', descend) ENABLE (RETURN_RANGE 0 100 'r_object_id DESC'); 

mit der Absicht, Ergebnisse in 100 fileschritten zu erhalten, aber diese Abfrage gibt mir einen Fehler, wenn ich versuche, es auszuführen. Der Fehler sagt folgendes:

 com.emc.documentum.fs.services.core.CoreServiceException: "QUERY" action failed. java.lang.Exception: [DM_QUERY2_E_UNRECOGNIZED_HINT]error: "RETURN_RANGE is an unknown hint or is being used incorrectly." 

Ich denke, ich verwende den RETURN_RANGE-Hinweis richtig, aber vielleicht bin ich es nicht. Jede Hilfe wäre willkommen!

Ich habe auch versucht, den Hinweis ENABLE(FETCH_ALL_RESULTS 0) aber dies gibt immer noch nur maximal 100 Ergebnisse zurück.

Zur Klärung lautet meine Frage: Wie bekomme ich alle fileen aus einem Schrank?

Solutions Collecting From Web of "DQL-Abfrage, um alle fileen in einem Aktenschrank in Documentum zurückzugeben?"

Aha, ich habe es herausgefunden. Mithilfe von DFS mit Java (eine Abstraktionsschicht über DFC) können Sie den Startindex für Abfrageergebnisse festlegen:

 String queryStr = "select r_object_id, object_name from dm_document(all) where folder('/Wombat Insurance Co', descend);" PassthroughQuery query = new PassthroughQuery(); query.setQueryString(queryStr); query.addRepository(repositoryStr); QueryExecution queryEx = new QueryExecution(); queryEx.setCacheStrategyType(CacheStrategyType.DEFAULT_CACHE_STRATEGY); queryEx.setStartingIndex(currentIndex); // set start index here OperationOptions operationOptions = null; // will return 100 results starting from currentIndex QueryResult queryResult = queryService.execute(query, queryEx, operationOptions); 

Sie können die currentIndex Variable nur currentIndex , um alle Ergebnisse zu erhalten.

Nun, der Hinweis wird falsch verwendet. Beginnen Sie mit 1, nicht 0.

Es gibt kein integriertes Limit in DQL selbst. Alle Ergebnisse werden standardmäßig zurückgegeben. Der Grund, warum Sie nur 100 Ergebnisse erhalten, muss etwas damit zu tun haben, wie Sie DFC verwenden (oder welchen anderen Client Sie auch verwenden). Wenn IDfCollection folgendermaßen verwendet wird, wird sicherlich alles zurückgegeben :

 IDfQuery query = new DfQuery("SELECT r_object_id, object_name " + "FROM dm_document(all) WHERE FOLDER('/System', DESCEND)"); IDfCollection coll = query.execute(session, IDfQuery.DF_READ_QUERY); int i = 0; while (coll.next()) i++; System.out.println("Number of results: " + i); 

In einer Testumgebung (CS 6.7 SP1 x64, MS SQL) wird Folgendes ausgegeben:

Anzahl der Ergebnisse: 37162

Jetzt gibt es Beweise. Das Verwenden von Paging ist jedoch eine gute Idee, wenn Sie die allgemeine performance in Ihrer Anwendung verbessern möchten. Wie bereits erwähnt, fang an mit der Nummer 1 zu zählen:

 ENABLE(RETURN_RANGE 1 100 'r_object_id DESC') 

Diese Art des Seitenwechsels erfordert, dass die sorting im Hinweis und nicht als DQL-statement angegeben wird. Wenn Sie nur die ersten 100 datasätze wünschen, versuchen Sie stattdessen diesen Hinweis:

 ENABLE(RETURN_TOP 100) 

In diesem Fall funktioniert die sorting mit ORDER BY wie erwartet.

Beachten Sie, dass durch das Hinzufügen von (all) nicht nur alle Dokumente gefunden werden, die der angegebenen Qualifikation entsprechen, sondern alle Versionen jedes Dokuments . Wenn das deine Absicht war, ist das in Ordnung.

Sie haben bereits eine Antwort akzeptiert, die DFS verwendet.

Da Sie mit DFC spielen, können Ihnen diese Informationen helfen.

DFS:

Wenn Sie DFS verwenden, müssen Sie sich über die Anzahl der gleichzeitigen sessionen bewusst sein, die Sie mit DFS verwenden können. Ich denke, es ist 100 oder 150.

DFC:

Tatsächlich gibt es eine Grenze, die Sie über DFC abrufen können (ich bin nicht sicher mit DFS).

Gehen Sie zu Ihrer DFC-Anwendung (Webtop oder da oder irgendetwas) und überprüfen Sie die file dfc.properties.

 # Maximum number of results to retrieve by a query search. # min value: 1, max value: 10000000 # dfc.search.max_results = 100 # Maximum number of results to retrieve per source by a query search. # min value: 1, max value: 10000000 # dfc.search.max_results_per_source = 400 

dfc.properties.full oder eine ähnliche file ist da und Sie können diese Werte nach Ihrem System überprüfen.

Und ich spreche von der Contentserver-Seite, nicht von der clientseitigen dfc.properties-file.

Wenn Sie einen ENABLE (RETURN_TOP) Hinweis ENABLE (RETURN_TOP) mit DFC verwenden, gibt es 2 Möglichkeiten, die Ergebnisse vom Contentserver abzurufen.

  1. objectbasiert
  2. Reihenbasiert

Sie müssen dies konfigurieren, indem Sie den Parameter return_top_results_row_based in der file server.ini verwenden.

All diese Änderungen für die Documentum-serverseite, nicht für Ihren DFC / DQL-Client.

Ich habe eine Weile mit DFC API (mit Java) gearbeitet, aber ich erinnere mich an keine Standardgrenze für Abfragen, IIRC haben wir immer alle Dokumente, es gab keine Grenze. Eigentlich (laut meinen Notizen) müssen wir das Limit explizit enable (return_top 2000) , zum Beispiel mit enable (return_top 2000) . (Soweit ich weiß, hängt die Syntax möglicherweise vom DBMS hinter EMC Documentum ab.)

Nur eine Vermutung: Überprüfen Sie dfc.properties file dfc.properties .