Some OLE commands work fine in a client/server environment, as well as in Web deployed applications (on the server), but when you use WebUtil to enable client side functions, they do not work. For example, the following code will work by running OLE as client/server, in a 3-tier environment, or on the application server: DECLARE app OLE2.OBJ_TYPE; args OLE2.LIST_TYPE; BEGIN -- create a new document app := OLE2.CREATE_OBJ('Word.Basic'); OLE2.INVOKE(app, 'FileNew'); -- insert data into new document from long item args := OLE2.CREATE_ARGLIST; OLE2.ADD_ARG(args, :long_item); OLE2.INVOKE(app, 'Insert', args); OLE2.DESTROY_ARGLIST(args); -- save document as example.tmp args := OLE2.CREATE_ARGLIST; OLE2.ADD_ARG(args, 'c:\temp\example.tmp'); OLE2.INVOKE(app, 'FileSaveAs', args); OLE2.DESTROY_ARGLIST(args); -- load example.tmp into ole item in form FORMS_OLE.ACTIVATE_SERVER('msw_obj'); FORMS_OLE.INITIALIZE_CONTAINER('msw_obj', 'c:\temp\example.tmp'); FORMS_OLE.CLOSE_SERVER('msw_obj'); -- clear data from example.tmp OLE2.INVOKE(app, 'EditSelectAll'); OLE2.INVOKE(app, 'EditClear'); -- save empty example.tmp args := OLE2.CREATE_ARGLIST; OLE2.ADD_ARG(args, 'c:\temp\example.tmp'); OLE2.INVOKE(app, 'FileSaveAs', args); OLE2.DESTROY_ARGLIST(args); -- close example.tmp args := OLE2.CREATE_ARGLIST; OLE2.ADD_ARG(args, 2); OLE2.INVOKE(app, 'FileClose', args); OLE2.DESTROY_ARGLIST(args); -- exit MSWord OLE2.RELEASE_OBJ(app); END; However, when you change this code to use CLIENT_OLE2 (using search-and-replace) it doesn't work. The following example is code which will convert to CLIENT_OLE2: DECLARE app CLIENT_OLE2.OBJ_TYPE; docs CLIENT_OLE2.OBJ_TYPE; doc CLIENT_OLE2.OBJ_TYPE; selection CLIENT_OLE2.OBJ_TYPE; args CLIENT_OLE2.LIST_TYPE; BEGIN -- create a new document app := CLIENT_OLE2.CREATE_OBJ('Word.Application'); CLIENT_OLE2.SET_PROPERTY(app,'Visible',1); docs := CLIENT_OLE2.GET_OBJ_PROPERTY(app, 'Documents'); doc := CLIENT_OLE2.INVOKE_OBJ(docs, 'add'); selection := CLIENT_OLE2.GET_OBJ_PROPERTY(app, 'Selection'); -- insert data into new document from long item CLIENT_OLE2.SET_PROPERTY(selection, 'Text', 'this is a test message'); -- save document as example.tmp args := CLIENT_OLE2.CREATE_ARGLIST; CLIENT_OLE2.ADD_ARG(args, 'c:\example.doc'); CLIENT_OLE2.INVOKE(doc, 'SaveAs', args); CLIENT_OLE2.DESTROY_ARGLIST(args); -- close example.tmp args := CLIENT_OLE2.CREATE_ARGLIST; CLIENT_OLE2.ADD_ARG(args, 0); CLIENT_OLE2.INVOKE(doc, 'Close', args); CLIENT_OLE2.DESTROY_ARGLIST(args); CLIENT_OLE2.RELEASE_OBJ(selection); CLIENT_OLE2.RELEASE_OBJ(doc); CLIENT_OLE2.RELEASE_OBJ(docs); -- exit MSWord CLIENT_OLE2.INVOKE(app,'Quit'); END; If you are running client/server Forms you may be using code like app := OLE2.CREATE_OBJ('Word.Basic'); or app := OLE2.CREATE_OBJ('Word.Application'); Both of these code examples initialize an OLE interaction with Microsoft Word. The difference between the two examples is that Microsoft changed the interface between their Office95 and their Office97 applications. Webutil has been tested against the recent (and current) Office97 interface (Word.Application). So, if you are using the Office97 interface then doing a search and replaced to change OLE2 to CLIENT_OLE2 will probably work. If you are using the old (obsoleted by Microsoft) interface then doing this search and replace may not work.