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.