Open Command

The Open command guides the user through the FileNet Workplace Select Item (Open) Java™Server Pages (JSP) pages to enable the user to select a particular version of an object store item to be downloaded (open) or checked-out and downloaded. The client application must use the IOpenCmd interface to filter the list of openable items that are presented to the user based on MIME type, as well as to customize the page title.

After the user has navigated through the JSP pages and selected an item, they can select to perform one of the following options:

Option Action Availability

Checkout

Checks out the latest version of the object store item, and then downloads the item using a specified filename and destination directory on the local machine.

Only available when
the item is not
currently checked out.

Open

Downloads the latest version of item using a specified filename and destination directory on the local machine.

Always available.

Open Released
Version

Downloads only the specified released version of the object store item.

Only available if there are released versions
of the item.

Open from Versions

Downloads only on the specified version of the object store item.

Always available.

After the Open command has been executed by calling IAppIntCmd::Invoke, a pointer to the item to be opened is returned in the Open response component. Client applications may interact with the response component via the standard IAppIntRsp and custom IOpenRsp and IOpenRsp2 interfaces. For more information about working with command and response components and their COM interfaces, see Command and Response components.

Reference

DLL FnAppIntOpenCmd.dll
See Also SelectObject and Download commands

Interfaces

The Open command uses the following interfaces:

Interface Description
IOpenCmd

This is a custom interface used to initialize the data contained in the Open command component. The client application can use the methods in this interface to customize the JSP page, including filtering the list of openable items by MIME type, as well as specifying the page title.

IOpenRsp

This is a custom interface for the Open response component that is returned when the Open command is executed. This interface enables the client application to obtain information about the item that was selected for opening by the user.

IOpenRsp2

This is a custom interface for the Open response component that is returned when the Open command is executed. This interface enables the client application to obtain the MIME type for the item that was selected for opening by the user.

IAppIntCmd

This is a standard interface which is automatically used by the Open command to invoke the Open command component. The client application executes the Open command by calling this interface and passing the AppintSession component on which the Open command component is invoked. Each time the command is executed, an Open response component is returned.

IAppIntRsp

This is a standard interface that is automatically used by the Open command to determine the success or failure of the command, as well as retrieve any error code or messages.

Example

In the application's StdAfx.h header file:

#import"C:\Program Files\FileNet\AppInt\FnAppIntCmd.tlb"                      named_guids no_namespace
#import "C:\Program Files\FileNet\AppInt\FnAppIntHttpRequest.dll"              named_guids no_namespace
#import "C:\Program Files\FileNet\AppInt\FnAppIntBrowserDlg.dll"               named_guids no_namespace
#import "C:\Program Files\FileNet\AppInt\FnAppIntHttpConnection.dll"           named_guids no_namespace
#import "C:\Program Files\FileNet\AppInt\FnAppIntResources.dll"                named_guids no_namespace
#import "C:\Program Files\FileNet\AppInt\FnAppIntClientRecordBase.tlb"         named_guids no_namespace
#import "C:\Program Files\FileNet\AppInt\FnAppIntClientStore.dll"              named_guids no_namespace
#import "C:\Program Files\FileNet\AppInt\FnAppIntSession.dll"                  named_guids no_namespace
#import "C:\Program Files\FileNet\AppInt\FnAppIntSessionLogin.dll"             named_guids no_namespace
#import "C:\Program Files\FileNet\AppInt\FnAppIntCmdComponents.dll"            named_guids no_namespace
#import "C:\Program Files\FileNet\AppInt\FnAppIntOpenCmd.dll"                  named_guids no_namespace

In the application's primary .cpp source file:

// Instantiate the StdSessionLogin component
IStdSessionLoginPtr spIStdSessionLogin;
HRESULT hResult = spIStdSessionLogin.CreateInstance(__uuidof(StdSessionLogin));
if (FAILED(hResult)) { std::cout << "Could not create the StdSessionLogin component." << std::endl; _ASSERTE(0); } try {
// Initialize the StdSessionLogin component to create // a separate, non-unified login for the client application // by specifying the session / client application name. std::cout << "Initializing the StdSessionLogin component to use NON-unified login..." << std::endl; _bstr_t sessionName(_T("WordPerfect")); spIStdSessionLogin->InitializeViaSessionName(sessionName);
// Instantiate the AppIntSession component
IAppIntSessionPtr spIAppIntSession;
hResult = spIAppIntSession.CreateInstance(__uuidof(AppIntSession)); if (FAILED(hResult)) { std::cout << "Could not create the AppIntSession component." << std::endl; _ASSERTE(0); } // Initialize the AppIntSession component with the StdSessionLogin component
std::cout << "Initializing the AppIntSession component..." << std::endl;
spIAppIntSession->Initialize(spIStdSessionLogin); // * The Client Application may invoke a SessionLogin here; otherwise, // * it will automatically be invoked as needed when commands are executed. std::cout << "Checking Login Status..." << std::endl; VARIANT_BOOL bIsLoggedIn = spIAppIntSession->IsLoggedIn(); if (bIsLoggedIn == VARIANT_TRUE) { std::cout << "User is currently Logged In." << std::endl; } else {
std::cout << "User is NOT currently Logged In." << std::endl;
std::cout << "Attempting Login..." << std::endl;
hResult = spIAppIntSession->Login(); if (FAILED(hResult)) { std::cout << "Login failed." << std::endl; _ASSERTE(0); }
std::cout << "Login succeeded." << std::endl; } // Instantiate the custom Open command component IOpenCmdPtr spIOpenCmd;
hResult = spIOpenCmd.CreateInstance(__uuidof(OpenCmd));
if (FAILED(hResult)) {
std::cout << "Could not create the Open command component.\n"; _ASSERTE(0);
} // Create the list of allowable MIME types const DWORD cNumElements = 4; long lCount = 0; COleSafeArray saMIMETypes(VT_BSTR, cNumElements); {
long lIndex = 0;
_bstr_t bstrWordMimeType(_T("application/msword"));
saMIMETypes.PutElement(&lCount, bstrWordMimeType.copy()); lIndex++;
_bstr_t bstrExcelMimeType(_T("application/vnd.ms-excel"));
saMIMETypes.PutElement(&lCount, bstrExcelMimeType.copy()); lIndex++;
_bstr_t bstrPPTMimeType(_T("application/vnd.ms-powerpoint"));
saMIMETypes.PutElement(&lCount, bstrPPTMimeType.copy()); lIndex++;
_bstr_t bstrTextMimeType(_T("text/plain"));
saMIMETypes.PutElement(&lCount, bstrTextMimeType.copy());
} _variant_t vMIMETypes((LPCVARIANT) saMIMETypes); // Initialize the custom Open command component with the // page title and supported MIME types. _bstr_t bstrPageTitle = (_T("Customized Open Operation")); std::cout << "Initializing the Open command component..." << std::endl; spIOpenCmd->Initialize(bstrPageTitle, vMIMETypes); // Execute the Open command and capture the response component std::cout << "Executing the Open command..." << std::endl; IAppIntCmdPtr spIAppIntCmd(spIOpenCmd);
IAppIntRspPtr spIAppIntRsp = spIAppIntCmd->Invoke(spIAppIntSession);
// Determine if the command failed, before accessing response component data hResult = spIAppIntRsp->GetHResult(); if (FAILED(hResult)) { std::cout << "The Open command failed to execute." << std::endl; // Examine the error information provided in the standard response component _bstr_t bstrErrorName = spIAppIntRsp->GetErrorName(); std::cout << "ErrorName=" << ( bstrErrorName.length() ? (LPCSTR) bstrErrorName : _T( "" ) ) << std::endl; _bstr_t bstrErrorMsg = spIAppIntRsp->GetErrorMsg(); std::cout << "ErrorMsg=" << ( bstrErrorMsg.length() ? (LPCSTR) bstrErrorMsg : _T( "" ) ) << std::endl; _bstr_t bstrErrorDetails = spIAppIntRsp->GetErrorDetails(); std::cout << "ErrorDetails=" << ( bstrErrorDetails.length() ? (LPCSTR) bstrErrorDetails : _T( "" ) ) << std::endl; _ASSERTE(0); } else { std::cout << "The Open command succeeded." << std::endl; // Obtain the information contained in the custom OpenRsp component IOpenRspPtr spIOpenRsp(spIAppIntRsp);
_ASSERTE(spIOpenRsp != 0); std::cout << "Details for the item selected by the user:<< std::endl; std::cout << "FileName=" << (LPCSTR) spIOpenRsp->GetFileName() << std::endl; std::cout << "ContentID=" << (LPCSTR) spIOpenRsp->GetContentID() << std::endl; std::cout << "Operation=" << (LPCSTR) CItemTypeConverter::EnumToBSTR(spIOpenRsp->GetCmdAction()) << std::endl; // Obtain the information contained in the custom OpenRsp2 component IOpenRsp2Ptr spIOpenRsp2(spIAppIntRsp); _ASSERTE(spISOpenRsp2 != 0); std::cout << "MIMEType=" << (LPCSTR) spIOpenRsp2->GetMimeType() << std::endl; // Display the information about the selected ObjectStoreItem IObjectStoreItemPtr spIObjectStoreItemSelected = spIOpenRsp->GetObjectStoreItem(); _ASSERTE(spIObjectStoreItemSelected != 0); std::cout << "ObjectStoreName=" << (LPCSTR) spIObjectStoreItemSelected->GetObjectStoreName() << std::endl; std::cout << "ItemType=" << (LPCSTR) CItemTypeConverter::EnumToBSTR(spIObjectStoreItemSelected->GetItemType()) << std::endl; std::cout << "VersionSeriesID=" << (LPCSTR) spIObjectStoreItemSelected->GetVersionSeriesID() << std::endl; std::cout << "VersionID=" << (LPCSTR) spIObjectStoreItemSelected->GetVersionID() << std::endl;
} ...