The document provides an overview of new features and enhancements in ADF 3.0, including a new JS-API that has been rewritten in Typescript, performance improvements, full SSO support, new process and task cloud components, extensibility features, and search enhancements like facet fields and a chip list component. Code examples are provided for common tasks like importing modules, listing apps and processes, and configuring SSO. Resources like documentation, repositories, and a Gitter channel are also listed for additional support.
3. Learn. Connect. Collaborate.
SOME NEW FEATURES
New JS-API
SSO
Extensibility
ACTIVITI CE/EE Components
Tree View Component
Search enhancements
Update Angular 7
Remove deprecated code
9. Learn. Connect. Collaborate.
• Performance
• Tree shakable
• Smaller output Size
• Web components future
• SSO Full support
– ACS 6.1.0 / APS 1.9.0 / ACTIVITI 7 CE EE
• Bug Fixing
– Refresh token with Grant password
– WithCredential option for Kerberos
3.0.0
10. Learn. Connect. Collaborate.
• Packages name deprecated:
– alfresco-js-api
– alfresco-js-api-node
• Node and Browser are now both in:
– @alfresco/js-api
• Project repository still the same :
https://github.com/Alfresco/alfresco-js-api
3.0.0
11. Learn. Connect. Collaborate.
• Version 3.0.0 has been completely rewritten in
Typescript
• Final Output still JavaScript
– Types enhance code quality and readability
– Simple to maintain
– Simple to generate new code
– TypeScript provides a number of features that are
planned in future version of JavaScript now
– Intellisense in your IDE is now working much better
3.0.0
12. JS API 2 VS JS API 3
JS-API 2
JS-API 3
import { AlfrescoApi, PeopleApi } from '@alfresco/js-api';
let alfrescoApi = new AlfrescoApi(config);
let peopleApiService = new PeopleApi(this.alfrescoApi);
peopleApiService.createPerson();
import { AlfrescoApi } from 'alfresco-js-api';
import * as alfrescoApi from 'alfresco-js-api';
let alfrescoApi = <AlfrescoApi> new alfrescoApi(config);
alfrescoApi.core.peopleApi.createPerson();
13. JS API 2 Compatibility Layer
import { AlfrescoApiCompatibility } from '@alfresco/js-api';
let alfrescoApi = new AlfrescoApiCompatibility(this.config);
alfrescoApi.core.peopleApi.createPerson();
alfrescoApi.activiti.taskApi.listTasks();
You can still use the old syntax wit the JS-API using the
compatibility layer:
Use it only until you don’t complete the update to the new syntax we
could may decide to not support it in the future
18. Components Description
App list Shows all deployed cloud application instances.
Group cloud component Searches Groups.
Edit process filter Shows Process Filter Details.
Process filters Lists all available process filters and allows to select a filter.
Process list
Renders a list containing all the process instances matched
by the parameters specified.
Start process Starts a process.
People cloud component
Allows one or more users to be selected (with auto-
suggestion) based on the input parameters.
Start task Creates/starts a new task for the specified app.
Edit task filter Edits Task Filter Details.
Task filters Shows all available filters.
Task header Shows all the information related to a task.
Task list
Renders a list containing all the tasks matched by the
parameters specified.
19. Learn. Connect. Collaborate.
import { ProcessServicesCloudModule } from '@alfresco/adf-process-services-cloud';
@NgModule({
imports: [
……
ProcessServicesCloudModule
…….
],
})
export class AppModule {}
npm install --save @alfresco/adf-process-services-cloud
Code Example – Import Process Activiti module
20. Learn. Connect. Collaborate.
Code Example – List Your Apps
<adf-cloud-app-list (appClick)="onAppClick($event)">
</adf-cloud-app-list>
onAppClick(app) {
this.router.navigate([`/cloud/${app.name}`]);
}
21. Learn. Connect. Collaborate.
Code Example – Start Process
<adf-cloud-start-process
[appName]="applicationName"
(success)="onStartProcessSuccess()">
</adf-cloud-start-process>
onStartProcessSuccess() {
this.router.navigate([`/cloud/${this.applicationName}/processes`]);
}
22. Learn. Connect. Collaborate.
Code Example – List Process
<adf-cloud-process-list
[applicationName]="applicationName"
(rowClick)="onRowClick($event)"
#processCloud>
</adf-cloud-process-list>
<adf-pagination [target]="processCloud" > </adf-pagination>
23. Learn. Connect. Collaborate.
Code Example – List Process
<adf-cloud-process-filters
[appName]=" applicationName"
[filterParam]="currentProcessFilter$ | async"
(filterClick)="onProcessFilterSelected($event)">
</adf-cloud-process-filters>
<adf-cloud-process-list
[applicationName]="applicationName"
(rowClick)="onRowClick($event)"
#processCloud>
</adf-cloud-process-list>
<adf-pagination [target]="processCloud" >
</adf-pagination>
24. Learn. Connect. Collaborate.
Code Example – List Process
<adf-cloud-edit-process-filter
[appName]="applicationName"
[id]="filterId"
(filterChange)="onFilterChange($event)"
(action)="onProcessFilterAction($event)">
</adf-cloud-edit-process-filter>
27. Learn. Connect. Collaborate.
• @alfresco/adf-extensions
• You can create plugins that change, toggle, or extend :
– Navigation sidebar links and groups
– Context Menu
– Sidebar (aka Info Drawer)
– Toolbar entries (buttons, menu buttons ,separators)
– Viewer actions
– Content metadata
– Custom icons
– Extensions can also:
– Overwrite or disable extension points of the main application or other plugins
– Change rules, actions or any visual element
– Register new application routes based on empty pages or layouts
– Register new rule evaluators, components, guards
28. Learn. Connect. Collaborate.
• alfresco/adf-extensions
• What do we have in 3.0.0
– Icons
– Viewer
– Columns template document list
• What we are going to have in 3.1.0
– All the others
31. Code Example – Import extension module
import { ExtensionsModule } from '@alfresco/adf-extensions';
@NgModule({
imports: [
.....
ExtensionsModule.forRoot(),
....
]
})
export class AppModule {}
npm install --save @alfresco/adf-extensions
32. Code Example – Define extension JSON
your-app/src/assets/app.extensions.json
{
"$schema": "./app-extension.schema.json",
"$references": [
"plugin1.json",
"plugin2.json"
]
}
• File plugins list used in your app:
Plugin List installed
38. Build Plugin
Distribute It (if you want it)
Build
Copy the plugin JSON in the distribution or use the angular cli assets copy:
39. Code Example – Assemble it
1. Install extension
2. Add the module
@NgModule({
imports: [
ExtensionsModule.forRoot(),
AdfMonacoModule
]
})
export class AppModule {}
3. Copy extension plugin JSON in plugin folder (no need in the future)
4. START YOUR APP
42. Learn. Connect. Collaborate.
• alfresco/adf-core
• SSO Full support
– ACS 6.1+ / APS 1.9+ / ACTIVITI 7EE / CE
The Alfresco Identity Service will become the central
component responsible for identity-related capabilities
needed by other Alfresco software, such as managing
users, groups, roles, profiles, and authentication. Currently
it deals just with authentication.
49. Learn. Connect. Collaborate.
ADF
Application
1
3
User stay in the APP and introduce the
credential in the Login component
User Logged In
OAuth 2.0 Password Grant
2
Credential are exchanged credential
for token with the identity service
50. Code Example
Implicit Flow ON Implicit Flow OFF
The Login component dynamically adapt itself you need only
to change the app.config.json configuration
<adf-login> </adf-login>