If you have a comment on this topic, contact Aptify Documentation. If you want to return to the Aptify Community Site, please click here.

Core Product Changes

This page tracks core assemblies in the eBusiness branch and what changes we're making to them. It can inform us of where QA needs to test for regressions in the staff app, what we need to port into the next version of core, and additional release documentation we need with eBusiness 6.

List of assemblies given below in which there are no changes. We have this in our branch for investigation/debugging:

  • AptifyShell.dll
  • AptifyGenericDataServices.dll
  • AptifySQLDataServices.dll
  • Startup.exe


  • AppSettingsFeatureFlag: It is a feature flag abstraction. It returns the flag value if the flag is set. If the flag is not set, it returns the default value which could be 'True' or 'False' which is passed as a parameter.


    If no parameter is passed, this currently returns TRUE by default. It doesn't give error if flag is not set.


  • AptifyApplication.cs - Modified the 2 argument method GetEntityObject (string, long). There is a 3 argument version that takes a RecordHistoryInfo object. We are calling this method when a factory has been registered with unity. Services is placing an instance of ITypeResolver on the AptifyApplication.GlobalContext object during start up. This is being stored under the property 'AptifyTypeResolver'. In GetEntityObject, if GlobalContext has an entry for "AptifyTypeResolver". If it does, we cast it into an ITypeResolver. This is a wrapper around the unity contianer. Call IsRegistered<RecordHistoryProviderFactory>() to checkHideMeetingConflictValidationErrorsForOtherAttendees if a factory has been registered. If it hasn't take the existing path through GetEntityObject().

    If IsRegistered returns true, we resolve the object with resolver. We Resolve<RecordHistoryProviderFactory>() to get the RecordHistoryInfo & Use that object get the record history. If it is not null, we call the 3 argument version of GetEntityObject instead.

  • AptifyAttachments.cs - Provided an object that encapsulates the multipart data for others to use with existing Aptify APIs. Binary payloads are  written to disk on the web server temporarily and those files are made available to the end point. Ensured that the file is only written if the contents are different using sql function HASHBYTES and a hash of the local file with the same algorithm. Created new method CompareFileToAttachmentContent to compare Local File to the Attachment.
  • IRecordHistoryProvider.cs (New) - Returns user specific record history that should be added to each entity object operation.
  • RecordHistoryProviderFactory.cs (New) - Creates the record history provider that should be used during entity object operations. This class will be resolved during GetEntityObject operations so the GE can be configured with the correct record history information


  • New interface IUserCredentialFactory


  • New methods for refreshing linked fields.
  • New methods GetExtraObjectData() and LoadExtraObjectData() to serialize and deserialize  additional information (extended order line details) respectively. 
    We can turn off this process making attribute Aptify.Framework.GenericEntity.DisableExtraDataSerialization (web.config) to True.


  • XMLParser
    • New public method LoadGEPassivelyFromXMLString. The GE will treat the XML as the record of source, similar to a load from the database, and will bypass most field level events. This results in a performance improvement for loading from XML on entities with many field level events. 
    • New web.config attribute support: Aptify.Framework.GenericEntity.DisableExtraDataSerialization. When not set or set to true, this will not extra data serialization and deserialization. If set to False, extra data serialization and deserialization is allowd.
    • New Private method ShouldDisableExtraDataSerialization() to validate extra data serialization and deserilaziation payload of GE is be allowed or not.
      Also checks for ShouldDisableExtraDataSerialization flag on GE is set or not and Aptify.Framework.GenericEntity.DisableExtraDataSerialization attribute value.
      Returns True if extra data serialization should be disabled for this GE, else returns False.
    • Changes to DocumentSubTypes() method, called the ShouldDisableExtraDataSerialization() and depending on return value performed the extra data serialization by GetExtraObjectData()
    • Changes to ProcessObjectElement() method , added new case to load EXTRADATA ; called the ShouldDisableExtraDataSerialization() and depending on return value performed the extra data deserialization by LoadExtraObjectData()
  • AptifyDataFields
    • Internal changes to support changes to XMLParser
    • Entities that have linked fields with default values now have virtual field values marked as needing refresh. This means that when creating a new entity object for these entities those virtual field values will be available.
  • AptifyGenericEntity
    • Loading from XML supports a more efficient loading process through the XMLParser changes. You can now pass the XML with the prefix || and Aptify will bypass field level events during loading. This results in a significantly faster load process.
    • Initial support for entity data caching. Currently turned off until we determine the needs of eBusiness under load.


  • Added property ResultException to ProcessFlowResult. This will be populated when process flow execution catches an exception other than ProcessEngineException. 
  • Added support for type resolution through an ITypeResolver passed into the AptifyContext object. We need to investigate how this is handled in the future. 
  • Added support for passing an AptifyProperties object into the AptifyContext under the key _xAptifyInternalSharedProperties. These key/values will be given to the Context's AptifyProperties object during process flow execution so properties can be shared across sub process flow execution. This may not be necessary for eBusiness 6 support. 

AptifyOrdersEntity.dll (OrdersEntity)

  • New app.config/web.config attribute support: Aptify.Applications.OrdersEntity.FlowdownCompanyOrderDefaultPerson. When not set or set to false, the order will not set the billToId or ShipToId based on the company default order person.
  • New field CALC_QuantityTotal that is the sum of the quantity field of all order lines. New protected virtual method CalculateQuantityTotal. 
  • New field CALC_RoundedQuantityTotal that is the sum of the ceiling of the quantity field of all order lines. This can be used to represent the number of items on the order. New protected virtual method CalculateRoundedQuantityTotal.
  • Checks for entity attribute AllowSecondaryMembership will no longer error if the attribute is undefined. The feature will default to off.
  • Fixed a bug with order lines and group products where the last order line in the group would not have the correct product name. This only surfaced in the .NET layer when not using form templates.
  • Updated error message when removing an order line that is part of a kit. The message now includes the sequence id of the parent order line.
  • New methods for applying a saved payment methods to the order:
    • Public virtual bool AddSavedPaymentMethod(long savedPaymentId) 
    • Public virtual bool AddSavedPaymentMethod(long savedPaymentMethod, int cvv)
    • Protected virtual long GetPaymentInfoIdBySPM(long savedPaymentId)
    • Protected virtual PaymentInformation GetPaymentInfoGEFromCurrentOrderGE()
  • CampaignCodeName is no longer a calculated field.  It is now virtual. The field will now have the correct value before the GE is saved.  
  • Added new method AddMeeting() to add event product and sessions to cart depending on allowSessionRegistrationWithoutParent flag. This will also checks for other event prerequisites, like product is meeting product, is valid attendee, ValidateSessionRegistration etc.
    So added protected virtual methods for it given below:
    • IsValidAttendeeId
    • IsMeetingProduct
    • ValidateSessionRegistration
    • SetupAttendeeIdOnExtendedOrderDetailEntity
  • Added new method RemoveMeeting() to remove Event Product and its sessions from cart depending allowMeetingRemovalWithoutSession. This will also checks for Other Event Prerequisites, like RemoveMeetingAndRelatedSessions etc.
    So added protected virtual methods for it given below:
    • RemoveMeetingAndRelatedSessions()
  • Added new method CheckMeetingConflictValidation() to check the meeting conflicts if any in current orderline and in registered orders and called CheckMeetingsSessionsConflictionInCurrentOrderLine and CheckMeetingsSessionsConflictionInRegistered inside it.
    Also depending on the Aptify.Applications.OrdersEntity.HideMeetingConflictValidationErrorsForOtherAttendees value the error message will be displayed for same attendee and different attendee.
    Added new methods IsHideMeetingConflictValidationErrorsForOtherAttendeesEnabled() and GetMeetingConflictErrorMessage() for handling of the same.
  • New config "Aptify.Applications.OrdersEntity.RejectAddProductWithNoInventory" - Defaults to true, which means Product wouln't be added if there is no inventory for it and also Allow Back Orders is False & IsInventoryRequired is True
  • IsAllowWaitListMeetingRegistrationFlag & IsAllowWaitListMeetingRegistrationFlagValue: Default to True, if False, it prohibits Waitlist Registration.


    • If the meeting has been setup to use "No conflict validation" then no message is shown and the meeting should get registered without any problem.
    • If the meeting has been setup to use "Conflict Warning", then no message is shown and the meeting should get registered without any problem.
    • If the meeting has been setup to use "Conflict Prohibited", the validation message when dismissed doesn't allow the user to continue with the conflicting meeting and de-selects the conflicting meeting automatically.
  • "Aptify.Applications.OrdersEntity.EnableMeetingConflictValidation" config - default True. If False, it doesn't check for Meeting Conflict Validations. If True, then it performs Meeting Conflict Validations based on the Meeting Conflict setting on the Meeting Product.
  • Aptify.Applications.OrdersEntity.ProhibitACHInfo.ZeroDollarOrder: defaults to True, if true, this prohibits ACH Payment info to flow down while creating Order.
  • "Aptify.Applications.Orders.BypassBalanceCalculationDuringBaseSave" config - default True. If this flag setting is True or Not Found and SaveInProgress is True on AptifyGenericEntity, then the order skips order balance calculation.
  • ExtendedOrderDetailGE
    • New virtual method Init(). This is called during the creation process of the extended order line and can be used for additional configuration.


  • Support for ExtendedOrderDetailGE.Init()
  • DiscountAmount filed is now have the correct value before the GE is saved.
  • Overrided GetExtraObjectData() method to get serialization data for extendedorderdetailentity.
  • Overrided LoadExtraObjectData() method to load serialization data for the ExtendedOrderDetailEntity. CallOrderLineLoadFunctions is also invoked to ensure the extended entity exists.
  • AptifyOMDEntity
    • How badge information on the extended order meeting detail record is updated can now be configured. 
    • When creating the OMD record the attendeeId will automatically be set to the ShipToID on the order. 
    • Badge information is automatically updated whenever attendeeId changes on the OMD entity.
    • New protected virtual method SetBadgeInformation is available to control how badge info is et. 
    • New app.config / web.config attribute Aptify.Applications.OrdersEntity.Meetings.UpdateBadgeInfoThroughBusinessLogic
      • If set to false none of these new features will be enabled.

  • Payments.dll  
    • Added new method AddPaymentLines(long orderId, Decimal paymentAmount) to add the payment lines to payment object, inside that validated the payment amount as well through ValidatePaymentAmount().
    • New methods for applying a saved payment methods to the order:
      • Public virtual bool AddSavedPaymentMethod(long savedPaymentId) 
      • Public virtual bool AddSavedPaymentMethod(long savedPaymentMethod, int cvv)
      • Protected virtual long GetPaymentInfoIdBySPM(long savedPaymentId)
    • Added ErrorCodes.cs file to define two new error codes:
      • Payment_NotValidPaymentAmount
      • Payment_NotValidSavedPaymentInfo


  • New property ServiceRoute for exposing the attribute Aptify.Services.General.ServiceRoute.

List of assemblies given below in which there are no changes. It is just for debugging:

  • Aptify.Services.Framework.Endpoints.Authentication.dll
  • Aptify.Services.Framework.Endpoints.UserInformation.dll
  • Aptify.Services.Framework.Endpoints.CheckConnection.dll


  • AuthenticatedContext
    • New public constructor to facility mocks/tests.
    • All properties made virtual to enable mocks/tests. This has the potential to be a breaking change in very rare circumstances. Customers who have subclasses AuthenticatedContext should recompile assemblies using their subclass.
    • ServiceApplicationCredentialFactory and EventLogHelper are now public to facilitate testing.
  • AspNetServiceCredentialContainer
    • Implements the services for Guest Authentication
  • SessionCookieHelper
    • Functionality to Clear Cookies on User Logout
  • AuthenticatedContextFactoryBase
    • Added functionality for Anonymous Context
  • HashBuilder
    • Moved logic of creating ‘IHasher’ object from ‘UserInformation’ endpoint to ‘HashBuilder’ class
  • IHasher, NoOpHasher, and  SecurityKeyHasher made public
  • RememberMeWorker
    • Remember me tokens should not rotate upon use
  • PseudoRandomGuidGenerator
    • New random GUID generator
  • Aptify.Services.Authentication.AnonymousTokenLifetimeInHours
    • New Configuration


  • CorsPolicyFactory - You no longer have to specify a port in web.config's Aptify.Services.CORS.AllowedDomains setting. If services is running on a specific port it will automatically be added to the response.
  • MetadataRouteConfiguration - Hard coded end points are no longer automatically added to services. If you want these end points, such as for Aptify Web, new assemblies should be added to the bin directory. The end point assemblies start with 'Endpoints.Webapi'. Aptify R&D will need to add these to the correct OR sync records to ensure they are available for Aptify Web customers.
  • ServicesStartupCoordinator - WebApi attribute routing is now enabled.
  • HelpPage documentation - Has been updated to the new format.
  • EventLogHelper made public.
  • Support for startup routines. You can now implement IStartupRoutine from StartupRoutine.dll. Services will execute any implementations during startup.
  • Support for dependency injection in eBusiness 6. This needs more documentation leading up to release.
  • New config "Aptify.Services.ItemRatings.CorrectPersonId" - If true the Service corrects the Person ID using Authenticated Attributes
  • New config "Aptify.Services.ProductPrice.RestrictOrderAccess" - Defaults to False, if so, then the access to the order is given, if True, then order access SDO, i.e. "Aptify.Services.ProductPrice.OrderAccessDbo" is called to check for access.

Message Template "Standard Web User Password Reset"

Updated HTML anchor tag. <a href  "<< URL >>"> to <a href="<<URL>>">

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">



<META http-equiv=Content-Type content="text/html; charset=unicode">

<META content="MSHTML 6.00.2600.0" name=GENERATOR></HEAD><BODY><<FirstName>>


Use the link below to reset your password.


<a href="<<URL>>">

<span>Reset Password</a>




eBusiness 6.0 service web.config.

  • Password Reset redirection URL. URL will be changed through the setup program.

    <provider lookupName="eBusinessWebUser">
    <add key="PasswordResetURL" value="http://localhost:63818/passwordReset.html" />

 New full text index record 'eBusiness6_0PersonSearch'

  • Entity : Persons 
  • Generated index view :  'idxVweBusiness6_0PersonSearch'.
  • Full Text Catalog : PersonAndCompanyData.
  • Fields included : FirstLast, Email1,Email2,Email3
  • Stop list : System 
  • Change Tracking : Auto

StandardTokenValidator.cs File

  • RequireAuthentication variable is changed to private. This could be a breaking changes.

eBusiness 6.0 service web.config

  • A new attribute is added to set the Anonymous token expiration in hours. It defaults to 720 Hours (30 Days).

Web Shopping Cart Entity

  • Length of the Name field is changed to accommodate 75 characters from 50 Characters.


  • Added new property VerificationStatus which can return AddressVerifyResult based on the verify method call.

Persons Entity

  • Added entity attribute “SPForDuplicateCheck”, whose value corresponds to the stored procedure to be used for duplicate checking for the Person's entity.


  • PersonDupeCheck.vb: Altered function CheckForDuplicates. Earlier this function had hardcoded SQL which took the first & last name parameters and executed the SQL. With current changes, this function now executes the stored procedure which is on the entity attribute “SPForDuplicateCheck” on the Person’s entity . It also fetches parameters of this stored procedure on the runtime and validates the parameters name against the fields on the person entity. So, each parameter of the stored procedure must match with the field on the entity. If it doesn’t match, it throws an exception which says “Parameter names must match values on the entity definition, or a code configuration is necessary”.


  • ErrorCodes.vb: Added a constant "DupeCheckError", which is the error code when a dupe check error appears. Its value is set to 197 as of now.
  • AptifyGenericEntity.vb: Function Save - When the save fails due to a dupe check error, SetLastErrorInfo with DupeCheckError code (mentioned above) and the exception message.

Exception Management

  • Added new factory definition for obtaining additional information that should be logged with every exception. Provided no-op factory that exists by default for applications not leveraging this feature. Broke all publishes into their own file so it is easier to work on. Added log splitting to EventLogPublisher. Previously event based logging would truncate the message if it was too long. Now we detect if it is too long and split the message into multiple parts. Additional information and the split message are included with every message part for consistency.
  • ExceptionManager.vb - Ability to log additional information during exception publishing.

Copyright © 2014-2019 Aptify - Confidential and Proprietary