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).