Получить абсолютный или относительный путь, используя объект файла в файловой сети IBM - PullRequest
0 голосов
/ 30 января 2020
String mySQLString = "select * from document where documentTitle like '%test%' ";
SearchSQL sql = new SearchSQL(mySQLString);
IndependentObjectSet s = search.fetchObjects(sql, 10, null, true);
Document doc;
PageIterator iterator = s.pageIterator();
iterator.nextPage();

for (Object object : iterator.getCurrentPage()) {
    doc = (Document) object;
    Properties properties = doc.getProperties();
    //I am trying to get an absolute or relative path here for every document.
    // for eg: /objectstorename/foldername/filename like this.
}

Я пробовал искать свойства и описания классов в документе. но не могу найти путь.

Ответы [ 3 ]

0 голосов
/ 31 января 2020

Предлагаю вам изучить раздел «Создание объектов DynamicReferentialContainmentRelationship» документации Fil eNet:

https://www.ibm.com/support/knowledgecenter/SSNW2F_5.5.0/com.ibm.p8.ce.dev.ce.doc/containment_procedures.htm#containment_procedures__fldr_creating_a_drcr

Документ Fil eNet может быть назначается нескольким папкам, поэтому вы можете иметь несколько логических «путей» для данного документа.

В конце вы должны получить что-то вроде «Folder.get_PathName () + DynamicReferentialContainmentRelationship.get_Name ()» для отображения полного pathname.

Как описано примерами в документации Fil eNet, объект отношения (например, DynamicReferentialContainmentRelationship) контролирует отношение документа / папки:

myRelationshipObject.set_Head (myDocument);

myRelationshipObject.set_Tail (myFolder);

Кроме того, имейте в виду, что документ Fil eNet может быть также "неиспользованным" документом, поэтому нет фактического "пути" или папки «отношения», которые нужно найти.

0 голосов
/ 05 февраля 2020

Чтобы сделать все это в одном запросе (как вы пытаетесь сделать в своем коде), вы можете создать объединение с таблицей ReferentialContainmentRelationship. Свойство Head этой таблицы указывает на документ, свойство Tail указывает на папку, в которую заполнен документ, а свойство ContainmentName - это имя документа в папке. Используйте следующий код для построения пути к документу:

SearchSQL searchSQL = new SearchSQL("SELECT R.ContainmentName, R.Tail, D.This FROM Document AS D WITH INCLUDESUBCLASSES INNER JOIN ReferentialContainmentRelationship AS R WITH INCLUDESUBCLASSES ON D.This = R.Head WHERE DocumentTitle like '%test%'");
SearchScope searchScope = new SearchScope(objectStore);
RepositoryRowSet objects = searchScope.fetchRows(searchSQL, null, null, null);
Iterator<RepositoryRow> iterator = objects.iterator();

while (iterator.hasNext()) {
    RepositoryRow repositoryRow = iterator.next();
    Properties properties = repositoryRow.getProperties();
    Folder folder = (Folder) properties.get("Tail").getEngineObjectValue();
    String containmentName = properties.get("ContainmentName").getStringValue();

    System.out.println(folder.get_PathName() + "/" + containmentName);
}

Пути, построенные таким образом, также можно использовать для извлечения объекта из хранилища объектов. Код запроса можно оптимизировать, используя фильтр свойств в качестве третьего аргумента метода fetchRows(). Не знаю, как это происходит, если документ хранится в нескольких папках.

0 голосов
/ 30 января 2020

tl; dr from Fil eNet Content Engine - Таблица базы данных для физического пути

Документы хранятся в каталогах на уровне листа с использованием алгоритма хеширования для равномерного распределения распределить файлы по этим листовым каталогам.

...