In Microsoft HPC Server 2008 R2, we offer HPC Services for Excel 2010. As part of this feature, we provide a framework for running Excel workbooks on a cluster through the ExcelClient component. As this is a developer framework which we expect to support in future versions of HPC Server, we have developed a comprehensive versioning plan to ensure that your development investment is sustained across future versions of our product.
To adhere to the versioning guidelines we expect to follow in the future, the only thing we require is for VBA developers to implement the HPC_GetVersion macro in their workbooks as described in the existing documentation here. Since this release represents the first version of the HPC Services for Excel, “1.0” must be returned by the HPC_GetVersion function. With this information, the ExcelClient component will know that the workbook has implemented version 1.0 of the macro framework specification which supports the partition/execute/merge pattern for distributed computation of the Excel workbook, and thereby allow future versions of the ExcelClient component to provide expected behavior even if features are added or changed.
Future Versioning Plans
In future releases, one or more of the following features may undergo revisions:
The .NET interfaces will all follow strict versioning guidlines and adhere to Microsoft guidelines for obselescence of any public members.
The COM interface, IExcelClient, will always be strictly versioned so that code written targeting the current interface will never be broken. For each revision of this interface, IExcelClient will be assigned a new GUID and an IExcelClientVx will be created with the previously assigned GUID where x is the previous version. So in the next revision of this interface, we will provide both an IExcelClient and IExcelClientV1 interface.
Developers are encouraged only to use the IExcelClient interface, as Excel’s VBA environment uses name-based type resolution and this will better allow workbooks written targetting the next version of the interface to work on computers which only have the current version installed. The IExcelClientV1 interface will be included to allow other COM clients which cache GUIDs to be compiled with the current binaries and continue to work on future versions without recompilation.
If VBA developers would like to design their workbooks such that they make use of new APIs only provided in future versions of the IExcelClient interface but also would like to work when used on a client with the current version of the product, they must check the IExcelClient.Version property at runtime and only call APIs provided in version X when version X or higher is returned. This will allow developers to explicitly fall back into a compatibility mode where only APIs provided in the current release, 1.0, are used, or produce a useful message to the user stating the requirements to run the workbook.
If a feature is added to the IExcelClient that is exposes a feature that is not available in the current release of the HPC Server product and a cluster running the current version is targeted, the user will receive an error at runtime which explains any incompatibility.
Separately from the IExcelClient interface, the macro specification may change. In this case, a new version of the macro specification will be published. Workbooks that wish to use the new framework will have to return the specified version in HPC_GetVersion (“2.0” rather than “1.0” for example). Workbooks that wish to support multiple macro specifications will be able to return a list of versions (either as a string or variant). If such a workbook is run on a computer with the current release installed, the “1.0” macros will be used, while a computer with the latest release installed will use the latest macro specification.
If the workbook does not implement version “1.0” of the macro specification and is used on either a client or a cluster with the current release installed, the user will receive a runtime error stating that the workbook is not supported.
The current version of the ExcelService exposes a service contract which will follow strict versioning guidelines so client code written targetting the current service will work on future versions of this service. If additional functionality is added to this contract, it will only be used by future versions of the ExcelClient component. In the case that some added functionality in a future version of ExcelClient requires features not available in the current release of the ExcelService, a runtime error will be generated explaining any incompatibility.