Changelog 6.2.1 - 6.3 beta

From Sense/Net Wiki
Jump to: navigation, search

This page contains the changes in Sense/Net ECMS between versions 6.2.1.5043 and 6.3.0.5856.

Download Sense/Net ECM 6.3 Community Edition: http://www.sensenet.com/download

Please note that version 6.3 is a beta release that may contain errors or lack certain features that you would need.

Features

  • OData
    • IsOf filter function implemented.
    • metadata format url parameter extended: "metadata=minimal" option minifies and "metadata=no" hides the metadata of entities in the output.
    • Filtering operation result: if an operation's result is a ChildrenDefinition, IEnumerable<Content> or IDictionary<Content, x>, the skip, top, order, filter, select, expand request parameters will work.
    • API for permission queries
    • Generic OData application: you can call any static method through OData that is annotated with ODataAction or ODataFunction.
    • JsonSerializer uses IsoDateFormat instead of MicrosoftDateFormat because it is more human readable (no ticks).
    • Children collection comes through the content's Children instead of an InFolder query so special children logic can be used (e.g. SmartFolder). LucQuery.SortFields can be null. Check sort existence with HasSort bool property.
    • RestoreAction: restore from the Trash functionality is accessible from OData. TrashBag content got two new fields: workspace relative path and workspace id to aid custom restore scenarios.
    • Call functions with GET verb is possible. Parameters come from the URL. Parameter names must match the operation parameter names. Values must be primitive values or JSON deserializable. Using default (unnamed) parameter throws an ArgumentException.
    • Actions can be called only with POST verb, functions can be called only with GET verb.
    • OdataException message contains more relevant information.
    • The response of OData custom actions are enveloped by { d: {...} } if the value is string or value type (e.g. int).
    • New actions added for collaboration.
  • Settings
    • New content type for storing application and module settings in the Content Repository instead of the web.config.
    • Settings infrastructure for storing and retrieving settings values. Setting content can be a simple JSON text file or custom content with field logic in codebehind.
    • Inheritable settings to let customers have local settings (e.g. for a workspace).
  • Actions
    • SN.Actions javascript module for generating action links on the client side.
    • Action framework: from now on it is possible to provide url parameters without a value (like ...?download)
  • Workflow
    • Mail process workflow additional options: the ability to define relative inbox path for saved attachments in the library and configure whether to accept emails only from local users.
    • Workflows are automatically deleted after completing sucessfully. This feature is configurable.
  • Field Indexing
    • Added docm and xlsm extensions to text extractor.
    • Add new text extractor classes for docm, xlsm, xlb, msg extensions (thanks Pieter :)).
  • Upload
    • Selected files can be removed and cancelled.
    • Handling text file data: the upload request should contain the text in the FileText property.
  • Content lists
    • Content lists can receive emails using POP3 protocol.
    • Email must be unique to avoid confusion (emails targeted to different lists but same inbox).
    • ListView: Details action is the default action in case of file content.
  • Document Preview (available in the Enterprise edition)
    • Desktop and tablet version is available.
    • You can add redaction to preview images.
    • Watermark text (that can be set on the document) is displayed on the preview image.
    • New PreviewImage content type added for handling preview images. DocPreview provider is able to draw watermark on the image controlled by a url parameter.
    • Check for preview permissions before displaying a preview image to the user. The check method can be customized in the DocumentPreviewProvider.
    • New Watermark settings: master switch for the feature, Bold, Italic, new Orientations. Watermark text may contain templates: @@CurrentDate@@, etc.
    • Only a limited number of preview and thumbnail images are generated in the first round.
    • Download as pdf feature added.
    • Preview option added to the CTD: if the value is true/yes, a preview will be generated for the content (if the preview provider supports it). This value is not inheritable. Enabled by default on the File, Contract and Image types.
  • Query builder
    • Appears everywhere where a query or filter can be set (portlet property windows, smart folder, etc.)
    • QueryWizard for creating queries with a few clicks.
    • QueryEditor for editors with more freedom and text editing.
    • Query: new content type added for storing content queries. Query content can be private (stored under the user profile) and public (stored under a workspace). OData methods added too: SaveQuery and GetQueries.
  • Permissions
    • Three new built-in permissions added (Preview, PreviewWithoutWatermark, PreviewWithoutRedaction).
    • New class: AclEditorContext to setting more than one content's permissions.
    • PernissionType got a new Index property that controls the order of permission types in memory. Preview permissions are inserted between See and Open permissions.
    • A content can be loaded when the current user has insufficient rights to the target content's parent.
  • Aspect
    • Aspects must reside under the /Root/System/Aspects folder.
    • Initial support for property bind on aspect fields.
    • Importer tool will import all aspects after content types and before any other content.
  • LucQuery
    • LucQuery.SortFields can be null. Check sort existence with HasSort bool property instead.
  • Javascript and CSS
    • Udgrade jQuery to 1.9
    • Upgrade jQuery UI and kendo UI to the latest version.
    • Upgrade jQuery-migrate to 1.2.
    • Upgrade Codemirror to 3.14.
    • jQuery UI css files were deleted from default skins.
    • DatePicker became script-independent.
  • Content
    • Content access change: from now on it is not necessary to have Open permission for a content to access it, See+Preview permissions are sufficient. Accessing any of the binary fields are still forbidden without Open permission. Run application permission is still needed too.
    • The system now supports content items which can add fields to themselves: ISupportsAddingFieldsOnTheFly.
    • DocumentBinaryProvider added with a default built-in implementation. Provides a way for 3rd party developers to modify the binary stream before serving it or to return a different binary field than the default.
    • BrowseUrl field added as a shortcut to provide browse links (mainly for OData).
    • If a generic content is referred by another content by the static references (created by etc.), the CannotDeleteReferredContentException will be thrown that contains top five referrer's path and total count of referrers.
    • Resolving linked content became overridable in ContentLink.
    • Restore previous version: if the content is locked by me, I can restore any one of the previous versions. The content will remain locked, and no new versions will be created, only the fields will be copied from the old one.
  • Security
    • HtmlSanitizer: Outputmethod is editable on list fields too (in case of shorttext and longtext fields).
  • Bundling
    • css/js bundle now supports the file system and adding all files in a folder.
    • Bundle and resource handlers are now going through routing instead of configuration.
    • Bundling is now extended to include the scripts added by the .Net framework itself (ScriptResource.axd, etc.)
    • CSS bundle will convert small images to data URIs.
  • Comments in Content Query: query parser skips line (//) and block comments (/* */).
  • User-based culture: it is possible to enable user-based culture on a site. If it is enabled, users can choose a language on their profile. The precedency is: 1. user-based 2. client-based 3. site setting.
  • PasswordField hides its value if the repository is not in "Import" or "Export" mode so the Content API does not provide password information by default.
  • Contentview got a new entry point after the content got updated: OnContentUpdated method. This lets developers or builders execute a custom logic in the ascx after the values were copied to the content from the controls - e.g. validation.
  • Forgotten password feature, redesigned with a workflow.
  • Edit source extensions include .cshtml .json .vbhtml.
  • DynamicJsonContent type: it can store dynamically added fields in JSON.
  • CustomData property added to the event args of nodeobservers. You can set an object as CustomData in the -ing events (Modifying) and you get it back in the -ed events (Modified).
  • Page templates may contain a form tag.
  • Cluster channel monitor: a module that monitors MSMQ channel health in NLBS environments.
  • Logging: EventIds are used to differentiate error messages related to certain features.

Breaking changes

  • There is now only one administrator in the default install called Admin.
  • Visitor user is not member of the Everyone group, just like in Microsoft Active Directory (Anonymous users are not members of the Everyone group).
  • Binary buffer size and chunk size got different config values to let administrators have more control on the memory footprint of their sites.
  • Demo users have been moved from /Root/IMS/Demo domain to /Root/IMS/BuiltIn/Demo orgunit to simplify the evaluation experience.
  • PermissionType: IsDefaultPermission is renamed to IsSystemPermission; DefaultPermissionNames is renamed to SystemPermissionNames to make the system and custom permission structure more straightforward.
  • Empty array as Allowed child types means the content cannot have any children (previously: any type was allowed in this case). This makes Sense/Net more secure and helps editors maintain a more straightforward content structure. There is a helper tool for upgrade: CheckAllowedChildTypesOfFolders method (checks all IFolder objects in the repository and returns all paths where AllowedChildTypes is empty).
  • PublicRegistrationPortlet and all related content has been removed. Registration is done by a workflow for flexibility reasons: you can modify the process more easily this way.
  • The "CTD" Import parameter has been changed to "SCHEMA" that must point to the schema folder in the import material. This lets us treat aspects differently during the import process.
  • The type of the Completion field on sales and project workspaces has been changed from integer to number to be able to store and display percent values correctly.
  • Audit log uses a new log formatter (SnXmlFormatter) that does not put CDATA into the values and escapes the wrapped xmls. Original XmlFormatter is not supported anymore and removed from all configurations. There are other changes in log property values e.g. ChangedData is switched to JSON for usability reasons.
  • EventId-s are compulsory parameters of Logger.Write... methods. This will help administrators keep track of specific errors in the Event Log.
  • Several settings moved from the web.config to the repository. This is the start of the web.config cleanup process that will last for a couple of releases from now on. Storing settings in the repository has the benefit of smaller administration overhead and fewer site restarts.
    • ClientCacheHeaders
    • BinaryHandlerClientCacheMaxAge
    • Content list email settings
    • Upload file extension settings
  • Db schema and stored procedure changes
    • Binary properties table ContentType (MIME type) column became 450 chars wide.
    • IsSystem flag added to the Nodes table to aid move operation. The IsSystemContent Lucene field is bound to the IsSystem property of the Node. This property is written when the content is created or moved. Its value is true if the node is SystemFolder or any of its ancestors is a SystemFolder.
    • CreatingInProgress flag added to the Nodes table to aid node creation event mechanism. Node load and update procedures changed.
    • Deadlock fix: 2 foreign keys were removed from the Nodes table (major and minor versions columns) and ReferenceProperties table (version and referred node id columns). Delete stored procedure changed.
    • Splitting permission storage table to two tables: builtin / custom permissions --> SecurityEntries / SecurityCustomEntries. This way we can add system permissions later without breaking custom permissions added by 3rd party developers.
    • SchemaPermissionTypes table got a new PermissionIndex column that controls the order of permission types in memory. Preview permissions were inserted between See and Open permissions.

Resolved bugs

  • Aspect
    • Aspect fields will not try to read property values the same way as regular fields.
    • Aspect fields are queryable.
    • LongText aspect field does not contain unnecessary CDATA in the OData JSON response.
    • Aspect field serialization and deserialization works correctly.
    • Unknown aspect fields are skipped during import.
  • OData
    • Writing reference and choice fields is possible.
    • $inlinecount=allpages works correctly when there is a given $filter.
    • Not-promoted permission entries are rendered well.
    • Propagation bit is removed from the OData permission entry.
    • Restrict the collection root's ChildrenDefinition if it does not contain any InTree or InFolder clauses.
    • OData actions contain more information: name and forbidden state.
    • inlinecount was incorrect when the URL contained a "query" parameter.
    • OData response doesn't contain aspect fields if the content is collection item and there is no select parameter.
    • Allowed child types is finalized for dynamic content types, this way ODataHandler won't crash when projecting them.
    • Metadata: functions and actions appear in their own separate list.
    • Condition reversal of an OData exception in case of the action is not an OData operation.
    • GetPermissions can now return a user's own permissions (but only its own) even if it doesn't have SeePermissions right.
    • Using fields more than once in the OData $select parameter caused an exception.
    • Permission response: entries in the OData ACL contain the entry's propagation bit.
  • Security
    • Prevent XSS hacks by encoding the action and bacurl parameters and portlet error messages.
    • If Admin's, Mike's or Alba's password is changed, one-click login with these users is not available.
  • Open in office
    • Error message resource bug and Chrome office plugin error is fixed.
    • Office open dialog aspx query fixed (single quote added to InFolder expression).
  • Query
    • Boolean clause optimizer hid terms in some cases.
    • RuntimeQuery folder is always created on-the-fly instead of loading it to avoid children definition sharing errors.
    • Smartfolder, ContentStore controller and SnExpression fixes related to querying (top/skip values, children query).
  • Permissions
    • Inherited permission bits were not written to explicit entries.
    • Order of permissions in export.
    • Acl Editor inheritance problem: when a parent node had a local only permission and a child had the same too, the second setting deleted the permission on the child because the local only flag was ignored.
    • Use Somebody user when the current user does not have enough rights for the target content's CreatedBy, ModifiedBy etc. references.
    • Viewing a content that was invisible for the current user (because of insufficient rights) caused an exception.
    • Content that serve themselves as IHttpHandlers - e.g. images - do not require Run application permission.
    • An entry is skipped if its propagation bit is false and its explicit path and the ACL's path are not equal.
  • Portlets
    • Hidden portlet property categories appeared in the portlet property window because of a localization error.
    • PortletCache: If a view of a cached portlet contains inline code that added a script or css reference, the references will be cached along with the portlet html from now on.
    • Webpart js localization caused an error during portlet drag-n-drop.
    • From now on only ascx and xslt view files can be opened for editing from the portlet property window.
    • ContextBoundPortlet won't crash if there is a binding to an empty reference.
  • JS and CSS
    • Z-index and overlay bug of PRC and dialogs after ugrading js libraries.
    • Browser File API changed, old file access methods were not available anymore.
    • fixes related to jQuery UI
    • RichTextEditor will tell if it failed to eval() its options.
  • Import/Export
    • Import will not crash if schema path is not specified.
    • Import will throw an exception if the imported content already exists but with a different type.
    • Import will accept different content types if the content being imported is a folder without a .Content file
    • Import and Export tools handle the not inherited permission entries correctly.
    • FieldSetting.WriteXml will write indexing information.
    • Admin is added to the Administrators group during the first import phase.
    • Exporting and importing aspects fixed.
  • Allowed child types
    • Allowed child types property setter works in case of non-folder content and null value coming from the UI.
    • Check allowed child types only when a new content is saved.
  • Fields
    • Boolean field can handle null input as false value.
    • Number field: InvalidCastException is solved. NumberField uses Convert.ToDecimal instead of casting.
    • Field default value is evaluated during GenericContent initialization.
    • Removing an unused inherited field from a CTD is fixed.
    • FieldSetting.ToFieldInfo sets FieldInfo.Handler correctly.
    • AppInfo handling corrected in FieldSetting and ContentType (InnerText instead of InnerXml).
    • Field intermediate storage is cleared at the end of Field.Save so field can present the matching property value consistently.
    • Using Distinct() on references before saving.
  • Content lists
    • From now on list views do not contain full paths in the header to avoid referring to old paths after copying lists.
    • A view frame control does not throw a full-page error if used in a wrong context (e.g. with a non-list portlet).
    • Delete action links corrected on content list manage workflow page.
    • Binary handler is able to serve binary list fields. Common binary url generator method added to ContentTools.
    • On the Manage workflows page, or anywhere in the system where a custom portlet binding is set, the redirect mechanism after the Delete or Move action would fail because of a wrongly calculated back url. This was resolved by allowing the portal builder to allow the usage of the regular back url instead of the calculated one.
  • LINQ
    • Sense/Net LINQ provider can handle conditional expression if its first operand is a constant expression.
    • Sense/Net LINQ provider now supports the conditional operator.
    • LINQ 'Any' returned false when its input sequence contained only one element.
    • OptimizeBooleanVisitor: null occurence must mean SHOULD in a boolean clause.
  • Bundling
    • BundleHandler Vary HTTP header tweaked for Google Page Speed.
    • Bundle will not crash on URLs with http or https.
    • CSS bundle will handle data URIs and @charset directives correctly.
  • Workflow
    • Workflow execution became more stable: if a workflow throws an exception during polling, the following workflows can still execute.
    • Change Abort calls to Cancel if the workflow should be stopped (statecontent or related content is missing). This stops the workflow permanently.
    • Mail processor workflow saves attachments as specific types (with the correct content handler) instead of using the base File type.
  • Groups
    • Group.GetAllMemberUsers does not contain duplicated items.
    • Group members fix: could not add local groups to another local group. The fix enables selecting groups/users from the whole repository.
    • Special groups: could not create local group with the name "Everyone". This fix enables creating groups with the previously reserved names, and special groups are referenced via path to prevent members modifications or editing from ui.
  • Adding new CTD is possible on the Content types folder.
  • Level2 Cache now throws an exception when an existing item is added. Old item is removed before adding it again.
  • SenseNetDatasource lists children properly, using the Content layer.
  • Added missing Openxml mime types for MS file types to the mime table (docx, xlsx, etc.)
  • Email regex added to the system. There are 3 Email fields in the system that must use the same regex.
  • Form item notification email: if the user did not fill a choice field, the mail creation process failed.
  • StartsWith, EndsWith and Contains string methods work on a content indexer when the lambda parameter is a content.
  • Open picker and delete action: apostrophe is changed to quote in case of the url json-property to avoid parse errors.
  • Cache control headers are set in case of an application (e.g. a regular page) referenced directly, without an applicaton.
  • Creating previews is switched off during a copy operation.
  • 304 response is given for authenticated users (not only visitors) if the content (image, thumbnail image, js, etc.) has not changed. In case of preview images, the modification date of the setting content is also taken into consideration.
  • Content template will now tolerate already existing nodes if they are of the correct type.
  • Photo or screen upload from tablet: file name fix.
  • Default timeout values are higher in case of SQL command and text extractor.
  • You can now save a reference property even if you previously deleted a referred node.
  • Reference grid uses a smaller content object to serialize content data.
  • Img resize application: for cached files, File.Open changed to OpenRead to avoid file system sharing violation.
  • Text is extracted using IFilter from PDF files. Fallback to the original mechanism if IFilter does not exist.
  • Facebook 'Like' button script fix + add 'Send' button functionality
  • ClusterMessageConsole updated: it can send and receive ping-pong messages.
  • File handling: revert back to System.Web.StaticFileHandler in case of js and css files.

Related links