Друзья,
При тестировании нашего приложения Oracle Forms в Vista я столкнулся с интересной проблемой.
Приложение может вызывать средство проверки орфографии Microsoft Word для проверки орфографии в поле. При вызове пользователю показывается стандартное диалоговое окно проверки орфографии Microsoft Word. Word сам по себе невидим для пользователя.
Средство проверки орфографии вызывается из Форм с помощью автоматизации, а используемый метод основан на примечании metalink: 295449.1 Как интегрировать средство проверки орфографии MS Word с формами с помощью WebUtil.
Это хорошо работало при вызове из Windows XP и Office 2003.
Однако, когда эта же (неизменная) функциональность запускается в Vista, диалоговое окно проверки орфографии Microsoft Word появляется за окном браузера, поэтому пользователю кажется, что ничего не произошло и функциональность не работает (в Vista нет индикации). панель задач, на которой была вызвана проверка орфографии)
Проблема возникает в Vista с Office 2007 и Office 2003. Я вижу, что проблема вызвана Vista, потому что, если я использую тот же URL-адрес, который используется для запуска приложения Forms в WindowsXP, диалоговое окно проверки орфографии Microsoft Word появляется, как и ожидалось, что находится впереди.
В Vista я попытался установить режим совместимости для Office с Windows XP SP2, но проблема осталась.
Я также пытался явно установить ACTIVATE (как вы можете видеть из примера кода ниже), но безуспешно.
Кто-нибудь еще сталкивался с этим? Любая помощь или указатели на то, где другие столкнулись с этой проблемой, будут с благодарностью получены!
Детали моей среды:
Сведения об окружающей среде
Oracle Forms: 10.1.2.3 JRE: Sun JRE 1.6.0_14 База данных: 10.2.0.3 Vista: Business Edition с пакетом обновления 1 Office: 2003 или 2007
Код (который должен идти в Oracle на стороне клиента), используемый для вызова средства проверки орфографии:
PROCEDURE SPELL_CHECK (ITEM_NAME IN VARCHAR2) IS
MY_APPLICATION CLIENT_OLE2.OBJ_TYPE;
MY_DOCUMENTS CLIENT_OLE2.OBJ_TYPE;
MY_DOCUMENT CLIENT_OLE2.OBJ_TYPE;
MY_SELECTION CLIENT_OLE2.OBJ_TYPE;
GET_SPELL CLIENT_OLE2.OBJ_TYPE;
MY_SPELL CLIENT_OLE2.OBJ_TYPE;
ARGS CLIENT_OLE2.LIST_TYPE;
SPELL_CHECKED VARCHAR2(4000);
ORIG_TEXT VARCHAR2(4000);
BEGIN
ORIG_TEXT := ITEM_NAME;
-- CREATE WORD.APPLICATION OBJECT
MY_APPLICATION := CLIENT_OLE2.CREATE_OBJ('WORD.APPLICATION');
--CLIENT_OLE2.SET_PROPERTY(MY_APPLICATION, 'VISIBLE', FALSE);
CLIENT_OLE2.SET_PROPERTY(MY_APPLICATION, 'VISIBLE', TRUE);
--CLIENT_OLE2.INVOKE(MY_APPLICATION, 'ACTIVATE');
-- GET HANDLE FOR DOCUMENTS COLLECTION
MY_DOCUMENTS := CLIENT_OLE2.GET_OBJ_PROPERTY(MY_APPLICATION, 'DOCUMENTS');
-- ADD A NEW DOCUMENT TO THE DOCUMENTS COLLECTION
MY_DOCUMENT := CLIENT_OLE2.INVOKE_OBJ(MY_DOCUMENTS, 'ADD');
-- GET HANDLE FOR SELECTION OBJECT
MY_SELECTION := CLIENT_OLE2.GET_OBJ_PROPERTY(MY_APPLICATION, 'SELECTION');
-- INSERT THE TEXT FIELD INTO DOCUMENT
CLIENT_OLE2.SET_PROPERTY(MY_SELECTION, 'TEXT', ORIG_TEXT);
-- GET HANDLE FOR ACTIVE DOCUMENT
GET_SPELL := CLIENT_OLE2.GET_OBJ_PROPERTY(MY_APPLICATION, 'ACTIVEDOCUMENT');
-- INVOKE SPELL CHECKER
CLIENT_OLE2.INVOKE(GET_SPELL, 'CHECKSPELLING');
CLIENT_OLE2.INVOKE(MY_APPLICATION, 'ACTIVATE');
-- Added to handle a cancel request.
CLIENT_OLE2.INVOKE(MY_SELECTION,'WholeStory');
CLIENT_OLE2.INVOKE(MY_SELECTION,'Copy');
-- GET CHECKED TEXT FROM DOCUMENT
SPELL_CHECKED := CLIENT_OLE2.GET_CHAR_PROPERTY(MY_SELECTION, 'TEXT');
-- REFORMAT RETURN TEXT TO DISPLAY CORRECTLY IN FORMS
SPELL_CHECKED := substr(replace(SPELL_CHECKED,chr(13),chr(10)), 1, length(SPELL_CHECKED));
-- COPY NEW TEXT IN THE FORM
COPY(SPELL_CHECKED,ITEM_NAME);
-- CLOSE THE DOCUMENT WITHOUT SAVING
ARGS := CLIENT_OLE2.CREATE_ARGLIST;
CLIENT_OLE2.ADD_ARG(ARGS, 0);
CLIENT_OLE2.INVOKE(MY_DOCUMENT, 'CLOSE',ARGS);
CLIENT_OLE2.DESTROY_ARGLIST(ARGS);
-- RELEASE THE OLE OBJECTS
CLIENT_OLE2.RELEASE_OBJ(MY_SELECTION);
CLIENT_OLE2.RELEASE_OBJ(GET_SPELL);
CLIENT_OLE2.RELEASE_OBJ(MY_DOCUMENT);
CLIENT_OLE2.RELEASE_OBJ(MY_DOCUMENTS);
CLIENT_OLE2.INVOKE(MY_APPLICATION, 'QUIT');
CLIENT_OLE2.RELEASE_OBJ(MY_APPLICATION);
END;
РЕДАКТИРОВАТЬ: 08.10.2009
Эта ссылка http://www.experts-exchange.com/Microsoft/Development/MS_Access/Q_23085081.html подробно описывает ту же проблему (но на этот раз вместо оракула, управляющего словом, это доступ ms). К сожалению, я не вижу ответа (если он есть!)
РЕДАКТИРОВАТЬ: 08.12.2009
Вся ссылка на экспертную биржу гласит, что это проблема Vista - как будто я этого не знал!