cancel
Showing results for 
Search instead for 
Did you mean: 

Alfresco Content/Process App Module/extension mechanism

binduwavell
Star Contributor
Star Contributor

I have created the following issue for the Alfresco Content App (ACA):

Module/extension mechanism · Issue #179 · Alfresco/alfresco-content-app · GitHub 

Following is the initial detail, let's use this page on the community to discuss our needs in this area:

I believe that there has been some work to create a module system where we can create an Alfresco Content App (ACA) customization artifact and drop it into a location in the OOTB app without extending the code of the ACA. It would be great to have some discussion about the approach(es).

There are a few higher level goals here:

  • Provide a way for implementors to create re-usable enhancements to ACA that can be composed when creating a solution.
    • e.g. I want to add AOS and Case Management
  • Provide a way for implementors to create enhancements that are likely to be upgrade safe

Following is an initial list of highly desirable features of such a system (in my opinion):

  • It should be possible to add page components to the router via configuration
    • It should be possible to configure that certain custom pages show up in the toolbar
    • It should be possible to configure that certain custom pages don't show up in the toolbar (if they are contextual.)
  • It should be possible to add buttons to the main toolbar
  • It should be possible to configure actions for the "New" menu
  • It should be possible to configure actions for the User menu (far right of toolbar)
  • It should be possible to add document list actions (and associated logic for when to display/enable the same) via configuration
    • Ideally it should be possible to affect the ordering of these actions via configuration
    • Ideally it should be easy to add an action to route to a custom page
    • Ideally it should be easy to route to another ADF app; passing context, credentials and a back link (I will create an ADF issue for this.)
    • Ideally one action can be configured as the default in certain conditions (i.e. don't go to preview, instead route to another application when a document is activated.)
  • It should be possible to configure custom result columns
    • Ideally it should be possible to configure different columns depending on context. e.g. under contracts I want to show one set of columns, under finance a different set of columns should be displayed
  • It should be possible to configure custom cell content renderers
  • It should be possible to configure flag providers
  • Once search is fleshed out it should be possible to configure advanced search providers
    • It should be possible to configure the zero state when a search returns zero results
  • It should be possible to configure additional "smart folders" like "My Favorites", "Shared Documents" etc.
    • Ideally it should be possible to affect the ordering of these via configuration
  • It should be possible to configure preview components
  • It should be possible to configure metadata forms (create, edit, view at least)
  • It should be possible to configure custom field renderers fro metadata forms.
  • It should be possible to configure Open With menu items
  • It should be possible to configure "More Options" items
  • Would be great to allow us to configure components to trigger during the upload process
    • Some might be passive (once upload completes perform some API calls against the uploaded docs)
    • Some might be active, gather metadata before or after the upload
  • It should be possible to configure left and right trays based on contextual information/logic
  • Ideally "modules" can interact with each other. As such, having some control over load order of modules may be important.

As an overarching goal there should be a single config file in ACA and one in each "module" that plugs the module into the ACA. i.e. don't make devs sift through many different configuration files. Ideally configuration merging/replacement strategies will be well documented and easy to determine the effective configuration once all modules have been deployed.

I'm sure other folks will have additional ideas, I hope this is a reasonable starting point.

18 REPLIES 18

anakin59490
Star Contributor
Star Contributor

Hi,

alfresco-content-app is a great job !

But it will be very useful if ADF app could communicate with platform-jar structure in order to reproduce this kind of simple scenario : Form from sdk3 to ADF  

Congratulation for your work !!

ohej
Star Contributor
Star Contributor

Hi all

I just wanted to give a heads up that we have not forgotten about this topic. We've had quite a few internal meetings about the topic last week, and we are actively exploring options.

Essentially we are working on a mechanism that allows runtime loading of "plugins", which would allow you to hook into different parts of the application - routes, content projection and much, much more.

We're currently doing some internal evaluation to see if the potential solution is fit for purpose. Once we feel good about it, we will start doing some validation with you guys where we present the proposed solution and gather feedback.

We haven't planned out the exact way we share the findings, if it will be a blog, tech talk live, individual or group meetings - most likely a combination. 

We will start sharing some technical details soon!

deas0815
Star Contributor
Star Contributor

This page seems to be one of the entry points with regards to the recent UI runtime-extensibility-/module efforts. People jumping in at this time might get the impression it is already over. The other day, Denys Vuika mentioned on Twitter it is covered somewhere in TTL. Just saying.

cjose
Elite Collaborator
Elite Collaborator

I just saw this thread for the first time and thought I'll add an example approach which we took recently for a demo which we built on top of Alfresco Process Workspace aka APW (OOTB ADF based app with APS) and leveraging some components of ACA . In this case I leveraged the "App" container in APS as a case container. Then used the app.config.json in APW to determine the things I want to include/exclude in each Apps. An example entry in the app.config.json show below. Hopefully this will help someone develop case management style apps using ADF!

"1001": {
            "name": "Drone Case Management",
            "defaultLandingPage": "insights/support-cases",
            "showOOTBDashboards": false,
            "apsApp": true,
            "showInsights": true,
            "showProcesses": true,
            "showTasks": true,
            "showCreateTask": true,
            "showCreateProcess": true,
            "showContents": true,
            "showAdvSearch": true,
            "showDataLookup": true,
               "accordionGroups": {
                    "insights": {
                         "default": "support-cases",
                         "items": [{
                        "id": "support-cases",
                        "name": "Cases & Faults"
                    },
                    {
                        "id": "sentiment-analysis",
                        "name": "Sentiment Analysis"
                         }]
                    },
                    "advsearches": {
                         "default": "case-search",
                         "items": [ {
                        "id": "case-search",
                        "name": "Search Cases"
                    },
                    {
                        "id": "fault-search",
                        "name": "Search Faults"
                         }, {
                        "id": "recall-search",
                        "name": "Search Recalls"
                         }, {
                        "id": "repair-search",
                        "name": "Search Repairs"
                         }]
                    },
                    "datalookups": {
                         "default": "models",
                         "items": [{
                        "id": "customers",
                        "name": "Customers"
                         }, {
                        "id": "models",
                        "name": "Drone Models"
                         }]
                    }
               }
        },

The above config resulted in.. 

afaust
Legendary Innovator
Legendary Innovator

This requires the customer / client to override the packaged app.config.json, which violates the idea of an immutable app shipped by the vendor (which was a big argument for Alfresco to push for JAR extensions in ACS). Ideally, any extensibility feature would not require overriding default files.

Are there any plans for APS to support moving away from "magic numbers" for targeting such customisations to specific apps (i.e. the DB ID 1001 for your app) towards proper app naming? I.e. I'd like to be able to create a customisation for process app using the same abstract (logical) ID in DEV, UAT and PROD, without having to account for their different DB IDs, e.g. having separate config files for each target environment.

I hope all those "names" are localised somewhere, i.e. not like the ADF / APW language selection list which is always English even after user already selected German language.

dvuika
Star Collaborator
Star Collaborator

Would be nice if you raise a ticket for the language selection list with steps to reproduce and ADF version. If you find JIRA difficult, we also accept the GitHub tickets and then manually move them to JIRA if needed: https://github.com/Alfresco/alfresco-ng2-components/issues/new. Thanks in advance.

afaust
Legendary Innovator
Legendary Innovator

Since APS is an Enterprise product, the proper way is to go through Support, which I can't. The customer has filed their ticket today as ACT 00964167. They are typically a few weeks behind on reporting issues we find in our project(s), because 1st level support is annoyingly inefficient in reproducing obvious out-of-the-box issues and requires a substantial amount of hand-holding.

cjose
Elite Collaborator
Elite Collaborator

Thanks for the feedback Axel. As I said, this is something that I adopted for the current version of APS. Creating a logical environment-agnostic name for all deployment models is an item that I hope will be tackled as part of Activiti 7 and APS 2.0, and agree it is a pain! Feel free to provide your valuable comments to all the Activiti 7 related RFCs such as https://community.alfresco.com/community/bpm/blog/2018/04/11/rfc-activiti-cloud-application-service 

Btw, the environment specific model ids eg:1001 were replaced with model keys (environment agnostic) in Activiti 6. Another reason for me to believe that it will be fixed in APS 2.0

john_knowles
Confirmed Champ
Confirmed Champ

Quick update for you Denys just merged version 1.4 which includes the first phase of extensibility work. Please see the documentation for more info on the details.

We are looking forward to feedback on the progress so far on both extensibility in the app, and the associated documentation.