2009-08-07 19 views
2

Amis,Vista accent problème lors de l'appel sort Microsoft Word vérifie d'Oracle Forms

En testant notre Oracle Forms application sur Vista j'ai trouvé un « défi » intéressant.

L'application peut appeler le vérificateur d'orthographe Microsoft Word pour effectuer une vérification orthographique sur un champ. Lorsqu'elle est invoquée, l'utilisateur voit apparaître la fenêtre de dialogue du vérificateur d'orthographe Microsoft Word standard. Le mot lui-même est invisible pour l'utilisateur. Le vérificateur d'orthographe est appelé à partir de Forms using Automation et la méthode utilisée est basée sur la note metalink: 295449.1 Comment intégrer le vérificateur d'orthographe MS Word avec des formulaires à l'aide de WebUtil.

Cela a bien fonctionné lorsqu'il est appelé en utilisant Windows XP et Office 2003.

Cependant quand même (inchangé) fonctionnalité est exécutée sur Vista, Microsoft Word orthographique fenêtre de dialogue Vérificateur apparaît derrière la fenêtre du navigateur ainsi que l'utilisateur il semble que rien ne s'est passé et la fonctionnalité ne fonctionne pas (Il n'y a aucune indication sur la barre des tâches Vista que le vérificateur orthographique a été invoqué)

Le problème se produit sur Vista avec Office 2007 et Office 2003. Je peux voir que le Le problème est dû à Vista car si j'utilise la même URL que celle utilisée pour lancer l'application Forms sur WindowsXP, la fenêtre de dialogue Microsoft Word Spell Checker apparaît ected, qui est en face.

Dans Vista j'ai essayé de définir le mode de compatibilité pour Office à Windows XP SP2 mais le problème persiste.

J'ai également essayé de définir explicitement ACTIVATE (comme vous pouvez le voir dans l'exemple de code ci-dessous) mais sans succès.

Est-ce que quelqu'un d'autre a couru à ça? Toute aide ou pointeur vers l'endroit où d'autres ont rencontré ce problème serait grandement apprécié!

Mes coordonnées de l'environnement sont:

Environnement Détails

Oracle Forms: 10.1.2.3 JRE: Sun 1.6.0_14 Database JRE: 10.2.0.3 Vista: Business Edition avec Service Pack 1 Bureau : 2003 ou 2007

le code (qui doit aller dans un côté client Oracle) utilisé pour invoquer le correcteur orthographique est:

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; 

EDIT: 10/08/2009

Ce lien http://www.experts-exchange.com/Microsoft/Development/MS_Access/Q_23085081.html détaille le même problème (mais cette fois au lieu des formes d'oracle contrôle mot, il est ms accès) Malheureusement, je ne vois pas la réponse (s'il y a un c'est)

EDIT: 12/08/2009

Tout le lien aux Etats expert-échange est que cela est un problème de vista - comme je ne savais pas que!

Répondre

2

Cela ne semble pas pouvoir être résolu en utilisant Automation \ OLE seul, ce thread note qu'il y a un problème avec la méthode activate dans OLE \ Automation et Vista.

Le chemin autour d'elle est d'appeler les fenêtres API pour manipuler les fenêtres.