如何使用DQL递归删除文件夹?

时间:2019-12-02 16:50:50

标签: documentum documentum-dql

我使用Documentum处理应用程序。 假设我具有以下结构:

MyCabinetName
    |->Folder 1
        |->Folder 2
    |-> Folder 3

我正在尝试删除机柜中的所有文件夹。

我正在运行以下DQL查询:

delete dm_folder objects where folder ('MyCabinetName', DESCEND);

但是当我运行查询时,出现DQL错误:

[DM_FOLDER_E_CANT_DESTROY]error : "Cannot destroy folder with path name /MyCabinetName/Folder1 as it is not empty

我以为我的查​​询会递归删除MyCabinetName内的所有文件夹,但事实并非如此,因为如果我运行:

delete dm_folder objects where folder ('MyCabinetName/Folder1/Folder2', DESCEND);

然后

delete dm_folder objects where folder ('MyCabinetName/Folder1', DESCEND);

delete dm_folder objects where folder ('MyCabinetName/Folder3', DESCEND);

然后

delete dm_folder objects where folder ('MyCabinetName', DESCEND);

将起作用。

问题是在现实生活中,我不知道我的文件夹树是什么样的。我只知道要删除其内容的文件柜的名称。

有什么方法可以递归删除文件柜及其内容,而不必一个个删除每个文件夹?

1 个答案:

答案 0 :(得分:1)

DQL无法删除具有深层文件夹结构的文件夹。

但是您可以通过 Delete Operation 来完成,这意味着您可以使用Java,Groovy,...

编写工具

以下是如何执行此操作的示例:

IDfDeleteOperation operation = new DfClientX().getDeleteOperation();
operation.setVersionDeletionPolicy(IDfDeleteOperation.ALL_VERSIONS);
operation.setDeepFolders(true);
operation.add("/MyCabinetName");
if (!operation.execute()) {
    IDfList errors = operation.getErrors();
    // process errors
}

此行operation.setDeepFolders(true)指示操作删除结构中包含所有子文件夹和其他对象的文件夹。