Release Objectives
The primary objective for the Cobalt 4.0 Release was to:
- Implement the architectural foundations (referred to as “Middle Out”) to successfully run a higher volume Dynamics 365 customer in Microsoft’s cloud, so that we can confidently plan for subsequent product releases needed to upgrade existing high volume customers and handle new high volume customer acquisitions.
- Fulfill functionality and feature commitments to clients.
Expected Benefits
The Cobalt 4.0 release will be considered a success if the following criteria are met.
- All priority bugs and features selected for inclusion in the release are implemented or fixed during this project.
- Cart Checkout process now writes data to a transitory database and then is synced back to D365 using Azure Functions, instead of being directly written to D365; thereby reducing the number of direct API hits for the area of most critical revenue-related functionality.
- Portal users can use multi-factor authentication (MFA) by leveraging Entra External ID.
- eCommerce data is synced from D365 to Business Central.
- Infrastructure is reorganized to accommodate security and operational needs for Middle Out, including hosting in Azure.
Supported CRM Versions
D365 On-Premises
We are not supporting D365 on-premises as part of this release at this time, and regression testing was not done on an on-premises environment. We plan on supporting v9.1 on-premises with the next release of 4.1
D365 Online
We continue to support the latest version of Dynamics 365 Online with the 4.0 release.
Cases and Background
“Middle Out” – Decoupling of the Shopping Cart
The highlight of this release was to mitigate the impact of service protection limits on the product, specifically around the point where we collect payment transaction information. “Middle Out” encompasses all of the work needed to enable us to plan migration to online and support high volume customers by reducing the number of direct API hits related to most critical revenue-related functionality. The user experience is intended to stay in-line with shopping cart experiences in versions 3.9+.
Load testing was done in this release, through the scenario of a meeting registration on the portal. The results of load testing confirm significant improvements to the Universal Cart checkout process. However, please be aware that Microsoft’s scaling strategy cannot be relied upon to handle high-volume traffic coming from web applications. Upgrading to this version should include load testing for any anticipated high volume scenarios.
Portal Facing Features
| Case | Title | Description |
| 48441 | Update Release Pipelines to use App_Offline.htm for Taking Sites offline | This case introduces a maintenance page that appears during an automated release. The page allows for a more graceful redirect for users who navigate to the site during a release/deployment. |
| 49446 | Portal Blank Error Page – Misconfiguration & Hitting Service Protection Limits | This case provides a smoother user experience when users are on the portal and encounter service protection limits or other exceptions. The portal will display a generic Error.aspx page with configurable user-friendly messaging. For troubleshooting, additional logging has been included as part of this case. Note that the generic error page will not display any page text or web element site navigation tabs, but will display the Home button. |
Back End Logic
| Case | Title | Description |
| 44278 | File Storage Strategy: Long Running Process Logging | This case introduces an on-premise logging location for long running process logging, in order to get around any interruptions in the system when service protection limits (or other exceptions) are incurred. Slight performance improvements are an additional benefit of this. |
| 49414 | Deadletter queue handling | This case introduces the ability to display error messages/failures that occur during transaction processing in the supplemental database. The system will attempt to create an Integration Log record in CRM for error messaging. If, for whatever reason, after 3 attempts this is not successful, the system will instead persist the message as a blob message in a corresponding storage account. Error messages will display in CRM with the subject “Deadlettered Message”, with logs in a readable format. |
| 50247 | Stat Logging Added to Transactional DB Interactions | This case reworks the central logging system for external callouts so that actions done against the supplemental database can be viewed through this logging. Note that this logging is not meant for general debugging by organization staff. |
| 50258 | Improve Logging Capabilities for Transaction Fulfillers | This case updates how Message Processors log information to the Azure Function so that there is additional logging for certain actions.Out of the box, the following actions will result in logging:* When free orders get auto-fulfilled for being free (one-click registration)* When meeting registrations are submitted* When enrolling or unenrolling into auto-renewal for memberships/dues |
ISV Improvements
This release introduces changes to the way that ISV wizards in the CRM are opened – previously ISV wizards would open in a lightbox overlayed on top of Dynamics. As of version 4.0, ISV wizards will open in a new tab. This was done in part to support ISV-specific authentication and increase security. The same behavior is true when opening “View Query” redirects, which will also open in a new tab. iFrame ISV processes are no longer supported.
A new wizard, “Bulk Order Generation” was also introduced in this release, and minor fixes were made to surface some ISV wizards that were missing in prior Cobalt versions.
Back End Logic
| Case | Title | Description |
| 50479 | All ISV processes displaying a broken page and not working | This case updates the logic associated with opening ISV wizards so that they no longer open in a lightbox. Instead, ISV wizards will open in a new tab. |
| 51171 | Ability to Bulk Create Orders | This case introduces the Bulk Order Generation Wizard, which allows for the bulk creation of Order records by staff in the CRM for any given set of Contacts. As part of the wizard, users can select the desired naming convention for Orders to be generated with, use a saved view to identify the related Contacts, and select the related sales order Products. A verification page was also implemented as a part of this functionality, so that staff can review the saved view’s list of Contacts for accuracy prior to generation. The order generation page will auto-refresh until completed, but generation will continue even if the user navigates away from the wizard page. Orders generated as a part of the Bulk Order Generation Wizard will have a lookup to the “Bulk Order Generation” entity, for tracking and logging purposes. |
| 51593 | “View Query” Advanced Find redirect opening in existing tab, not new tab | This case mirrors work done for ISV wizards in this release for the “View Query” button. Selecting this option in the ribbon now opens Advanced Find in a separate tab. |
| 52454 | Unable to Open Cron Job Query | This case mirrors work done for the “View Query” Advanced Find redirect and expands it to viewing queries for queried cron jobs. Selecting “View Query” on a queried cron now opens Advanced Find in a separate tab. |
| 52533 | Bulk Order Generation Wizard – Cannot easily add back a Product immediately after deleting it | This case builds upon the Bulk Order Generation Wizard introduced in this release so that the lookup field for Products automatically clears, to allow for easier re-adding of Products. |
| 52549 | Bulk Order Generation Wizard | Should include “Cancel” button to stop Order generation | This case builds upon the Bulk Order Generation Wizard introduced in this release so that the order generation process can be stopped at any time, preventing additional Orders from being created and setting the “Bulk Order Generation” to a cancelled state. Note that any existing Orders already created will not be cancelled or deleted as part of this functionality. This case includes a system view of “Cancelled Bulk Orders” to facilitate the deletion of any Orders generated by the wizard prior to cancellation. |
Entra External ID
A major goal of this release was to support the use of multi-factor authentication (MFA) via leveraging Entra External ID as our Customer Identity and Access Management (CIAM) provider for Cobalt Portal users. Currently this feature is available only to online customers.
Portal Facing Features
| Case | Title | Description |
| 49216 | External Entra ID: Passing Roles | This case implements role-based access for Entra External ID and role syncing so that users will have corresponding CMS user roles to their Entra group memberships. |
| 49446 | Portal Blank Error Page – Misconfiguration & Hitting Service Protection Limits | This case provides a smoother user experience when users are on the portal and encounter service protection limits or other exceptions. The portal will display a generic Error.aspx page with configurable user-friendly messaging. For troubleshooting, additional logging has been included as part of this case. The generic error page will not display any page text or web element site navigation tabs, but will display the Home button. |
Back End Logic
| Case | Title | Description |
| 44286 | OIDC/OAuth for the ISV | This case updates the Cobalt ISV so that ISV applications now authenticate based on the logged-in user. Users who directly access ISV urls who are not logged in will be redirected to login prior to being able to access the session. This functionality is limited to online instances of Cobalt 4.0. On-premises instances will function as in prior versions. |
| 50306 | Data Load Users into Entra External ID | This case implements the ability to pre-load existing Cobalt contacts into Entra External ID, so that organizations who would like to start using Entra can import their existing client base without duplicative record creation. |
Integrations
This release includes the implementation of a new out-of-the-box integration with Business Central, so that eCommerce data can be synced from Cobalt to Business Central. This is a uni-directional sync, and assumes that Business Central is the “source of truth” regarding General Ledger Account information. Please note that we are supporting only summary-level information for the integration at this time.
Integrations for PathLMS BlueSky (e-learning products), PearsonVUE (exam scoring), and Higher Logic also have been introduced or updated.
Business Central
| Case | Title | Description |
|---|---|---|
| 48064 | D365 sync to Business Central | This case extends the Accounting Export wizard so that posted batches can then be exported into Business Central automatically. Note that only GL summary-level data will be created. |
| 51175 | Business Central – Generate File of Errors When Moving Batches from D365 to Business Central | This case builds upon the Business Central integration introduced in this product release. When errors occur in the Accounting Export Wizard’s import-to-an-external service (“the Business Central integration”), all status messages that display errors will be consolidated into a downloadable file. When errors occur as a part of an import, all lines are deleted in Business Central. If an error occurs, all Batches related to the failed export will be moved to a new “Batches related to Failed Exports” view that can be selected upon retry. If retry passes, those Batches will be moved out of the view, preventing any duplicate lines created during retries. |
BlueSky (PathLMS)
| Case | Title | Description |
|---|---|---|
| 49275 | BlueSky Meetings – PE Products Integrations | This case implements the structure needed for an out-of-the-box integration with PathLMS BlueSky, to allow for BlueSky products to be purchased from the Cobalt Portal, and have those purchases reflected in BlueSky. Product records in CRM will need to be configured and correspond to a matching BlueSky product as a part of this functionality. Entra External ID will be used for SSO. |
| 49680 | BlueSky w/ OpenId Connect Enabled | This case extends the BlueSky implementation to allow for additional data points to be transmitted more easily and configurably. Additionally, the integration can optionally utilize the Entra ID of a Contact as a unique identifier if enabled to use OpenID Connect. |
| 50813 | BlueSky: SAML Pass-Through for OpenID Connect | This case introduces a SAML pass-through for OpenID Connect, in cases where vendors are unable to appropriately parse data via OpenID Connect. When vendors initiate a SAML SSO flow, Cobalt will use an OpenID Connect flow with Entra. Upon the completion of that flow with Entra, Cobalt will complete the SAML SSO flow with the vendor. |
PearsonVUE
| Case | Title | Description |
|---|---|---|
| 49276 | PearsonVue SFTP Results Processing | This case includes the schema and underlying structure needed to utilize PearsonVue’s secure file transfer system, which can be used to import results into Dynamics. |
| 50211 | Document Reference Download | These two cases surround the implementation of document reference download and storage, so that Cobalt is able to better handle integrations that require accessing files uploaded to an SFTP server (such in the case of accessing exam results from a testing vendor) and storing those files in a dedicated storage account for later access. |
| 50212 | Document Reference Storage Account Integration |
Higher Logic
| Case | Title | Description |
|---|---|---|
| 51562 | Higher Logic Integration: IsActive Should Be Set Based On StateCode, Not Hardcoded | This case updates the Higher Logic integration so that Contacts or Accounts that are deactivated in CRM are deactivated accordingly in Higher Logic. |
Profile Management
This release includes updates and changes to the profile management process on the Portal and within the Dynamics CRM, with the goal to improve user experiences and capture more information about users.
Portal Facing Features
| Case | Title | Description |
| 49266 | Profile Management – Updates to Phones, Addresses, Regions | This case updates the profile setup and update process to require at least one phone number, and requires Country to be set if any other address fields are entered as part of the profile creation/update process.This case also introduces a third set of address fields (“Address 3”) on the Contact and a new related entity to Country, called “Region”, to allow for more detailed data collection and organization. |
| 49273 | Portal – Ability to Edit Profile Pictures / Headshots | This case updates the portal’s profile picture/headshot functionality to allow for multiple uploads by users without staff intervention. |
| 49672 | Shipping Address | This case introduces the ability to control the display of the addresses that are displayed as a part of the “Same As” selectable options when filling out address blocks. Please note that if not set, the default value is set to 2 “Same As” addresses (Mailing/Billing) to be displayed. This is relevant primarily for payment pages, and does not impact the user profile setup experience. |
| 51177 | Member Directory | This case implements a publicly-accessible member directory for Contacts, where people can search by first name, last name, and company (account) name. Contacts are able to control the information displayed about them on the directory, and can opt into displaying a full profile (full name, membership information, address, email, phone, and employer), a limited profile (full name, membership information, employer), or not at all (does not display in the directory). Likewise, Member Types can be configured to show related memberships in the directory or not. |
Back End Logic
| Case | Title | Description |
| 49672 | Shipping Address | This case introduces the ability to control the display of the addresses that are displayed as a part of the “Same As” selectable options when filling out address blocks. Please note that if not set, the default value is set to 2 “Same As” addresses (Mailing/Billing) to be displayed. This is relevant primarily for payment pages, and does not impact the user profile setup experience. |
Forms
This release includes updates to Forms functionality to allow for smoother user experiences – both for creating forms, and while interacting with them.
Portal Facing Features
| Case | Title | Description |
| 51204 | Generalize Hint Text on All Auto-Complete Text Boxes | This case introduces generalized hint text on auto-complete text boxes on forms. The default instructions text now display “Start typing to search…” in auto-complete text fields to provide better user experience for fields of this type. |
Back End Logic
| Case | Title | Description |
| 49278 | Forms Question Logic | Form questions set up with conditional logic to conditionally display and/or require will now have that logic run in real-time. |
| 51174 | Enforce Unique Selection – Language for Other Response Fill in in Demographics | This case increases the configurability of form questions by offering validation to enforce the unique selection of options. This is for multi-select checkbox list question types. Forms that have multi-select options occasionally will have options that do not make sense to be selected at the same time (e.g. “Other”, “I do not wish to answer”, “All of the above”). When a question has unique selection options enabled, other selections cannot be made when the unique selection option is chosen. |
| 51629 | Extend ILabeledEditFormControls to include optional Help Text | This case introduces configurable help text on Forms, so users can configure text below the label of a question to provide additional instructions or context.This text is visible regardless of values entered in the question field (unlike validation messages), and is specific to individual questions (unlike page text). |
Quality of Life Features & Bug Fixes
This release also brings in new features and fixes existing bugs to improve upon the user experience in both CRM and the Cobalt Portal.
Products and Payments – Portal Facing Features
| Case | Title | Description |
| 22436 | Remove Duplicate Product Description on Online Store Details Page | This case removes the duplicate Description that would appear on product details in the Portal. Descriptions for stand-alone products will now only appear above the quantity and “Add to Cart” controls. |
| 46080 | Products with display names larger than 3 lines causing page spacing issues in Shop | This case fixes standalone shop spacing issues when multiple products have multi-lined product names. |
| 49087 | Unhandled Exception when checking out via the Universal Cart with a free ($0) order | This case fixes a known bug where checking out with free ($0) product(s) causes an error to show. Now users will be able to go through a transaction where the Order Total is $ and successfully complete that free transaction without error. Receipts are also generated properly and show a $0 balance, and are printable without issue. |
| 50245 | Authorize.NET Payment Plan Payment Profile Update Issue | This case brings in the work that was done in the 3.10.2 version of Cobalt’s product, so that payment profiles associated with payment plans can be updated. |
| 52499 | Unable to switch currency and register for Meeting if only eligible for non-default currency on Portal | This case expands multi-currency functionality for the Portal so that users are able to toggle between different currency types, even if they are not eligible for the default Currency that is set up. |
Products and Payments – Back-End Logic
| Case | Title | Description |
| 11822 | Resolve Coupon Naming Strategy | This case removes the automatic population of Coupon names via a pre-determined naming strategy. Staff members can now create coupon records with any given name. |
| 51172 | Bulk Discounts Functionality | This case expands the coupon functionality by introducing the ability to utilize a coupon for multiple products, rather than enforcing a unique coupon per product record. This is only applicable for the certain coupon types: *Product (Single) – Dollar Amount*Product (Single) – Percentage Amount*Product (All) – Dollar Amount*Product (All) Percentage Amount |
| 51179 | Send Invoices and Receipt Emails to Customers on Demand | This case introduces the “Send Invoice” ribbon button on the Order record, which displays order details and any relevant invoice payments made related to that Order, and can be sent in an email to any number of recipients. |
| 52470 | Process Payment Wizard Cash/Check Payment Receipt Page shows Balance greater than $0 | This case updates the Receipt page on the Process Payment Wizard so that when payment is by cash or check, the “Balance” displayed is an accurate value. |
| 52604 | Quantity On Hand does not update when a product is purchased | This case fixes a known issue with sales inventory Products that are published to the portal did not have their quantity reduced when the product was purchased. Quantity on Hand value now decreases appropriately when orders are fulfilled. |
Applicant Management (Certification & Membership)
| Case | Title | Description |
| 40550 | Error on switching between Membership Applications | This case allows for users to begin a membership application and abandon it to apply for a different member type. |
| 49665 | Date Submitted Field Not Populating on Continuing Certification Application Records | This case introduces the mapping of data to the “Date Submitted” field on a Continuing Certification Application record when the application’s status reason becomes “Submitted”. This establishes parity between Initial and Continuing Certification Application processes. |
Event Management
| Case | Title | Description |
| 11454 | Add ‘Add Attendee’ functionality to /RegistrationList.aspx when Contact has registered only others | Proxy registrations (where a user registers others for a meeting, but not themselves) have expanded functionality in this release. Registering users can register additional attendees after initial registration is completed. |
| 31475 | Clicking on ‘Complete Registration’ in the My Orders Tab creates an additional Order and Class Registration | This case fixes a known bug where users attempting to pay for their Class Registration would run into an error page if the Class was not yet published to the portal. |
| 49274 | Update Classes to Allow Cloning of Records | This case implements cloning for class records, mirroring the way that meetings can be cloned. Please note that cloning a class does not clone the begin and end dates. Cloning does also clone registration fees and any system queries on the fees. |
| 51176 | Meeting Registration – Multiple Guest Fees | This case expands the meeting registration functionality to allow staff to add more than one fee of a given registration type (guest, spouse, child). |
| 51178 | Allow Waitlisting for Classes and Meetings Without Requiring Payment Upon Submission | This case updates the waitlisting functionality for Meetings and Classes so that users who are waitlisted are not asked to input payment details until they are promoted off the waitlist. Order records will still be generated, but will be hidden from the portal until after waitlist promotion. |
| 52468 | One Click Meeting Registration created with Open Status Reason and Order greater than $0 | This case updates Meetings so that if one-click registration is enabled but the cost of the Meeting is greater than $0, no Orders or Meeting Registrations are generated. |
| 52479 | One Click Class Registration where Fee > $0 results in a fulfilled Order & Registration | This case mirrors work done with Meetings, for Classes. If one-click registration is enabled but the cost of the Class is greater than $0, no Orders or Class Registrations are generated. |
| 52490 | Receipt page duplicates Class Registration when cancel Meeting Registration | This case updates the Receipt page on the Portal when canceling a Meeting that has an affiliated Class, so that receipt page no longer shows duplicate Classes and Class Registration Fees for portal users. |
Misc. Display Updates
| Case | Title | Description |
| 36438 | Decimal Precision display in Custom Grids/Lists not respecting precision value | This case implements decimal precision on custom grid web elements in the Portal, so that decimal numbers are displayed with their appropriate place values. |
| 52530 | CRM Alerts and Portal Alerts show different sort order behavior | This case brings parity between the order that Alerts display on the CRM and on the Portal, so that the lower (numerically) value displays at the top of the list and follows an ascending sort order priority. |