Provisioning engines call the GetRollbackData and SetRollbackData methods to store and retrieve rollback data. For example, if a procedure creates a registry key and values, the engine calls SetRollbackData to save the key path in the transaction log. After a crash, the engine calls GetRollbackData to retrieve the key path from the transaction log so rollback can delete the key. An engine can also call FlushRollbackData whenever it needs intermediate checkpoints for rollback data since, by default, the engine only flushes rollback data after the procedure returns successfully.
In addition to supporting rollback, the engine uses IProvHelper to pass non-XML transaction data between providers. Engines call the AddProperty, DeleteProperty, and QueryProperty methods to add, delete, and query properties in the transaction's property bag. The property bag contains keyed objects common to all providers. By default, any provider procedure in the same transaction can access values from the property bag. In addition to properties added by providers, the property bag also includes the system properties listed in the following table.
|tipUrl||VT_BSTR||Points to the Transaction Internet Protocol (TIP) URL for the transaction.|
|dtcTransactionObj||VT_UNKNOWN||Points to the ITransaction object associated with the current transaction.|
|transactionId||VT_BSTR||Contains the transaction ID that MPF uses to identify the request. This value is the same as \executeXml\context\transactionContext\@transactionId.|
IProvHelper is implemented in MapsProcCntl.dll. It inherits from IDispatch.
When a provisioning engine processes a transaction involving a provider procedure, it passes an instance of IProvHelper to IProvProvider::ActivateProvider. Custom providers developed using the templates installed by the MPF SDK implement ActivateProvider as follows:
Developers writing providers on other platforms must manage references to the object passed in the ActivateProvider call.
|AddProperty||Adds a key name/value pair to the provisioning transaction's property bag.|
|DeleteProperty||Removes a key name/value pair from a provisioning transaction's property bag.|
|FlushRollbackData||Saves rollback data to a persistent store.|
|GetRollbackData||Retrieves rollback data associated with a provider action.|
|QueryProperty||Queries the property bag for the value of a key name/value pair. Returns the property.|
|SetRollbackData||Sets rollback data associated with the provider action.|