Fix: When making a change to a page or template, etc. the system did not clear SitePublicURLs.LastCheckedOn
so that next time viewed the cache would be updated.
Fix: URLs with spaces could not be found when searching for references in SitePublicURLs
.
Fix: Error when logging exception.
Fix: Function GenerateHTMLParagraphs
now replaces line feeds with <br/>
.
Fix: Error in definition inspector when adding a property or method.
Fix: Clear the property SitePublicURL.LastCheckedOn
so next time the page is accessed the cache is renewed with the new IDs.
Fix: Error in Email.SendNow
.
Fix: Error in Application.Log
.
Fix: Error in BusinessCollection.MergeItems
.
Fix: CourseEnrolment.Status
and CourseEnrolment.LastActivityOn
calculated properties.
Fix: BusinessCollectionItem.CreatedOn
and BusinessCollectionItem.TypeNumber
can be filtered on.
Fix: Error in checkout process converting IDs.
Fix: Error viewing an object when tags exist.
New: Converted ID from Integer to Hexidecimal string 16 characters long which includes the creation time, a number representing the type of business object and the old ID.
New: InstallUpdates
can now run an SQL script from a file.
New: CollectionClassDefinition.ParentPropertyName
is used for building the base path. If this definition attribute exists and the property value is a business collection item then the base path of the foreign collection property on the item resolving to this collection is used. For example, CourseModules ParentPropertyName
is set to Course and FileName is how-to-skip
then base path for a CourseModule with FileName jumping
will be /courses/how-to-skip/modules/jumping
.
New: A default for Article.Author.FilterExpression
is set to show only logged in user or administrators.
Fix: InstallUpdates
need to update version using scripts in case there are table structural changes.
New: InstallUpdates
can now run a SQL script from a file.
New: Workspace.GetObjectArray(SQLStatement)
returns an array of objects (type IDictionary) unless a single column specified and in that case an array of values.
New: Preparation work for upgrade to version 6.
New: Class rotating-text
added to base styles.
Fix: CartItems.SelectPaymentTerms
error.
New: Log files will now have a maximum size of 5mb. When it reaches that it will be renamed to log-back-001.csv and log.csv will start new.
New: Dashboard items for admin and user views of courses and enrolments.
Fix: Group.ProcessSubscription
was rounded to the nearest minute. For Example, 12:01:33 is rounded to 12:02. This meant that up to the next 30 seconds the membership is not valid. It now rounds down, for example: 12:01:33 now becomes 12:01.
Fix: Fixes in base styles.
New: When a user subscribes (unpaid or free sign up) to a group it just adds minimal details and does not require them to set passwords, etc. When they later are required to register for some reason any details they previously entered will now populate the form.
New: PayConfirmedOrdersDue
will look for orders with payments due that have a stored payment method associated with it and will make the payment, complete the order if necessary and send emails. Suggest to set this up in automated tasks to run each night.
New: TradingItem.PaymentTerms
is a list of available payment terms for that item. You are able to set an alternative price for the item based on those payment terms. For example, say regular price for a course is 300, you may set up a payment terms for 4 monthly payments at 125 so item price would then be 400.
New: BusinessCollection.Import.MatchItemBy
will now show group values such as GroupMember
when importing Memberships
. In this case it will match the Group
and Member
values.
New: Additional image types (apng, avif and webp) have been added to acceptable list when uploading via file manager.
New: JavaScript function and styles for accordians.
Fix: ConfirmedOrder.PayByCreditCard
will set that method to the order for future payments when terms such as installments are set.
Fix: ConfirmedOrder.PayByStoredPaymentMethod
will not set that method to the order for future payments if it fails.
Fix: Percentage values PaymentTerm.DepositPaymentPercentage
and PaymentTerm.ProgressPaymentPercentage
decimal places have increased for precise rounding.
Fix: ConfirmedOrder.TotalPaymentUnconfirmed
was showing incorrectly.
New: Can now set a subscription to unlimited time.
New: HTMLDefinitionAttribute.StylesheetsExpression
allows you to set an array of stylesheets to be used with the HTML editor.
New: email-styles.css
is the default stylesheet for HTML properties of emails. For example, Email.Content
and Application.SendEmail.Content
.
New: When an email is generated the content from any linked files are embeded in style tags.
New: Function Common.GenerateHTMLAudio
which will generate an audio player.
Fix: Now bypasses HTML compression errors.
Fix: Item.CreatedOn
format without seconds.
Fix: BusinessObject.RelativeURLFilePath
now uses BusinessObject.BasePath
.
Fix: Base path for course modules and course activities.
Fix: Application.VisibleUsers
now includes the logged in user.
Fix: When logged in as an administrator and selecting a user to complete a task like enrol them to a course.
Fix: Various base script and stylesheet changes.
Fix: Changes to base styles for HTML editor.
New: When adding new custom collection via the definition inspector you can choose the repository as:
New: When adding a collection and selecting the inheritance you can now also choose None or Items.
New: Set CollectionClassDefinition.PullExpression
to return an array of dictionary objects which are imported to a collection when first loaded. For example, create a collection for storing in the application podcasts pulled from an RSS feed.
New: XMLToObject
now includes attributes.
New: TransformObject(Object, Maps)
will transform an object to another using maps which is a array of path, name and submaps. For example, ['rss.channel.item[]', [['name', 'Title'], ['desc', 'Description'], ['review', 'Reviews', [['score', 'Rating'], ['comment', 'Comment']]], ['img[].url', 'Images']]]. This will get every item in the rss feed's name, desc, all review score and comments and image urls to create a dictionary array of Title, Description, Reviews: a dictionary array of Rating, Comment, and Images: a string array of urls. Path must exist however name (top level only) and submaps do not. If the path contains [] then this indicates the property is an array and should return an array.
New: Now detects if CKEditor5 is installed as the clients chosen HTML editor.
New: Email HTML is compressed before sending.
New: BusinessObject.HTMLCommentBegin
and BusinessObject.HTMLCommentEnd
used by BusinessObject.WrapHTMLComment
.
New: You can now add a script of type importmap. Attach as a JS file and the system will extract the content to include in the script tags.
New: Added administrator menu item to run scheduled tasks.
Update: Updated setup.aspx.
Fix: System does not try to resize an SVG image.
Fix: Error when entering TradingItemDiscountPrice.StartOn
or TradingItemDiscountPrice.FinishOn
.
Fix: Every request was regenerating the page due to Site.InternalURLCheckFrequency
being nothing.
Fix: When a collection or item was updated not all cached content generated with the collection or item was clearing last checked.
Fix: Application.ScheduleNewAutomatedTask
failed.
Fix: WebHTTPApplication.ScheduleNextAutomatedTasks
started next task to early due to passed time being excepted as local time rather than UTC time.
Fix: Application.Log
output to CSV and made various error messages clearer.
New: New property added AutomatedTask.EmailResults
which determines what notifications are to be emailed.
New: Site.ScheduleCheckScanAndRepeat
.
New: Site.InternalURLCheckFrequency
can now be set to never.
New: SitePublicURL.Check
detects if internal static file exists and also checks external URLs.
Fix: Error when menu item deleted.
New: When a page is generated, begin and end HTML comments are added to identify any collections or items that are used to generate the page. They are used to generate context menus and to identify cached pages that need regenerating as explained in the following new updates. The format is:
<!-- [Begin BlogPosts Blog] -->
code here <!-- [End BlogPosts] -->
.<!-- [Begin BlogPosts:4567 Blog Post: My Article] -->
code here <!-- [End BlogPosts:4567] -->
.New: When logged in as administrator, holding down the control key while right mouse clicking will generate a context menu based on the clicked element and parent elements. This will allow you to quickly navigate to an item to edit. For example, you may have clicked on a blog post on the blog page. The context menu will show the blog post, a list of templates that are used and the blog posts collection.
New: Application.Update
has been created to replace Application.Workspace.Update
. It has been created to add extra functionality being:
Application.LogChanges
is switched on it will log all changes written to the database in collections Logs
and LogEntries
.SitePublicURLs
, and mark it to be regenerated. When an item is added the system will look for references to the collection. A special case was set up for MenuItems
where the system will look for any references to an items with new, updated or deleted descendents (sub-menus).New: When Application.DebugMode
is off and the administator is not logged in, the HTML output is condensed including the removal of comments.
New: GenerateHTMLVideo
passing a URL to a video that requires an iframe and also passing a Poster will include an attribute data-video-poster
to the iframe. A new javascript function initialiseIFrameVideos
and associated styles has been written to wrap the iframe to create a video control display the poster and play button.
New: Base script and styles for DBMS context menu and responsive toggler for any attributes, not just the class attribute.
Update: Output of robots.txt
.
Fix: Fix to SCSS slide widths when multiple visible slides.
Fix: When FileName
exists in the database table.
Fix: Various links in emails to administrator.
Fix: When a boolean field is readonly it displays the value not a checkbox.
New: SitePublicURL.FindReferences
now asks if you want to find those links with or without the attribute rel="nofollow"
.
Fix: Error when trying to login with cookies disabled.
Fix: When HTTPS Everywhere not turned on cookies could not be stored.
Fix: Base scripts and stylesheets updated.
Fix: Error in Group.SubscribeNewUser
.
Fix: Path not found error displaying Membership.StatusMessage
after Group.ProcessSubscription
.
Fix: Site.Clean
was removing references URLs.
Fix: Site.Clean
was sped up by checking cache for URL without converting to XML first.
Fix: Removed the disabled window overlay when navigating back to a previously submitted form.
Fix: No disabled window overlay loaded when downloading a file on submit.
New: Publics.GenerateHTMLSchema(Array)
will return a schema object based on the parameter array. This can be included in the Template.Metadata
using the merge code option in the HTML editor.
New: MenuItem.Follow
added which determines if search engine bots should follow this link for indexing.
New: When administrator is logged in and they are go to SelectUser
then the system will direct them to CheckForRegistration
if that is what the InitalUserAccessPoint
is set to.
New: Default display name changed for VisibleServiceTimes
to "Calendar" and VisibleServiceTime
to "Service Time".
New: Application.RequestTimeout
added which determines how long a request runs before timing out.
New: Both Site.Check
and Site.Scan
now require a parameter MaximumDuration
which indicates how long the function should run before stopping. Application.RequestTimeout
is increased if MaximumDuration
is set longer.
New: Site.CheckScanAndRepeat
now takes two parameters BatchDuration
which indicates how long the function should run before stopping and BatchInterval
which indicates how long before the function restarts. Application.RequestTimeout
is increased if BatchDuration
is set longer. If the function stops before completing and automated task is scheduled to run the funtion again after the interval specified.
New: A URL version of image properties has been added to the items which essentially returns the absolute path to the image. Examples, Article.ImageURL
, Brand.LogoURL
and User.PhotographURL
.
New: When submitting a form the disabled window overlay indicating "Please wait while processing..." appears to stop users from refreshing or closing.
New: All database ntext columns converted to nvarchar(max).
New: SetURLParameter(URL, Name, Value)
is now available to the script engine.
New: Optional parameters in BusinessCollection.ToObjectArray(ItemExpression, [TopCount], [Randomise], [Page])
BusinessCollection.ToStringArray(ItemExpression, [TopCount], [Randomise], [Page])
.
New: ReadOnly Property Attachment.AbsoluteURL
returns the URL with the absolute path if missing.
New: ReadOnly Property BusinessCollectionItem.FormattedID
returns the ID formatted such as ID 1965 would return "id0000001965" 123456789 would return "id0123456789".
Fix: When added a new item with an image or other type of file, it would place that file in the wrong path.
Fix: PageImage
did not always include the absolute path.
Fix: When administrator is logged in and booking for another user it would ask for the user again after specifying attendees.
Fix: Access denied when a user tried to view own bookings.
Fix: Error on Application.UserTimeZone
when the Application.UserCountry
is not detected. In this case the base time zone is returned.
Fix: Error when adding a new ServiceBookingEmail
.
Fix: Could not find path of custom properties or methods.
Fix: user-default.aspx
updated to use BusinessObject.RelativeURL([Member])
.
New: Inology.Core.NameValueCollection
now implements iDictionary
.
New: Application.UserTimeZone
now gets the time zone from the IP info of the client IP address when possible, otherwise uses UserCountry.DefaultTimeZone
.
New: PageURL
, PageLanguage
and ApplicationTitle
are now included as merge properties.
Fix: Application.GetDefaultTemplate
did not find correct template for custom business objects or methods.
Fix: Application.GenerateMembershipRenewalOrders
regenerated an invoice in certain circumstances due to time zone conversions.
Fix: Application.ConvertPageTypeURL
did not return correct path in certain circumstances.
Fix: Error on output when a property or method returned HTML that already had a DTD.
New: One Time Passcode (OTP) has been added as a new method of Human Verification. If selected as the method, a [Request Code] button will be show and when clicked will request a passcode from the server to be sent to the user's email address.
New: One Time Passcode (OTP) has been added as a new method of Human Verification. If selected as the method, a [Request Code] button will be show and when clicked will request a passcode from the server to be sent to the user's email address.
Fix: Conversion failed from old URL format to new in some instances.
Fix: To base 3.2 stylesheet for forms layout.
New: One Time Passcode (OTP) has been added as a new method of Human Verification. If selected as the method, a [Request Code] button will be show and when clicked will request a passcode from the server to be sent to the user's email address.
Fix: Very long URLs in a collection view would push the table beyond 100% width. A style has been added to break the URL anywhere so it will wrap.
Fix: Automated tasks not logging in as the user before running causing an access denied error.
Fix: Access denied for blog, forum, etc. when management system not installed. This was changed to make them visible to the public even if not installed. This way a developer can add blog posts but no one else can.
Fix: Service.VenueTimeZone
now defaulted to the base time zone.
Fix: Service.VisibleTimes
were showing all times, not just those visible for current user.
Fix: When adding a trading item, it would not proceed to check out.
Fix: Rename default templates for articles, etc.
Fix: Various base stylesheet changes.
Fix: When resetting password for new user that already has a user record on the database.
Fix: When the same user logs in on similar devices at the same time.
Fix: To include article file name in body classes.
Fix: To star rating now uses star icons.
Fix: To subscribe new user logs them in.
Fix: Processing order failed on date due to time zones.
Fix: To formatting of default page title for methods.
Fix: Default max height for images from 1200px to 1280px.
Fix: Various fixes to base scripts and stylesheets.
Fix: All forms sent from admin email address with reply to the EmailAddress property.
Fix: Sites.Check
and Sites.Scan
not completing all in one pass.
Fix: To home page displaying as Website.About
when cached in Sites.
Fix: To BusinessCollection.CreateFilterExpression
when multiple values passed.
New: Date/time properties are now stored in UTC time and are displayed in the User's time zone. However, there are exceptions. For example, Date of Birth is stored and displayed as is, Order and Payment dates are generated and stored and viewed in the Base Time Zone. Service times are displayed in the Venue Time Zone if it has been set for the service.
New: Each country now has a default time zone. This is used as the default for a user.
New: A user can change the time zone if it is not what has been defaulted for them. https://yourwebsite.com/setusertimezone
.
New: You can now set the time zone for a venue on a service. This means any times will be displayed in the venue time zone no matter what the time zone is the user is in.
Fix: To home page caching in Sites.
Fix: When a user who initially signed up on another device or via a authentication provider returns to login they are redirected to verify and reset password.
Fix: Access denied when displaying status message after Group.ProcessSubscription
.
Fix: When accessing website root (home) with parameters would display Website.About
.
Fix: When validating email addresses and phone numbers when blank.
Fix: CollectionItem.RelativeURLFilePath
included filter path for base collection. This caused an invalid Canonical URL
Fix: Collection.GetHTMLBreadCrumbs
included filter path for base collection.
Fix: Various script and stylesheet updates, maily re the slider.
New: A user can now create an account and login using an authentication service. In order to do that, you must sign up with one or more of the following providers and register the site.
Update: The default password strength has been increased to Strong.
Update: Base scripts and stylesheets.
Fix: Block cross-site form spam.
New: A user can now create an account without using a password, if the browser and device they are using supports Web Authentication. This uses bio-metrics like face or thumbprint recognition if available.
New: The system detects the browser, device type and whether the a mobile device and creates a record of that device when a user signs up or logs in. This helps determine if a user automatically logs in on that device. The user can delete devices they are no longer using for login.
Fix: Block cross-site form spam.
Fix: Block cross-site form spam.
Fix: Block cross-site form spam.
Update: Developer and Powered By images.
Fix: Fix to base styles fore color.
Fix: When importing with an existing file name, it was not using the imported file name.
Fix: When adding a new industry or tag set, checking for exisitng file name could be invalid.
Fix: To definition inspector styling.
New: Client side styles now allow for dark and light modes.
New: The system will look for the default page image in /images/defaults/
with a name matching the definition file name of the object or method being merged. If not found it will find a match to inherited objects then finally to the application default image. For example, if the object being merged is the collection blog posts and definition file name is blog then the system will look for the following:
/images/defaults/blog.png
/images/defaults/blog.jpg
/images/defaults/articles.png
/images/defaults/articles.jpg
/images/defaults/website.png
/images/defaults/website.jpg
New: A user can now be added with just an email address.
Fix: To the BusinessCollection.RelativeURLPath
generation with filter expressions.
Fix: When a Template.PageImage
included an expression it wasn't merged.
Fix: Fix to client side scripts and stylesheets.
New: Base styles and scripts developed using latest language standards. In order to use these you will need to change your template stylesheets and scripts. Besides external stylesheets and scripts you should only need to add a single .scss such as styles.scss. This should include @use statements to include the other stylesheets required. Same goes for scripts. You should only need one javascript module such as main.js and that will have import statements for other modules to include.
New: New property added Application.PageImage
. This is the path of the default image for the page being requested. This can be also be set in the @ Page
directive of an aspx file as you can with Application.PageTitle
and Application.PageDescription
.
New: New property Template.Image
. This is the path of the default image when using this template for the page being requested. You can include an expression just like you can for Template.Title
and Template.Description
.
New: New attributes added ClassDefinition.PageTitle
, ClassDefinition.PageDescription
and ClassDefinition.PageImage
. If no expression is supplied then by default the attributes will return the BusinessObject.Title
, BusinessObject.Description
and BusinessObject.Image
property value if they exist on the business object.
New: When generating the title meta tag the system will use Template.Title
if one exists, ClassDefinition.PageTitle
(i.e. BusinessObject.Definition.PageTitle(BusinessObject)
) if value returned, otherwise uses Application.PageTitle
. Same goes for description meta tag. You can also access these values from the merge object as PageTitle
, PageDescription
and PageImage
.
New: You can use PageTitle
, PageDescription
and PageImage
in expressions in your HTML templates as these values will exist on the merge object when merged.
New: Keywords meta tag is no longer output.
New: You can now use JavaScript modules. For modules only, when minify is specified the path will be to a min/
subfolder rather than the extension .min.js
. The minified files of the modules will be generated when requested the first time. If the main javascript module changes the subfolder is deleted in order for them all to be regenerated upon request.
New: SASS compiler to allow for latest standards.
New: CSS and Javascript minify compiler to allow for latest standards.
New: Application.VisibleServiceTimes
default file name has been changed to calendar
.
New: BusinessObject.GetFileURLPropertyPathAndFileName(PropertyName)
which will return the full relative path to the file.
New: Default templates are chosen by the definition name of business objects and methods rather than the definition file name. For example, the template for BlogPosts now has to be blogposts
not the definition file name blog
.
New: When importing data with files, those files can be in the root of the zip or now match the base path. For example, say you export blog posts from one site and import them into another (both on this platform). You can now zip the blog folder and include that in the import.
New: When a URL is created for a collection that has filters, it will now include a file path for each filter (in most cases) rather than URL parameters.
New: Definition.CreateFilterMenu
now generates with relative filter paths (in most cases) rather than URL parameters.
New: CollectionClassDefinition.GenerateHTMLFilterMenus
now has an optional parameter IncludeSearchControl
.
New: DefaultHomePageName
now defaults to home
rather than default
.
Update: Modified generic output of BusinessObject.ToHTML
and BusinessObject.MethodToHTML
to allow for the new base styles and scripts.
New: SitePublicURLs.Scan
will scan the cached content of the selected internal public URLs for new references and add them to public URLs.
New: SitePublicURL.Check
will check and update cached content when different.
New: SitePublicURL.ViewCache
to view the latest cached version of this URL.
Fix: Site.Clean
now removes all URLs without a site reference with follow.
Fix: SetSitePublicURL
now only adds the URL when there is a site reference with follow.
Fix: To who can execute ConfirmOrder.PayByOffsitePaymentMethod
.
Fix: To the canonical URL.
New: You can now add Definition.StyleClasses
to any class, property, method or parameter. Those classes will be added to the HTML output class attribute.
New: Any return value from a method will be converted and output in the current response format. ie. JSON, XML, CSV or HTML.
New: BusinessObject.GetPropertySelectOptions(Path, GroupFilterValue, SearchText, MatchStart)
returns object array of value, text, items (sub options if any).
Fix: When calling the method BusinessCollection.AddNew
and inheritance is required.
Fix: HTML output when returned from a method.
New: The system detects two new prepends to a URL path. These, along with no prepend, determine how the path is routed and whether or not custom view templates are used. The three modes are:
dbms/
to a URL, as in https://yourdomain.com/dbms/blogposts/
, the system will route the path via object and method definition names and DOES NOT use custom view templates.preview/
to a URL, as in https://yourdomain.com/preview/blogposts/
, the system will route the path via object and method definition names however DOES use custom view templates.https://yourdomain.com/blog/
, the system will route the path via object and method file names and DOES use custom view templates.New: You can now add SCSS and SASS stylesheets to a template. They will be compiled to CSS when changed and first loaded.
New: When a user subscribes to a group via Group.SubscribeNewUser
which does not require payment, they are no longer logged in when doing so. If they later come back to register the system detects the user has not logged in and will allow them to register is if a new user.
New: BusinessCollection.FilterBy
will ask for a filterable property then proceed to BusinessCollection.AppendFilter
which has advanced filtering options for the selected property and when submitted will append it to the collection filter.
New: BusinessCollection.EditFilter
will allow developers to edit the raw filter SQL.
New: BusinessCollection.AppendSort
will ask for a sortable property to append to the collection sort.
New: BusinessCollection.EditSort
will allow developers to edit the raw sort SQL.
New: BusinessCollection.EditColumns
will allow developers to edit the comma-separated list of column names.
New: Session values can now be set for default values for method parameters.
New: BusinessMenuItem.PrependSubMenuItem
.
New: Each component has it's own configuration settings.
New: Deprecated code now removed. This will make upgrading from version 4 quite difficult.
New: URLs including PageType
parameter have been converted throughout the site to filename URLs. For example, /default.aspx?PageType=MethodView&Collection=Users&ID=555555&Method=SubscribeToGroup
becomes /dbms/users/555555/subscribetogroup/
and /default.aspx?PageType=CustomView&Collection=BlogPosts&ID=151515
becomes /blog/151515/
.
New: Site.ViewMap
which calls sitemap.xml
for the select site.
New: SitePublicURLs.Check
allowing you to select multiple at once to check.
Fix: SitePublicURL.ContentType
was set to XML instead of HTML in certain circumstances, causing those pages to be excluded in the site map.
Fix: BusinessCollectionItem.FileName
was not filterable or sortable even though in table.
New: LinkingForeignCollectionDefinition.LinkingPropertyFilterExpression
will append the supplied filter expression to the linking property collection filter expression.
New: LinkingForeignCollectionDefinition.LinkingPropertySortExpression
will override the linking property collection sort expression with the supplied sort expression.
Update: When importing and Match Item By is set to FileName the system will convert it to a URL file name before matching.
Fix: BusinessCollection.FilterOnIDFileNameOrUniqueValues
when supplied with empty string failed.
Fix: ItemDefinition.GenerateHTMLControl
for calculated properties.
Fix: Path access denied when posting an email form in certain circumstances.
Fix: When posting an email form it now redirects directly when no success message supplied.
Fix: When posting an email form it now reloads form values when displaying success message.
Update: Update the blog ping services.
Fix: Read only properties that were read from the database were not filterable or sortable.
Fix: Error in Payment.AllowRefund
when payment method was not a gateway payment method.
Fix: Uploading of files where the property's base path did not end with a forward slash.
Fix: Application.SendRequest
linked or attached files sometimes missing.
Fix: Application.SendRequest
attached data file included values formatted for HTML.
Fix: Calculated properties by default have no repository and hence by default are not allowed for filtering and sorting.
Fix: Error in BusinessCollection.Import
when an item property unique name could not be found and that name needed to be HTML encoded.
Fix: Fix: There is now no limit to the number of different cart items that can be added to a cart.
New: BusinessCollection.Import.AttachedFiles
takes a compressed folder (zip) of files to import. The property value in the imported list (csv, json or xml file) must match the file path and name in the zip. The import can be rerun (with matching) with a different compressed folder of files.
New: When sending emails from the email marketing system, attributes width, height, hspace, vspace and align will be added if matching style exists to IMG tags for backwards compatibity when viewing in Outlook.
New: Service.CreateEmail.ExcludeUsersAlreadyBooked
parameter added and if true will add a Merge Filter to the Email.
New: ServiceBookingEmails
which merges with bookings. For example, a thank you for attending email.
Fix: There is now no limit to the number of different cart items that can be added to a cart.
Fix: Cancelling membership not setting expiry correctly.
Fix: Running automated tasks returned access denied.
Fix: Updated the Human Verification control for forms.
Fix: Changes to backend.2.1.css to fix search box.
Fix: RSS feed main title and link were incorrect.
Fix: BusinessObject.GenerateJSON
and BusinessObject.GenerateXML
outputs were modified to include Definition and ToString for every object.
Fix: Security Violation error when processing a payment via SecurePay.
Fix: Email form now redirects correctly.
Fix: Foreign collection visible even though allow view was false.
Fix: To OffsitePaymentMethods
using onsite iframes.
Fix: MembershipEmails
when filtering by status.
New: CourseActivity.HasPreviousActivity
and CourseActivity.HasNextActivity
.
New: When CollectionDefinition.EditorLines
is set to zero the control height is set to auto-height.
Update: base-3.2.css
styles updated for collection, object and method views.
Update: Defintion Inspector styling updated to make it easier to find properties and methods.
Update: Validation on credit card numbers.
Fix: A property of type file that is relative and can be uploaded was clearing the property when no new file selected.
Fix: Submit and Save returning incorrect values.
New: Stripe Payment Gateway has been integrated and ready for use. There are 2 modes Stripe Onsite which collects credit/debit card info on your website and Stripe Offsite which uses an iframe on your site and supports many payment methods. Some payment methods may not be processed immediately and may require reconciliation with Stripe. Login to your Stripe account to activate those you want to accept. To avoid having to reconcile select only payment methods where Confirmation = Immediate.
New: The system can now refund payments and sometimes part payments depending on payment gateway integrated. SecurePay allow full payment only while both Stripe integrations allow full or part payment. This must be enabled under Payment Methods.
Fix: The system will not action an order until it meets the payment terms calculating the balance from only confirmed payments (not requiring reconciliation).
Fix: When API called from external application.
Fix: When viewing a foreign collection from an inherited primary object.
Fix: Saving an object did not alway show saved results before redirecting.
Fix: Returning relative WebAddress
was prefixing absolute path even if already there.
Fix: Application.GetClassDefinition
when case not the same. For example, StoredPaymentMethods
and storedpaymentmethods
.
Fix: Styling in Definition Inspector.
New: API Key is required for posts from external applications. Add an External Application to get an API Key to use with that application.
New: Once a human has been verified the system will store a cookie, if cookies enabled, indicating that, otherwise will store in the session. This means the user does not have to repeat the verification once they have been verified.
New: PageType=EmailForm
has been updated and integrated into Process Path version 2.
New: Additional validation of posted images min and max width and height.
New: Adding class="marquee"
to an element will create an infinite scroll effect.
New: Added Fonts folder to file manager for developers.
Fix: ServiceTime.BookUsers
now asks for any optional extras that may be available (Options1 - Options5 on Service). By default, if there are options available then the number of users is locked to 1 as each user may require different options.
Fix: ServiceTime.BookUsers
now asks for any optional extras that may be available (Options1 - Options5 on Service). By default, if there are options available then the number of users is locked to 1 as each user may require different options.
Fix: To requests that return JSON will now always return an object.
Fix: To scripts in base.3.2.js
.
Fix: To styles in base.3.2.css
.
New: [Submit And Stay] button on system generated forms. By default ClassDefinition.SubmitAndSaveDisplayName
is "Save & Stay" and MethodDefinition.SubmitAndSaveDisplayName
is nothing which means it won't display unless set to something.
New: StylesheetDefinition
and ScriptDefinition
.
New: StylesheetDefinition
, ScriptDefinition
, XMLDefinition
and JSONDefinition
properties are displayed in an editor with colour coding.
New: GenerateHTMLDropDown
generates a dropdown with a fieldset of radio buttons if single-select or checkboxes if multi-select.
New: GenerateHTMLSelect
and GenerateHTMLFieldset
now have an additional properties NoValueText
which is what is displayed when there is an option with no value.
New: base.3.2.js
replaces base.3.1.js
and backend.2.1.js
.
New: base.3.2.css
replaces base.3.1.css
and backend.2.1.css
.
New: API can now accept a post: you can use the same URL commands as per standard HTML requests. When posting data specify the format via the HTTP header Content-Type
(see post MIME types below). You can specify the format you want returned in the HTTP header Accept
(see accept MIME type below). You can also specify the returned format in the URL. For example, /json/tags/
, /xml/tags/widgets/
or /csv/categories/
.
application/x-www-form-urlencoded
- post onlymultipart/form-data
- post onlytext/html
- accept onlyapplication/json
- post and acceptapplication/xml
- post and accepttext/csv
- post and acceptNew: The system now creates a user access token for the device/agent they are logging in via. To retrieve the access token via API post the UserName
and Password
to /getuseraccesscode/
. To use the token in an API call set the request header Authorization
to "Bearer [token]".
New: You can now specify how long the system will store the user access token for auto login after a user ticks Remember Me.
New: You can now specify how long the system will store who the initial referral was.
New: Cookies are now only available using HTTPS and only visible on client where necessary. For example, A cookie named CookiesEnabled
can be set client side depending on the user's consent.
New: Automated task results now store the HTTP Status Code return when the task was run. Results will also always be stored when an error occurs.
New: When a task is run the system will auto login the creator of the task unless otherwise specified with the AutoLogin
property.
New: Attachment.SetToProperty
will now also list properties with type of WebAddress
.
New: Adding class="nav"
to an input control will, on change, navigate to the value which is presumably a URL.
Fix: The noscript
tag is only output on first session load and now uses the canonical URL.
Fix: Payment instructions URL included on invoice and order status message.
Fix: Collection.AddNew
by default returns the new BusinessCollectionItem
rather than a URL to the new item. This was implemented so API requests can post new items.
Fix: Form input value replacement.
Fix: When a method is not editable all parameters default values are used.
New: GenerateHTMLFieldset works like GenerateHTMLSelect however outputs a fieldset of inputs of type radio when single select or checkbox when multiple select.
New: BusinessObject.ToFormValues returns a NameValueCollection of property values.
New: BusinessObject.MethodToFormValues returns a NameValueCollection of parameter default values.
New: BusinessObject.MethodToJSON returns JSON of parameter default values.
New: BusinessObject.MethodToXML returns XML of parameter default values.
New: BusinessObject.MethodToCSV returns CSV of parameter default values.
Fix: Replace HTML control values when preloading a form. Also, now sets radio buttons and checkboxes when used instead of selects.
New: LoggedInUserStoredPaymentMethods
will return the current logged in user's stored payment methods.
New: GetLoggedInOrSelectedUser
, GetSelectedUser
and GetLoggedInUser
are now public if accessible.
New: PageTitle
can now be added to an ASPX @Page directive.
New: PageTitle
variable can now be used when merging any web page.
New: GetDateTimes
function can be used in scripts and will return an array of date/times based on the parameters passed.
New: FormatArray
function can be used in scripts and will format each element in an array with the specified format parameter passed.
New: Javascript function which can be used to toggle a class based on an input value such as a select control.
Update: Membership.AutoRenew
now defaults to Invoice.
Fix: Email.GenerateHTML
was showing the same image multiple times if they had the same filename but in different folders.
Fix: Group.GetActiveMembershipCount
was returning an incorrect result in certain circumstances.
Fix: The system will not update links in a web page, to include the relative folder, which is starting with a protocol (i.e. https://), forward slash (/), hash (#) and now a dot(.).
Fix: Change to the base stylesheet to remove an indent style specifically for mozilla browsers due to error which they have now fixed.
Fix: Definition inspector error when creating a table.
Fix: Definition inspector changing type of a method parameter.
Fix: Error when outputting articles to static files.
Fix: Error when outputting articles to static files.
New: Upgrade to security and user access.
Fix: Security issue with file manager.
Fix: Image required even though there was already one saved.
Fix: When the Website Temporarily Unavailable Page Name
was set to a page a continuous redirect would cause the website to crash.
New: Upgrade to security and user access.
Fix: New registered users would have to reset password when they returned.
New: User.OpenAsVCard
will download the user information in a vCard format for import into user's contact database.
New: User.MiddleNames
has been added.
Fix: By default Website.VisibleUsers
aka directory, cannot be viewed now. Website.VisibleUser(FileName)
can be used for directory lookups. For example, /directory/john-mitchell
.
Fix: ItemDefinition.DefaultValue
was disposing Application.User
and the like.
New: Upgrade to security and user access.
Fix: VisibleServiceTimes
view was generating the time part of filename as 12 hour clock.
New: Sitemap generator which also stores the public page content for fast loading when there is no user loggged in.
New: AllowFilterIndex
on the property definition. When set to false the system will add nofollow on links filtered by this property and noindex on collection views filtered by this property. The default is false, accept for Item.Tags
, Article.Category
, Article.Brand
, Article.Author
and User.Industry
.
New: Business.CanonicalURL
which returns the absolute path and parameters for the custom view of the object. For example, https://inology.au/blog/tag/email-hosting/?Page=2
.
New: CreateFilterMenu
on a property now creates links to canonical urls and sets nofollow when more than one filter is used or the property's AllowFilterIndex
is set to false.
Fix: Meta data noindex and nofollow have been set where appropriate.
Fix: Application.ArticleExists
execution speed has been greatly increased which means the loading of the home page has increased because it uses the function to determine which page is the home page.
Fix: The noscript tag is added to the HTML output for every page where the JavaScriptEnabled parameter has not been set.
Fix: The EndSessionOnComplete parameter now works with process path version 2.
Update: Defaults for Application.PoweredByWebsite
and Application.DeveloperWebsite
.
Fix: Extend max length to 1000 on Template.Title
and Template.Description
to allow for lengthy scripts.
Fix: Changed default sort order for services.
New: When a file name is created from a title, the ampersands are replaced with "and".
New: Merging collection items can now update all links and add permanent URL redirects for the merged items.
Fix: To update all links when renaming a file.
Fix: To URL redirects match and replace.
Fix: Filter expressions using like.
Fix: Phone number validator.
Update: Changed default sorting method for articles to [PublishingStatus],[PublishedOn] desc
and pages and trading items to [PublishingStatus],[FileName]
.
Update: Changed how URL Redirects work including the pattern matching and what to replace.
Fix: When an item is renamed it also creates a redirect for when used in a filter. For example, a tag named widget /products/tag/widget.
Fix: Error thrown when ItemDefinition.SelectionFilterPropertyName
is set and the filter property returned nothing.
Fix: When a menu item does not have a URL the title and onclick attributes are add to the span element.
Fix: To forms in collection view shows double info.
New: Memberships.FilterByGroup
and Memberships.FilterByMember
.
New: Article.PublishingStatus
added on database to enable sorting. The sort on articles now defaults to [PublishingStatus],[FileName]
.
Fix: Error when non-admin publishes an article.
Fix: User.AuthoredDocuments
name changed to User.AuthoredArticles
.
Fix: When new user option is selected in Website.SelectUser
it still goes to check for registration if that is the default. If admin is logged in and the email address is found in the database, the system automatically selects that user.
Fix: RSS feed not working on website.
Fix: Error adding a SecurePayPaymentMethod
.
Fix: XML output returning multiple declarations.
Fix: BusinessCollection.Import
.
Fix: BusinessCollection.ToHTML
not merging ItemTemplate element an article.
Fix: Styles updated to show item counts on filter menus.
Fix: Type not changing in definition inspector.
New: BusinessCollection.Import
can now merge matched rows giving preference to either the imported row or existing row.
New: BusinessCollection.Import
can now import from multiple line fields to one. If the property is of type MultipleLineText then the system will look for a column in the import ending in Line1, Line2, etc. For example, PostalAddressLine1, PostalAddressLine2 and PostalAddressLine3 will be imported into PostalAddress.
New: BusinessCollection.Import
can specify the date format being imported as one of the following:
New: Common.ConvertToDateTime(DateTimeText, GenericDateFormat) has been added to enable manual sorting within the parent group.
New: Group.Position has been added to enable manual sorting within the parent group.
New: All Articles menu item under content management.
New: Many functions on business objects have been modified to return self.
New: All object properties including application and collection now can specify where the Repository is.
Fix: Error when adding a promotion.
Fix: After adding a promotion it returns to the list.
Fix: An object's item and collection properties filter and sort attributes are no longer visible and cannot be edited by the user.
Fix: Group.GetActiveMembershipCount
returns an error when Group.MaximumMemberships
set.
Fix: The actual error when making a payment is now displayed correctly.
Fix: CollectionClassDefintion.GenerteHTML
merge expressions.
New: BusinessCollection.Import
will now except JSON and XML.
New: BusinessCollection.Import
new excepts two more parameters MatchItemBy
which except a unique column name and UpdateMatches
which specified whether to skip or update rows that match.
New: JSON and XML exports now include both the ID and FileName along with ToString in a sub-element for Item types. When an item's property is referenced (i.e. Country.Code) then the system will create a sub-element for it. When multiple are grouped together (i.e. Country,Country.Code,Country.Name) then they will be grouped in the same sub-elememt.
New: XML export format now uses the definition name as the element name and ID is a sub-element, not an attribute.
Fix: JSON export now has the correct file extension.
New: BusinessCollection.IsExistingItem
and BusinessCollection.Item
now except a dictionary of name value pairs. It will first look for FileName and if not available use ID.
New: BusinessCollection.FilterOnIDFileNameOrUniqueValues
now except a dictionary or array of dictionary of name value pairs. It will first look for FileName and if not available use ID.
New: Common.XMLToObject
converts xml to an array/dictionary the same format as Common.JSONToObject
.
Fix: JSON export now has the correct file extension.
Fix: Submit name in defintion inspector.
New: ValueDefinitionAttribute.StoreSessionOnly
had been replaced by enumeration ValueDefinitionAttribute.Repository
which indicate where the value is stored:
Database
: stores in a column in the table.More Info
: stores the name and value in a JSON column named More Info.Request
: stores only for the current request.Session
: stores in the user's session state.Application
: stores in the application state.New: JSON table column MoreInfo
replaces XML table column CustomProperties
to store the custom properties in a name value collection.
New: PaymentMethod.MoreInfo
and Email.MoreInfo
have been created to store the custom properties from the inherited classes. For example, SecurePayPaymentMethod.MerchantID
, OrderEmail.OrderStatus
, etc.
New: A table column has been created for each custom property and the following system properties:
GatewayPaymentMethod.ReconciliationRequired
GatewayPaymentMethod.VerificationRequiredWithStoredPaymentMethod
OrderItem.RegularPrice
ServiceBooking.AdditionalInformation
New: ClassDefinitionAttribute.BaseType
returns one of the following:
New: JavaScript function to create a tabs on the client-side. To use set class="tabs"
on the container element. The same element must have a child element of nav
, to hold the table of contents, and one or more elements with an id
for each content section. For example:
<div class="tabs">
<nav>
<ul>
<li><a href="#content-one"><span>Content Section One</span></a></li>
<li><a href="#content-two"><span>Content Section Two</span></a></li>
<li><a href="#content-three"><span>Content Section Three</span></a></li>
</ul>
</nav>
<div id="content-one">Content section one here...</div>
<div id="content-two">Content section two here...</div>
<div id="content-three">Content section three here...</div>
</div>
New: Definition inspector has been overhauled with a new look. You can also add a collection class or property directly via the inspector and it will add the table or column in the database if need be.
New: The dashboard shop now lists all products to easily add products to the cart without multiple roundtrips to the server to do so. A client-side search and filter by category have also been added to make it easy for the customer to find what they want fast.
New: ItemTypes.InheritsRank
is a calculated column on the table used for sorting.
New: CustomDefinitionNamesStartWith
now defaults to underscore if not provided.
New: ValueDefinitionAttribute.SQLDataType
returns the data type required to store the property value in an SQL table column. For example, HTML = nvarchar(max), ID = int, Money = decimal(19,3), etc.
Fix: Error in MoneyDefinitionAttribute.FormatValue
when round to value is whole number.
Fix: Error in EnumerationDefinitionAttribute.CompareValues
when enumeration name passed.
Fix: GetCollection
now throws an appropriate error if not found.
Fix: To output of ConvertSiteToXHTMLCompliant
.
Fix: To the attributes of the following properties:
AutomatedTask.URL
AutomatedTask.Duration
CourseResult.CompletedOn
Email.FromEmailAddress
Email.ReplyEmailAddress
Email.MergeCollection
Email.MergePropertyForRecipient
Email.MergeFilterExpression
Email.MergeSort
Order.DiscountTaxRate
Order.FreightTaxRate
OrderItem.TaxRate
Payment.ProcessingFeeTaxRate
PaymentMethod.Currency
PaymentMethod.ProcessingFeePercentage
Promotion.DiscountRate
Subscription.AutoRenewDue
Task.URLToRun
Task.PercentageComplete
TaxRate.Rate
User.PasswordLastUpdatedOn
Fix: To pricing for selected or logged in user.
Fix: When loading the filter expressions, the filter is reset without unnecessary code.
Fix: Organisation.Region
was required in the database causing an error.
New: counter.js
function that shows a number incrementing or decrementing to a target value when visible in view port. To use set class="counter"
on an element and the inner text is the target value. Also can use these optional attributes:
data-start
is the starting value. Defaults to 0.data-incremental-pause
is the number of milliseconds to pause between increments. Defaults to 50.data-increments
is the number of increments to perform. Default is 40.data-locale
is the locale to use when formatting the number. Default is en-AU.data-format-options
are the options for formatting the number. Default is { style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 }
.Fix: Menu item not showing as current when URL matched the current URL.
Fix: Parent group property not set when adding a sub group from that parent.
Fix: Processing boolean parameters of a method.
Fix: Display values when filtering a collection with in
operator.
Fix: Dashboard membership summary and order summary clickable totals.
Fix: Fix to checkout process returning an error due to invalid URL.
Fix: Fix to freight calculations based on delivery zones.
Fix: Fix when an item in the object is not found the system will check for a redirect. For example, if /blog/my-blog-post
was renamed to /blog/my-renamed-blog-post
.
Fix: Fix to function that determines if a member can renew automatically to a group.
Fix: Postmaster email address ignored when checking for bounced emails.
New: Membership.AutoRenew
now can be set to:
New: When an email is generated, prior to sending to the recipients, the system scans the HTML for images that need to be resized, copies and resizes them in the email folder and updates the link.
New: Property data type PhoneNumber
will check if number is compliant. Allows leading +
, 3 to 15 numbers, opening bracket (
with matching closing bracket )
, space and hyphen -
separators. For example, +61 7 5535 8942
, (07) 5535-8942
, etc.
New: The following property was created on the website object to return organisations visible to the current user.
VisibleOrganisations
with filename organisations
New: The system only retrieves required table rows when necessary. This can be overridden if you know most rows are going to be accessed, like menu items, and the system will return all so there are less requests to the database. To do this set CollectionDefinition.AlwaysFillWithoutFilters
.
Fix: The search control, clear filter and items per page now include nofollow so search engines don't index.
Fix: When processing an order and notifications, invoice, etc. failed to send the process would stop. Now it continues with a note added to order.
Fix: Error retrieving display value in filter on collection when filtered on a variable like [Today]
.
Fix: Error in GenerateCaptchaImage
.
New: ServiceSchedule.AvailableQuantity
and ServiceTime.AvailableQuantity
when blank default to Service.AvailableQuantity
.
Fix: Attachments can now be viewed without going via the primary object if allowed.
Fix: BusinessObject.GetHTMLBreadCrumbs
to show current object. Also, now will create links to the custom view by default if one exists.
Fix: Modified BusinessCollectionItem.ToString
for new items.
Fix: Canonical path for pages including home page.
Fix: Canonical path for collections.
Fix: Filter menu for items with sub-items such as categories and sub-categories.
New: ClassDefinitionAttribute.SubmitDisplayNameExpression
and MethodDefinitionAttribute.SubmitDisplayNameExpression
allow you to set the name of submit button. For example, login method submit button might say "Sign In".
Fix: Error when trying to cascade delete rows when the related table is a view.
Fix: When checking out from dashboard cart.
New: ValueDefinitionAttribute.FilterMenuGrouping
is used to group items in the filter menu. For example, grouping on Article.Issue
might be [IssueYear] desc
or grouping on User.Region
might be [CountryName], [StateName]
. Note: the group column names must exist on the table of the column filtering by. For example, CountryName and StateName must also exist on the Users table.
New: ValueDefinitionAttribute.FilterMenuSortAscending
is used to sort items in the filter menu. True = Ascending and False = Descending.
New: Add calculated property Article.IssueYear
which is used to group issues in filter menu.
Fix: EnumerationDefinitionAttribute.DefaultValue
produced an error when enumeration name like Now could be evaluated.
New: The following properties were created on the website and group objects to return published articles visible to the current user.
VisibleServiceTimes
with filename servicetimes
New: Filter functions on visible service times.
Upcoming
Past
FilterByCategory
FilterByCountry
FilterByState
FilterByRegion
New: When specifying users for a booking the system can now ask for additional information for each user such as Dietary Requirements. You can specify the name of that additional information in Service.BookingAdditionalInformation
.
New: CartItems.HasSubscriptions
and CartItem.IsSubscription
.
New: You can now set BusinessCollection.ItemsPerPage
to zero.
Fix: Breadcrumbs filter expression were showing the values instead of the formatted display text.
Fix: Membership.Subscription
set where possible and Membership.AutoRenew
set on.
Fix: Pages moved to templates have wrong item type.
Fix: Several speed issues when requesting a page.
Fix: User.Industry
was a readonly property.
Fix: Disposal of business object when processing a return value.
Fix: Articles.FilterByIssue
.
Fix: FilterExpression.ToString
.
Fix: ValueDefinitionAttribute.CreateFilterMenu
.
Fix: EnumerationDefinitionAttribute.DefaultValue
.
Fix: GenerateHTMLSearchControl
when using short-cut paths.
Fix: Styles for search-control.
Fix: Styling issues in CartItems.ConfirmOrder
.
Fix: Styling for readonly HTML control.
New: Title and Description properties have been added to the Template. These properties can contain merge scripts and the results are added as meta tags on a web page or subject of an email.
New: All pages that were used as templates such as success messages and email templates are now moved to templates. Pages are now simply used for web pages and no longer used for emails.
Fix: SendEmailForm
will no longer send from email address of the user entering the information. If you want to send from anyone other than the administrator, then an input control with type=hidden or type=text, name=Sender and the value being the email address should be included on the form. However the Reply-To will have the email address of the user entering the information.
Fix: When ServiceBooking.Time
is update it resets the start and finish time.
Fix: Function ServiceBooking.AllowSendEmail
and ServiceBooking.AllowSendEmailIncludingUser
.
New: Group.MaximumMemberships
: the maximum number of active memberships a group is allowed.
New: Group.Image
: can be used for a banner image or like.
New: Organisation.Logo
: the representative logo of an organisation.
New: ServiceTime.SpecifyUsers
now asks for additional information (if required) for each user such as meal preference.
New: You can now customise the booking confirmation letter for each service. This can be done by creating a merge page named [Service.FileName].servicebooking.confirmationletter
.
New: Base styles nav.minimize1080
and nav.minimize1200
.
New: You can now change the maximum bookings for both a service schedule and time.
New: When adding custom properties to a service available schedule, the values are copied to a service time when generated, if the custom properties exist.
Fix: Custom properties and methods on the inherited class are now included.
Fix: Duplicate note created when service booking email sent.
Fix: Output of meta tags for canonical and next and prev pages.
Fix: Output of filter menu to add meta tags telling search engines not to follow link when there is more than one filter applied to the link.
New: There are several new operators for comparing item type properties (ItemDefinition
) where the item has a parent. For example, Category.Parent
. For this to work there must be a calcualated columns on the table with same name plus "Ancestors" and "Descendants". For example, for Article.Category
there would also be Article.CategoryAncestors
and Article.CategoryDescendants
. These return a pipe delimiter list of IDs. The operators are as follows:
AncestorOf
is /
AncestorOfOrEqualTo
is /=
DescendantOf
is \=
DescendantOfOrEqualTo
is \=
RelativeOf
is /\
RelativeOfOrEqualTo
is /\=
Fix: Filtering articles by category now includes the articles of descendant categories.
Fix: Site default static index file will now be loaded if exists.
Fix: Output of ValueDefinition.GenerateHTMLControl
and ValueDefinition.CreateFilterMenu
.
Fix: A HTML form with class disable-window-on-submit
now on submit includes the message "Please wait while processing..." with spinning repeat icon.
New: Website.ClientIPInfo
will return information about the client IP address as follows. This will use a free service but is limited to 45 requests per minute. Obtaining an API Key will give you unlimited requests. Create a configuration setting named IPAPIKey
with the value being the key.
New: Website.UserCountry
and Website.UserGeolocation
now get their info from Website.ClientIPInfo
.
New: Articles can now have a single category.
New: Search results for users on dashboard now include "Login as User".
New: Collection.DefaultItemsPerPage
now set to 25. Templates
and Snippets
set to 100, while Email
set to 5.
New: CollectionClassDefinition.GenerateFilterMenus
includes a clear filter option.
New: Styles for nav.filter-menu
.
Fix: Various fixes to ValueDefinition.CreateFilterMenu.
Fix: The return URL when logging in via custom register.
Fix: Article.Publish
return URL.
Fix: Article.StatusMessage
retrieving template to use.
Fix: CourseEnrolmentEmail.SendNow
.
Fix: Email.SendNow
sort order.
Fix: RelatedTradingItem.RelatedItemSelectableValues
.
Fix: New process path method now checks for redirect when path not found.
Fix: The page title generated for HTML output has been modified.
Fix: Collection.Definition.GenerateHTML
now shows the correct methods for each item.
Fix: Data.ConvertSQLToFilterExpressions
.
Fix: A HTML form with class disable-window-on-submit
now on submit includes the message "Please wait while processing..." with spinning repeat icon.
Fix: Error when renaming items with UpdateAllLinks
parameter set to yes.
Fix: Error viewing Trading Item Discounts.
Fix: Info message not detected in client-side scripts.
Fix: Couldn't add a large number of items to the cart due to storage size of cookies.
New: Can now create an email campaign based on course enrolments.
New: Can now retrieve custom properties via BusinessCollectionItem.RawDataValue
.
Fix: When adding a new stored payment method it now only shows the available payment methods in the user's currency.
Fix: When filtering stored payment methods by expiry date.
Fix: Error in Group.ProcessSubscription
.
Fix: User unable to remove own stored payment method.
Fix: Client-side scripts and stylesheets.
Fix: To open and close methods for multiple service times.
New: Can now Open and Close multiple Service Times at once.
Fix: Error when viewing items of a Future Order.
New: Property ItemTags.TagSet
added in order to create properties that will be specific to a tag set. For example, Product.Colours
for a multi select or Product.Material
for a single select. Selections from both will be listed in the item tags.
New: BusinessCollectionItem.DataValue.Set
now updates LinkingForeignCollectionDefinition
properties as well.
Fix: LinkingForeignCollectionDefinition.GenerateHTMLControl
now output a single select control when MaximumItems
is equal to one.
Fix: LinkingForeignCollectionDefinition.GenerateHTMLControl
was outputing a readonly control.
Fix: When submitting a form to add or update a business collection item, properties not included as controls on the form are ignore.
New: ValueDefinitionAttribute.GetCode
and ValueDefinitionAttribute.SetCode
allow for custom methods to get and set values on a property.
New: BusinessObject.GetPropertyValue
and BusinessObject.SetPropertyValue
now available. Common.GetPropertyValue
renamed to Common.GetObjectPropertyValue
.
Fix: Error replacing form values in XML.
New: Can now position tags within a tag set.
New: BusinessCollection.FilterOnIDFileNameOrUniqueValues(Object)
now excepts a business collection item of array of business collection items.
Fix: Error listing a tag's items.
Fix: BusinessCollection.Item(ID)
now throw error when ID does not exist.
New: Can now tag any item not just Articles. i.e. Users, Groups, etc.
New: Function BusinessCollectionItem.Rename
will be visible to administrators if there is a column FileName
in the table.
New: Groups now have a trial period for membership which is free.
New: StoredPaymentMethods.ExpiredOn
to filter out expired payment methods.
Fix: When a form is submitted and returned due to error or displaying message to redirect the field were not populated with the user input.
Fix: Error in BusinessCollection.FilterOnIDFileNameOrUniqueValues
.
Fix: Error when generating email.
Fix: Error when viewing/editing a region.
Fix: Backward compatibity for Human Verification Code on forms to block spambots.
Fix: Error in Group.SubscribeNewUser
.
Fix: Backward compatibity for Human Verification Code on forms to block spambots.
New: Import to any collection. Currently only CSV. JSON and XML in future release.
New: BusinessCollection.IsExistingItem
and BusinessCollection.Item
will now search for ID, filename and unique fields for passed value. However, if the passed value is in the format of an ID or filename then it will not search further. For example, passing an email address to find a user.
New: You can add a text-to-speech player control to any HTML element and when a user clicks the play button the text within the element is read by a synthesizer. The user can then pause or stop. They can change the voice (depending on the availabity of the browser), the rate and pitch. To add the player control you simply add the class "text-to-speech" to the element.
New: You can now specify a sub-properties as collection view columns. For example, the columns for a membership list may be "Group,Member,Member.Mobile,Member.EmailAddress,Status,MemberType,Role".
New: ClassDefinition.GenerateHTML.RequireReadOnly
to return a readonly form view.
New: Function TradingItem.RelateItems
to relate trading items with one another.
Fix: Article.StatusMessage
updated to remove "To view the [article] click here" when not published.
Fix: Administrator could not add a new user.
Fix: Found reference to code library based stylesheet in HTML editor which may cause problems with Google's algorithm for detecting malicious or unwanted software.
Fix: Object clean up in BusinessObject.GetPropertyValue
disposing primary objects, collections and application.
Fix: BusinessApplication.Item
when passing a file name.
Fix: Found reference to code library based stylesheet in HTML editor which may cause problems with Google's algorithm for detecting malicious or unwanted software.
New: The following properties were created on the website and group objects to return published articles visible to the current user.
VisibleArticles
with filename content
VisibleBlogPosts
with filename blog
VisibleForumTopics
with filename forum
VisibleGalleries
with filename galleries
VisiblePages
with filename testimonials
VisibleTestimonials
with filename testimonials
VisibleProducts
with filename products
VisibleServices
with filename services
VisibleSubscriptions
with filename subscriptions
VisibleCourses
with filename courses
New: Filter functions on articles to match those in Article Views. These are created so the article views can be replaced without breaking the existing URLs.
FilterByCategory
FilterByTag
FilterByBrand
FilterByAuthor
FilterByCountry
FilterByState
FilterByRegion
FilterByIssue
New: The following property was created on the website object to return users visible to the current user.
VisibleUsers
with filename directory
New: The following property was created on group objects to return current memberships visible to the current user.
VisibleMemberships
with filename directory
New: Filter functions on the users and visible memberships to match those in Directory Views. These are created so the directory views can be replaced without breaking the existing URLs.
FilterByIndustry
FilterByCountry
FilterByState
FilterByRegion
New: You can filter a collection of items by any item property that has the attribute AllowFilter
set to true. This can be done by passing a name value pair in the URL. For example, /pages/template/website-default
will return the pages where the template is equal to "website-default". However, when passing the name value pair as a parameter, the parameter name must be the property name plus "Filter". For example, /pages?TemplateFilter=website-default
.
New: When specifying PageType=CollectionView
, PageType=ObjectView
or PageType=MethodView
in the URL, the system will NOT attempt to find a custom template specific to that collection, object or method but instead use the standard template (see below) if available otherwise the system will generate the view.
business-application
business-collection
business-collection-item
business-object
method
New: You can now customise the template for exceptions (errors). The system will look for a template called exception
and use that to display if found, otherwise will use the website default template.
New: Added response statuses BadRequest
, Unauthorized
and InternalServerError
when the appropriate exception was thrown.
New: You can output the URL response in HTML, JSON and now in XML and CSV as well. At this stage input is only via HTML (forms). You can also access these via:
BusinessObject.ToHTML
BusinessObject.ToJSON
BusinessObject.ToXML
BusinessObject.ToCSV
New: CSV, XML and now JSON can now be selected as the output format when export a collection.
New: The following have been deprecated:
BusinessCollection.ToXMLList
BusinessCollection.ToXMLValueList
New: Properties on business object.
BaseURLParameters
are the parameters which define the base business object. For example, Collection=Products
, Collection=Products&ID=121065
or PrimaryCollection=Products&PrimaryObjectID=121065&ForeignCollectionProperty=Categories
.CustomURLParameters
are the other parameters which customise the business object. For example, SearchText=widget&Page=3
.URLParameters
now includes both Base and Custom parameters. For example, Collection=Products&SearchText=widget&Page=3
RelativeURLPath
is the shortcut path to a business object. For example, products/
, products/widget/
or products/widget/categories/
RelativeURL
includes both the Relative URL and the Custom parameters. For example, products/?SearchText=widget&Page=3
New: The following custom parameters passed in the URL as name value pairs are now stored with the business object and passed back via any call to BusinessObject.URLParameters
or the new BusinessObject.CustomURLParameters
.
Properties
stored as BusinessObject.PropertyNames
Methods
stored as BusinessObject.MethodNames
Filter
stored as BusinessCollection.Filter
SearchText
stored as BusinessCollection.SearchText
Sort
stored as BusinessCollection.Sort
Columns
stored as BusinessCollection.ColumnNames
ItemsPerPage
stored as BusinessCollection.ItemsPerPage
Page
stored as BusinessCollection.Page
New: The following methods can be called via a URL. For example: /default.aspx?PageType=MethodView&Collection=Products&Method=ClearFilter
or /pages/clearfilter
.
ClearFilter
ClearSort
New: The method BusinessObject.GetHTMLBreadCrumbs
was created to be used in a template for a business object. Not only will it display the collection or primary object of the current object but also display filters on any collection in the trail.
New: Collection view design when PageType=CollectionView
or a collection does not have a template to display in.
New: CollectionClassDefinition.AllowNewItems
has been removed and is no longer applicable. Use AllowExecute
on the collection method AddNew
.
New: CollectionClassDefinition.AllowViewItems
has been removed and is no longer applicable. Use CollectionClassDefinition.AllowView
.
New: CollectionClassDefinition.DefaultFilterPropertyNames
will display in the filter menu in the collection view.
New: CollectionClassDefinition.DefaultSortPropertyNames
will display in the sort menu in the collection view.
New: CollectionClassDefinition.GenerateHTMLFilterMenu
will generate a filter menu based on one of the columns in a collection. For example, author on blog posts will return a list of authors with blog posts. Clicking on an author will return only their blog posts.
New: CollectionClassDefinition.GenerateHTMLFilterMenus
will generate multiple filter menu based on select columns in a collection. For example, on products you may include category, brand, supplier, price range.
New: Any property or parameter (ValueDefinition) can have a selection filter (not just ItemDefinition). For example, Country, State and Region or Year, Month and Published On.
New: You can now SetLockedFilter
on a collection which means the user cannot modify it. This is also the case if a filter is specified in the definition of a collection or a property or parameter which specifies a collection or item of a collection.
New: When searching for text in a articles collection the PlainTextContent
is also searched.
New: By default when a HTML property is edited the full toolbar will be displayed by administrators otherwise a minimal toolbar will be displayed.
New: You can now set the URL for check out. By default it will go to Request Billing Details.
New: Items that have sub-items such as Menu Items, Groups and Categories are now sorted by default by the parent's sort followed by the position and title. This was done by creating a custom column on each table which returns a string for the sort.
New: Property User.NameIncludingNickname
in the format "John (Legend) Mitchell" :).
New: BusinessObject.GetPropertyValue
will now return a method's default parameter value. For example, on an DefaultRating = Article.GetPropertyValue("SubmitReview.Rating")
.
New: The following methods have been added Common.GenerateRandomString(Length, [CharacterSet])
and Common.IsNumericType(Value)
.
Common.GenerateRandomString(Length, [CharacterSet])
Common.IsNumericType(Value)
Common.GenerateHTMLPageControls(URL, Items, Page, ItemsPerPage, DefaultItemsPerPage)
Common.GenerateHTMLSearchControl(URL, [SearchText], [Title], [Placeholder])
New: Course.CreateMenuStructure
whichs creates a menu structure of the modules and activities.
New: CourseActivity.Start
and CourseActivity.Complete
which mark the activity with status of in progress or complete.
Fix: To MyStatus
on Courses, Modules and Activities.
Fix: Several issues in the new process path.
Fix: Error in Group.ProcessSubscription
.
Fix: Output error in Common.GenerateHTMLVideo
.
Fix: Now allow users to delete their stored payment methods.
Fix: Class definitions did not include inherited custom properties and methods.
Fix: Email recipient could not open email in browser.
Fix: Custom collections were not found if wrong case or missing custom prefix (underscore).
Fix: When saving a new business collection item and the collection is already disposed.
Fix: Clicking a menu item will only open in new windwow when the URL protocol is http or https.
Fix: Error trying to update the base path when item is added/updated but the collection is disposed.
Fix: Error uploading an attachment.
New: Added courses to article view and set up configuration settings.
New: Added NotEnrolled
status to property MyStatus
on courses, modules and activities.
New: Property Group.Courses
.
Update: Moved pages used for method views to templates.
Fix: Application.GenerateHTMLMenu(MenuItem, Depth, IncludeURLWithSubMenus)
did not include the URL menus with sub-menus when requested.
Fix: Error in new process path when parameters attribute passed in URL.
Fix: Error when confirmation message included an apostrophe.
Fix: When an attachment is deleted the file is deleted if it is in the item's local folder.
New: Base styles.
Fix: After adding a new item via BusinessCollection.AddNew
the system now redirects back to the collection view.
New: Learning management system: Courses, Modules, Activities, Enrolments and Results. Courses inherit trading items so together with the order management systems they can be ordered and paid for creating an enrolment. A course can have many modules which are used to group activities. Activities are currently simply video tutorials but future development will include assessments or other activities to be determined. A student (user) must be enrolled in a course before they can start it. Results are currently only record the status of the activity (in progress or completed). Future developments may include assessment results.
New: Articles (pages, blog posts, testimonials, courses, etc.) can have a video.
Fix: Adding a new item with a file/image did not upload the file/image to the correct folder.
Fix: When resetting the parent membership expiry also reset the auto renew in child memberships.
Fix: Allow edit on Membership.AutoRenew
.
Shortcuts will match the business objects structure starting from the application (website). For example, any application object property or method accessible by the user can be accessed as follows:
/login will return a form for the Website.Login
method
/register will return a form for the Website.Register
method
/configure-components will return a form for the Website.ConfigureComponents
method
/user will return the logged in user profile from Website.User
/licensee will return the licensee profile from Website.Licensee
From there we can add properties to the application (website). For example, Add a property called Shop which returns a collection of products filtered to only published products sorted by date published descending. Now I can access it as:
/shop
Now say I want to filter it by a category. First, I need to create a category filter method on the products collection as Products.FilterByCategory(Category)
returns Products (self). The Category parameter can be an ID, FileName or Category object. So, we can now return a filtered shop as:
/shop/filter-by-category/furniture
Which will in essence run Website.Shop.FilterByCategory(“furniture”)
Now /filter-by-category is not very nice in the URL so for each property and method you will be able to set an alternative filename. For this one I would simple call it category. So now it can be accessed:
/shop/category/furniture
Now we can add more filter methods to products for tags, brands, authors, etc.
/shop/category/shoes/tag/white/brand/nike
They can be in any order and end up with the same result, for example:
/shop/brand/nike/category/shoes/tag/white
You could also call the same filter method multiple times:
/shop/tag/large/tag/round/tag/white
You can also add methods to a collection to sort, for example, say I create a sort method which simply set the sort order on price as Products.SortByLowestPriceFirst()
returns Products (self). I would give it a filename lowest-price-first. Then it could be called via:
/shop/lowest-price-first
To access an item in the shop it would be simply:
/shop/item/widget
Which will return Website.Shop.Item(“widget”)
Again, it is not very nice to have /item in the URL so I will make it the default method of the collection. So now you can access as:
/shop/widget
Which will return Website.Shop(“widget”)
which is the same as Website.Shop.Item(“widget”)
If you want to use an ID, you can similarly say:
/shop/1234
Which will return Website.Shop(1234)
or Website.Shop.Item(1234)
Note: to edit an object/item you need to add /edit to the URL. For example:
/shop/widget/edit
Note: any filename of an item in a collection cannot be the filename of a property or method in a collection. For example, say you name a product “tag” then /shop/tag will bring up Website.Shop.FilterByTag
method, not the product Website.Shop(“tag”)
, as the FilterByTag method has a filename of tag. Filenames are searched for in properties first, then methods and if not found applied to the default method which in this case is Item. Alternatively, the product tag in this case, you would have to call via the item method or ID as follows:
/shop/item/tag
/shop/1234
Here are a few more examples:
list all the related items of the widget product | /shop/widget/related-items |
|
list other products the supplier of the widget | /shop/widget/supplier/products |
|
Add widget to cart | /shop/widget/add-to-cart |
|
List all with price less than 1000 | /shop/price-less-than/1000 |
|
Let’s examine a few URLs:
/user |
|
/register |
|
/contact-us |
|
/countries |
|
/members |
|
/members/rules |
|
/members/board-members |
|
The system will first check the properties for the filename, then methods and finally and if not found will apply to the default method.
/user was found in properties
/register was found in methods
Notice /contact-us, /members and /countries were all found in the default method. We could set up a default method on the application called Item and in that method we search for the filename first in pages then groups and finally collections. So:
/contact-us returns a page
/countries returns a collection
/members returns a group
With /members/rules and /members/board-members we would also need to set up a default method on Group and call it Item which we search for the filename first in pages then subgroups. So:
/members/rules would return a page
/members/board-members would return a subgroup
The template name will match the calling properties/methods firstly otherwise the outputs type then any inherited types.
URL | Template Name Used in Priority |
/login | website.login method |
/shop /shop/category/furniture /shop/brand/nike/tag/white/lowest-price-first Note: Due to the filter and sort methods returning the | website.shop products trading-items articles items business-collection business-object |
/shop/widget/supplier/products | website.shop.item.supplier.products user.products products trading-items articles items business-collection business-object |
/shop/widget | website.shop.item product trading-item article item business-collection-item business-object |
/shop/widget/edit | website.shop.item.edit product.edit trading-item.edit article.edit item.edit business-collection-item.edit business-object.edit method |
The system should have at least the following templates:
New: Currently under construction is a new way to process the path (URL). When Application.ProcessPathVersion
is set to 2, new shortcuts and template selection for objects and methods are processed via this new method. See Proposed New Shortcuts and Template Selection. Currently only some paths for HTML and JSON output are available with XML and CSV output in future versions.
New: BusinessObject.ToHTML
will return HTML form based on the current user access rights to the object and its properties and methods.
New: BusinessObject.MethodToHTML(Method)
will return HTML form based on the current user access rights to the object's method and its parameters.
New: BusinessObject.ToJSON
will return JSON based on the current user access rights to the object and its properties.
New: Object and method view form design when PageType=ObjectView
or PageType=MethodView
and Application.ProcessPathVersion
set to 2.
New: Application.GenerateMembershipRenewalOrders
- When Membership.AutoRenew
is set, an order will be generated Membership.Subscription.AutoRenewDue
time period before it expires. If the member has stored payment methods then the system will attempt to take payment for the subscription and process the renewal otherwise an invoice is sent to the member.
New: NameValueCollection.Insert
inserts an entry to the collection at the index.
Fix: LinkingForeignCollectionDefinitionAttribute.ConvertValue
returning invalid collection.
Fix: GenerateHTMLVideo
output of YouTube iframe.
Fix: BusinessCollection.FilterOnIDOrFileNames
returning error.
Fix: FormatToJSONString
added additional character replacements.
Fix: FutureOrder.Confirm
returning error.
Fix: BusinessCollectionItem.DefaultRange
not returning correct value when custom property is the range property.
Fix: GenerateHTMLVideo
updated YouTube URL.
Fix: Cart items doubling.
Fix: FutureOrder.Confirm
returning error.
Fix: BusinessCollection.ToString
not removing custom prefixes when no items or 1 item.
Update: Updated Administration Menu to remove unwanted items and add tags, tag sets to product catalogue and incomplete orders to order management.
Fix: MIGS Offsite Payment Method returned invalid hash code due to a change in the return URL.
Fix: CartItems.FreightPrice
invalid when delivery method set to nothing.
Fix: Application.Reset
not returning to previous page.
Fix: GenerateHTMLForm
on a new business collection item had invalid action attribute.
Fix: GenerateHTMLForm
on a business object or method now will show properties/parameters when allow view or edit.
Fix: Default delivery method was not set to cheapest due to a sorting issue.
New: Set the configuration setting GoogleAPIKey
to enable the system to use Google's Geocoding API to get the GEO location of an address or the address at a GEO location.
New: Additional attributes added to the form, labels and inputs generated by GenerateHTMLForm
for both business objects and methods to help with scripting and styling.
Fix: Error when running Organisations.SetMissingResidingGeolocations
.
Fix: More descriptive error returned from script errors.
New: Additional attributes added to the form, labels and inputs generated by GenerateHTMLForm
for both business objects and methods to help with scripting and styling.
Fix: If definition attributes ImageURL.MaximumWidth
and ImageURL.MaximumWidth
are both not set then they will be defaulted to 1920 and 1200 respectively.
Fix: Definition attributes Decimal.MaximumValue
now set to the maximum value of the current data type rounded down to the Decimal.RoundToValue
.
Fix: Type defined attributes on definitions now set in inheritance order. For example, HTML.EditorLines
used before MultipleLineText.EditorLines
.
Fix: Error in LinkingForeignCollection.GenerateHTMLControl
.
Fix: Multiple error/info messages will appear in form view when returning from submission.
New: The GenerateHTMLForm
method now adds a name attribute to each label for specific styling.
Fix: Permission denied error when outputing an RSS feed.
Fix: Error when booking and attendee details contain an ampersand.
Fix: Error when saving an object or executing a method with a Business Collection Item as a parameter.
Fix: Application.CheckForBouncedEmails
memory consumption.
Fix: When email bounced due to 550 Maximum line length exceeded it was considered a hard bounce and marked the recipient's email status as bouncing. Now marked as invalid message.
New: Renamed FileURLDefinition.FileName
to FileURLDefinition.SaveAsFileName
.
New: Definition.FileName
which will be set to the definition name formatted to a file name unless otherwise set. For example, the BlogPosts
collection file name by default will be blog-posts
but you could to set it to just blog
.
New: Application.Item(IDOrFileName)
will return a page, group or collection matching the ID or File Name passed in.
New: Collection.Item(IDOrFileName)
will return an item matching the ID or File Name passed in.
New: Can now export a foreign collection. It will export the collection converted to a string which unless change in the definition will return the number of items. For example, 4 Order Items.
New: Email.SendNow
will now check for prior bounced mail before sending.
Fix: Email.SendNow
returned an error of unknown OrderID.
Fix: Broken links in email campaign.
Fix: Domain redirection.
Fix: Discount pricing selection on trading items.
Fix: Can remove stored payment method from future order.
Fix: To default stored payment method for future order.
Fix: Selected Payment Method saved to session.
Fix: Default email settings saved to session when Sending Epage.
Fix: Current Automated Task settings saved to session for Schedule New Automated Task.
Fix: User dashboard links.
New: Renamed User.Status
to System Access Status, User.UserType
to System Access Level, Membership.Status
to Group Access Status and Membership.MemberType
to Group Access Level.
Fix: Stopped auto-fill when asked for new password.
Fix: If an object is not accessible to a user none of the methods are either.
Fix: Order.RequiredOn
was not automatically being filled when bookings made.
Fix: SendEmail.From
is now limited to the email address of the user logged in or the administrators email address.
Fix: Allow logged in member view their memberships with any status.
Fix: Moving an item to another type.
Fix: Error when displaying a users future orders.
Fix: Error when sending order emails.
New: Groups
have been classified into Organisations
and Non Organisation Groups
. Organisations have additional information such as addresses, contact details and bank account details. Some types of organisations may be clubs, chapters, leagues, etc.
New: Membership.Role
has been added.
Fix: For guest checkout and processing payments and actioning orders.
Fix: Unable to select certain properties when filtering a collection.
New: Application.Reset
now asks if you want to reset your session or the application. If application is chosen and multiple processes are used then then the application pool is restarted.
New: Items.RefreshAttachments
will refresh the attachments for every item in the collection. In order to use this function you must Allow Execution for the collection you want to run it on. For example, in configuration settings set Products.RefreshAttachments.AllowExecuteExpression
to Application.AdministratorIsLoggedIn
Fix: ServiceTime.Reschedule
updates start and finish times in each of the bookings.
Fix: BusinessApplication.GetDefinition
not returning methods or paramater definitions.
New: The application can now run on multiple processes. In order to use multiple processes you need to do the following:
<sessionState mode="StateServer" />
to the <system.web/>
section of web.config.Fix: Membership emails now filtering by member type and status correctly.
Fix: Error when listing emails due to forwarded receipts load.
Fix: Editing order items slow to load.
Fix: Error displaying the payment order number.
Fix: Error loading foreign collection not previously loaded.
Fix: To avoid loading base tables in full.
Fix: Error retrieving session value from table after table reset.
Fix: Custom pages for order methods where not showing.
Fix: To add booking to cart.
Fix: To order item description for bookings.
New: Default dashboard items "Order Summary" and "Payment Summary" have new default time periods.
Fix: Error when redirecting from alias domains and non-ssl to ssl.
Fix: Error when copying items from one type to another.
Fix: Error when checking availability on service times.
Fix: Trading Entity stopped from deleting order once actioned.
Fix: Stopped reorder when contains bookings.
Fix: Stopped reorder when contains bookings.
Fix: Pages with multiple forms could not validate.
Fix: Forms controls that were auto-filled were not validated.
Fix: Auto-fills booking information from Trading Entity if not any set.
New: Recurring orders have now been separated from the last order to enable price changes. You can now list future orders separately from confirmed orders.
New: Can now move a business collection item from one collection to another essentially keeping all common properties and setting defaults to new properties. For example, a Future Order to the Confirmed Orders collection.
New: When a order is placed for multiple bookings for a service time, an order item is created for each booking storing all the relevant information in newly created properties. This also sped up the process when an order is actioned and eliminates the need to redirect to another URL to process the bookings avoiding too many redirection errors.
New: When booking you can now specify a start and finish time within the service time.
New: CheckAvailability
for bookings will now check the time block between the start and finish.
New: An email address can be stored against each booking allowing the attendee to be personally notified. This is especially useful if it is a guest checkout. By default the booking persons email address will be stored on each booking when booking for multiple attendees but can be changed if they wish to personalise.
New: Notes can be stored against a booking. Any emails sent to the attendee will be automatically noted.
New: Can now set maximum number of items a discount price can be used per customer and/or overall. For example, 1 per customer and 20 overall.
New: Can now set discount prices to trading items for a specified recurring period (per order, per week, per month, etc). For example, 1 per customer per order, 2 per customer per week or 10 overall per week.
New: Can now set discounts to trading items for a fixed specified period. For example, between 1 Jun 2020 to 30 Jun 2020.
Fix: Can now only receive member discount prices for booking times during the subscription period.
Fix: BusinessCollectionItem.ChangeRank
when the ranking property is a custom property.
Fix: ListArticles
when passing an article type.
Fix: Application.ConfigureComponents.DefaultUserCountry
was not been set correctly.
New: Can now select one or more articles (blog posts, products, etc.) to merge with a snippet and create an email for marketing.
Fix: Unable to sort Article and Directory Views.
Fix: Copying an article will no longer copy the PublishedOn
and ArchivedOn
dates.
Fix: Freight based on price is now based on whole order rather than just deliverable items.
Fix: Error when changing a quantity of a cart item.
Fix: MIGS Payment Method upgraded to use TLS 1.2 security protocol.
Fix: Order.MakePayment
was not showing.
Fix: Due to Google's algorithm change on how it detects malicious or unwanted software, the library based scripts and stylesheets have been moved locally temporarily until the resolve the issue.
Fix: Due to Google's algorithm change on how it detects malicious or unwanted software, the library based scripts and stylesheets have been moved locally temporarily until the resolve the issue.
Fix: Import script connection string for Excel.
Fix: Import script connection string for Excel.
New: Bookings can be set to recur.
Fix: When setting a StoreSessionOnly
property updating the workspace is not necessary.
Fix: Upgraded TLS for PayPal integration.
Fix: Upgraded TLS for PayPal integration.
Fix: Could not add PayPal payment method due to error with Enable Storage.
New: Can now book a time within an available time period. For example, say you have available times Mon-Fri 9am-5pm. You can take a booking for say an hour within the time period.
New: Can now filter recipients for an email campaign by their "Last Logged In Age".
New: When updating/upgrading the version is returned in the URL.
New: Parameter IncludeURLWithSubMenus
added to GenerateHTMLMenu
which defaults to false, which means it will remove the URL when outputing if the menu item has a sub menu. This is necessary for touch screens.
New: A form's action on a template or article is parsed for included expressions and evaluated and replaced.
Update: Various changes to comments with sub-comments including:
Update: Invoice will show the promotion if there is one and even if the discount is zero.
New: Collection.FilterOnSearchText
adds a search text filter to the collection and returns the collection.
Fix: Collection.FilterOnSQL
now adds the filter to a pre-existing filter.
Fix: FormatDuration
now formats zero.
New: The MaximumSize
of FileURL
properties have now been defaulted to web.config's httpRuntime.maxRequestLength
.
New: With debug on, errors returned from the server when a form is submitted will be logged.
Update: You can no longer set path names for files, images, videos, audios, scripts and stylesheets.
Update: Page load speed enhancements.
Fix: Concurrency error will no longer be applicable as the last to save will overwrite other changes.
Fix: Deleting a record did not properly delete related items and attachments.
Fix: Recurring orders will only be generated from completed orders.
Fix: Error when viewing connections.
Fix: When cancelling a subscription the expiry was set incorrectly.
Fix: There was no type on a method definition return value when inspecting.
New: You can now group tags into tag sets. GenerateHTMLTagsListForArticleView
will display the list of tags groups by tag sets. The tag set file name will be included in the tag short cut path by default. This can be changed in Configure URLs.
Fix: Brand.FileName
now not editable by default. The file name is created from the Title.
Fix: Brands can now be positioned.
Fix: Order.MakePayment
will now correctly skip adding payment depending on parameters passed.
New: BusinessMenuItem.GenerateSubMenuHTML
now wraps the title in a span tag for ease of formatting.
Fix: Application.RenameObjectFileName
was not correctly creating redirects to the correct path in some circumstances.
New: Can now review an article which effectively adds a comment and rating.
New: Application.GenerateHTMLSearchControlForArticleView
and Application.GenerateHTMLSearchControlForDirectoryView
now can be passed an ID, placeholder text and button HTML.
Fix: Updated templates to use backend.2.1.js
which fixes delay in redirect and old file locations.
Fix: Updated templates to use backend.2.1.css
which fixes old file locations.
Fix: Error when loading an SQL View.
Fix: Error when sending Membership Emails when the Group ID was 1000 or more.
Fix: Application.MoveFile
when downloading via a URL will use the destination file name in the temporary path as URL file name may not be suitable.
Fix: Error when running BinarySignatures.GetMimeTypeFromContent
.
Fix: Error when running Collection.Compute
on a property in an inherited collection.
New: Can now select the depth of menus Application.GenerateHTMLMenu
and Application.GenerateHTMLSelectMenu
return.
New: If allowed, a user can now select no Order.MakePayment.Method
to not make a payment at the time and send the invoice.
Fix: Simplified the subscription processing when an order is actioned.
Fix: Fat Zebra payment gateway requires a unique reference for each transaction.
Fix: ConvertToItem
when passed a negative integer (used for new item IDs) was returning nothing instead of the new item.
Fix: Error when passing a URL with parameters to MoveFile
, MoveImage
and MoveVideo
.
New: A brand can now be selected on a product, service or any other article. As it is for categories, brands can also be listed for article views and used to filter the view. A short cut path is also available. For example, https://www.mysite.com/shop/brand/nike/
.
Update: Manufacturers and product ranges have been removed.
Fix: Payment.ReceivedOn.MaximumValue
causing error when merging users on same day payment received.
Fix: OrderItem.CompletionURL
for service bookings and subscriptions were simplified to avoid redirect errors.
Fix: Using a referral URL not recording who the User.ReferralBy
was with a short cut paths such as those to blogs, galleries, products, etc.
Fix: Infrequent error when making payments.
Fix: Links on invoices / payment instructions sent in email.
Fix: When stored payment methods can be added.
Fix: When Order.SelectStoredPaymentMethod
is accessible for recurring orders.
Fix: Error generating article comments list.
Fix: When article comments can be viewed.
Fix: Load speed of cart items and orders.
Fix: Ability to filter and sort calendar, directory and article views via URL.
Fix: Ability to filter on an item Type
.
New: Can now filter and sort collection in script with either SQL or an Expression. For example: Application.GetCollection("OrderItems").FilterOnSQL("[Price] > 100").FilterOnExpression("Val(Price) < 1000").SortOnSQL("[Price] desc")
New: A user can comment on article comments.
New: Can now send an order based on the balance. For example, balance is greater than zero or balance equals zero.
Fix: Sending an order email campaign filtered on payment due resulted were incorrect.
New: A user can add stored payment methods and change a stored payment method on an order for recurring or upcoming payments.
Fix: Sending an order email campaign filtered on payment due resulted with zero emails sent.
Fix: Sending email campaign resulted with zero emails sent.
Fix: Now allows administrator to log in as another user when Website Temporarily Unavailable.
Fix: GetObjectByUniqueTextPropertyValue
was not searching objects by file name.
Fix: Random Concurrency Violation error.
New: Now supports MPGS payment gateway.
New: Now supports Fat Zebra payment gateway.
New: Now supports AfterPay payment gateway.
New: Email Marketing System now merges with Orders. This can be used for payment reminders, abandoned orders, etc.
New: Added Attachment.SetToProperty
to set the attachment to a property on the current object. For example, if you are looking at image attachments for a user then an image could be set to the Logo or Photograph properties.
Fix: Added parameter WebRequest.EnableCookies
which will enable cookies for a web request which will enable session values to be stored. This fixes a problem when a web request redirects to another URL but cannot view session values in the previous call.
Fix: After custom register (which called reset) was not logging in new user.
Fix: Removed storing session values as cookies.
Fix: URL parameter EndSessionOnComplete
will now store this as a session variable and end the session after redirects complete if applicable.
Fix: Listing orders slow loading and generally across the board.
New: Added class Empty
to calendar cells that have no times to display.
New: Function Application.GetUniversalTime(Time)
which will return the universal time. When displaying a time in the users timezone
New: You can now display the time in the users timezone. To do that you need to wrap your default display time in an element with an attribute data-universal-time
holding the universal time and data-options
which indicates how it is to be displayed. For more info on options go here.
<span data-universal-time="17 Mar 2019 7:45 PM" data-options="{"hour":"2-digit","minute":"2-digit"}">5:45 AM AEST</span>
Fix: List of available payment methods included those excluded with expression.
Fix: Error when inserting note when email sent.
Fix: Error when initially setting HTTPS Everywhere.
Update: Allow subscribing new user when email address exists on database only when no payment required.
Fix: Group.SubscribeNewUser
will only direct the user to login if email address is already on the database when payment is required.
Fix: Group.TakeSubscription
removed and directed to Group.SelectSubscription
.
Fix: Order.MakePayment
now will ask for payment details if the amount is zero due to a promotion, the order is recurring and the payment method selected has storage of payment details enabled. This will allow for example, first month subscription free and recurring orders automatically taking payment.
New: Order.SendPaymentErrorNotification
will send a payment error notification to the email address on the order when a page named order.paymenterrornotification
exists and an error is received trying to process a payment. This is especially useful for automated payments.
Fix: Order.RecurNextOn
was set incorrectly in some circumstances.
Fix: Order.Cancel
was available for the Trading Entity when actioned or completed.
Fix: Order.GenerateRecurringOrder
now takes payment immediately for new order if due.
Fix: ServiceTime.SpecifyUsers
will now get logged in user if there is no selected user.
Fix: Application.GetView
now loads inherited table relationship.
Fix: BusinessObject.GetPropertyValue
will now return the value from non-defined properties if allowed.
Fix: Changed how the title meta tag is displayed on article views for categories, tags, etc.
Fix: Error creating a new email campaign.
Fix: Default HTML Merge Expression attribute Merge Type
to dynamic when not specified.
Fix: Correction to page base paths for new upgrades.
New: Can now set the default dashboard URL under Configure Components.
Fix: Template.LastUpdatedOn
not updated when pregenerated content updated.
Fix: User.LastUpdatedOn
not updated when user logged in.
New: The system will automatically detect if content such as menu items, pages, templates, etc. have changed since pregenerate content was created and if so regenerate.
Fix: Custom collection filenames such as shop for products was not using configuration settings.
Fix: Error when accessing filters on Items collection.
New: The system will pregenerate content for templates replacing merge expressions marked as static. This will speed up page load for both web and email templates. Note: in the HTML editor, the merge expression attribute Merge Object Type
has been replaced with Merge Type
which can have the following values:
Fix: Group base paths and pages/blog posts/etc of groups.
Fix: Error after setting HTTPS Everywhere in Configure Website.
New: User's can now log back to their remembered account if logged out or logged in as someone else. A new menu item to do this has been created under Logout.
Fix: Improvements made to Item.Attachments
and permissions.
New: You can now set the Website Temporarily Unavailable
. To do this go to Configure URLs
and set Website Temporarily Unavailable Page Name
. Logged in administrator's will still be able to access as normal.
Fix: The website under construction page will only show when a user is not logged in and no path passed in the URL.
Fix: Missing static files such as images, scripts and videos will now return standard file not found response.
Fix: The SendEmailForm
function did not send the attachments to subsequent recipients, only the first.
New: Each business object, with the exception of a few types (Binary Signature
, Configuration Setting
, Import Script
and IP Range
), inherit Item
which has an application wide unique ID.
Update: Auction management has been removed.
Update: Removed property ImportScript.IsUserImport
.
Update: Many previously deprecated functions have been removed.
Update: Some configuration settings such as DocTypeDeclaration
and ViewPort
have been defaulted to the new norms.
Update: Restructuring of the file system, in particular the user files, images, videos, audios, scripts, stylesheets, etc.
Update: Restructuring of the URL short cut paths to match file system changes. For example, /galleries/my-photos/
for the URL to the gallery page and /galleries/my-photos/images/happy-days.jpg
for a URL to one of the images.
Update: When outputing an article to a static file, the system will create a folder and output to an index.html file. For example, /galleries/my-photos/index.html
, /blog/my-first-blog/index.html
or /contact-us/index.html
for a page.
Update: Item attachments can now have a title and description and be positioned in the list. The attachments can be local to the item attached /galleries/my-photos/images/happy-days.jpg
, shared /images/great-day.jpg
or external https://www.anothersite.com/images/awesome-week.jpg
.
Update: Custom Properties can now be added to any item without adding a column to the database table. However, if you need to filter or sort that property then it is recommended to add a column to the relevant table.
Fix: Custom properties will now initialise from table column if exists when changing the type.
Fix: Custom properties initialised from table columns will now set unique where applicable.
New: The URL property for a menu item now has selectable list of pages and files under the default file path.
New: Functions Pluralize
and Singularize
.
Fix: Error when loading collection item in definition inspector when collection name does not resolve to object name by removing trailing letter "s" (singular name).
Fix: GenerateFilterEditor
was not loading a drop down for custom enumeration properties.
New: Application.GetFiles(FolderPath, IncludeSubfolders)
will return a list of files in the specified folder relative to the application absolute path.
Fix: Application.GetFolders(FolderPath, IncludeSubfolders, IncludeThisFolder)
now returns a list of folder paths relative to the application absolute path.
New: Property Application.IsLocalHost
which indicates if the application is run on a local computer, hence by a developer.
New: Service.TypeOfUsers
: this allows you to specify the type of person/people using the service. For example, Attendee(s), Traveller(s), Rider(s) or Hiker(s).
New: When booking times, the user is now asked to specify attendees before adding to cart and checking out.
New: You can now set up a service for group bookings such parties, camps, etc. When a booking is made the system does not ask for each of the attendee details and a single booking is created which indicates how many it has been reserved for. To acheive this set Service.MaximumUsersPerBooking
to a number greater than 1. You can also specify Service.MinimumUsersPerBooking
.
New: Service.AllowOrderBeforeBooking
will be ignored for group bookings.
New: When saving session variables, the system will also add them as a cookie on the client side which will help if session times out.
New: Can now add properties to a business collection item which will store while session is active.
New: Available quantities on products are not adjusted until the order is actioned.
New: The availability of products and services is checked prior to making payment.
Fix: Before adding item to the cart it checks cart for already added items of the same and checks availability on the combined.
New: You can now set an order as recurring. Orders for subscription to groups will automatically be set as recurring. The administrator or trading entity can also cancel the recurrence before it is due to recur.
New: A user's payment details (i.e. credit card info) can now be stored with a payment gateway and selected for reuse without reentering that information again. For recurring orders or orders with multiple part payments, the system will make the payment automatically when due.
New: Can now store credit card payment details with SecurePay.
New: Can now process direct debits with SecurePay.
New: A new property on gateway payment methods, Requires Reconciliation
, indicates any payments made with this method will require reconciliation.
New: Can now cancel an order and if it has been actioned the products availability is rolled back, service bookings are cancelled and subscriptions for membership's expiry is rolled back.
Fix: The generated email template now includes viewport and other necessary meta elements for formatting.
New: Application.ResizeImage
can now accept a resize method:
New: When parsing Parameters
in a URL where PageType=MethodView
any missing parameters at the end will be defaulted to the method's parameter default value.
New: In an email or email template, setting the Merge Object Type
to "Application", in a HTML merge expression, will merge these expressions to the application once, rather than for each email's merge object (generally a recipient record). This will speed up the output of campaigns and lessen the load on the server processor.
Fix: Group.SubscribeNewUser
will now subscribe an existing user if no payment required.
Fix: Error when an administrator completes an order.
Fix: Digital items not automatically sending when order completing.
Fix: Form textarea
elements were generated with a space when should be empty.
Fix: Error in LoadHTMLContentInXMLDocument
commented HTML included empty script or textarea elements.
Fix: Unnecessary updates after inserting notes on a user were causing concurrency errors.
Fix: Once an order was processed the promotion was not being cleared and was being applied to the next order.
Fix: Not redirecting to referrer URL after posting a form.
Fix: Concurrency error when installing updates.
New: ShowInTemplate
can be set in custom ASPX page directives.
New: Install Updates
can now redirect to a URL before installing an update.
Fix: When sending an email the list of email pages to select from is filtered to show published only.
Fix: Error when generating site map.
Fix: Article.Publish.On
only set when a moderator is logged in.
New: Modified Order.MakePayment
so it will accept negative amounts for recording refunds.
Fix: The set up for new websites will set the Licensee's record creation date/time to the time of set up.
New: The Default User Country
can now be set via Configure Components. You should only set this if you are only targetting and delivering to users from that country. Leaving this blank will allow the system to auto-detect where the user is located. However, make sure you are either requesting the user's geolocation via the browser they are using or you have the IP Ranges list imported to the database to detect location based on IP address. Without either of these the system will detect the user's browser culture settings which is not always accurate as most browsers come installed with en-US
by default and the user is not asked to confirm it.
New: Can now set how deep to allow search engines to index/follow article list (blog/shop/etc.) combinations of categories, tags, authors, etc. This can be set in Configure Components via property Article View Follow Depth
.
New: The title and description of article list (blog/shop/etc.) groups, categories, tags, etc. are now included as meta tags when listing via the category, tag, etc.
New: Can now set how deep to allow search engines to index/follow directory list combinations of industries, regions, etc. This can be set in Configure Components via property Directory View Follow Depth
.
New: The title and description of directory list groups, industries, regions, etc. are now included as meta tags when listing via the industry, region, etc.
Fix: ServiceBooking.SendConfirmationLetter
and ServiceBooking.SendConfirmationLetter
would allow execute but throw an error when the user's email status was not active.
Fix: ServiceTimes.SpecifyUsers
would throw an error when there was no user (due to guest checkout) or the user's email status was not active.
Fix: Scheduling and running from the correct email collection.
Fix: Default value for Order.PayByOtherMethod.ReceivedOn
now includes time.
Fix: Order.Complete
in some circumstances would not complete due to session timeout or reset.
Fix: TradingItem.GetDiscountPricesFormatted
would only display prices applicable for selected user if one existed.
Fix: Error when listing article comments.
Fix: GenerateHTMLGroupsListForArticleView
and GenerateHTMLGroupsListForDirectoryView
would include all when parent supplied even though there was no subgroup.
Fix: Forms generated from merge fields via Definition.GenerateHTMLForm
had their lists reloaded.
Fix: When outputing a page to a static file the script elements were not included.
Fix: Modified XHTML replace function to better handle empty textarea
and script
element.
Fix: Payment.ReceivedOn
was not storing the time part.
Fix: RSS feed for the shop did not include shipping weight which is needed for import to Google Merchant Center.
Fix: Enhance Workspace
object to standalone from the BusinessApplication
object.
New: Billing and Delivery properties now available for export from orders.
Fix: Error when displaying delivery details in specific circumstances.
Fix: Directory titles were not displaying correctly when a parent directory specified.
Fix: Removed GUID output field from RSS feed as unnecessary and caused problems with import to Google Merchant Center.
Fix: Applied efficiencies to invoice and purchase order output.
Fix: Modified the discount pricing format to make it easier to customise.
New: RSS Feed for products which can be imported to Google's Merchant Centre or Facebook's Marketing API.
New: Product.GoogleCategory
can be set to the ID of one of Google's product categories. This value will be included in the product feed.
New: Toggler classes added to Message elements returned by the server. Add the base script to enable when clicked the message is closed.
Fix: When sending form details in an email to administrator using an invalid email address entered by the user.
Fix: When an error is returned from a submitted form (on the template), the controls returned empty.
New: Use Order.HasBookings
to determine if any of the items are for service bookings.
New: Style classes Past
, Today
and Future
added to calendar view cells.
New: Can now set the default sort order for article and directory views via Configure Components.
New: Can now create a custom registration form and set the URL in Configure Components. For example, register.aspx
.
Fix: Register.SubscribeToEmailMarketing
and CartItems.RequestBillingDetails.SubscribeToEmailMarketing
now default to No.
Fix: Changed wording relating to an order confirmation / invoice to use Application.InvoiceDisplayName
.
Fix: Duplicate Template Scripts and Stylesheets are removed when web page generated.
Fix: If a table column is readonly (due to being computed), it is not added in the update or insert scripts.
Fix: ServiceTimes.SpecifyUsers
business names were returning error stating they were required when not.
Fix: Recreate an index on tax rates making it unique.
Fix: Price on order item storing incorrectly when trading item prices stored in database without tax.
Fix: Timeout for automated tasks increased.
Fix: By default file properties on an item (for example, photograph on user) will not be copied when url is relative.
Fix: Captcha verification code was not a required field on the client side which meant a form could be submitted and sent to the server but would fail validation.
New: Can now set the default sort order for each of the article and directory views.
New: Added function Application.ApplyPromotion
which can be used on the cart before checking out.
Fix: Reworded "Already Registered" error message.
Fix: Updated user import scripts to ignore records with and invalid email address.
Fix: Various problems with HTML editor code source view.
Fix: When receiving an error sending an email campaign the following batches were not sent. System now schedules them.
Fix: Large images in the light box were exceeding screen width and height.
Fix: When selectable values used with mulitple line text property/parameter.
Fix: Allow the trading entity to delete their own order if not payment made.
Fix: Supplies Ordered On is now not editable by default.
Fix: In some circumstances when sending emails relative paths to images, etc. were not updated to the full path including website address and hence could not be shown.
New: Application.Register
now asks for the new user's Password, Confirm Password plus Remember Me.
Fix: Application.Log
only logging when in debug mode.