What is a Subscription License?
A Subscription License is used to effect a licensing scheme whereby the customer is maintaining a regular payment schedule and the software should mirror this by extending the right to use the software until the end of the currently paid period (which is calculated relative to the commencement date of the contract).
During a given period, the activation of the license yields time-limited access to the software. At the end of that period, the license becomes inactive until a renewal (retrieval of an updated license pertaining to the new period) is completed.
Consider a 1 Month Subscription License issued on 01 Jan 201X: at the end of each monthly period the license is renewed until the end of the next period:
The key point to note is that, irrespective of when the license is activated/renewed, the Expiration Date is calculated relative to the Issue Date and NOT the Activation Date.
Subscription vs Time-Limited Licenses
Unlike a Subscription License, a Time-Limited license will expire after a predefined period calculated relative to the Activation Date, not the Issue Date. Additionally, a Time-Limited license is not renewable and would need to be reissued in order to effect any change to the Expiration Date.
Issuing a Subscription License
To issue a Subscription License, select the Licenses tab on the main menu and then Issue New License option in the left-hand navigation bar. In the Lifecycle section select Subscription option to set the required Subscription Period and Grace Period.
Subscription Period
The period of a Software Potential subscription license is denominated in calendar Months (entering 1 year 6 months translates to an 18 calendar month cycle).
Grace Days
At the end of each period, the software will normally cease to function immediately until the license is successful renewed.
In order to smoothly handle delays or other issues with renewal processing, one should strongly consider applying a number of Grace Days which allows the software to remain functional pending the completion of renewal. Note that the expiration date still continues to be computed relative to the start of the contract (i.e. the customer does not gain any advantage as a result of a renewal being 'delayed').
Auto-renewal Option
By default Subscription Licenses are set to Auto-renew. This means all renewal requests against the Software Potential service will be automatically approved without any intervention by the Licensor. If you wish to explicitly manage the approval of renewal requests then one can disable auto-renewal by unchecking the Auto-Renew checkbox.
Activating a Subscription License
When a Subscription license is activated, its Expiration Date is set as an offset to the License Issue Date, the date on which the license is created. On activation the Expiration Date is set such that the license is valid until the end of the current period, irrespective of when the activation takes place.
The following is an example of how the Expiry Date is set for a 1 Month Subscription License, depending on when the license is activated:
The key point is that the Expiry Date is always calculated from the Issue Date, not the Activation Date.
Issuing a Subscription License Programmatically
To issue a Subscription License programmatically using the Software Potential web service, in addition to the usual license properties required you will need to set the the followingLicenseInfo
properties specific to subscription licenses:
- IsRenewable
- Subscription Period
- Grace Days
- Autorenewal (Optional)
- Start Date (Optional)
IsRenewable
The LicensInfo.IsRenewable
property must be set for a subscription license.
Subscription Period
Add the L:SubscriptionLicensePeriod
custom tag to LicenseInfo.CustomTags
and set its value to the required subscription period in calendar months e.g. for an annual subscription period set the value to 12.
Grace Days
Set the LicenseInfo.Limitations.GracePeriod
to the required number of grace days allowed.
Renewal
The L:SubscriptionRenewUntil
Custom Tag controls renewals of the subscription license. The subscription license can be renewed up to and including the date value set.
Subscription licenses are issued with Auto-Renew property set by default and you do this programmatically by not adding the L:SubscriptionRenewUntil
tag to the license. To disable Auto-Renew on issue the L:SubscriptionRenewUntil
tag must be added and its value set to the date of issue.
Please see the later section on Controlling Renewals for details on how to control ongoing renewals of the license once activated using the web service API calls.
StartDate
By default the StartDate will default to the issue date. However if you wish you can set a specific period start date using LiceneInfo.Limitations.StartDate
e.g. to synchronize the subscription period of several subscription licenses issued on different dates.
Renewals
An attempt can be made to renew a Subscription License at any stage; the renewal request can be submitted:
- Prior to the expiration of the period.
- During the Grace Period (After the expiration, but while the license is still valid during the Grace Days after the Expiration Date).
- After the Grace Period has elapsed (at which point licensed code would no longer be functional).
A renewal request made after the Expiration Date of the license will extend the license for another period. However, a renewal request made prior to the Expiry Date of the license will not advance the Expiration Date i.e., it is not possible to extend the duration of a subscription license prior to completion of the current period.
The following table shows the effect of different renewals attempts on the Expiration Date of a 1 Month Subscription License:
Controlling Renewals
Typically a licensor wishes to be in position to approve/control attempted renewals of subscription licenses, to ensure that commercial conditions associated with the renewal have been met e.g. that the required subscription payment has been made by the customer.
Subscription licenses are Auto-renewable by default, i.e., any attempt to renew the license will be automatically approved without any intervention.
If one wishes to control renewals of a given license (e.g. approve it each renewal based on receipt of a corresponding subscription payment) then one can turn off Auto-renewal for that license. This means the license issuer must explicitly approve each renewal of the given license either:
- Manually using the Software Potential license management UI or
- Programmatically via the License Management web service.
Using Software Potential UI
When one views the details of a Subscription License that has Auto-renewal turned off, the date until which renewals are authorized is shown as the Renewal Authorized Until date. This date initially defaults to one period unit from the license Issue Date.
Any renewal request made prior to this date will be fulfilled; any attempted renewal after this date will be refused.
To approve renewals for the selected license. one can adjust the Renewal Authorized Until date by the required number of periods. Clicking the "+" / "-" buttons increments/decrements the date by one subscription period.
In our earlier example extending the Renewal Authorized Until to June 30 ensures this license can be renewed for the next period once the current period expires.
One can re-enable Auto-renewal at any point by checking the Auto-Renew checkbox while viewing the license details.
Using Software Potential Webservice API
It is also possible to manage the following aspects of Subscription License Renewals using the License Management webservice API :
- Disable Auto-renewal
- Re-enable Auto-renewal
- Increment the Renewals Authorized Until date
- Set a specific Renewals Authorized Until date.
To disable Auto-renewal for a given license one calls DisableAutoRenewal() with the LicenseId of the license to be disabled:
public static void DisableSubscriptionLicenseAutoRenewal( License license, UserCredentials Credentials)
{
using (var client = CreateLicenseManagementClient(credentials))
{
client.DisableAutoRenewal(license.LicenseId);
Console.WriteLine("License {0} is disabled for autorenew", license.ActivationKey);
}
}
To enable Auto-renewal call EnableAutoRenewal():
public static void EnableSubscriptionLicenseAutoRenewal(License license, UserCredentials credentials)
{
using (var client = CreateLicenseManagementClient(credentials))
{
client.EnableAutoRenewal(license.LicenseId);
Console.WriteLine("License {0} is enabled for autorenew", license.ActivationKey);
}
}
To authorize renewals for one or more future periods (i.e., increment the licence's existing Renewal Authorized Until date) one calls AuthorizeRenewal() with the LicenseId of the license to be approved and the number of periods required:
public static void AuthorizeSubscriptionLicenseRenewal(License license, int numberOfPeriods, UserCredentials credentials) { using (var client = CreateLicenseManagementClient(credentials)) { client.AuthorizeRenewal(license.LicenseId, numberOfPeriods); Console.WriteLine("License {0} is authorized for renewal for {1} License Periods", license.ActivationKey, numberOfPeriods); } }
Finally one can set an arbitrary Renewals Authorised Until date by calling SetSubscriptionRenewUntil() with the LicenseId and the desired DateTime:
The supplied date only controls the last date at which a renewal will be permitted; the resulting Expiration date is computed in the normal manner - the end date of the period during which a given activation takes place.
public static void SetSubscriptionLicenseRenewUntil(License license, DateTime renewUntil, UserCredentials credentials) { using (var client = CreateLicenseManagementClient(credentials)) { client.SetSubscriptionRenewUntil(License.LicenseId, renewUntil); Console.WriteLine("License {0} RenewUntil is set to {1}", license.ActivationKey, renewUntil); } }
Renewal of Subscription Licenses Using Runtime API
Your application is responsible for renewal of subscription licenses when due. In SpAgent it is possible to renew a subscription license at any stage after its RenewedUntil date is reached, even after the Grace Period has expired.
To renew subscription licenses you first query the SpAgent runtime API to get a list of all subscription licenses due for renewal.
var licenses = SpAgent.Product.Licenses.DueForRenewalNow();
Then, for each expired subscription license to be renewed, you must activate the license using the license Activation Key. This can be done using either online or manual (offline) activation mechanism.
Please see the Subscription sample application on GitHub for more details on how to implement Subscription licensing using the SpAgent runtime API.
Comments
0 comments
Article is closed for comments.