{"id":12530,"date":"2024-08-05T12:12:54","date_gmt":"2024-08-05T09:12:54","guid":{"rendered":"https:\/\/dhtmlx.com\/blog\/?p=12530"},"modified":"2024-10-17T18:24:37","modified_gmt":"2024-10-17T15:24:37","slug":"dhtmlx-scheduler-7-1","status":"publish","type":"post","link":"https:\/\/dhtmlx.com\/blog\/dhtmlx-scheduler-7-1\/","title":{"rendered":"DHTMLX Scheduler 7.1 with Support for RFC-5545 Format for Recurring Events, Different Map Providers, and Much More"},"content":{"rendered":"<p>We hope you&#8217;ve already got used to the new look and feel of our <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler\/\" rel=\"noopener\" target=\"_blank\">JavaScript scheduling library<\/a> delivered in version 7.0. Now, we have a new portion of updates &#8211; so meet DHTMLX Scheduler 7.1.<\/p>\n<p>This release includes several highly anticipated features to facilitate your experience with DHTMLX Scheduler. Now, you can store recurring events in your scheduling calendar in a popular RFC-5545 format. We also extended the functionality of the Map view, where starting from v7.1, it is possible to use maps from different providers. Two more novelties related to working with events are highlighting cells from which users drag and drop events and the ability to undo event deletion.<\/p>\n\n\t\t<div class='post-banner'>\n\t\t    <div class='post-banner__inside'>\n\t\t        <div>\n\t\t            <div class=\"post-banner__title\">Download DHTMLX Scheduler v7.1<\/div>\n\t\t            <div class=\"post-banner__text\">Estimate the updated functionality for building modern JavaScript scheduling calendars<\/div>\n                <\/div>\n\t\t            \n                \n            <div class='post-banner__btn'>\n                <a href='https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler\/download.shtml' title='' class='button-secondary'>Get free trial<\/a>\n            <\/div>\n        \n            <\/div>\n\t\t<\/div>\n\t\n<p>Let us consider the new features introduced in v7.1 in more detail.<\/p>\n<h5>RFC-5545 RRule Format Support for Recurring Events<\/h5>\n<p>Previously, you could conveniently store all recurring events in your scheduler using a custom format provided by our development team. However, our customers asked us to add the possibility of storing recurring activities in a more commonly used format based on the <a href=\"https:\/\/tools.ietf.org\/html\/rfc5545#section-3.3.10\" rel=\"noopener\" target=\"_blank\">RFC-5545 standard<\/a>, which we&#8217;ll reference here as the RRULE format. And we gladly fulfilled this request in v7.1.<\/p>\n<p>From now on, DHTMLX Scheduler stores recurring events in a recurrence format based on RFC-5545, which is widely supported and has numerous compatible tools.<\/p>\n<p>This change is significant for existing projects since switching to the new format requires data migration. To ease the transition, we are shipping Scheduler 7.1 with two engines for recurring events: <\/p>\n<ul>\n<li>one that uses our traditional <strong>rec_type<\/strong> format,<\/li>\n<li>the new one that supports RRULE.<\/li>\n<\/ul>\n<p>If you have an existing project and are not ready to migrate the data, you can continue using the old format while receiving other updates. Both formats will be supported in the foreseeable future, but we will start referring to the older <strong>rec_type<\/strong> format as the legacy format.<\/p>\n<p>Switching to RRULE recurrence brings three major benefits:<\/p>\n<ul>\n<li><strong>Ability to work with recurring events on the backend<\/strong><\/li>\n<\/ul>\n<p>Many use cases for the Scheduler library involve concurrency management and limiting the number of bookings that overlap a timeslot. Before v7.1, you had to manually interpret recurring rules stored in our custom format or rely on a limited number of libraries available <a href=\"https:\/\/github.com\/orgs\/DHTMLX\/repositories?language=&#038;q=Helper&#038;sort=&#038;type=all\" rel=\"noopener\" target=\"_blank\">for .NET and PHP<\/a>. In contrast, there are numerous libraries for all major platforms that can work with the RRULE (RFC-5545) format.<\/p>\n<ul>\n<li><strong>Simplified integration with third-party solutions<\/strong><\/li>\n<\/ul>\n<p>Google Calendar, in particular, uses the same format for storing recurrences, making the integration of DHTMLX Scheduler with it much more straightforward.<\/p>\n<ul>\n<li><strong>More convenient work with recurring events in code<\/strong><\/li>\n<\/ul>\n<p>You can create and parse recurring rules using the helpers provided in our Scheduler component or by using any available libraries that can work with RFC-5545 recurrences.<\/p>\n<p>From a technical standpoint, this change modifies some properties of events.<\/p>\n<p>Our legacy format uses the following properties to define recurrence:<\/p>\n<ul>\n<li><strong>start_date<\/strong> &#8211; stores the start date of the series,<\/li>\n<li><strong>end_date<\/strong> &#8211; stores the end date of the series,<\/li>\n<li><strong>rec_type<\/strong> &#8211; stores the recurrence rule or flag indicating a deleted instance,<\/li>\n<li><strong>event_length<\/strong> &#8211; serves a dual purpose &#8211; either the duration of the recurring instance or the timestamp of the original event occurrence for modified instances,<\/li>\n<li><strong>event_pid<\/strong> &#8211; an ID of a parent series for modified instances.<\/li>\n<\/ul>\n<p>The new format requires the following properties instead:<\/p>\n<ul>\n<li><strong>start_date<\/strong> &#8211; stores the start date of the series<\/li>\n<li><strong>end_date<\/strong> &#8211; stores the end date of the series<\/li>\n<li><strong>rrule<\/strong> &#8211; the RRULE string<\/li>\n<li><strong>duration<\/strong> &#8211; the duration of the recurring instance<\/li>\n<li><strong>recurring_event_id<\/strong> &#8211; id of the parent series, only filled for modified or deleted occurrences of the series,<\/li>\n<li><strong>original_start<\/strong> &#8211; the original date of the edited instance, only filled for modified or deleted occurrences of the series,<\/li>\n<li><strong>deleted<\/strong> &#8211; specifies the deleted instance of the series, only filled for deleted occurrences of the series.<\/li>\n<\/ul>\n<p>Please <a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/recurring_events.html\" rel=\"noopener\" target=\"_blank\">refer to the documentation<\/a> for more details.<\/p>\n<p>Here is how a recurring event looks like in the new format:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">```<br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;id&quot;<\/span><span class=\"sy0\">:<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;text&quot;<\/span><span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Weekly Team Meeting&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;start_date&quot;<\/span><span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;2024-06-01 09:00:00&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;end_date&quot;<\/span><span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;2024-12-01 10:00:00&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;duration&quot;<\/span><span class=\"sy0\">:<\/span> <span class=\"nu0\">3600<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;rrule&quot;<\/span><span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;FREQ=WEEKLY;INTERVAL=1;BYDAY=MO&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;recurring_event_id&quot;<\/span><span class=\"sy0\">:<\/span> <span class=\"kw2\">null<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;original_start&quot;<\/span><span class=\"sy0\">:<\/span> <span class=\"kw2\">null<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n```<\/div><\/div>\n<p>Compared to the same event in the old format:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">```<br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;id&quot;<\/span><span class=\"sy0\">:<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;text&quot;<\/span><span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Weekly Team Meeting&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;start_date&quot;<\/span><span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;2024-06-01 09:00:00&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;end_date&quot;<\/span><span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;2024-12-01 10:00:00&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;rec_type&quot;<\/span><span class=\"sy0\">:<\/span><span class=\"st0\">&quot;week_1___1#&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;event_pid&quot;<\/span><span class=\"sy0\">:<\/span><span class=\"st0\">&quot;&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"st0\">&quot;event_length&quot;<\/span><span class=\"sy0\">:<\/span><span class=\"nu0\">3600<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n```<\/div><\/div>\n<p>The new engine for recurring events can be activated as follows:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">```<br \/>\nscheduler.<span class=\"me1\">plugins<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; recurring<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n```<\/div><\/div>\n<p>If you want to continue using the previous recurrence format, switch to the <strong>recurring_legacy<\/strong> plugin:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">```<br \/>\nscheduler.<span class=\"me1\">plugins<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; recurring_legacy<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n```<\/div><\/div>\n<p>By adopting RFC-5545, we are providing a more robust and widely supported solution for handling recurring events, making it easier for developers to integrate with other tools and manage their scheduling needs effectively.<\/p>\n<h5>Support for Multiple Map Providers in Map View<\/h5>\n<p>The Map view allows you to demonstrate the location of appointments scheduled in your calendar. In Scheduler 7.1, we significantly diversified possible sources of maps for this purpose. Apart from already available Google Maps, DHTMLX Scheduler now also supports out-of-the-box maps from two other widespread providers &#8211; OpenStreetMap and Mapbox.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/08\/Scheduler-with-Map-Providers.gif\" alt=\"DHTMLX Scheduler with Map Providers\" width=\"1000\" height=\"638\" class=\"aligncenter size-full wp-image-12679\" \/><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/samples\/03_extensions\/19_map_view.html\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>Under the hood, you can set the required map provider for a web page with just one line of code:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">config<\/span>.<span class=\"me1\">map_view_provider<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;googleMap&quot;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>There is a new <strong>scheduler.config.map_settings<\/strong> config designed to contain all settings specified for maps. By default, this config looks as follows:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">config<\/span>.<span class=\"me1\">map_settings<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; initial_position<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;lat<span class=\"sy0\">:<\/span> <span class=\"nu0\">48.724<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;lng<span class=\"sy0\">:<\/span> <span class=\"nu0\">8.215<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; error_position<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;lat<span class=\"sy0\">:<\/span> <span class=\"nu0\">15<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;lng<span class=\"sy0\">:<\/span> <span class=\"nu0\">15<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; initial_zoom<span class=\"sy0\">:<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; zoom_after_resolve<span class=\"sy0\">:<\/span> <span class=\"nu0\">15<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; info_window_max_width<span class=\"sy0\">:<\/span> <span class=\"nu0\">300<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; resolve_user_location<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; resolve_event_location<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; view_provider<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;googleMap&quot;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>In this config, you can find all map-related configuration options and change any parameters, if needed. In addition, it is also possible to specify custom map properties in this config. For instance, here is a way to add tokens to the map configuration:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">config<\/span>.<span class=\"me1\">map_settings<\/span>.<span class=\"me1\">accessToken<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;pk.eyJ...&quot;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>If you want to set your own parameters for the whole map, you have to create a map adapter by adding a new class that implements the adapter\u2019s UI consisting of multiple methods as shown in the piece of code below:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw5\">interface<\/span> IMapAdapter <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; initialize<span class=\"br0\">&#40;<\/span>container<span class=\"sy0\">:<\/span> HTMLElement<span class=\"sy0\">,<\/span> options<span class=\"sy0\">:<\/span> IMapSettings<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span> <span class=\"kw1\">void<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; destroy<span class=\"br0\">&#40;<\/span>container<span class=\"sy0\">:<\/span> HTMLElement<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span> <span class=\"kw1\">void<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; addEventMarker<span class=\"br0\">&#40;<\/span>event<span class=\"sy0\">:<\/span> ICalendarEvent<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span> <span class=\"kw1\">void<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; removeEventMarker<span class=\"br0\">&#40;<\/span>eventId<span class=\"sy0\">:<\/span> string<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span> <span class=\"kw1\">void<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; updateEventMarker<span class=\"br0\">&#40;<\/span>event<span class=\"sy0\">:<\/span> ICalendarEvent<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span> <span class=\"kw1\">void<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; clearEventMarkers<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span> <span class=\"kw1\">void<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; setView<span class=\"br0\">&#40;<\/span>latitude<span class=\"sy0\">:<\/span> number<span class=\"sy0\">,<\/span> longitude<span class=\"sy0\">:<\/span> number<span class=\"sy0\">,<\/span> zoom<span class=\"sy0\">:<\/span> number<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span> <span class=\"kw1\">void<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; onEventClick<span class=\"br0\">&#40;<\/span>event<span class=\"sy0\">:<\/span> ICalendarEvent<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span> <span class=\"kw1\">void<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; resolveAddress<span class=\"br0\">&#40;<\/span>address<span class=\"sy0\">:<\/span> string<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span> Promise<span class=\"sy0\">&lt;<\/span>IMapPosition<span class=\"sy0\">&gt;;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>All the changes are applied only after the map is redrawn.<\/p>\n<p>Moreover, you can connect any other map provider to DHTMLX Scheduler by implementing a simple interface.<\/p>\n<p>Please note that we also deprecated several configs related to the Map view:<\/p>\n<ul>\n<li><strong>scheduler.config.map_initial_position<\/strong>,<\/li>\n<li><strong>scheduler.config.map_error_position<\/strong>,<\/li>\n<li><strong>scheduler.config.map_type<\/strong>.<\/li>\n<\/ul>\n<h5>Highlighting Event\u2019s Initial Position During Drag-and-Drop<\/h5>\n<p>When rescheduling activities in a busy calendar with drag-and-drop, it can happen that plans change at the last moment. But what if you\u2019ve already started dragging an event to a new date and forgot the initial one? In v7.1, we added the ability to highlight a cell from which a user drags an event. The cell is highlighted until the event is dropped in a new cell and thus rescheduled.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/08\/Task-drag-n-drop.gif\" alt=\"Task drag-n-drop\" width=\"1098\" height=\"648\" class=\"aligncenter size-full wp-image-12681\" \/><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/samples\/03_extensions\/16_limitation.html\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>This feature is enabled by default. If you want to switch it off, you just need to change the value of the config below to <em>false<\/em>:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">config<\/span>.<span class=\"me1\">drag_highlight<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">false<\/span><\/div><\/div>\n<h5>Undoing Event Deletion<\/h5>\n<p>There is one more helpful feature delivered in this update as a safety net for end-users. In working with a JavaScript scheduling calendar, end-users may need the ability to revert actions. For instance, it is not rare to delete an event by mistake or to bring back an initially canceled meeting into your schedule. <\/p>\n<p>In Scheduler v7.1, end-users won\u2019t need to create a new event from scratch since they can restore the deleted event without losing any data using the new undo feature. Users can undo their actions via a popup window, which appears when they delete an event.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/08\/Undo.gif\" alt=\"DHTMLX Scheduler with Undo Action\" width=\"1098\" height=\"648\" class=\"aligncenter size-full wp-image-12684\" \/><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/samples\/01_initialization_loading\/01_basic_init.html\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>Overall, this novelty enhances the scheduler\u2019s usability. It ensures data integrity in case of unintended actions and allows end-users to manage their schedules confidently.<\/p>\n<p>Visit the <a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/what_s_new.html#71\" rel=\"noopener\" target=\"_blank\">documentation page<\/a> of DHTMLX Scheduler component to examine all the new features provided in v 7.1 once again.<\/p>\n<p>When migrating from v7.0 to v7.1, please, take into account several breaking changes highlighted on this <a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/migration_from_older_version.html#7071\" rel=\"noopener\" target=\"_blank\">page<\/a>.<\/p>\n<p>If you want to add DHTMLX Scheduler to your project, download a 30-day trial version for a free evaluation backed up with technical support from our team. Existing clients can access the updated Scheduler via their <a href=\"https:\/\/dhtmlx.com\/clients\/\" rel=\"noopener\" target=\"_blank\">Client\u2019s Area<\/a>.<\/p>\n<p>And lastly, we encourage you to share your comments on this release in the corresponding section below.<\/p>\n<h5>Related Materials<\/h5>\n<ul>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/what_s_new.html#71\" rel=\"noopener\" target=\"_blank\">What\u2019s new in DHTMLX Scheduler 7.1<\/a><\/li>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/migration_from_older_version.html#7071\" rel=\"noopener\" target=\"_blank\">Migration notes<\/a><\/li>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/samples\/\" rel=\"noopener\" target=\"_blank\">DHTMLX Scheduler samples<\/a><\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler\/download.shtml\" rel=\"noopener\" target=\"_blank\">DHTMLX Scheduler 30-day free trial version<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>We hope you&#8217;ve already got used to the new look and feel of our JavaScript scheduling library delivered in version 7.0. Now, we have a new portion of updates &#8230;<\/p>\n","protected":false},"author":101013,"featured_media":12532,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70],"tags":[33,15],"class_list":["post-12530","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-releases","tag-all-posts","tag-dhtmlxscheduler"],"_links":{"self":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/12530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/users\/101013"}],"replies":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/comments?post=12530"}],"version-history":[{"count":15,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/12530\/revisions"}],"predecessor-version":[{"id":12685,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/12530\/revisions\/12685"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media\/12532"}],"wp:attachment":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media?parent=12530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/categories?post=12530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/tags?post=12530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}