Title: TeamPage 6.2.49

TeamPage 6.2.49 introduces support for Microsoft Azure AD cloud-based identity and access management services. This new generation of Microsoft AD technology provides TeamPage single sign-on (SSO) that works along with other Azure AD compatible cloud and on premises resources. This release also includes: New tracking capabilities for the Impi! Projects module; Improvements to TeamPages' rich text editor, and many other improvements and bug fixes. Please read on for the full list of changes.

Download TeamPage 6.2.49

TeamPage integration with Microsoft Azure AD

We're pleased to announce the first TeamPage release that supports integration with Microsoft Azure AD for authentication and user management.

Azure AD is Microsoft's cloud-based identity and access management service which lets your employees sign in and access external cloud resources as well as internal resources such as apps on your corporate network and intranet. TeamPage's Azure AD turns your TeamPage server — on premises or running in the cloud — into a Microsoft Azure client. This allows your employees to log in to TeamPage using their Microsoft account associated with your organization's Azure AD tenant.

Authentication and Authorization

You can create and manage TeamPage accounts using Azure AD to access your organization's on premises Microsoft Active Directory servers or Azure Cloud accounts. You can also manage TeamPage permissions in terms of users, groups and roles defined in your organization's Azure AD tenant, using TeamPage ACLS for groups or individuals defined by Azure AD.

Single Sign-On and Single Sign

Authentication uses Azure AD's support for Single Sign-On (SSO) via OpenID Connect. This includes support for Single Sign-Out so that users will be logged out of TeamPage when they log out of their Microsoft account in the same browser. If a user is already logged into their Microsoft account, signing into TeamPage takes just a single click from the login form. If they're not logged in yet, they can authenticate according to the same policy (optional two-factor authentication, etc.).

Customizable Login Experience

Easily customize the appearance of the login form: designate whether Azure AD SSO is the primary, secondary or sole login method; and supply your preferred text for the SSO login prompt and button label. In the example below, Traction Azure AD is the primary login method and anyone with a corporate account managed by Traction Software's Azure AD tenant can log without having to create a separately managed TeamPage account. You can also optionally continue to create or maintain TeamPage accounts not connected to Microsoft accounts.

Choose Who Gets Access to TeamPage

You're in control of which users from your organization's Azure AD tenant can get into TeamPage: granting users Login permission lets them get access to TeamPage with a named user account; without Login permission, users can access TeamPage as Visitor, if you choose to allow it. With Login permission, the first time users log in with their Microsoft account, a new TeamPage user account will be created for them. And accounts newly created via the Invitation and the Server Administrator's 'Add User' features will automatically be associated with their Azure AD account as long as the email address matches one associated with their account.

Directory Search

It's easy for users to find their co-workers in the company directory. If they have Access Address Book permission, they'll get type-ahead completions for email addresses for other users in your Azure AD tenant, even if those users don't have TeamPage accounts.

Straightforward Setup

TeamPage only requires a small set of limited read-only permissions in your Azure AD tenant. And no setup or consent is required for individual users — just the consent of an Azure AD administrator. Integration is a snap for new installations, and the migration process makes it easy to associate existing TeamPage user accounts with your users' Microsoft accounts.

How can I get TeamPage integration with Azure AD?

Azure AD Support is offered as a separately priced and licensed add-on to your TeamPage license. Please email sales@tractionsoftware.com to learn more. Your organization will also need to be signed up for Azure AD from Microsoft. Microsoft currently offers four Azure AD editions: Free, Office 365 Apps, Premium P1, and Premium P1. The Free edition is included with some Microsoft cloud products, see Microsoft Azure AD Pricing.

Impi! Improvement Projects

The Improvement Projects module, a joint development with our partners at Impi!, now includes support for coaching and mentoring use cases. Users can simply choose their preferred use case when they create an improvement project. And it's easy for coaches and mentors to start with Impi!'s template library and customize them to their preferences.

Coaching and mentoring improvement projects also have a new inline session event form for recording useful notes and discussion points from a coaching or mentoring session. The built-in action tracking provides a framework for a systematic approach to achieving specific target conditions for the coachee/mentee.

Built-in reporting makes it easy to see whether the follow-up actions are being performed on time, and how much time has been spent in coaching/mentoring sessions.

In the pilot program — including a two day online leadership training event facilitated by Impi! — these new coaching and mentoring features got rave reviews. We're excited to have TeamPage customers learn about and use these capabilities. For more information about Impi! business solutions or to start a trial, please email info@impi.solutions.

Also note that the Innovation tasks feature, formerly part of the Risk module, has been deprecated. Innovations are now special IPs and part of the Improvements module. To continue to use innovation tasks instead, a server administrator can modify the "Use Innovation Tasks" setting in the Risk module plug-in settings dialog.

Signature Requirements Module

• This module now properly supports creating and tracking signature requirements for users and groups managed in external directory systems like Microsoft Active Directory or Azure AD. Previously, only native TeamPage managed users and groups could be referenced in the Signature Requirement form's "Sign By" field. (Proteus16862 / Proteus16863 / Proteus16870)

• There is now a server plug-in setting that allows server administrators to indicate whether TeamPage should require users to enter their credentials in order to submit a signature for a signature requirement. The default behavior is that a user's credentials are required, unless their account is associated with an account in an external system for which TeamPage has no way to directly verify their credentials (e.g., an Azure AD account). (Proteus16861)

The Signature Requirements module is offered as a separately priced and licensed add-on to your TeamPage license. Please email sales@tractionsoftware.com to learn more.

Bug Fixes

TeamPage Queries

• Fixed a bug that could prevent TeamPage from properly handling search expressions involving certain combinations of terms, including when one of two terms joined by an "OR" includes a tag term joined with another term by an AND, e.g.,

f(x:y) OR (:tag AND c(foo))

This was due to the incorrect application of an optimization. This issue has been fixed, and the proper optimizations are now in place for queries that include these sorts of search expressions. (Server95589)

• Fixed a bug that prevented a configured "Recent Period" date range ("Last N [days|weeks|months|quarters|years]") from being correctly applied to Project Management section types (Projects, Milestones, Tasks). (Server97042)


• Fixed a bug that could, in some cases, allow users who do not have "Change Tags" permission in a particular space to still be allowed to apply tags from that space while creating or editing an entry. (Server50489)

• Fixed a bug that could prevent a user from being able to apply a tag that they should be able to use. TeamPage had been improperly requiring that the authoring user have some read permission in the tag's containing space. Permission to apply a tag now correct depends upon having at least some author-related permission in the tag's containing space, as well as Change Tags permission. (Server95804)

Setup and Administration

• Fixed a regression introduced in a recent version of TeamPage that prevented space administrators from activating or deactivating existing tags. (Server95426)

• Fixed a bug that prevented users who do not have Modify Account permission from being able to perform a required password change. (Server95952)

• Fixed an issue that could cause the user profile picture displayed on the account settings > Personal Info page under Profile Page to use the original picture's dimensions instead of being scaled to a suitable size for the context. (Server95926)

Custom Stylesheets

• Fixed a bug that could prevent administrators from being able to use the Setup > Design > Customize dialog to create custom stylesheets, or to modify existing custom stylesheets. (Proteus16611)

Embedded Images

• Fixed a regression introduced in a recent version of TeamPage that prevented the specified dimensions from being used for an image if the "Disable Automatic Scaling" option had been chosen in the Insert Image dialog. (Server95423)

Embedded Media

• Fixed a regression introduced in a recent version of TeamPage that prevented the generic "Media Resource" widget (usually used for HTML5 video or audio) from appearing where an author had inserted it into entry content. (Server95449)

• Fixed a bug that prevented TeamPage from gracefully defaulting if a media widget, such as an embedded PDF, referred to a non-existent attachment or other file resource. (Server95702)

• Fixed a regression introduced in a recent version of TeamPage that could cause video or audio to automatically play even when the author had not elected to apply that behavior. (Server95715)

Digests and Email Notifications

• Fixed a bug that could prevent certain email programs from correctly reading digest and email notifications messages, which might cause garbled characters to display in the message. (Server95466)

• Fixed a bug in TeamPage's "Classic Email Notifications" plug-in that prevented notifications from being sent. This plug-in is no longer actively developed, and its use is discouraged, but it is still offered as a courtesy. (Server95405: emailnotifier and emailnotifier2 event listeners are broken due to a NullPointerException)

• Fixed a regression introduced in a recent version of TeamPage that caused the "→Continue reading digest online" link not to link to the correct view. This link is intended to allow the user to view a version of the digest starting where the digest they're viewing ends, allowing them to catch up with what has happened since then, and once again does this correctly. (Server96193)

Email Ingestion

• Fixed the "Text-Only to HTML with Blockquotes" transformer's handling of plain text content, ensuring that text content is eventually minimally HTML entity encoded exactly once. This transformer is included as a built-in option to help administrators configure their preferred text-to-HTML transformation -- if any -- to be applied to incoming text-only messages to turn them into HTML-safe versions, using a custom transformer pipeline for the "Text-Only Email Text-to-HTML Conversion" setting in the Transformer Setup dialog. (This prevents TeamPage from having to do that conversion at display time.) This particular transformer translates literal quote indicators in plain text messages, such as ">" or "|", into appropriate equivalent HTML BLOCKQUOTE tag structures, taking proper account of nested levels of quoting in the message (e.g., ">>" vs. just ">"). (Server95597)

• Fixed a bug that prevented email addresses with no subject from being processed. (This affects only messages that actually lack a "Subject:" header field, not messages with an empty or blank "Subject:" field.) (Server96528)

Invite to TeamPage

• Fixed a bug introduced in a recent version of TeamPage that prevented invited users from being able to complete the invitation process. Users would see a message on the invitation completion (welcome) page that indicated that they had not entered their password correctly. This issue has been fixed, and this erroneous error message will no longer be displayed. (Server95384)

• Fixed a bug introduced in a recent version of TeamPage that could cause newly uploaded profile pictures from being displayed in the welcome page users see when completing the invitation process. TeamPage would also fail to apply the appropriately scaled dimensions to the image. (Server95403)

• Fixed a bug that caused the "Allow Invitations to This Space" space setting to be ignored. The other space-specific settings, including minimum required permissions, and the server level Invite Users permission, were still observed, but selecting "No" for this setting had no effect. (Server96354)

• Fixed a bug that could cause the set of spaces suggested in the Invite dialog to be too broad. The suggestions now correctly include only those spaces to which the requesting user is allowed to invite others. (Proteus16805)

Document Management

• Fixed a bug that caused an error to be displayed when viewing the page for a single file that is not associated with a space. (Server96177)

• Fixed three bugs related to the generation of .zip files created by TeamPage when the user clicks the "Download" button for a folder in a document list view. These issues could cause the resulting .zip files not to be readable by certain programs (including those built into Windows and macOS). (Server95609 / Server95864 / Server95868)

User Lookup

• Fixed two bugs which could prevent a user from being found by their default user account security principal in certain cases. The only known visible effect of this issue was in TeamPage installations using the Signature Requirements module: user profile > Signatures pages would fail to show any signatures, even for users who currently had active signature requirements. It is unlikely that these issues would have any other visible effects for ordinary users. (Server95520 / Server95515)

• Added a setting that allows server administrators to prevent users logged into the built-in Visitor account from doing any searches for users. This can be a good idea for publicly facing TeamPage servers where the Visitor account is used to provide access for users outside of a core organization. Otherwise, Visitor will be able to search according to TeamPage's existing permissions rules, which includes being allowed to see and search certain profile details for named user accounts that haven't necessarily opted out of allowing that access. (Server95643)

• Fixed two bugs related to type-ahead suggestions representing externally defined user accounts for form fields intended to allow the selection of a user who may or may not have a TeamPage account. One issue caused such results to be displayed incorrectly, with incomplete or otherwise useless information, preventing a useful selection from being made. The other issue prevented the results from being displayed at all. Both of these bugs have been fixed, and user form field type-ahead suggestions now correctly include externally defined users when applicable, and the results are displayed correctly with all applicable information (user display name, and possibly an email address) for each one. (Proteus16829 / Proteus16828)

Advanced Search

• Fixed a bug that could, in certain cases, prevent the requested sort order from being applied to the results for an advanced search query. This is only likely to have affected plug-ins that use special custom sources for advanced search query parameters, and is not known to have caused any visible issues. (Server95547)

• TeamPage now supports including template entries among the results for advanced search queries. (Server96001)

• Fixed a bug that prevented the user's selection of "Show Duplicates" from being applied to subsequent chunks of results in an advanced search view. This would cause the desired duplicates to be omitted after the first chunk of results as the user scrolled down the page. (Proteus16808)

Integration with Microsoft Active Directory and LDAP

• Fixed an issue that unnecessarily slowed down computation of permissions for user accounts that are not bound to a Microsoft Active Directory or LDAP account. In certain cases, TeamPage would still try to determine whether the requesting user was a member of groups defined in Active Directory or LDAP, even though that wasn't possible. Now that this issue has been fixed, permissions computations for non-AD and non-LDAP accounts will be faster. (Server95301)

• TeamPage now has suitable defaults for certain Java JNDI properties used for LDAP lookups. Without these suitable defaults being set, certain kinds of LDAP connection or read failures could cause certain requests to fail, and repeated instances of such issues could cause TeamPage responsiveness to degrade over time. The defaults include connect and read timeouts for queries, and connection pool size. These properties can still all be overridden in individual user directory configurations. (Server95302)

PDF Export

• Fixed a bug that prevented the Logo Image setting from being available in export settings, and prevented the logo from being included. (Server95577)

• Fixed a bug that could prevent some embedded images from appearing in an exported PDF. (Server95581)

Logging and Telemetry

• Fixed an issue which, in certain cases, prevented TeamPage from logging information about the duration of certain operations. (Server95374)

• Fixed an issue that prevented certain useful human-readable information from being included in diagnostic logging related to certain LDAP queries. The missing information is required to identify the user or group whose properties were being requested. (Server95388)

• Fixed a longstanding issue that could, in some cases, cause the timing information gathered when TeamPage's debug logging is enabled to be inaccurate. (Server95377)


• Fixed an issue with the calendar item details dialog that could cause nested tasks and events appearing in context on the displayed entry to be incorrectly styled. (Proteus16551)

• Fixed some problems with the styling of inline tasks and events when they appear in the context of the calendar item details dialog. (Proteus16536 / Proteus16537)


• Fixed a bug that could cause links to be broken when they came from a URL typed into content, without, e.g., using the Insert Link dialog. (Specifically, such URLs were not correctly HTML entity-decoded before being stored in the entry content, with the result that the entity encoding applied when presenting the link in content would corrupt the URL.) (Server95635)

• Fixed a bug that could cause the word "link" to be improperly inserted into typed content. Specifically, this could happen if a user typed text that TeamPage recognized as a possible entry ID, such as "FooBar5000", but when the specific possible candidate entry didn't exist. (Server95561)

• Fixed a bug that could prevent a previously specified date or time value from being cleared when editing an existing entry. (Proteus16596)

• Fixed a bug that could cause an error message to appear in the status indicator the bottom of the page when a user applied inline formatting (e.g., bold or italics) to existing selected text. (Server87882)

• Fixed a bug that could prevent a user from being able to edit an existing template entry using a classic edit form. This isn't likely to come up often, but is now properly supported. (Server94737)

• Fixed a bug that prevented the link dialog's file chooser control in the "Link to a Shared File or Folder" panel from correctly displaying the files and folders contained within the selected folder. (JPBO26368)

• Fixed a bug that prevented the "Show History" button from working in the editor's names dialog. (Server96366)

• The Insert/Edit Image dialog now correctly chooses the "Reference Remote Image" option and fills in the URL of the resource if a user selects an image in the editor which isn't backed by a TeamPage image widget. (Server96341)

Premium Add-on Modules

• Fixed a bug in the Standard Meetings module that improperly restricted the tasks displayed in sections such as "Tasks Still Open from Previous Meetings" to those created during the currently focused date range ("time slice"). These sections now correctly display all applicable results regardless of any date range specified on the request URL. (Server95934)

• Fixed a bug in the Signature Requirements module that caused inactive user accounts to be included in signature status counts, even though they were not included in the list of users who are required to sign. Inactive users are now correctly ignored for purposes of displaying of this sort of information. (Proteus16662)


• Fixed a bug that could, in certain cases, prevent users from being able to sign into TeamPage using their email address instead of their user name. (Server96741)

• Fixed a bug that could cause redundant re-initialization of certain cached data when changes were made to an active user directory configuration (such as those used to connect TeamPage to a Microsoft Active Directory service), or when certain TeamPage caches were manually cleared by an administrator. (Server95500)

• Fixed a bug that could cause an entry to be duplicated in a comment thread if it has two or more references to the same entry, all using reference types that causes TeamPage to treat the entry as a comment. The most common case in which this would occur is that of a user creating an email reply (either from within TeamPage or by replying to an email another user sent from within TeamPage), and manually creating a "comments on" reference from the entry to the target. This could easily happen since entries ingested via email or sent as emails from within TeamPage are automatically considered to have a "replies to" reference to the reply target entry as long as the "In-Reply-To" or "References" email headers match that target. Some users might not be aware of this and would specify a redundant "comments on" reference, either by email subject directive or by creating the reference via the Relationships editor. (Server95319)

• Fixed a bug that could prevent tags from being properly pre-loaded into an entry form if there is no initial selection for the form's "Space" field. (Proteus16589)

• Fixed an issue that prevented task priority indicator from being styled with the correct colored "pill box" background within the in-page notifications menu. (Proteus16543)

• Fixed an issue that could prevent the "live activity" information displayed for comment forms to be incomplete. (Server95737)

• Modified TeamPage's bootstrap cleanup to remove a configuration file that is no longer used. The presence of the file could cause harmless but annoying errors to be emitted on the console and to appear in log files. (JPBO25513)

• Fixed an issue that caused parts of Project and Milestone dashboard views to improperly respond to a sort request parameter. The sort order of those parts is intended to be statically specified on those dashboards. (Proteus16644)

• Fixed some issues with the way that TeamPage generated and presented error pages. Sometimes, error messages contained markup instead of just text, which caused the markup to be visible as part of the literal message text. (Server95789)

• Fixed two small bugs related to the Custom Text Pattern Widgets feature (server settings > Server Files > Customizable Configuration). These widgets were not applied to change the rendering of the resulting HTML as expected. Also, when an administrator changed a the selection of widgets to be applied, or modified the definition of one of the widgets, the changes wouldn't necessarily be reflected immediately. (Server95847)

• Removed the Export and Email Article links from the user profile > Work in Progress view. They did not belong there and did nothing useful, since those features can only be used with entries that have already been finalized (i.e., are not works in progress). (Proteus16653)

• Fixed a minor bug that could cause an error to be displayed in certain cases when TeamPage attempted to display the details for attached documents. (Server95794)

• Fixed a bug that caused TeamPage to use the wrong display text for rendering entry attributes for presentation in a text-only document. (Server96024)

• Fixed some issues that prevented TeamPage from using text-only renderings of certain widgets for presentation in a text-only document. (Server96047)

• Fixed a bug that could prevent TeamPage's user setup assistant from being displayed or omitted at the right times when viewing user profile pages. It is intended only to be displayed for users who have permission to perform the suggested actions. (Proteus16671)

• Fixed a minor bug that could prevent certain information from being properly presented in the "Work in Progress" box that appears in the side column of most pages. (Proteus16670)

• Fixed a bug that could prevent all available custom relationship types from being included in the Edit Relationships dialog's relationship type selector. (Server96169)

• Fixed a concurrency bug related to the way that TeamPage runs the tasks required for event listeners. If the event listener task itself performed an operation that caused more event listener tasks to be run, in certain cases, the event listener task queue could become deadlocked indefinitely, requiring TeamPage to be restarted (possibly forcibly shut down) to resolve the situation. The bug was never seen in the wild, but nonetheless could have happened in the right set of circumstances. It has now been fixed. (Server96242)

• Fixed two closely related bugs that could cause certain tag lookups to give unexpected results for certain input values, or could cause invalid results to propagate unexpectedly where they could later cause other problems instead of being immediately recognized as invalid. This caused certain fields in custom forms to behave unpredictably with variance depending upon the context in which the form was launched. (Developers should also see the SDK/SDL section in the "For Developers" section below.) (Server96313 / Server96312)

• Fixed a bug that could prevent correct pre-population of tag fields based upon the supplied default values and/or a template entry if there was no initially selected space. (Server96319)

• Fixed a bug that could, in certain cases, prevent license expiration status from being correctly updated in a timely fashion. (Server96356)

• Fixed a bug that prevented space template ACLs and groups from being correctly applied to a newly created space. (Server96353)

• Fixed a bug that caused TeamPage to improperly require either Author or Comment permission in a space when deleting one or more entries in the space, when the deletion record contained no content, as will be the case in almost all cases. This requirement now correctly applies only to the case of a deletion operation that includes a description. (Server96959)


PDF Export

• Improved the handling of errors that can occur in the export setup dialog or during export operations (e.g., exporting content to a PDF) as a result of missing font configuration files in the operating environment. TeamPage will now recognize these sorts of errors and supply a static list of font options for the export setup dialog. It is still possible that an export operation might fail due to the same underlying issue, in which case an administrator should try to address it by fixing the operating environment, or the user can try choosing a different font. (Server95381)

Type-Ahead Completions

• Improved the way that type-ahead completion options are offered for entries when no query text has been typed. This may seem strange to apply to "type-ahead completions", but in certain situations, such as form fields that offer a selection of certain types of entries, suggestions are offered before the user has typed anything. Results in these situations now have better scoring. (Server95740)


• Added support for designating text content within the editor that is intended to be treated as literally typed, rather than processed to recognize hashtags, URLs, references to entries and users, etc. This can be very helpful when you need to make sure that TeamPage will keep text just as it was typed. HTML tags within literal regions are handled the same way that they would be in any other case. (This also means that it cannot be used to include arbitrary HTML markup, which is by design; server administrators can use the "Embed Code or Content" widget to do that.) (Server95559)

• The styles for TeamPage's rich text editor, which uses TinyMCE, have been updated and improved. (Server95835 / Server95821)

• Improved the layout and styles used in the rich text editor dialogs, including the Insert/Edit Image and Insert/Edit Widget dialogs. The focus was on simplifying things and making them slightly easier to use. In the image dialog, users will now also get a preview of the image they're about to upload. (Proteus16706 / Proteus16649 / Proteus16788 / Server96276)

Project Management

• Modified and added the settings in the Project Management Controls plug-in to allow administrators to specify, on a per-space basis, whether certain helpful graphical indicators for projects and milestones, such as dashboard burn-up charts and activity sparklines, should appear. Previously, some of these elements could be deactivated on a server-wide basis, but in some deployments, certain teams may find these features useful while others may find them distracting. (Proteus16535)

• Adjusted the text used for the title and button labels in the mini task assignment form so that it clearly refers specifically to setting or changing assignees. (Proteus16629)


• The Attachments view has been greatly improved, both in terms of performance and presentation of results. It will use the preferred external search engine in environments where one is available (requires the Advanced Search module); it properly observes result set chunking; it properly displays results for the files, not just the entries; and it has much better support for filtering the results. (Server95543)

• Added the settings for visibility of account profile details to the account settings > Personal Info page under Profile Page. They already appeared in the Edit Profile page of the main interface, but for consistency's sake, they should appear in both locations along with other profile related settings. (Server95674)

• Slightly modified the way TeamPage handles @ mentions for purposes of notifications so that a mention added during an edit will cause the mentioned user to receive notification of that edit. (Server95957)

• Modified the way that an event date/time range is presented for events that cover a single date to display a single date/time that represents that single day. (Proteus16665)

• Improved the way that the "Compare Selected Versions" button works in the History view. Previously, one or more HTTP redirects might be necessary to get to the page displaying the version comparison, but the button now navigates directly to the appropriate page. (Proteus16751)

• Made it much easier to choose which columns to show for a section table widget. Firstly, the options are finally sorted alphabetically by column name. Secondly, the names used are now specific enough so that users will actually be able to understand what the value represents, since previously, multiple columns had very similar names. This was particularly true in environments that have premium add-on plug-ins, such as the Impi! Quality, Risk and Improvement Projects modules. (Server96056)

• Adjusted the padding and line height of the extended details table that appears below basic entry details in many places to make it easier to read. (Proteus16757)

• Improved the Windows services created by TeamPage's installers so that they will more gracefully handle various cases of unexpected TeamPage process terminations. (Server96075)

• Made TeamPage's side-by-side multiple selection editor control wider. This control is used for various settings that appear in configuration interfaces, and places like the Insert Widget dialog. Previously, the full option text would often be too long to be visible, but almost anything should now fit comfortably within the available width. (Proteus16789)

For Developers


• Added support for the custom Proteus event "event-dialog-load".

The event dialog displays the details of any calendar item (event entry or otherwise), usually in response to a user clicking on a calendar item in a calendar view.

Developers can add custom event handlers for this sort of event as follows:

Proteus.addHandler("event-dialog-load", yourCustomHandlerFunction);

The object passed to these custom event handlers is an associative array with the following structure:

   "box": boxElement, // the DOM element for the TractionMessageBox used by the dialog
   "fqid": fqidSpec // a String representing the FQID of the entry whose details are being displayed

This can be useful in various customization scenarios. (Proteus16555)


• Added support for being able to insert a TEXTAREA place-holder for a form into any part of the page. If the user clicks in the TEXTAREA, the form will be loaded in that location, and focus will be given to the rich text editor for the form content. (This is similar to the behavior of the built-in inline comment form place-holders that appear in single entry views beneath other comments and related content.)

For example, supposing a plug-in defines a custom form called "foo", this SDL could be used to include a place-holder:

<!--- this viewaction tag assumes an action configured at
      config/actions/NewFoo, which will allow the user to
      use the corresponding form if they have permission
      and the context is otherwise suitable. -->
<viewaction name="NewFoo" forceinclude="true">
    <div id="foo-form-inline"></div>
  <gwt.rpc.view name="HtmlFormPlaceHolder" -id="foo-form-inline" placeholder_text="Click here to create a new Foo.">
    <gwt.rpc.form form="foo" onsave="rv">
      <div rg="g#" class="foo-form">
        <com.traction.sdl.tasks.taskform#field-error />
        <div class="q">
          <!--- minimal foo form -->
        <div class="o">
          <!--- remainder of foo form -->
        <gwt.rpc.field name="-controls-" />

Notice that a DIV with the id= attribute matches the -id= attribute of the of the gwt.rpc.view name="HtmlFormPlaceHolder"; and that the gwt.rpc.form tag is a child of that gwt.rpc.view tag, and otherwise is exactly as it normally would be used for an inline form. (The HTML structure with the matching id doesn't need to be included right next to the place-holder SDL; it can be anywhere.) This is intended to be used when an inline form is most suitable, and needs to be easily accessible, but when it doesn't make sense to display it until the user expresses an intention to use it. (Proteus16581)

• Added support for custom forms used to change tags on a single entry, using a com.traction.sdk.edit.NewSingleReclassify. This includes a new custom com.traction.sdk.data.DataSource, tsi.sdk.data.SingleReclassifySourceFactory, configured at config/data/sources/singlereclassify.properties. For examples of how to use these capabilities, developers can review the new generic Single Entry Tag Change form at config/data/forms/srecat.properties, as well as the Prioritize form at config/data/forms/prioritize.properties, which just offers a single field for setting or changing the priority (intended to be used with tasks). This opens the possibility of many other similar mini tag change forms, which will be a welcome alternative for developers who otherwise had to use either an edit form or some custom variation of the mutli-entry tag change form. (Proteus16326)

• Entries that are templates can now be included in type-ahead completions for applicable types of fields by setting the include_templates= property for the form field to "true". (Proteus16657)

• Added support for a color picker form field. This uses the same control used elsewhere in TeamPage's interface -- e.g., the Proteus style customization dialog (Setup > Design > Customize from the main interface), but allows the hex value to be captured as a form field value. (JPBO27874)

• Added support for a field that allows the user to pick an entry, with results that can be restricted by entry type, but without the field being associated with a LabelNameBucket or ReferenceBucket. This can be useful in forms that aren't being used to directly create entries -- for example, in a setup form that allowed the user to choose a template entry to use in the next form they'll see for creating a special type of entry. (Proteus16850)


• Added the goal.hastasks and milestone.hastasks SDL tags. These are boolean tags that evaluate their true children if there is a goal (project) or milestone entry in scope, respectively, that has at least one task. (Server95350)

• Added support for com.traction.sdk.IndexEntryType configurations (config/entry/indextypes) to specify a set of alternative com.traction.sdk.EntryClass names to allow the IndexEntryType to match to claim entries. Developers may use the match_entry_class_other_names= property for this purpose. (Server95485)

• Similarly, added support for custom SDL tags using com.traction.sdk.sdl.tag.SimpleCustomEntryRelatedEntries to support multiple options for the name of the EntryClass that the currently scoped com.traction.sdk.Entry must have for the tag to apply. In this case, the required_current_entry_class= property can be used to specify multiple EntryClass names. (Server95501)

• The db.entries SDL tag now applies the same "sticky" JournalRequest modifications that are applied via the entries tag. This ensures that behaviors will not vary between those two tags without there being a specific reason related to the type of query, or due to a deliberate choice on the part of the SDL designer. (Server95813)

config.project.* tags (e.g., config.project.value and config.project.boolean) support the defaultsOnMultiProject=true|[false] attribute. Specifying true for this attribute value will cause the tag to automatically fall back to using the default space settings if the source for the com.traction.sdk.Project object would otherwise have come from multiple spaces. The most common case in which this would apply would be when the currently scoped com.traction.sdk.CJournalRequest has multiple Project objects, as would happen, e.g., in the context of a view with &proj=* on the URL. (Server95461)

• Changed com.traction.sdk.ReferenceIterator's toEntryIterator(com.traction.sdk.CJournalRequest) method so that the com.traction.sdk.Reference that caused the com.traction.sdk.Entry to be loaded will be set as the current Reference in scope for SDL evaluation. This is most likely to apply to custom SDL tags, or other custom tags using com.traction.sdk.sdl.tag.SimpleCustomEntryReferencedEntries, or others using classes that extend com.traction.sdk.sdl.tag.SimpleCustomEntryRelatedEntries. For general SDK programming, Entry now offers access to that Reference via the new getSourceReference() method. (Server95725)

com.traction.sdk.Attachment now has two new methods for accessing the com.traction.sdk.Entry object to which it is attached: getEntryIfAlreadyLoaded(), which will only return the result if the Attachment instance was created from an Entry instance, or if it has been otherwise loaded through some other request; and getEntry(), with no parameters, which will use the already-loaded version if possible, or else will attempt to load it using a "clean" com.traction.sdk.CJournalRequest (via com.traction.sdk.Context's createCleanJournalRequest()). These can be useful for retrieving the source Entry without having to perform extra work of loading it, e.g., via the Attachment's getEntry(CJournalRequest) method. and not having to catch com.traction.sdk.AuthenticationException or JournalException, which are highly unlikely for a request to load an Entry for an Attachment that has already been retrieved on behalf of the requesting user.

• There is now an enum type, ContentFormat, which is nested in com.traction.sdk.edit.NewEntry, which is used everywhere in the SDK that a literal String used to be used to specify the format of the content being retrieved or appleid during creation of a new entry or an update to an existing entry. For example, SdkFactory's createNewEntryEdit method now has this signature:

public abstract NewEdit createNewEntryEdit(TractionId target, Context context, NewEntry.ContentFormat contentFormat)

The values are HTML, TEXT and UNSPECIFIED, which maps to all previously existing handling. (Server96005)

• The SDK now includes first-class interfaces and other objects related to reporting for purposes such as on-time task completion, cumulative duration of events, and other such aggregations. If this is of interest for you in building a customization in a plug-in, please review the SDK documentation or file a support request. (Server96026 / Server96041)

• Fixed an issue that prevented the "user_toggle_active" and "project_toggle_active" SDK events from being fired. Customizations can now build event listeners that will run when these events occur (i.e., when a user account or space is activated or deactivated). (Server96033)

• The rarely used "content" EntryField now has EntryFieldRenderers. This EntryFIeld may be useful for customizations in certain special cases, and is now properly and fully supported like other built-in EntryFields. (Server96048)

• There is also now a "body" EntryField, with a full set of EntryFieldRenderers, which is identical to the "content" EntryField except that it omits the title. (Server96053)

• The EntryTractionIdEntryField can now be used to express a search filter to omit a specific entry by its Traction ID name (e.g., "FooBar57") and not just the opaque numeric "FQID". This is probably easier for developers, as well as end users. (Server96080)

• There is now a "system" LabelNameBucket, which is like the generic "tags" bucket, but collects all system tags -- i.e., entry tags, such as those for projects and milestones. This is now a registered LabelNameBucket by default for all of TeamPage's built-in EntryClasses. The main purpose of this is to ensure that no custom entry tags that may be used in plug-ins will ever appear in the general "Tags" form field, since they're not supposed to be modifiable in that way. (Server96111)

• View configurations can now set the printversion_use_javascript_print= property to "true" to indicate that the PrintVersion action should simply use the built-in JavaScript window.print() function instead of linking to a Print Version skin view. Use this if you intend to include custom stylesheets targeted at "print" media instead of defining a Print version view or mapping to be used. (Server96152)

com.traction.sdk.RapidSelector's parseLabelName method now correctly conforms to its published specification when no valid LabelName can be identified from the input, throwing a com.traction.sdk.UnrecognizedLabelException, and never returning a null or invalid LabelName instance. (Server96312)

EntryClasses can now elect whether their entries should be copied along with other related entries when copying a Project using the Copy Project plug-in, or the built-in SDK support for copying related entries when copying an entry by adding the copy_goal_include= property, set to "true" or "false", to their configurations. The default behavior is still to copy related entries -- equivalent to a value of "true". (Proteus16801)

• Customizers can now modify the subject of an email notification message by overriding an appropriate function in com/traction/sdl/notify/emailnotifier3.sdl, and setting the value of the "customSubject" global variable. (Server96525)

• Added a new ViewAction, NewEntryLabeledArticle, which works exactly like NewRelatedArticle but which sets up the related entry to be related via the current entry's entry tag if the entry is eligible for entry tag usage and the requesting user would be allowed to apply it. This uses the com.traction.view.action.NewEntryLabeledEntry ViewAction class, so custom versions of this ViewAction could be configured to use a custom EntryClass for the newly created entries instead of an ordinary article. (Server96697)

• Added some SDL tags to iterate over or count the number of tasks, events or other related entries in an entire comment thread. There are three pairs of these new built-in tags:

The first in each pair iterates over the entries, and the second evaluates to the number of such entries. They all cover both "entry-level" and item-level relationships. Developers can make their own SDL tag definitions using the com.traction.sdk.sdl.tag.EntryCommentThreadRelatedEntries and com.traction.sdk.sdl.tag.EntryCommentThreadRelatedEntriesCount SDL Tag classes, specifying one or more verbs indicating the sort of incoming relationships to be covered by the tag. (JPBO24256)

com.traction.sdk.admin.Principal now has a getLastRefreshed() method so that customizations can determine whether the backing data from an external directory is sufficiently fresh for some purpose, or whether the refresh method may need to be invoked. (Server96772)

• Custom form fields that use the "principal" type for administrators to be able to get completions against users and groups can now use the special value "all-named" to have TeamPage offer completions for Principals of all types except "system". Previously, the "all" type was available, but would include system type matches. (Proteus16877)

• Added getLocalDisplayName(CJournalRequest) to com.traction.sdk.LabelName, and a corresponding method to com.traction.sdk.Label. This also includes SDL tags such as label.localdisplayname. This allows access to the "local" display name for any label or label name -- i.e., with no space qualification -- without having to manually remove any qualifier if present. (Server96949)

Related Articles
Article: Customer5388 (permalink)
Categories: :Doc:changelog, :Doc:r62
Date: March 15, 2021; 3:45:21 PM EDT
Author Name: Dave Shepperton
Author ID: shep