Skip to content

Tags: arganollc/aotbrowser

Tags

863.0.5.25

Toggle 863.0.5.25's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Add tree search, URL deep linking, clipboard copy, and improved X++ s…

…yntax highlighting (#40)

* Add tree search and URL deep linking features

Tree Search:
- Search button opens a dialog to enter search text
- Recursively walks the tree to find matching nodes (case-insensitive)
- Next/Prev buttons navigate between matches with wrap-around
- Search state clears when switching to a different object

URL Deep Linking:
- New ARBAOTBrowserUrlHelper class builds shareable URLs
- init() parses ObjectType, ObjectName, TreePath query parameters
- Copy Link button in action pane shows the URL in the infolog
- URL format: ?mi=ARBAOTBrowser&ObjectType=Table&ObjectName=CustTable

Co-authored-by: Copilot <[email protected]>

* Implement clipboard copy via extensible control

Replace info()-based Copy Link with a proper browser clipboard copy
using a JavaScript extensible control pattern:
- ARBClipboardHelperBuild: design-time build class
- ARBClipboardHelperControl: runtime control with FormProperty
- ARBClipboardHelper form: transient dialog hosting the control
- ARBClipboardHelper class: static copyToClipboard() entry point
- HTML/JS resources using navigator.clipboard.writeText()

The dialog opens briefly when Copy Link is clicked, copies the URL
to the browser clipboard via JavaScript, then auto-closes after 2s.

Co-authored-by: Copilot <[email protected]>

* Deploy web resources to webroot in Mount.ps1

Extensible control resources (HTML/JS) must be copied to the IIS
webroot/resources/ folder for the browser to load them. Add an
automatic deployment step to Mount.ps1 that copies resource content
from AxResource/ResourceContent/ to the webroot.

Co-authored-by: Copilot <[email protected]>

* Fix deep linking: use getClientURLQueryValue instead of HttpContext

HttpContext::Current is null during form init() in D365FO's SPA
architecture. Replace with Global::getClientURLQueryValue() which
uses SessionContext to access the original browser URL parameters.

Co-authored-by: Copilot <[email protected]>

* Include tree path in Copy Link URL for node-level deep linking

CopyLinkButton now captures the currently selected tree node path
via ARBAOTBrowserUrlHelper::getSelectedTreePath() and includes it
as a TreePath parameter in the URL. When opened, the form navigates
directly to that tree node.

Co-authored-by: Copilot <[email protected]>

* Refactor tree search to Docentric inline pattern

Replace dialog-based tree search with inline filter group using the
Docentric pattern (DocReportUserDefinedPlaceholderExpressionDesigner).

Changes:
- Add TreeSearchFilterGroup with StringControl + Prev/Next buttons
  inside DetailsNavigationList, above the ObjectTree
- TreeSearchButton in action pane now toggles filter group visibility
- Pre-build ascending/descending search index lists after tree
  construction (buildSearchTreeItems/buildSearchTreeItemsRecursive)
- Use match() for wildcard-aware search via findTreeItem()
- Remove old dialog-based methods (treeSearchExecute, treeSearchClear,
  treeSearchCollectMatches, treeSearchNavigate)

Co-authored-by: Copilot <[email protected]>

* Fix tree search button label and search logic

- Remove ImageOnly display so Search button shows text label
- Rewrite findTreeItem to skip-past-current approach instead of
  fragile +1/-1 index arithmetic
- Use strContains for plain text (case-insensitive substring match),
  reserve match() for wildcard patterns (* and ?)
- Change findTreeItem to public for DataControl access

Co-authored-by: Copilot <[email protected]>

* Remove search button image, add Enter key to trigger search

- Remove NormalImage from Search toggle button (text-only display)
- Add enter() override on TreeSearchString so pressing Enter triggers
  Find Next automatically

Co-authored-by: Copilot <[email protected]>

* Simplify tree search: always visible, search-as-you-type

- Remove Search toggle button from action pane (no longer needed)
- Show TreeSearchFilterGroup always (remove Visible=No)
- Replace enter() with modified() on TreeSearchString so search
  triggers automatically as the user types and tabs/clicks away

Co-authored-by: Copilot <[email protected]>

* Normalize form XML formatting

Co-authored-by: Copilot <[email protected]>

* Improve X++ syntax highlighting in code viewer

- Replace C#-centric keyword list with accurate X++ keywords
  - Add: final, implements, retry, next, firstonly, forupdate, nofetch,
    forceselectorder, crosscompany, display, edit, server, client,
    ttsbegin/ttscommit/ttsabort, changecompany, mod, div, and more
  - Remove 30+ C#-only keywords (async, await, unsafe, stackalloc, etc.)
- Replace type keywords with X++ types (int64, utcdatetime, guid, anytype,
  boolean, container, tableId, fieldId, classId, etc.)
- Add XML doc comment (///) highlighting as String.Doc token type
- Add label literal (@sys12345, @module:Label) highlighting as Name.Label
- Add intrinsic function highlighting (classStr, tableStr, enumStr, etc.)
  as Name.Builtin with green bold styling
- Add ClassName:: static access highlighting (class name as Name.Class)
- Separate operators from punctuation for distinct visual styling
- Add macro usage (#MacroName) highlighting as Comment.Preproc
- Add additional preprocessor directives (globaldefine, defjob, etc.)

Co-authored-by: Copilot <[email protected]>

* Fix BP warnings: add XML doc headers, fix strFmt, protect constructor

- Add XML doc summary to ARBClipboardHelperBuild and ARBClipboardHelperControl
- Fix HTML-encoded summary tags in ARBClipboardHelper and ARBAOTBrowserUrlHelper
- Change ARBClipboardHelperControl constructor from public to protected
- Remove unnecessary strFmt() call on label with no format args
- Add missing returns tag on TreeSearchString.modified() doc header

Co-authored-by: Copilot <[email protected]>

* Fix BP issues and warnings

* Add missing X++ keywords from official LanguageService scanner

Cross-referenced our lexer against the official Tokens enum from
Microsoft.Dynamics.Framework.Tools.LanguageService.Parser and added
15 missing keywords:

- event, eventhandler (event handling)
- firstonly100, firstonly1000 (select hints)
- from (insert_recordset ... from)
- generateonly (select modifier)
- hint, index (index hint)
- optimisticlock, pessimisticlock, repeatableread (concurrency)
- print (debug output)
- reverse (select ordering)
- set, unchecked (misc keywords)

Co-authored-by: Copilot <[email protected]>

* Remove debug web resource deployment from Mount.ps1

Co-authored-by: Copilot <[email protected]>

* Remove extra file

---------

Co-authored-by: Caleb Blanchard <[email protected]>
Co-authored-by: Copilot <[email protected]>

863.0.5.24

Toggle 863.0.5.24's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge 514c0d3 into b41dcf5

863.0.5.23

Toggle 863.0.5.23's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Add BP suppression files and table key data (#39)

* Add BP suppression files

* Add ARBTableKeyFieldMetadata table for primary key exposure

Add new table, data entity, and supporting artifacts to expose primary
index and replacement key field information for each table.

New artifacts:
- ARBTableKeyFieldMetadata table: stores one record per field per key
  with TableName, IndexName, FieldName, KeyType, and FieldPosition
- ARBTableKeyFieldMetadataEntity: read-only OData entity
- ARBTableKeyFieldMetadataEntityStaging: DMF staging table
- ARBMetadataKeyType EDT (String, size 40)
- ARBMetadataFieldPosition EDT (Int32)

Modified artifacts:
- ARBTableMetadataPopulateService: added processKeys and processKeyIndex
  methods to extract PrimaryIndex and ReplacementKey fields per table
- ARBTableMetadata form: added Keys tab with grid for key field browsing
- ARBTableMetadataEntityMaintain/View privileges: added entity permissions
- Labels: added KeyType, Keys, IndexName, FieldPosition,
  TableKeyFieldMetadata, TableKeyFieldMetadataDevDoc
- VS project and documentation updated

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Caleb Blanchard <[email protected]>
Co-authored-by: Copilot <[email protected]>

863.0.5.15

Toggle 863.0.5.15's commit message
Fix issue with AOT Browser filtering to DefaultDashboard when opening…

… workspace from the dashboard

863.0.5.14

Toggle 863.0.5.14's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Add SQL Name for tables (#35)

Co-authored-by: Caleb Blanchard <[email protected]>

863.0.5.8

Toggle 863.0.5.8's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Add label fields to menu item cross reference table/form (#32)

Co-authored-by: Caleb Blanchard <[email protected]>

863.0.5.6

Toggle 863.0.5.6's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Add menu item cross reference button to AOT browser form (#31)

Co-authored-by: Caleb Blanchard <[email protected]>

863.0.5.4

Toggle 863.0.5.4's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Entity fields and menu item cross reference utilities (#30)