Documentum DQL Получение подпапок списка из нескольких папок

все! Я начинаю с Documentum в этом месяце, и вот моя проблема. Существует раскрывающийся список с несколькими вариантами выбора шкафов. Мне нужно выбрать некоторые из них, чтобы получить список внутренних папок в моем списке результатов ниже. Этот запрос:

select * from dm_folder where folder(id($param$))

or

select * from dm_folder where folder($param$)

где параметр - имя_объекта

работает с одним раскрывающимся списком. Я пытался вставить "в"

select * from dm_folder where folder in($param$)

результаты с

[DM_QUERY_E_SYNTAX]error:  "A Parser Error (syntax error) has occurred in the vicinity of:  select * from dm_folder where folder in" 

or

select * from dm_folder where folder(id in($param$))

результаты с

select * from dm_folder where folder(id in ('0c0511d48000105',' 0c0511d48000106'))

[DM_QUERY_E_SYNTAX]error:  "A Parser Error (syntax error) has occurred in the vicinity of:  select * from dm_folder where folder(id in"

и вернуть многозначный флаг в запросах выше, но это не работает. Может кто-нибудь помочь, пожалуйста? Спасибо!


person issverg    schedule 02.10.2019    source источник
comment
можно подробнее как вы пытались вставить IN, и как это не получается? Не понятно, с какой проблемой вы имеете дело   -  person Miki    schedule 02.10.2019
comment
спасибо за ваш комментарий, я отредактировал сообщение и добавил больше информации   -  person issverg    schedule 02.10.2019
comment
вы пишете запрос не так, я напишу в ответе правильный формат   -  person Miki    schedule 02.10.2019
comment
Вы имеете в виду селекторы dql с CAPSLOCK?   -  person issverg    schedule 02.10.2019
comment
верхний или нижний регистр букв ключевого слова в запросе не имеет значения   -  person Miki    schedule 02.10.2019
comment
Я отредактировал ваш вопрос, так как вы новый пользователь. Пожалуйста, подтвердите, что я ничего не изменил с ним   -  person Miki    schedule 02.10.2019


Ответы (1)


Попробуйте с этим:

SELECT * FROM dm_folder WHERE r_object_id IN ('0c0511d48000105',' 0c0511d48000106')

Я думаю понятно, где вы допустили ошибку. Ключевое слово FOLDER, которое вы использовали, является функцией, которая принимает одно значение в качестве параметра.

Из руководства по DQL:

The FOLDER predicate
The FOLDER predicate identifies what folders to search. The syntax is:
[NOT] FOLDER(folder_expression {,folder_expression} [,DESCEND])
The folder_expression argument identifies a folder in the current repository. You cannot search a
remote folder (a folder that does not reside in the current repository). Valid values are:
• An ID function
• The ID function (described in The ID function, page 29) identifies a particular folder.
• A folder path
A folder path has the format:
/cabinet_name{/folder_name}
Enclose the path in single quotes. Because cabinets are a subtype of folder, you can specify a
cabinet as the folder.
• The keyword DEFAULT
The keyword DEFAULT directs the server to search the user’s default folder. Note that a user’s
default folder is the same as the user’s default cabinet (because cabinets are a subtype of folders).

Изменить 1:

SELECT * FROM dm_folder WHERE ANY i_folder_id IN ('0c0511d48000105',' 0c0511d48000106')

С помощью этого запроса вы ищете объекты типа папки, чьим родителем является любая из папок, указанных в качестве параметра.

Изменить 1:

SELECT * FROM dm_folder WHERE i_cabinet_id IN (<list of ids>) 

Это вернет вам все объекты папки под кабинетом.

person Miki    schedule 02.10.2019
comment
Да, я тоже пробовал, прежде чем нашел пример с селектором FOLDER()... но он ничего не показывает. Хотя запрос выполняется успешно, он говорит... - person issverg; 02.10.2019
comment
Что ж, с синтаксисом сейчас все в порядке, но вам нужно поработать над семантикой — что вы хотите выяснить с помощью этого запроса? - person Miki; 02.10.2019
comment
В порядке. Итак, кажется, что я не могу использовать FOLDER, но что мне использовать? Как вы можете видеть в моем сообщении с вопросом, я использую входные данные $param$, которые поступают из раскрывающегося списка с множественным выбором. В одиночном выборе FOLDER работает отлично. Но что я должен использовать вместо этого в этой ситуации? - person issverg; 02.10.2019
comment
Хорошо, я, наверное, понимаю, чего вы пытаетесь достичь. Вы ищете папки в одной или нескольких указанных папках. я отредактирую ответ - person Miki; 02.10.2019
comment
Да, точно! Спасибо! - person issverg; 02.10.2019
comment
Я думаю, это то, что вы ищете. i_folder_id — это многозначное поле, в котором хранятся идентификаторы родительской папки объекта. объект может быть связан с несколькими папками - для этого есть многозначное поле. Вот почему нам нужно использовать ключевое слово ANY в предложении where - person Miki; 02.10.2019
comment
К сожалению, по-прежнему ничего не показывает, хотя запрос выполняется успешно. - person issverg; 02.10.2019
comment
Конечно соглашусь!) Какая разница, что в выпадающем мультивыборе появляется список шкафов? И мне нужна папка внутри них? - person issverg; 02.10.2019
comment
Выражайтесь в контексте указанного вами запроса. Список шкафов, о которых вы говорите, является идентификатором в предложении WHERE? - person Miki; 02.10.2019
comment
Вы имеете в виду источник списка? Это (SELECT * FROM dm_cabinet) в списке показывает имя_объекта, а в качестве значения выходит либо r_object_id, например. - person issverg; 02.10.2019
comment
Тогда все должно быть хорошо, вы что-то упускаете здесь. Это зависит от вас, чтобы найти проблему. Может под этими шкафами нет папок? - person Miki; 02.10.2019
comment
Хм, но этот запрос select * from dm_folder where folder( id('0c0511d480000106')) показывает мне список папок. - person issverg; 02.10.2019
comment
Хм, сейчас нет времени вдаваться в подробности, сделаю это позже. Попробуйте еще одну вещь: SELECT * FROM dm_folder WHERE i_cabinet_id IN (‹список идентификаторов›) Это вернет вам всю папку в кабинете, но через всю структуру папок это может быть проблемой для вас. - person Miki; 02.10.2019
comment
Большое спасибо за вашу помощь и время, кажется, это работает! Я бы проверил это в браузере и ответил. - person issverg; 02.10.2019
comment
Когда у вас будет время, обновите свой ответ, я приму его. - person issverg; 02.10.2019