Sneak Peak at Referentiality within Confluence

:wave: Hello there Atlassian Partner Developers,

During the last few months, we have been focused on addressing a key functionality gap between Confluence Server and Confluence Cloud - specifically support for nesting bodied macros in the Fabric editor. Nesting bodied macros allows customers in Server to compose elaborate macro structures which can easily pass their content upward to an outer macro. While we continue to encourage customers and apps towards the Cloud, these structures will not all work as is in the Fabric editor in Cloud and will need to be updated. This is because the macros themselves are sandboxed within an iframe, making data communication between nested bodied macros more difficult than would be than on the Server.

In order to support this functionality, we have begun building a new technical architecture to provide a more WYSIWYG experience than was available in Server. This architecture will allow users to create references from one macro to another, including Dynamic Content macros. This new technical foundation, as well as new user experience of referencing, will help users address the use cases that they relied on nesting bodied macros to compose, aiming to provide equivalent functionality with a better user experience.

We would like to take this opportunity to show you what is coming soon to support Nested Bodied Macros, to keep you informed of our engineering progress and to get feedback on what is coming down the pipe in the months ahead. We are calling the capability Referentiality (for now), and we are excited for the possibilities it can bring for Partners, but we also want to hear from all of you what you think about this before we get too far down the line.

What are the problems we are trying to solve for?
As more customers migrate over from Server to Cloud, end-users expect similar functionality as they have had in Server with nested bodied macros. As content creators create more pages within the new Editor, they will still want a way to easily chain macros together regardless of whether it is a native Confluence macro, or a Connect or Forge macro.

And as Partner developers have already invested in the Connect ecosystem, we know that you want to easily adapt your existing Connect macros to empower content creators to continue using your macros in the Cloud. We hear you and understand that it will take time to update your app to Forge, and that you need an intermediary solution.

What is our vision for tackling this?

Our solution includes building a Referentiality model to allow data sharing between different types of macros within Confluence, whether it be an existing Connect macro, a native Confluence macro, or a Forge app. All of these would be able to be chained (rather than nested), linking them together interchangeably via an internal message broker. With a few minor modifications within the macro and to your Connect Descriptor or Forge Manifest, your macro would be able to publish, subscribe, and react to changes based on the data coming from another macro (both native or Marketplace app), similar to what you had in the Server world with nested bodied macros.

For our initial release, we are adding a Connect and Forge extension point in the Contextual Toolbar which you can add to your macro. Each subscribing macro will be included as a Contextual Toolbar Item to ingest the data from the publishing macro. Here is an example of an existing Table Macro using the Contextual Toolbar which includes the option to inject a dynamic pie chart with its data binded to the table.

Our longer-term North Star will include additional features such as the ability to name and reference macros, to visualizing a navigable macro chain, to allowing multiple macros from different pages to be chained and rendered in a WYSIWYG fashion. Having a WYSIWYG experience will reduce user uncertainty by rendering the same view within the Editor and Renderer. This allows the content creator to be able to experience what the published version of the page looks like without having to publish the current page being edited, ensuring a much better user experience for the content creator and content consumer alike.

This can all be configured using the Right Context Panel. Content creators would be able to configure the macro chain, how each macro fits within the data chain, and set the view settings for the individual macros within the chain as shown on the diagram below. Imagine how much happier content creators will be with the new WYSIWYG experience in Cloud; they would have wished they migrated to the Cloud sooner.

How will it work and what are some of the changes required?

Your descriptor or manifest will need to be updated with a new refDataSchema property dictating the data ingress and data egress types of each of the macros. While this allows for any unstructured data types to be freely used, we are starting with an initial rollout to support our most common use case, Tables. For your macro to support data flows to and from Tables, you can use either the table-adf or table-json schema types. To support Connect macros, we have created a new API for your macros to emit data - AP.dataProvider.emitToDataProvider - and register for data changes with the data_provider topic.

Why not just migrate my existing Connect application to Forge?

While we would like for all our Partners to migrate and rewrite all their apps with Forge eventually, we know that this undertaking will be significant and will not happen overnight. So we made these changes to ease this transition phase for Partners while allowing our end users to fully adopt the new Fabric Editor. If you are interested in migrating your Connect application to Forge, you can read more about our Connect-on-Forge path here https://blog.developer.atlassian.com/unifying-atlassian-connect-and-forge-an-update .

What’s next?

We expect an initial release for our Partners in the Ecosystem Beta Group to land later this year. In the meantime, if you haven’t joined the Ecosystem Beta Group, consider joining by reaching out to your Technical Program Manager. Also, look forward to the next post detailing the specific changes required to take advantage of Referentiality within Confluence, and a demo of how you can enable Referentiality.

Let us know what you think of what’s coming!

28 Likes

Interesting! Excited to try this out! :slight_smile:

Please note that designs are still evolving, so those presented above may change somewhat.

2 Likes

That’s a good decision to get nested macros back in Cloud.
Will this approach support nesting several macros within a single macro? So it is not a chain, but a tree of macros.
Will it support combining macros and other content like images, text, lists, tables, and so on in the tree structure?
I mean will it be as flexible as it is in the legacy editor and in Data Center/Server version?

3 Likes

This approach differs from the nesting solution found in the Server, and would only support a singular chain for now. While there have been discussions to enable the tree like structure, it is currently out of scope as there are more restrictions placed on macro content rendered within an iframe.
We believe this would be a better and more intuitive experience for the end user, but would not be as flexible as it was in the older Data Center / Server versions.

1 Like

This looks to be focussed on the v2 fabric editor - will the v1 editor continue to lack support for nesting Dynamic macros? Are there any plans to make v1 nesting work like server?

1 Like

Do you plan to release (preview for partners) Referentiality support for Connect and Forge at the same time?

1 Like

That’s bad. I’ll try to explain why I think so.
In the times when the legacy editor was not legacy and was the only one editor, there were three groups of power editors:

  • A - used chained nested macros
  • B - used a number of macros and other types of content in macros (one level depth)
  • C - combined A and B approaches and used a tree structure
    There are not many power editors, but they create content for the rest of the users, the readers.
    Then the fabric editor appeared. It was forced and groups A and C had gone. But group B is still with us!
    But the referentiality is coming. If it will be forced like the fabric editor was (and I’m sure it will be), then group B will leave us. But group A will be happy! Stop, we’ve already lost them… So for whom is it made?
    Why not make the product better only? Please, don’t make it better in one case and unusable in the other one. I’m sure it is possible.
    Hope the Atlassian team finds a better solution. Good luck!
4 Likes

I have another question: how will the referentiality work with macros that modify its body?
For example:

  • Table Filter that hides filtered rows in the referenced table.
  • Chart macro that hides the source table.
  • Expand macro that collapses its content.
  • A chain Chart > Pivot Table > Table Filter macros, where each outer macro reads modified data of the inner and modify it (hide source tables).
5 Likes

If a macro has custom UI in the macro configuration, how will a user manage the macro references?

2 Likes

Same question here. This is CRUCIAL for us. We are not able to use the sidebar as our macro heavily relies on custom ui.

1 Like

Yes that is right; we are focusing primarily on the Fabric Editor to enable a shift towards a chained solution that can be as useful as nesting was in the server. There have been a continued push within Confluence to making the v2 editor better than the v1 editor.

I have another question: how will the referentiality work with macros that modify its body?
For example:

  • Table Filter that hides filtered rows in the referenced table.
  • Chart macro that hides the source table.
  • Expand macro that collapses its content.
  • A chain Chart > Pivot Table > Table Filter macros, where each outer macro reads modified data of the inner and modify it (hide source tables).

That’s a great question; Referentiality would not modify the content of the data within each of the macros, and only acts as a bridge between macros. So in the case of the chain Chart > Pivot Table > Table Filter macros, each of the “source” macros would be responsible for publishing their changes to the downstream subscribers. Should the Pivot Table macro decide to not send the “hidden” data or send the “hidden” data but with a designated attribute/adf-mark, it should be sent with a common outputType format that the Chart or any other compatible “target” macro can accept.

 

And regarding the other question:

If a macro has custom UI in the macro configuration, how will a user manage the macro references?

Within the existing Right Config Panel that contains the existing macro configuration that you might be familiar with, there will be additional options to manage the macro referenced source and targets. This should allow macro and chained configuration to happen on the right.

Can you expand on why your macro would need access to configure its data sources and targets?

I am under the impression that the right configuration panel does not work with macros that use custom UI. Has this changed? If not, can you please clarify how your answer applies in this case?

1 Like

Our macros have custom ui that is necessary to configure the parameters. This can be as “simple” as picking a color from a color picker, but can get very complex. Some of our macros are collections, for example we do offer a card collection, where a user can add multiple cards in a single macro and re-order them, adding multiple attributes to each cards as they go.
We also have controls like custom color palettes that get loaded from a remote configuration or a control that connects to unsplash to allow users to instantly import content from there. The default controls simply don’t cut it, our functionality simply can’t be build without custom ui. I am more than happy to show you a live demo of all the features that we’ve built with custom ui, that simply can’t be replicated using the defaults. Removing the option to use custom ui would kill our app, and many more, since a lot of vendors rely on this kind of functionality.

1 Like

Yes we are aware of custom UI uses and hence we are building multiple User Experience paths for Referentiality: use of ContextualToolbar and use of RightContextPanel. They are functionally similar in their ability to provide data to the Target app; however the latter would provide for better configuration of the Referentiality chain. With the Developer Preview of Referentiality released, you can try it on your test instance.

Thank you for elaborating on your use case and let me assure you that our Ecosystem team does not have any plans to remove the option to use custom ui. We are building multiple User Experience paths for Referentiality: use of ContextualToolbar and use of RightContextPanel. They are functionally similar in their ability to provide data to the Target app; however the latter would provide for better configuration of the Referentiality chain. With the Developer Preview of Referentiality released, you can try it on your test instance.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.