eDOCS DM API - настройка расширения файла

Немного далеко, но мне не повезло найти ответ, задокументированный где-либо.

Я пишу пользовательский инструмент, использующий API eDOCS DM для массовой загрузки файлов в eDOCS. Инструмент почти работает как задумано, я создаю список задач для файлов и свойств метаданных, и он создает необходимые профили eDOCS и сохраняет файлы.

Сохранение файла в eDOCS, по сути, состоит из двух этапов:

Шаг 1 - создание формы профиля документа. Это делается путем создания объекта DM API с парами ключ / значение для установки полей в форме. Одно из этих полей связывает документ с конкретным приложением (например, MS Word, Excel и т. Д.), Которое имеет расширение по умолчанию. После создания профиля в хранилище файлов eDOCS создается пустой файл со случайным именем файла и расширением по умолчанию для связанного приложения.

Шаг 2 - сохранить документ в хранилище. Это достаточно просто: по сути, считайте исходный файл в байтовый массив и используйте объект API eDOCS DM для записи потока в файл (созданный на шаге 1), который хранится в хранилище файлов eDOCS.

Я борюсь с тем, чтобы изменить расширение файла, сгенерированного в хранилище файлов eDOCS при создании формы. Я не смог найти никаких указателей в официальной документации или каких-либо ответов в Интернете (хотя я нашел кого-то, кто задавал этот вопрос на Spiceworks пару лет назад ( https://community.spiceworks.com/topic/196865-open-text-edocs-hummingbird-support-group?page=2)).

Таким образом, на практическом примере файл rtf сохраняется в eDOCS с помощью этого инструмента и связывается с Microsoft Word, поскольку для расширения по умолчанию для Microsoft Word задано значение docx, файл сохраняется с расширением docx, а при извлечении пользователем Word не может интерпретировать файл и выдает сообщение об ошибке.

При индивидуальном сохранении файлов с помощью стандартной программы eDOCS DM Extensions доступно поле "Сохранить как", которое позволяет переопределить расширение файла по умолчанию.

Единственный способ обойти эту проблему в настоящий момент - это создать запись в таблице приложений базы данных eDOCS для каждого расширения файла, с которым мы сталкиваемся, однако я надеюсь, что существует способ решить эту проблему с помощью предоставленного API.

Любой совет будет принята с благодарностью, спасибо.

Дополнительная информация: Итак, у нас есть несколько расширений, определенных для каждого приложения в таблице APP_FILE_EXTNS, в качестве примера я включил некоторые строки, относящиеся к Microsoft Word, ниже:

APPS_LINK   LANGUAGE    EXTENSION   FILE_FORMAT DESCRIPTION         NEW_DOC_ONLY    ORDER_NO    DISABLED
1435        EN      docx        NULL        Word Document (*.docx)      N       1       N
1435        EN      DOT     NULL        Word 97-2003 Template (*.dot)   N       13      N
1435        EN      doc     NULL        Word 97-2003 Document (*.doc)   N       2       N
1435        EN      rtf     6       Rich Text Format (*.rtf)    N       8       N

А ниже приведен пример вызова API (с использованием Powershell) для создания профиля:

$doc = New-Object -ComObject PCDClient.PCDDocObject.1
$doc.SetDST($global:dmDST)
$doc.SetObjectType($global:dmForm)
$doc.SetProperty("PD_FILEPT_NO", $edocsFilePart)
$doc.SetProperty("DOCNAME", $docname)
$doc.SetProperty("APP_ID", $appid)
$doc.SetProperty("AUTHOR_ID", $author
$doc.SetProperty("TYPIST_ID", $typist
$doc.SetProperty("TYPE_ID", "DEFAULT")
$doc.SetProperty("%TARGET_LIBRARY", $global:dmLibrary)
$doc.Create()

# use PCDClient.PCDPutDoc and PCDClient.PCDPutStream to save the file to the edocs file repo
# unlock the document

Таким образом, в приведенном выше примере $appid будет относиться к столбцу APPLICATION в таблице APPS (например, MS WORD, FOLDER, PDF и т. Д.). Когда вызывается $doc.Create(), происходит следующее:

  • Профиль документа создан
  • Пустой файл в хранилище файлов edocs создается с расширением, установленным по умолчанию на расширение приложения, установленное через $doc.SetProperty("APP_ID", $appid)
  • Таблица КОМПОНЕНТОВ обновлена, чтобы связать пустой файл с профилем документа

Знаете ли вы, есть ли способ с помощью API-интерфейса DM установить расширение файла на одно из расширений не по умолчанию для приложения, связанного с документом?

Я попытался PCDClient.PCDDocObject.SetProperty() с несколькими различными ключами, все из которых не удалось:

  • РАСПРОСТРАНЕНИЕ
  • % EXTENSION
  • EXT
  • % EXT
  • ДОРОЖКА
  • %ДОРОЖКА
  • РАСШИРЕНИЕ ФАЙЛА
  • %РАСШИРЕНИЕ ФАЙЛА

3 ответа

Я нашел в малоизвестном документе API от OpenText, что вы можете установить свойство FILE_EXTENSION. У меня такая же проблема, и она исправлена. Так что в вашем случае должно быть

        $doc.SetProperty("FILE_EXTENSION", $appid)

Хотя вы упомянули, что пробовали, в моем случае это сработало.

Я не уверен, будет ли это полезно, но я нашел этот код ниже, где установлено расширение.

            Function ahtCommonFileOpenSave( _
            Optional ByRef flags As Variant, _
            Optional ByVal InitialDir As Variant, _
            Optional ByVal Filter As Variant, _
            Optional ByVal FilterIndex As Variant, _
            Optional ByVal DefaultExt As Variant, _
            Optional ByVal FileName As Variant, _
            Optional ByVal DialogTitle As Variant, _
            Optional ByVal hwnd As Variant, _
            Optional ByVal OpenFile As Variant) As Variant

                ' This is the entry point you'll use to call the common
                ' file open/save dialog. The parameters are listed
                ' below, and all are optional.
                '
                ' In:
                ' Flags: one or more of the ahtOFN_* constants, OR'd together.
                ' InitialDir: the directory in which to first look
                ' Filter: a set of file filters, set up by calling
                ' AddFilterItem. See examples.
                ' FilterIndex: 1-based integer indicating which filter
                ' set to use, by default (1 if unspecified)
                ' DefaultExt: Extension to use if the user doesn't enter one.
                ' Only useful on file saves.
                ' FileName: Default value for the file name text box.
                ' DialogTitle: Title for the dialog.
                ' hWnd: parent window handle
                ' OpenFile: Boolean(True=Open File/False=Save As)
                ' Out:
                ' Return Value: Either Null or the selected filename

                Dim OFN As tagOPENFILENAME
                Dim strFilename As String
                Dim strFileTitle As String
                Dim fResult As Boolean

                ' Give the dialog a caption title.
                If IsMissing(InitialDir) Then InitialDir = CurDir
                If IsMissing(Filter) Then Filter = ""
                If IsMissing(FilterIndex) Then FilterIndex = 1
                If IsMissing(flags) Then flags = 0&
                If IsMissing(DefaultExt) Then DefaultExt = ""
                If IsMissing(FileName) Then FileName = ""
                If IsMissing(DialogTitle) Then DialogTitle = ""
                If IsMissing(OpenFile) Then OpenFile = True

                ' Allocate string space for the returned strings.
                strFilename = Left(FileName & String(256, 0), 256)
                strFileTitle = String(256, 0)

                ' Set up the data structure before you call the function
                With OFN
                    .lStructSize = Len(OFN)
                    .hwndOwner = hwnd
                    .strFilter = Filter
                    .nFilterIndex = FilterIndex
                    .strFile = strFilename
                    .nMaxFile = Len(strFilename)
                    .strFileTitle = strFileTitle
                    .nMaxFileTitle = Len(strFileTitle)
                    .strTitle = DialogTitle
                    .flags = flags
                    .strDefExt = DefaultExt
                    .strInitialDir = InitialDir
                    ' Didn't think most people would want to deal with
                    ' these options.
                    .hInstance = 0
                    .strCustomFilter = ""
                    .nMaxCustFilter = 0
                    .lpfnHook = 0
                    'New for NT 4.0
                    .strCustomFilter = String(255, 0)
                    .nMaxCustFilter = 255
                End With

                ' This will pass the desired data structure to the
                ' Windows API, which will in turn it uses to display
                ' the Open/Save As Dialog.

                If OpenFile Then

                    fResult = aht_apiGetOpenFileName(OFN)

                Else

                    fResult = aht_apiGetSaveFileName(OFN)

                End If

                ' The function call filled in the strFileTitle member
                ' of the structure. You'll have to write special code
                ' to retrieve that if you're interested.

                If fResult Then
                    ' You might care to check the Flags member of the
                    ' structure to get information about the chosen file.
                    ' In this example, if you bothered to pass in a
                    ' value for Flags, we'll fill it in with the outgoing
                    ' Flags value.
                    If Not IsMissing(flags) Then
                        flags = OFN.flags
                    End If

                    ahtCommonFileOpenSave = TrimNull(OFN.strFile)

                Else

                    ahtCommonFileOpenSave = vbNullString

                End If

            End Function

Краткий ответ: вы не можете изменить расширение файла.

Когда вы загружаете файл, расширение файла используется для выбора приложения в профиле. В DM531/DM10 каждое приложение может иметь одно расширение по умолчанию (DOCX или DOC для слова), затем вам необходимо войти в CyberDocs, чтобы добавить другие расширения файла. Расширения добавляются в таблицу APP_FILE_EXTNS, обратите внимание, что вы не можете добавлять строки, так как system_id генерируется API eDOCS. System_id создается с использованием таблиц последовательности SEQ_xxx. Приложения находятся в таблице APPS.

Поэтому вам нужно попросить администратора eDOCS DM добавить необходимые расширения файлов с помощью обслуживания библиотеки или инструмента DM Management Studio (DM10 или DM 16.x).

Другие вопросы по тегам