Unlike previous iterations where a database migration is possible via
the package manage console. 4.1 to 4.2 schema is different enough that
that migration process would have failed. Instead we have built a new
schema for 4.2 starting a new set of migrations. This should not be
required for version 4.3 and forward.
The core actions to be taken with this 4.1 to 4.2 upgrade are:
- Create a new, empty database. We have been using a naming convention
of: CEF_[PROJECT_ABBREVIATION]_420, e.g. CEF_UMC_420
- Use RedGate Data Compare or the SQL Server Data Tools plugin in VS
2015 Data Compare to migrate the data over manually as much as
possible
- Manually copy any data that couldn't be moved with the above tools
using scripts
- Update the configs to point to the new database
- Implement the necessary changes to templates, especially:
- Product Catalog: price field name updates
- Product Details: price field name updates
- Cart: price field name updates, totals fields name updates
- Checkout: price field name updates, totals fields name updates
- Test/QA
- Push to production when all is ready
We suggest performing all of this on a local instance first to ensure
that you have all your necessary steps for the migration down. Then
perform the actual upgrade with the latest data after-hours.
This document was written during UMC's upgrade and all steps taken have
been recorded here.
¶ Part 1: Downloads and Checkouts, Initial Setup
- Use Git to check out 4.2.0/Dev-Master from the VSTS CEF Product
project to a local folder
- Use Git to checkout latest Website code from VSTS
- Ensure that the web.connectionStrings.config and
web.appSettings.config SiteSqlServer points to the dev DNN db
- You do not need to make a local copy of the DNN db
- Create a new empty database in local SQL2014 named CEF_UMC_420
- Added SQLLogin account db owner permissions to this db
- Setup connectionStrings configs throughout the local CEF 4.2
solution to point at this database with SQLLogin credentials
- There are connectionStrings files for multiple projects that
must all match. If the files are missing, copy them from another
4.2 client and update the values
- Do not try to add the values directly to the app.config or
web.config files. This will break source control.
- Setup the appSettings configs throughout the local CEF 4.2 solution
to:
- There are appSettings files for multiple projects that must all
match. If the files are missing, copy them from another 4.2
client and update the values
- Do not try to add the values directly to the app.config or
web.config files. This will break source control.
- Point at the local website checkout directory
- Use a local website URL such as local-42.umcdev.us
- Add this to the hosts file as 127.0.0.1
- Update the Tiered Pricing mode settings (set to false if the site
will use the standard pricing model instead of tiered pricing)
- Update the UPS, FedEx and default shipping address data
- Update the Avalara Tax settings
- Add the local IIS site setups for the Website and the API/UI
directories where appropriate for the CMS
- Set the binding for that site as local-42.umcdev.us (whatever the
project name is)
¶ Part 2: Building the solutions, TypeScript and DB Schema with Seed Content
- Open the CEF Solution in Visual Studio 2015
- Build the Solution
- Expand the Clarity.Ecommerce.UI project
- Navigate to framework/service/
- Right-click clarityEcomService.tt and select Run Custom Tool
- Press OK/Yes on any dialogs that may come up (if any)
- Open gulpfile.js from the root of UI
- Set devMode to false on line 14
- Close the gulpfile
- Open the Task Runner Explorer window in VS if it isn't already open
- View > Other Windows > Task Runner Explorer
- Click the Refresh button in the upper left of the pane
- After the Refresh button comes back, right-click buildAll and select
Run
- If there are Typescript errors in the build results, please
alert Eric, James G and/or Steven for assistance if you need
help resolving them
- Reopen the gulp file and set devMode to true then close the file
- Repeat the process of refreshing the Task Runner and running
buildAll again
- Populate the Database with schema and seed content
- Open the Package Manager Console if it's not already open
- View > Other Windows > Package Manager Console
- Select DataModel as the default project in the pane
- Type Update-Database into the console and press Enter
- The database schema should populate
- Refresh the view of the database in SSMS to see the tables present
- Open the ReSharper Unit Test Explorer
- Expand the Workflow.Testing section and find the SeedDatabase tests
- Run SeedDefaultData
- If this test fails, please alert James G or Steven
- Run SeedSampleData
- If this test fails, please alert James G or Steven
- Run a query on AccountTypes and Accounts tables in SQL Server
Management Studio (SSMS) to validate content went in
- Open the SQL Data Compare in VS (you may use RedGate instead if you
have it)
- Tools > SQL Server > New Data Comparison...
- Choose a Source Database, add a new connection if necessary
- Choose the local 4.2 database as the target by adding a new
connection
- Uncheck Identical Records from the comparison (it's an unnecessary
action for this)
- Click Finish
- The databases will be compared
- In the new Compare view, uncheck the dbo.__MigrationHistory table.
This is critical as it will prevent the 4.2 database from working if
it thinks it has the 4.1 schema and it doesn't.
- Go through any tables that say they have records only in target and
uncheck the Delete actions for those tables
- Run the Update command
- If there are errors trying to do this, the update will roll-back
the database to its previous point. You will not have to refresh
the comparison or restore the 4.2 database.
- Some errors may occur depending on client data such as nulls
going into non-null fields now. You will have to massage the
data in 4.1 to get passed these errors. One example is the
AccountAddresses TransmittedToERP column was previously nullable
but is now not. Setting all the values that were NULL to True
allowed the update to go through.
At this point, start spot-checking that all the data for essential
content moved as expected, create scripts manually to copy any remaining
columns or tables over that couldn't copy
¶ Part 4: Starting the website and updating templates
- Open the website in your browser, it may take a couple minutes to
load
- Open the Skin Template files in DNN Skins folder (.ascx files) and
replace the cef-store.js (in your storefront skins) and
cef-admin-dnn.js (in the Clarity Admin skin) with
ClarityEcommerce.js or ClarityEcommerceAdmin.js
- These were updated to prevent confusion with 4.1 versioned files and
have slightly a different set of contents so that the Task Runner
actions are about 9 times faster.
- Open each of the CEF template files that are in use in the site with
the IDE
- The following updates do not need to be performed in any particular
order, but are the results from multiple 4.2 upgrades and most if
not all will be part of your upgrade:
- Associated Product Detail Items:
- product.<property> is now product.AssociatedProduct.<property>
as the properties were moved off the AssociatedProductModel and
into a ProductModel property
- Cart Items:
- The Delete button should pass item.ID instead of item.CartItemID
- The item object now has ProductCustomKey instead of ProductCode
- The item has UnitCorePrice instead of UnitPrice. This is the
price before discounts are applied.
- UnitSoldPrice is a new value that reflects Discounts applied.
- ExtendedPrice replaces Price as UnitSoldPrice x Quantity for a
line item subtotal. Note that UnitSoldPrice could be 0, in which
case it is UnitCorePrice x Quantity instead.
- Cart Totals: Individual totals such as taxes and shipping have
been removed from the main model and placed into a specific
CartTotals object. In your template, where you were referencing
cartCtrl.currentCart.<some total> you must now enter
cartCtrl.current.Totals.<some total>. Also note that the names
of the totals have changed to simplify them:
- SubTotal (previously ItemsSubTotal or SubtotalItems)
- Shipping (previously ShippingTotal or SubtotalShipping)
- Tax (previously TaxesTotal, Taxes, SubtotalTax or SubtotalTaxes)
- Total (previously GrandTotal)
- Micro-Cart: replace mcc.cart.GrandTotal with mcc.cart.Totals.Total
(see the CartTotals object notes above)
- Product Details:
- BasePrice may only show the BasePrice value from the product. In
Multi-Tier Pricing environments (such as UMC and Pro-Tec). The
Tiered price will display in the SalePrice property. Be aware of
this for such customers.
- Product Catalog:
- Also for Multi-Tier Pricing environments, use UnitPrice in the
catalog item templates instead of price
- There may be other changes, especially around Discounts. We will
update this document if more are discovered.
- For DNN websites, CEF utilizes and Authentication hook that
enables an MVC style route in DNN to respond to CEF's requests
to authenticate users via a Token system. This functionality was
previously in the Clarity.Ecommerce.DNN DLL. We have separated
this to a new DLL named Clarity.Ecommerce.DNN.AuthHook to reduce
requirements. After compiling the CEF solution, place the
Clarity.Ecommerce.DNN.AuthHook and Clarity.Ecommerce DLLs into
the Website's Bin folder and remove the Clarity.Ecommerce.DNN
DLL, the Models DLL and the DataModel DLL. Note that the
bin/debug folder under the AuthHook project will contain
additional DLLs that are NOT necessary to copy into the DNN
website, and doing so may cause issues in DNN if you add them.
- If on the UserOnCartItemandSalesOrderItem migration from 4.3,
downgrade to FixAccountAddressToNonNullableBools before pulling
the 4.4 code down (that migration had to be removed and merged into
a 4.4 migration manually).
¶ How to Check if you are on UserOnCartItemandSalesOrderItem
- Open Sql Server Management Studio (SSMS)
- Connect to the SQL Server instance
- Expand Databases
- Expand the Database you are connecting to
- Right click on the dbo._MigrationHistory table
- Click Select Top 1000 Rows (you may have a different number from
1000 based on your settings)
- Scroll to the bottom of the results view
The last entry is the last migration you are on, if the entries contain
the UserOnCartItemandSalesOrderItem then you need to downgrade to the
migration before it. See below.
- Open the CEF Solution in Visual Studio 2015
- Open the Package Manager Console
- Tools -> NuGet Package Manager -> Package Manager Console
- In the console, select Clarity.Ecommerce.DataModel as the
Default Project
- Type in the following command and press Enter:
- Update-Database -Target:FixAccountAddressToNonNullableBools
Now you are ready to update to the version in 4.4. Switch to the
4.4.0/Dev-Master branch and compile the 4.4 code
- Open the CEF Solution in Visual Studio 2015
- Open the Package Manager Console
- Tools -> NuGet Package Manager -> Package Manager Console
- In the console, select Clarity.Ecommerce.DataModel as the
Default Project
- Type in the following command and press Enter:
¶ Known errors and how to solve them
Error: The ALTER TABLE statement conflicted with the FOREIGN KEY
constraint "FK_Shopping.Cart_Contacts.Contact_BillingContactID". The
conflict occurred in database "CEF_[MY DB]", table
"Contacts.Contact", column 'ID'.
Solution: You need to delete all the entries in the Cart table in
your Database
Error: Cannot Drop Table "System.Template" due to foreign key
Solution: In the migration file "SalesOverhaulPt1.cs" in the
project Clarity.Ecommerce.DataModel/Migrations , make sure the order of
the DropTables is : System.TemplateData / System.TemplateProperty /
System.Template
- Update client html templates to use the latest model names per the
Models section below
- In IIS, add a new Virtual Application next to API named
Reporting and point it at the
Clarity.Ecommerce.Service.Reporting folder
WARNING! Changes to these models will affect Templates, please review
this section thoroughly to determine if any templates you are working in
need to be updated!
The following models were dropped in favor of a single TypeModel (since
they all had identical properties):
- AccountTypeModel
- ContactTypeModel
- SalesOrderTypeModel
- PaymentTypeModel
- SubscriptionPaymentTypeModel
- SubscriptionTypeModel
- ProductAssociationTypeModel
- ProductTypeModel
- ProductReviewTypeModel
- ShipmentTypeModel
- CartTypeModel
- EntityTypeModel
- LibraryTypeModel
- SettingTypeModel
The following models were dropped in favor of a single StatusModel
(since they all had identical properties):
- OrderStatusModel
- SalesOrderItemStatusModel
- SalesOrderStatusModel
- PaymentStatusModel
- PurchaseOrderStatusModel
- SalesQuoteItemStatusModel
- SalesQuoteStatusModel
- ShipmenStatusModel
- UserStatusModel
The following models were dropped in favor of a single AttributeModel
(since they all had identical properties):
- RegionAttributeModel
- OrderItemAttributeModel
- ProductAttributeModel
- CartAttributeModel
- CatItemAttributeModel
- SalesItemAttributeModel
- SalesItemCollectionAttribute
The following models were dropped in favor of a single
SalesItemVariationModel (since they all had identical properties):
- SalesOrderItemVariationModel
- CartItemVariationModel
The following models were dropped in favor of a single
SalesItemBaseModel (since they all had near-identical properties):
- SalesInvoiceItemModel
- SalesOrderItemModel
- PurchaseOrderItemModel
- SalesQuoteItemModel
- CartItemModel
- SalesItem
AccountModel:
- Property Renames:
- Account2 -> Parent
- Account1 -> Children
- AccountTypeID -> TypeID
- AccountType -> Type
- AccountTerm -> Term
- New Properties:
AttributeModel:
- Property Renames:
- ValueCustomKey -> ValueKey
- AttributeCustomKey -> AttributeKey
- New Properties:
AttributeTypeModel:
- New Properties:
- DisplayName (string)
- SortOrder (int?)
CategoryModel:
- Property Renames:
- CategoryTypeID -> TypeID
- CategoryType -> Type
- New Properties:
ProductInventoryLocationSectionModel:
SalesInvoiceModel:
- Property Renames:
- InvoiceItems -> SalesItems
- each Subtotal property -> CartTotals object named Totals
- InvoiceID -> MasterID
- FromContactID -> BillingContactID
- ForContactID -> ShippingContactID
EmailQueueModel: New model for Emails to be stored and processed
EmailTemplateModel: New model for storing the Template for an email
(such as Sales Order confirmation, before merging in customer and order
data)
NoteModel:
- Property Renames:
- NoteTypeID -> TypeID
- InvoiceID -> SalesInvoiceID
- QuoteID -> SalesQuoteID
SalesOrderModel:
- Property Renames:
- InvoiceIDs -> SalesInvoiceIDs
- New Properties:
- ParentID (int?)
- Parent (SalesOrderModel)
- Children (List<SalesOrderModel>)
PaymentModel:
- Property Renames:
- PaymentStatusID -> StatusID
- PaymentStatus -> Status
- PaymentStatusName -> StatusName
- PaymentTypeID -> TypeID
- PaymentType -> Type
- CartModel -> Cart
ProductAssociationModel:
- Property Renames:
- ProductAssociationTypeID -> TypeID
- ProductAssociationType -> Type
ProductModel:
- Properties Renamed:
- ProductTypeID -> TypeID
- ProductType -> Type
- New Properties:
PurchaseOrderModel:
- Properties Renamed:
- Warehouse -> InventoryLocation
ReviewModel:
- Properties Renamed:
- ReviewTypeID -> TypeID
- ReviewType -> Type
ShipmentModel:
- Properties Renamed:
- Status -> StatusName
- ShippingStatusD -> StatusID
- ShipmentStatus -> Status
- ShippingTypeD -> TypeID
- ShipmentType -> Type
UserModel:
- Properties Renamed:
- UserStatusD -> StatusID
- UserStatus -> Status
- UserTypeD -> TypeID
- UserType -> Type
- Complete any upgrade instructions prior to 4.4, this is essential
- Checkout the Dev-Master-4.4 branch (this contains 4.4.1 as of
Friday, May 20th, 2016)
- Compile the solution
- Back up your CEF database in SQL so it can be restored quickly if
needed
- Run the Update-Database command from the Package Manager Console in
Visual Studio with Clarity.Ecommerce.DataModel as your selected
project in that window
- Multiple Migrations should run and complete successfully.
- If you receive any errors from unable to drop tables due to Foreign
Key Constraints, go to the table it's referencing and delete the
keys in SSMS. See James G. for assistance
- Update the IIS Application and Virtual Directories for API,
Reporting and UI to the new paths:
- API: Clarity.Ecommerce.Service -> 06.Clarity.Ecommerce.Service
- Reporting: Clarity.Ecommerce.Service.Reporting ->
07.Clarity.Ecommerce.Service.Reporting
- UI: Clarity.Ecommerce.UI -> 08.Clarity.Ecommerce.UI
- Update client HTML templates to use the latest model names per the
Model Changes section below
WARNING! Changes to these models will affect Templates, please review
this section thoroughly to determine if any templates you are working in
need to be updated!
A new Manufacturer section is available and has full workflow backing,
however there is no UI for this in the Admin side and no client
currently in need of it. (It was built for P4H and could be useful in
the future). This mimics Vendors in how they relate to Products
Multiple Models that had SEO fields on them have had these SEO fields
standardized so they are the same across the board. The following string
properties are available on these models (AccountModel, CategoryModel,
ProductModel):
- SeoUrl
- SeoDescription
- SeoPageTitle
- SeoKeywords
- SeoMetaData <-- this one can be ignored until a later date
For flattening convenience, several relationship models like
ProductCategoryModel now include Keys and/or Names of their related
objects. In most cases, these can also be used to populate data on
Updates so you don't have to make a full model of the related objects
when sending in.
- AccountModel
- See the SEO bullet above
- Changed AccountTermID -> TermID
- Changed Account1 -> Children
- Added Subscriptions (Array<SubscriptionModel>)
- Added AccountReviews (Array<AccountReviewModel>)
- Added NotificationMessages (Array<NotificationMessageModel>)
- Added PurchaseOrders (Array<PurchaseOrderModel>)
- Added Opportunites (Array<OpportunityModel>)
- AttributeModel
- Added DisplayName (string)
- Added Type (TypeModel)
- Changed ParentAttributeValueID -> ParentID
- AttributeTypeModel
- Removed CategoryTypeID
- Removed CategoryType
- Removed ProductTypeID
- Removed ProductType
- Attribute Search
- Added TypeID (int?)
- Added IncludeGeneralWithTypeName (bool)
- Added DisplayName (string)
- CheckoutModel
- Changed ExpirationMonth from string to int?
- Changed ExpirationYear from string to int?
- CategoryModel
- See SEO bullet above
- Added ParentID (int?)
- Added Parent (CategoryModel)
- Added TypeKey (string)
- Added TypeName (string)
- Added Reviews (Array<CategoryReviewModel>)
- Added ProductCategories (Array<ProductCategoryModel>)
- CategoryTypeModel
- Categories Search (and Three Levels)
- Changed CategoryTypeName to TypeName
- Changed CategoryTypeID to TypeID
- UserModel
- Added Attributes (Array<AttributeModel>)
- Added UserReviews (Array<UserReviewModel>)
- DiscountModel
- Several side models have been merged into the single
DiscountModel, so it now has the additional properties those
models needed
- ProductModel
- See SEO bullet above
- Changed BasePrice -> PriceBase
- Changed SalePrice -> PriceSale
- Changed ReductionPrice -> PriceReduction
- Changed MSRPPrice -> PriceMsrp
- Added AvailableStartDate (DateTime?)
- Added AvailableEndDate (DateTime?)
- Added Width, Depth, Height (decimal?)
- Added ParentID (int?)
- Added Children (Array<ProductModel>)
- Changed Images -> ProductImages
- Changed Documents -> ProductFiles
- Changed InventoryLocations ->
ProductInventoryLocationSections
- Changed AssociatedProducts -> ProductAssociations
- Changed Vendors -> VendorProducts
- Changed Categories -> ProductCategories
- Products Search
- Added TypeID (int?)
- Added VendorID (int?)
- AddressModel
- Removed FirstName (use Name)
- Removed LastName (use Name)
There are several significant changes from 4.6 to 4.7 which warrant more
than regular training between versions.
- The Integrations project has been exploded to a large number of
micro-projects, each intending to function as their individual
Providers with core projects that share functionality and Testing
projects that only test the specifics of that single provider
- The Providers which were previously being loaded via an
Assembly.LoadFrom(path) are now loaded using a MEF container (like
ClarityConnect does)
- Unit Testing that involved different pricing providers and such has
been removed. Testing of different provders should only occur in the
specific provider's testing project and not the Workflows Testing
project. The Workflows Testing Project may only use the
FlatPricingProvider. This will ensure consistency in tests where we
were dependent on changing AppSettings config values in order to run
the tests and were hitting concurrency and race conditions on
different test runs.
- The EF Code First migrations accumulated from the initial creation
of 4.2 to the end of 4.6 have been removed and consolidated to a
single large initial creation for 4.7. There were many, many changes
over the course of more than 70 migrations and several caused issues
including significant data loss. The intention of creating a new
starting migration for 4.7 is to have a fresh, clean database
without the issues caused by these changes and to prevent data loss
by transferring the data directly via a SQL Data Compare tool such
as Red Gate.
- Several refactoring measures have occurred to enforce we are
actively using Dependency Injection (DI) to load workflows, models
and other objects and reduce coupling between projects
- The Solution has been re-organized to better show the Tiered
topology that already existed but is more prevalent now that
projects have been split apart. This includes Solution Folders that
name each tier. Each project under a tier should start with that
Tier's number, e.g. 01.DataAccessLayer's projects should start
with 01.
- There is a new Layer named 00.Core which contains Enums, Utilities,
the Cache code and the RegistryLoader split as separate projects.
These were previously in the 02.Clarity.Ecommerce project but as
they don't require the use of other projects, having them here
allows them to be accessible by all the upper layers individually as
needed. The 02.Clarity.Ecommerce project no longer exists.
- Several projects have been transitioned to Portable Class Libraries
(PCLs) for use with cross-platform applications such as Xamarin.
This creates several restrictions on code that can physically be in
these projects as not all of the .NET framework is available in a
PCL. Generally, the projects selected for this only included
interfaces and Domain Object classes which do not require external
source packages or provide any form of 'logic' functionality
- The FilterBy functions and related SQL query actions have been
pulled together into a new 01.Clarity.Ecommerce.Searching project to
reduce the requirements of code in the PCL projects. It is intended
that all the FilterBy's go through a refactoring to standardize,
implement best practices and generally be cleaned up.
- The .NET Framework for all projects (except the PCLs) has been
upgraded to 4.6.2 to take advantage of performance, security and
other improvements which have occurred since 4.5.2 was released.
- Registry Classes for the core projects have been separated to their
own projects, which assists with referencing and T4
- The Mock Database in the Workflows Testing project has been moved to
the DataModel.Testing project so it can be accessed by multiple
Testing projects throughout the solution. This is the only Testing
project which should be referenced by any other Testing project.
- UI Label Translations have been merged in. This involved a
modification of all HTML templates to use loose text as angular one
time binding tags against a translation table instead of loose text.
For example:
Loose Text
Sales Orders
Replaced by:
// Note: We're not doing the one time bindings right now due to a timing with the load of the data. So leave the :: off
{{'ui.storefront.userDashboard.salesDetail.SalesOrders' | translate}}
That is
{{ }} // Angular Binding
:: // One-Time Binding, easier on the browser as it's not constantly evaluating
'' // This key is a string and should be wrapped in single quotes
ui. // This is a UI label
storefront. // This is in the storefront, alternatively this would be admin (and when it becomes set up, storeAdmin.
userDashboard. // This is the folder it is in under the store folder
salesDetail. // This is the file it is in
SalesOrders // A collapse of the original string, strings that are especially long should be summarized as there is a character limit for keys. Note:`` ``These`` ``should`` ``be`` ``Capitalized.
CLIENT // If a client wants a textual variation, customized to their business lingo, on a default string we designate by adding the three letter client code after the text string such as
ui.storefront.userDashboard.salesDetail.SalesOrders.ABC where ABC is the three letter client designation example.
| translate // angular Translate filter, a module we have added which uses translation data fed by the server
When replacing text with keys, try to use existing keys from the same
file or the common space if possible, else add the new key to the Google
Doc and alert your PM that translations need to be updated. See James G.
for assistance if you do not have edit rights to the document.
https://docs.google.com/spreadsheets/d/1zo2TiLLFFzGE3X8uCO0P3tdfwpPD8U8bkjXh091Er0A
For Back End Team: If you need to seed the database with the
translation values, you can select the SQL to Upsert Content column of
the Admin and Storefront tabs and paste it into a SQL Server 2014 New
Query window, replace the double quotes throughout the window with
blank, look for `"EXECUTE` and replace with `EXECUTE` and `GO"`
with `GO` and then run it. There will be about a dozen errors for keys
that are too long and can't put null values in keys, ignore these, the
rest all ran in the stored procedure. This should Upsert the data
(insert if new, update if present). Reload the page and the labels
should load. If it does not, run the following relative url with your
own root url in Postman as a DELETE instead of GET:
./DesktopModules/ClarityEcommerce/API/Globalization/UiTranslation/ClearCache
This will wipe the Cache and let it rebuild with the updated data. The
first time it loads it will take longer but after that it should average
about 6ms per call.
DO NOT RED GATE THIS DATA FROM ANOTHER SITE, USE THE GOOGLE DOC TO MOVE
THE DATA.
To upgrade from 4.6 to 4.7, please perform the following steps:
- Create a new, empty Database under the naming convention
CEF_[PROJ]_470, e.g.- CEF_GAF_470
- Set this database as part of your connection string for all
ClarityEcommerceEntities values in the CEF Solution's
connectionStrings.config files
- Run the Update-Database command to set up the 4.7 schema on this
blank database
- Use Red-Gate to transfer data from the old database to this new one.
Depending on the originating migration, you may need to manually
select tables and columns to migrate the data
AddressValidation -> AddressValidationModel
CMSAuthUserSession -> Removed
CheckoutModel
- Changed Properties
- Added Properties
- CartID [int?]
- UserID [int?]
FilesProviderType [enum] -> Removed
- All instances of Attributes and AttributeValues throughout CEF will
be replaced with JsonAttributes, including Editors and other
required changes
- Multi-Currency fully implemented
- Multi-Lingual Phase 1
- Split Shipping
- Sales Order Admin UI for Creating Orders for customers
- Sales Quotes Processing, including Custom Quoting
- Samples Ordering
- Sales Invoices Fleshed Out
- Extended Default Reports
- Memberships and Subscriptions
- Packing Labels and Slips
- Generic Product Selection Wizard
- Model Properties Generated by T4 to reach 100% coverage of ApiMember
Attributes applied
- Model Properties Not Generated by T4 to reach 25% coverage of
ApiMember Attributes applied
- T4 Unit Testing Conversion to reach 50% implemented
- Deeper Inventory Management Functionality
- All Catalog related calls to have a Cached implementation
- ServiceStack Session Management with Redis
- More REST-link API with DELETE, PATCH and other Verbs to be used
Several key architecture changes have occurred:
- Workflows T4 no longer generate constructors, which means it's no
longer dependent on itself to run. All the variables that were being
set via constructors are just pulled through
Workflows.Value.TableNamePluralized.
- For instance, in ContactWorkflow, if you need to use the Get
function on AddressWorkflow, call
Workflows.Value.Addresses.Get(...).
- You can access every single workflow like this from any other
workflow and it will lazily load the objects in as needed via
RegistryLoader.
- As a side-effect, the Worfklows Testing T4 is no longer creating
GenerateWorkflow functions and the three tests per table for
calling the separate constructors (to ensure they don't fail on
new()) are now removed. This reduced the number of tests by
about 1,000.
- CORS is included by default now, see the CORS article for setting up
your site instance to utilize the additional necessary config files.
- Instead of packages.config NuGet pattern, we'll be using
PackageReference from now on with all non-Web projects in the CEF
solution. (Web projects don't have the tooling to use
PackageReference yet, this is not a limitation on our end.). This
means packages will be stored in your user profile and shared
instead of always downloaded to the /packages folder of your local
checkout (with the exception from the Web projects).
- Discounts are no longer using a shared IDiscountModel and have been
broken apart to the standard model generation practice the rest of
CEF is using. BE/ME/FE have all been updated to reflect this as well
as all T4 files.
- Discounts has had other significant updates to improve reliability
and more will be coming in the immediate weeks from Chris Golden
- SSO with DNN is now an available option for authentication. Client
skins will need a copy from the default header.ascx file in DNN to
support this.
- Only DNN9 will be supported from this version forward, any client
using DNN8 will have to run the standard DNN upgrade process to 9
then pull the latest Clarity skin over to their repo (the CSS files
are set up a little differently as are some of the Skin ascx files).
The DNN9-CEF repo is the one which will have continued use from
here on out and the DNN-Demo repo will stop taking updates unless
critical.