Интеграция COM из ALBPM - не удается найти IDispatch для '{00020906-0000-0000-C000-000000000046}' - PullRequest
0 голосов
/ 16 января 2009

Я пытаюсь использовать компоненты Office COM для создания документов Word и Excel. К сожалению, я не могу этого добиться, потому что я получаю сообщение об ошибке.

Не удается найти IDispatch для '{00020906-0000-0000-C000-000000000046} в модуле '{00020905-0000-0000-C000-000000000046}', v8.3

Я попытался переустановить Office, мое приложение (ALBPM) и мой интерфейс (combsvc), но он не работает.

Я хочу знать, как мне установить IDispatch или как узнать, установлен ли он в правильном модуле. Иногда ошибка говорит:

Не удается найти IDispatch для '{000209FF-0000-0000-C000-000000000046} ... вместо 00020906-0000-0000-C000-000000000046

Код, который я использую, генерирует эти ошибки:

wordAppl.visible = false
wordDocs = wordAppl.documents

contratoTemplate = "C:\\albpmFiles\\mandatory\\aTemplate.doc"
// .doc template
convenioTemplate = "C:\\albpmFiles\\mandatory\\ConvenioModificatorio.doc"
// .doc template
saveContrato = "C:\\albpmFiles\\temp\\"
// where to save.
saveConvenio = "C:\\albpmFiles\\temp\\"

contratoName = "NewContact.doc"
wordDoc = open(wordDocs, fileName : contratoTemplate)
bookmark = item(wordDoc.bookmarks, index : "atrDescripcion")

insertAfter bookmark.range
using text = instSolicitud.atrDescripcion
bookmark = item(wordDoc.bookmarks, index : "atrObjProveedor_atrNombre")
insertAfter bookmark.range
using text = instSolicitud.atrObjProveedor.atrNombre
bookmark = item(wordDoc.bookmarks, index : "atrObjProveedor_atrDireccion")
insertAfter bookmark.range
using text = instSolicitud.atrObjProveedor.atrDireccion
filename = saveContrato + contratoName

end

// Extras - Fin
saveAs wordDoc
using fileName = filename

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

Большое спасибо. Daniel.

Ответы [ 4 ]

2 голосов
/ 16 января 2009

По полученной ошибке я предполагаю, что вы используете Word 2003.

Вы убедились, что служба COM brigde правильно установлена ​​и работает?

combsvc -install
combsvc -start

зарегистрирует combsvc в качестве службы и запустит ее.

Также посмотрите на пример для Word внизу страницы 150 в Справочном руководстве ALBPM .

Тот факт, что это иногда работает, а иногда может быть проблемой с ALBPM. Используете ли вы последнюю версию и обновления?

Другой вариант - и довольно частая проблема с автоматизацией Word - это то, что автоматизированный экземпляр Word отображает модальное диалоговое окно и ожидает взаимодействия с пользователем. Вы можете переключить отображение модальных диалогов, установив

Application.DisplayAlerts = 0 

Однако, к сожалению, это не помешает отображению всех всплывающих окон.

Есть ли на самом деле экземпляр Word? Если да, можете ли вы сделать окно видимым и посмотреть, можно ли открыть документы или есть всплывающее окно, блокирующее приложение?

1 голос
/ 16 января 2009

Daniel

Я получаю удар в темноте здесь. Похоже, вы используете системы BEA Aqualogic BPM, которые, как я чувствую, являются инструментом на основе Java. Из всего этого видно, что combsvc на самом деле является службой COM-моста, позволяющей ALBPM общаться с COM из Java:

http://edocs.bea.com/albsi/docs60/studio/index.html?t=studio/catalog/catalog_component/COM/c_COM_Bridge.html

Я думаю, что это ваша точка отказа.

По поводу вашего вопроса по IDispatch вы фактически не устанавливаете IDispatch. IDispatch - это интерфейс, используемый COM для представления объектов, методов и свойств для клиентов COM с поздней привязкой, таких как языки скриптов (например, ASP или VBScript) Это часть инфраструктуры COM, если она будет сломана, вы увидите гораздо больше проблем с вашей машиной.

Я бы посоветовал задать вопрос здесь:

http://forums.oracle.com/forums/forum.jspa?forumID=560

0 голосов
/ 16 января 2009

Код, который я использую, таков, но я не могу даже увидеть первый журнал, поэтому я предполагаю, что есть ошибка с соединением, а не с кодом

wordAppl.visible = false
wordDocs = wordAppl.documents



contratoTemplate = "C:\\albpmFiles\\mandatory\\aTemplate.doc"

// .doc template
convenioTemplate = "C:\\albpmFiles\\mandatory\\ConvenioModificatorio.doc"

// .doc template
saveContrato = "C:\\albpmFiles\\temp\\"

// where to save.
saveConvenio = "C:\\albpmFiles\\temp\\"


contratoName = "NewContact.doc"

wordDoc = open(wordDocs, fileName : contratoTemplate)


bookmark = item(wordDoc.bookmarks, index : "atrDescripcion")

insertAfter bookmark.range
using text = instSolicitud.atrDescripcion

bookmark = item(wordDoc.bookmarks, index : "atrObjProveedor_atrNombre")

insertAfter bookmark.range
using text = instSolicitud.atrObjProveedor.atrNombre

bookmark = item(wordDoc.bookmarks, index : "atrObjProveedor_atrDireccion")

insertAfter bookmark.range
using text = instSolicitud.atrObjProveedor.atrDireccion


filename = saveContrato + contratoName


end



// Extras - Fin
saveAs wordDoc
using fileName = filename
0 голосов
/ 16 января 2009

Для проверки установленных COM-интерфейсов на вашем компьютере я предлагаю вам скачать oleview.exe, который является частью комплекта ресурсов Windows 2003

У меня фактически есть {00020906-0000-0000-C000-000000000046}, но также нет интерфейса IDispatch, и я получаю ошибку «Класс не зарегистрирован» при попытке создать его экземпляр. На моем домашнем ПК не установлен офис, только инструменты Office, что, скорее всего, является причиной.

В прошлом при автоматизации приложений Office я всегда мог общаться с независимыми от версии ProgID, такими как «Excel.Application». Вы уверены, что ссылаетесь на правильные COM-объекты? Проверьте это в oleview или дайте нам немного кода, чтобы поработать:)

...