SlideShare a Scribd company logo
1 of 63
Let's Play with ADF 3.0
Eugenio Romano
Learn. Connect. Collaborate.
Eugenio Romano
Architect & Team Lead at Alfresco
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
Tomorrow Tinto 10:45-11:30
ADF PIPELINE
Learn. Connect. Collaborate.
• Code Review
• Build Size check
• Code Coverage
• Security Vulnerabilities
Learn. Connect. Collaborate.
• Lint checks: TS, SCSS, JS
• Quality assurance
– Over 700 E2E Test
– Around 3500 Unit test 85% code
coverage
• Docker Image
• Build and deploy packages on NPM
@ALFRESCO/JS-API
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
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
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
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();
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
Performance improvement
JS-API 2
JS-API 3
Learn. Connect. Collaborate.
WEB COMPONENTS
ACTIVITI 7 CE & EE
Tomorrow Tinto 10:45-11:30
Tomorrow Tinto 16:00-16:30
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.
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
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}`]);
}
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`]);
}
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>
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>
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>
EXTENSIBILITY
Tomorrow Moorfoot 14:15-14:45
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
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
Learn. Connect. Collaborate.
@alfresco/adf-extensions
ADF Application
Plugins
Learn. Connect. Collaborate.
@alfresco/adf-extensions
ADF Application
Plugins
Code Example – Import extension module
import { ExtensionsModule } from '@alfresco/adf-extensions';
@NgModule({
imports: [
.....
ExtensionsModule.forRoot(),
....
]
})
export class AppModule {}
npm install --save @alfresco/adf-extensions
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
Learn. Connect. Collaborate.
@alfresco/adf-extensions
ADF Application
Plugins
Code Example – Plugin registration
<ngx-monaco-editor id="adf-monaco-file-editor"
class="adf-monaco-file-editor"
[options]="editorOptions"
[(ngModel)]="code"
(onInit)="onInit($event)">
</ngx-monaco-editor>
Code Example – Plugin registration
@Component({
selector: 'adf-monaco-view',
templateUrl: './monaco-view.component.html',
styleUrls: ['./monaco-view.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class MonacoViewComponent implements OnInit {
constructor(private apiService: AlfrescoApiService) {}
ngOnInit() {
this.apiService.nodesApi.getFileContent(this.node.id).then(
fileContent => {
this.code = fileContent;
},
err => console.log(err)
);
}
}
@Input()
url: string;
@Input()
node: Node;
Code Example – Plugin registration
import …
@NgModule({
imports: [
CoreModule.forChild(),
MonacoEditorModule.forRoot()
],
declarations: MonacoViewComponent,
exports: MonacoViewComponent,
entryComponents: MonacoViewComponent
})
export class AdfMonacoModule {
constructor(extensions: ExtensionService) {
extensions.setComponents({
'monaco-extension.main.component': MonacoViewComponent
});
}
}
Code Example – Define Plugin JSON
• your-app/src/assets/plugins/monaco-extension.json
{
"$version": "1.0.0",
"$name": "monaco extension",
"$description": "monaco plugin",
"features": {
"viewer": {
"content": [
{
"id": "dev.tools.viewer",
"fileExtension": "js",
"component": "monaco-extension.main.component"
}
]
}
}
}
Define your Plugin
Build Plugin
Distribute It (if you want it)
Build
Copy the plugin JSON in the distribution or use the angular cli assets copy:
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
SSO
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.
SSO Configuration
app.config.json
"authType" : "OAUTH",
"oauth2": {
"host": ”http://AUTH_SERVER/auth/realms/alfresco",
"clientId": "alfresco",
"scope": "openid",
"secret": "",
"implicitFlow": true,
"silentLogin": true,
"redirectSilentIframeUri": http://APP_SERVER/assets/silent-refresh.html",
"redirectUri": "/",
"redirectUriLogout": "/logout"
},
app.config.json
"authType" : "OAUTH",
"oauth2": {
"host": ”http://AUTH_SERVER/auth/realms/alfresco",
"clientId": "alfresco",
"scope": "openid",
"secret": "",
"implicitFlow": true,
"silentLogin": false,
"redirectSilentIframeUri": http://APP_SERVER/assets/silent-refresh.html",
"redirectUri": "/",
"redirectUriLogout": "/logout"
},
"implicitFlow": true,
"silentLogin": false,
OAuth 2.0 Implicit Grant Flow with Silent login
Learn. Connect. Collaborate.
ADF
Application
1
2
3
SIGN IN SSO Button
User redirect to Identity Service Log In
User Logged In
OAuth 2.0 Implicit Grant Flow with Silent login
OAuth 2.0 Implicit Grant Flow with Silent login
app.config.json
"authType" : "OAUTH",
"oauth2": {
"host": ”http://AUTH_SERVER/auth/realms/alfresco",
"clientId": "alfresco",
"scope": "openid",
"secret": "",
"implicitFlow": true,
"silentLogin": true,
"redirectSilentIframeUri": http://APP_SERVER/assets/silent-refresh.html",
"redirectUri": "/",
"redirectUriLogout": "/logout"
},
"implicitFlow": true,
"silentLogin": true,
Learn. Connect. Collaborate.
ADF
Application
OAuth 2.0 Implicit Grant Flow with Silent login
1
2
User redirect to Identity Service Log In
User Logged In
OAuth 2.0 Password Grant
app.config.json
"authType" : "OAUTH",
"oauth2": {
"host": ”http://AUTH_SERVER/auth/realms/alfresco",
"clientId": "alfresco",
"scope": "openid",
"secret": "",
"implicitFlow": true,
"redirectSilentIframeUri": http://APP_SERVER/assets/silent-refresh.html",
"redirectUri": "/",
"redirectUriLogout": "/logout"
},
"implicitFlow": false,
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
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>
CONTENT AND SEARCH
Search
Metadata
Tree view
Learn. Connect. Collaborate.
Tree view listSearch Filters
<adf-search-filter #searchFilter>
</adf-search-filter>
1. Categories and widgets
2. Chip List Component
3. Facet Fields
Learn. Connect. Collaborate.
Search Filters
The Search Filter supports a number of widgets out of the box, each implemented by an ADF component:
Learn. Connect. Collaborate.
Categories and widgets
"categories": [
{
"id": "queryName",
"name": "Name",
"enabled": true,
"expanded": true,
"component": {
"selector": "text",
"settings": {
"pattern": "cm:name:'(.*?)'",
"field": "cm:name",
"placeholder": "Enter the name” }}},
{
"id": "checkList",
"name": "Check List",
"enabled": true,
"component": {
"selector": "check-list",
"settings": {
"pageSize": 5,
"operator": "OR",
"options": [
{ "name": "Folder", "value": "TYPE:'cm:folder'" },
{ "name": "Document", "value": "TYPE:'cm:content'" }
] }}},
<adf-search-filter #searchFilter>
</adf-search-filter>
Learn. Connect. Collaborate.
Learn. Connect. Collaborate.
FacetField
"search": {
"facetFields": {
"expanded": true,
"fields": [
{ "field": "content.mimetype", "mincount": 1, "label": "SEARCH.FACET_FIELDS.TYPE" },
{ "field": "content.size", "mincount": 1, "label": "SEARCH.FACET_FIELDS.SIZE" },
{ "field": "creator", "mincount": 1, "label": "SEARCH.FACET_FIELDS.CREATOR" },
{ "field": "modifier", "mincount": 1, "label": "SEARCH.FACET_FIELDS.MODIFIER" },
{ "field": "created", "mincount": 1, "label": "SEARCH.FACET_FIELDS.CREATED" }
]
},
}
<adf-search-filter #searchFilter>
</adf-search-filter>
Learn. Connect. Collaborate.
Learn. Connect. Collaborate.
Search chip list
<adf-search-filter #searchFilter></adf-search-filter>
<adf-search-chip-list [searchFilter]="searchFilter"></adf-search-chip-list>
Learn. Connect. Collaborate.
Learn. Connect. Collaborate.
<adf-tree-view-list
[nodeId]="'-my-'"
(nodeClicked)="onClick($event)
"
(error)="onError($event)">
</adf-tree-view-list>
Tree view listTree view list
Learn. Connect. Collaborate.
USEFUL
RESOURCES
• ADF Documentation
– https://www.alfresco.com/abn/adf/docs/
• ADF Repository
– https://github.com/Alfresco/alfresco-ng2-
components
• JS-API
– https://github.com/Alfresco/alfresco-js-api
• Gitter Channel
– https://gitter.im/Alfresco/alfresco-ng2-
components
Learn. Connect. Collaborate.
CONTACT ME
https://twitter.com/RomanoEugenio
https://github.com/eromano
eugenio.romano@alfresco.com

More Related Content

What's hot

AWS 6월 웨비나 | Amazon VPC Deep Dive (김상필 솔루션즈아키텍트)
AWS 6월 웨비나 | Amazon VPC Deep Dive (김상필 솔루션즈아키텍트)AWS 6월 웨비나 | Amazon VPC Deep Dive (김상필 솔루션즈아키텍트)
AWS 6월 웨비나 | Amazon VPC Deep Dive (김상필 솔루션즈아키텍트)Amazon Web Services Korea
 
Introducing Amazon Simple Workflow (Amazon SWF)
Introducing Amazon Simple Workflow (Amazon SWF)Introducing Amazon Simple Workflow (Amazon SWF)
Introducing Amazon Simple Workflow (Amazon SWF)Amazon Web Services
 
PostgreSQL on AWS: Tips & Tricks (and horror stories)
PostgreSQL on AWS: Tips & Tricks (and horror stories)PostgreSQL on AWS: Tips & Tricks (and horror stories)
PostgreSQL on AWS: Tips & Tricks (and horror stories)Alexander Kukushkin
 
MaxScale이해와활용-2023.11
MaxScale이해와활용-2023.11MaxScale이해와활용-2023.11
MaxScale이해와활용-2023.11NeoClova
 
Oracle Exadata Cloud Services guide from practical experience - OOW19
Oracle Exadata Cloud Services guide from practical experience - OOW19Oracle Exadata Cloud Services guide from practical experience - OOW19
Oracle Exadata Cloud Services guide from practical experience - OOW19Nelson Calero
 
Tomcat 마이그레이션 도전하기 (Jins Choi)
Tomcat 마이그레이션 도전하기 (Jins Choi)Tomcat 마이그레이션 도전하기 (Jins Choi)
Tomcat 마이그레이션 도전하기 (Jins Choi)삵 (sarc.io)
 
Networking Many VPCs: Transit and Shared Architectures - NET404 - re:Invent 2017
Networking Many VPCs: Transit and Shared Architectures - NET404 - re:Invent 2017Networking Many VPCs: Transit and Shared Architectures - NET404 - re:Invent 2017
Networking Many VPCs: Transit and Shared Architectures - NET404 - re:Invent 2017Amazon Web Services
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container DayAmazon Web Services Korea
 
[WhaTap DevOps Day] 세션 5 : 금융 Public 클라우드/ Devops 구축 여정
[WhaTap DevOps Day] 세션 5 : 금융 Public 클라우드/ Devops 구축 여정[WhaTap DevOps Day] 세션 5 : 금융 Public 클라우드/ Devops 구축 여정
[WhaTap DevOps Day] 세션 5 : 금융 Public 클라우드/ Devops 구축 여정WhaTap Labs
 
AWS、Azure、GCPをVeeam最新版で更に活用!オンプレとの統合管理で柔軟なバックアップ・リストアを実現
AWS、Azure、GCPをVeeam最新版で更に活用!オンプレとの統合管理で柔軟なバックアップ・リストアを実現AWS、Azure、GCPをVeeam最新版で更に活用!オンプレとの統合管理で柔軟なバックアップ・リストアを実現
AWS、Azure、GCPをVeeam最新版で更に活用!オンプレとの統合管理で柔軟なバックアップ・リストアを実現株式会社クライム
 
20200617 AWS Black Belt Online Seminar Amazon Athena
20200617 AWS Black Belt Online Seminar Amazon Athena20200617 AWS Black Belt Online Seminar Amazon Athena
20200617 AWS Black Belt Online Seminar Amazon AthenaAmazon Web Services Japan
 
(DVO401) Deep Dive into Blue/Green Deployments on AWS
(DVO401) Deep Dive into Blue/Green Deployments on AWS(DVO401) Deep Dive into Blue/Green Deployments on AWS
(DVO401) Deep Dive into Blue/Green Deployments on AWSAmazon Web Services
 
The Fundamentals of Networking in AWS: VPC and Connectivity Options - Business
The Fundamentals of Networking in AWS: VPC and Connectivity Options - BusinessThe Fundamentals of Networking in AWS: VPC and Connectivity Options - Business
The Fundamentals of Networking in AWS: VPC and Connectivity Options - BusinessAmazon Web Services
 
[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용NAVER D2
 
20180220 AWS Black Belt Online Seminar - Amazon Container Services
20180220 AWS Black Belt Online Seminar - Amazon Container Services20180220 AWS Black Belt Online Seminar - Amazon Container Services
20180220 AWS Black Belt Online Seminar - Amazon Container ServicesAmazon Web Services Japan
 
IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트, AWS :: AWS Summit S...
IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트, AWS :: AWS Summit S...IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트, AWS :: AWS Summit S...
IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트, AWS :: AWS Summit S...Amazon Web Services Korea
 
Oracle Fleet Patching and Provisioning Deep Dive Webcast Slides
Oracle Fleet Patching and Provisioning Deep Dive Webcast SlidesOracle Fleet Patching and Provisioning Deep Dive Webcast Slides
Oracle Fleet Patching and Provisioning Deep Dive Webcast SlidesLudovico Caldara
 
Storage comparison: Dell PowerMax 8500 vs. Pure Storage FlashArray//XL170
Storage comparison: Dell PowerMax 8500 vs. Pure Storage FlashArray//XL170Storage comparison: Dell PowerMax 8500 vs. Pure Storage FlashArray//XL170
Storage comparison: Dell PowerMax 8500 vs. Pure Storage FlashArray//XL170Principled Technologies
 

What's hot (20)

AWS 6월 웨비나 | Amazon VPC Deep Dive (김상필 솔루션즈아키텍트)
AWS 6월 웨비나 | Amazon VPC Deep Dive (김상필 솔루션즈아키텍트)AWS 6월 웨비나 | Amazon VPC Deep Dive (김상필 솔루션즈아키텍트)
AWS 6월 웨비나 | Amazon VPC Deep Dive (김상필 솔루션즈아키텍트)
 
Introducing Amazon Simple Workflow (Amazon SWF)
Introducing Amazon Simple Workflow (Amazon SWF)Introducing Amazon Simple Workflow (Amazon SWF)
Introducing Amazon Simple Workflow (Amazon SWF)
 
PostgreSQL on AWS: Tips & Tricks (and horror stories)
PostgreSQL on AWS: Tips & Tricks (and horror stories)PostgreSQL on AWS: Tips & Tricks (and horror stories)
PostgreSQL on AWS: Tips & Tricks (and horror stories)
 
MaxScale이해와활용-2023.11
MaxScale이해와활용-2023.11MaxScale이해와활용-2023.11
MaxScale이해와활용-2023.11
 
Oracle Exadata Cloud Services guide from practical experience - OOW19
Oracle Exadata Cloud Services guide from practical experience - OOW19Oracle Exadata Cloud Services guide from practical experience - OOW19
Oracle Exadata Cloud Services guide from practical experience - OOW19
 
Tomcat 마이그레이션 도전하기 (Jins Choi)
Tomcat 마이그레이션 도전하기 (Jins Choi)Tomcat 마이그레이션 도전하기 (Jins Choi)
Tomcat 마이그레이션 도전하기 (Jins Choi)
 
Networking Many VPCs: Transit and Shared Architectures - NET404 - re:Invent 2017
Networking Many VPCs: Transit and Shared Architectures - NET404 - re:Invent 2017Networking Many VPCs: Transit and Shared Architectures - NET404 - re:Invent 2017
Networking Many VPCs: Transit and Shared Architectures - NET404 - re:Invent 2017
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
 
[WhaTap DevOps Day] 세션 5 : 금융 Public 클라우드/ Devops 구축 여정
[WhaTap DevOps Day] 세션 5 : 금융 Public 클라우드/ Devops 구축 여정[WhaTap DevOps Day] 세션 5 : 금융 Public 클라우드/ Devops 구축 여정
[WhaTap DevOps Day] 세션 5 : 금융 Public 클라우드/ Devops 구축 여정
 
AWS、Azure、GCPをVeeam最新版で更に活用!オンプレとの統合管理で柔軟なバックアップ・リストアを実現
AWS、Azure、GCPをVeeam最新版で更に活用!オンプレとの統合管理で柔軟なバックアップ・リストアを実現AWS、Azure、GCPをVeeam最新版で更に活用!オンプレとの統合管理で柔軟なバックアップ・リストアを実現
AWS、Azure、GCPをVeeam最新版で更に活用!オンプレとの統合管理で柔軟なバックアップ・リストアを実現
 
20200617 AWS Black Belt Online Seminar Amazon Athena
20200617 AWS Black Belt Online Seminar Amazon Athena20200617 AWS Black Belt Online Seminar Amazon Athena
20200617 AWS Black Belt Online Seminar Amazon Athena
 
(DVO401) Deep Dive into Blue/Green Deployments on AWS
(DVO401) Deep Dive into Blue/Green Deployments on AWS(DVO401) Deep Dive into Blue/Green Deployments on AWS
(DVO401) Deep Dive into Blue/Green Deployments on AWS
 
Terraform
TerraformTerraform
Terraform
 
The Fundamentals of Networking in AWS: VPC and Connectivity Options - Business
The Fundamentals of Networking in AWS: VPC and Connectivity Options - BusinessThe Fundamentals of Networking in AWS: VPC and Connectivity Options - Business
The Fundamentals of Networking in AWS: VPC and Connectivity Options - Business
 
[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용
 
20180220 AWS Black Belt Online Seminar - Amazon Container Services
20180220 AWS Black Belt Online Seminar - Amazon Container Services20180220 AWS Black Belt Online Seminar - Amazon Container Services
20180220 AWS Black Belt Online Seminar - Amazon Container Services
 
IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트, AWS :: AWS Summit S...
IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트, AWS :: AWS Summit S...IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트, AWS :: AWS Summit S...
IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트, AWS :: AWS Summit S...
 
Oracle Fleet Patching and Provisioning Deep Dive Webcast Slides
Oracle Fleet Patching and Provisioning Deep Dive Webcast SlidesOracle Fleet Patching and Provisioning Deep Dive Webcast Slides
Oracle Fleet Patching and Provisioning Deep Dive Webcast Slides
 
Storage comparison: Dell PowerMax 8500 vs. Pure Storage FlashArray//XL170
Storage comparison: Dell PowerMax 8500 vs. Pure Storage FlashArray//XL170Storage comparison: Dell PowerMax 8500 vs. Pure Storage FlashArray//XL170
Storage comparison: Dell PowerMax 8500 vs. Pure Storage FlashArray//XL170
 
Amazon VPCトレーニング-VPCの説明
Amazon VPCトレーニング-VPCの説明Amazon VPCトレーニング-VPCの説明
Amazon VPCトレーニング-VPCの説明
 

Similar to Let's play with adf 3.0

Creating a modern web application using Symfony API Platform, ReactJS and Red...
Creating a modern web application using Symfony API Platform, ReactJS and Red...Creating a modern web application using Symfony API Platform, ReactJS and Red...
Creating a modern web application using Symfony API Platform, ReactJS and Red...Jesus Manuel Olivas
 
The Web on OSGi: Here's How
The Web on OSGi: Here's HowThe Web on OSGi: Here's How
The Web on OSGi: Here's Howmrdon
 
A Blueprint for Scala Microservices
A Blueprint for Scala MicroservicesA Blueprint for Scala Microservices
A Blueprint for Scala MicroservicesFederico Feroldi
 
Apache Aries Blog Sample
Apache Aries Blog SampleApache Aries Blog Sample
Apache Aries Blog SampleSkills Matter
 
Maxim Salnikov - Service Worker: taking the best from the past experience for...
Maxim Salnikov - Service Worker: taking the best from the past experience for...Maxim Salnikov - Service Worker: taking the best from the past experience for...
Maxim Salnikov - Service Worker: taking the best from the past experience for...Codemotion
 
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesIBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesChris Bailey
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidenceJohn Congdon
 
Federico Feroldi - Scala microservices
Federico Feroldi - Scala microservicesFederico Feroldi - Scala microservices
Federico Feroldi - Scala microservicesScala Italy
 
Alfresco javascript api - Alfresco Devcon 2018
Alfresco javascript api - Alfresco Devcon 2018Alfresco javascript api - Alfresco Devcon 2018
Alfresco javascript api - Alfresco Devcon 2018Mario Romano
 
Alfresco Development Framework Basic
Alfresco Development Framework BasicAlfresco Development Framework Basic
Alfresco Development Framework BasicMario Romano
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesLindsay Holmwood
 
Grails Plugin
Grails PluginGrails Plugin
Grails Pluginguligala
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)Igor Bronovskyy
 
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-ServicesNode Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-ServicesChris Bailey
 
JCConf 2016 - Dataflow Workshop Labs
JCConf 2016 - Dataflow Workshop LabsJCConf 2016 - Dataflow Workshop Labs
JCConf 2016 - Dataflow Workshop LabsSimon Su
 
How to Webpack your Django!
How to Webpack your Django!How to Webpack your Django!
How to Webpack your Django!David Gibbons
 

Similar to Let's play with adf 3.0 (20)

Creating a modern web application using Symfony API Platform, ReactJS and Red...
Creating a modern web application using Symfony API Platform, ReactJS and Red...Creating a modern web application using Symfony API Platform, ReactJS and Red...
Creating a modern web application using Symfony API Platform, ReactJS and Red...
 
The Web on OSGi: Here's How
The Web on OSGi: Here's HowThe Web on OSGi: Here's How
The Web on OSGi: Here's How
 
A Blueprint for Scala Microservices
A Blueprint for Scala MicroservicesA Blueprint for Scala Microservices
A Blueprint for Scala Microservices
 
Apache Aries Blog Sample
Apache Aries Blog SampleApache Aries Blog Sample
Apache Aries Blog Sample
 
Google app engine by example
Google app engine by exampleGoogle app engine by example
Google app engine by example
 
Maxim Salnikov - Service Worker: taking the best from the past experience for...
Maxim Salnikov - Service Worker: taking the best from the past experience for...Maxim Salnikov - Service Worker: taking the best from the past experience for...
Maxim Salnikov - Service Worker: taking the best from the past experience for...
 
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesIBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidence
 
Federico Feroldi - Scala microservices
Federico Feroldi - Scala microservicesFederico Feroldi - Scala microservices
Federico Feroldi - Scala microservices
 
Alfresco javascript api - Alfresco Devcon 2018
Alfresco javascript api - Alfresco Devcon 2018Alfresco javascript api - Alfresco Devcon 2018
Alfresco javascript api - Alfresco Devcon 2018
 
Alfresco Development Framework Basic
Alfresco Development Framework BasicAlfresco Development Framework Basic
Alfresco Development Framework Basic
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
Grails Plugin
Grails PluginGrails Plugin
Grails Plugin
 
Cocoon OSGi CocoonGT2007
Cocoon OSGi CocoonGT2007Cocoon OSGi CocoonGT2007
Cocoon OSGi CocoonGT2007
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
 
Nodejs.meetup
Nodejs.meetupNodejs.meetup
Nodejs.meetup
 
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-ServicesNode Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
 
Pyramid deployment
Pyramid deploymentPyramid deployment
Pyramid deployment
 
JCConf 2016 - Dataflow Workshop Labs
JCConf 2016 - Dataflow Workshop LabsJCConf 2016 - Dataflow Workshop Labs
JCConf 2016 - Dataflow Workshop Labs
 
How to Webpack your Django!
How to Webpack your Django!How to Webpack your Django!
How to Webpack your Django!
 

More from Eugenio Romano

Agile software development, principles, patterns, and practices Chapter 1
Agile software development, principles, patterns, and practices Chapter 1Agile software development, principles, patterns, and practices Chapter 1
Agile software development, principles, patterns, and practices Chapter 1Eugenio Romano
 
Play with Alfresco ADF 2.0.0 Angular
Play with Alfresco ADF 2.0.0 AngularPlay with Alfresco ADF 2.0.0 Angular
Play with Alfresco ADF 2.0.0 AngularEugenio Romano
 
Web components Introduction
Web components IntroductionWeb components Introduction
Web components IntroductionEugenio Romano
 

More from Eugenio Romano (6)

Agile software development, principles, patterns, and practices Chapter 1
Agile software development, principles, patterns, and practices Chapter 1Agile software development, principles, patterns, and practices Chapter 1
Agile software development, principles, patterns, and practices Chapter 1
 
ADF 2.4.0 And Beyond
ADF 2.4.0 And BeyondADF 2.4.0 And Beyond
ADF 2.4.0 And Beyond
 
Play with Alfresco ADF 2.0.0 Angular
Play with Alfresco ADF 2.0.0 AngularPlay with Alfresco ADF 2.0.0 Angular
Play with Alfresco ADF 2.0.0 Angular
 
ADF in action 1.2
ADF in action 1.2ADF in action 1.2
ADF in action 1.2
 
Web components Introduction
Web components IntroductionWeb components Introduction
Web components Introduction
 
Best pratice
Best praticeBest pratice
Best pratice
 

Recently uploaded

Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 

Recently uploaded (20)

Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 

Let's play with adf 3.0

  • 1. Let's Play with ADF 3.0 Eugenio Romano
  • 2. Learn. Connect. Collaborate. Eugenio Romano Architect & Team Lead at Alfresco
  • 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
  • 6. Learn. Connect. Collaborate. • Code Review • Build Size check • Code Coverage • Security Vulnerabilities
  • 7. Learn. Connect. Collaborate. • Lint checks: TS, SCSS, JS • Quality assurance – Over 700 E2E Test – Around 3500 Unit test 85% code coverage • Docker Image • Build and deploy packages on NPM
  • 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
  • 34. Code Example – Plugin registration <ngx-monaco-editor id="adf-monaco-file-editor" class="adf-monaco-file-editor" [options]="editorOptions" [(ngModel)]="code" (onInit)="onInit($event)"> </ngx-monaco-editor>
  • 35. Code Example – Plugin registration @Component({ selector: 'adf-monaco-view', templateUrl: './monaco-view.component.html', styleUrls: ['./monaco-view.component.scss'], encapsulation: ViewEncapsulation.None }) export class MonacoViewComponent implements OnInit { constructor(private apiService: AlfrescoApiService) {} ngOnInit() { this.apiService.nodesApi.getFileContent(this.node.id).then( fileContent => { this.code = fileContent; }, err => console.log(err) ); } } @Input() url: string; @Input() node: Node;
  • 36. Code Example – Plugin registration import … @NgModule({ imports: [ CoreModule.forChild(), MonacoEditorModule.forRoot() ], declarations: MonacoViewComponent, exports: MonacoViewComponent, entryComponents: MonacoViewComponent }) export class AdfMonacoModule { constructor(extensions: ExtensionService) { extensions.setComponents({ 'monaco-extension.main.component': MonacoViewComponent }); } }
  • 37. Code Example – Define Plugin JSON • your-app/src/assets/plugins/monaco-extension.json { "$version": "1.0.0", "$name": "monaco extension", "$description": "monaco plugin", "features": { "viewer": { "content": [ { "id": "dev.tools.viewer", "fileExtension": "js", "component": "monaco-extension.main.component" } ] } } } Define your Plugin
  • 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
  • 40.
  • 41. SSO
  • 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.
  • 43. SSO Configuration app.config.json "authType" : "OAUTH", "oauth2": { "host": ”http://AUTH_SERVER/auth/realms/alfresco", "clientId": "alfresco", "scope": "openid", "secret": "", "implicitFlow": true, "silentLogin": true, "redirectSilentIframeUri": http://APP_SERVER/assets/silent-refresh.html", "redirectUri": "/", "redirectUriLogout": "/logout" },
  • 44. app.config.json "authType" : "OAUTH", "oauth2": { "host": ”http://AUTH_SERVER/auth/realms/alfresco", "clientId": "alfresco", "scope": "openid", "secret": "", "implicitFlow": true, "silentLogin": false, "redirectSilentIframeUri": http://APP_SERVER/assets/silent-refresh.html", "redirectUri": "/", "redirectUriLogout": "/logout" }, "implicitFlow": true, "silentLogin": false, OAuth 2.0 Implicit Grant Flow with Silent login
  • 45. Learn. Connect. Collaborate. ADF Application 1 2 3 SIGN IN SSO Button User redirect to Identity Service Log In User Logged In OAuth 2.0 Implicit Grant Flow with Silent login
  • 46. OAuth 2.0 Implicit Grant Flow with Silent login app.config.json "authType" : "OAUTH", "oauth2": { "host": ”http://AUTH_SERVER/auth/realms/alfresco", "clientId": "alfresco", "scope": "openid", "secret": "", "implicitFlow": true, "silentLogin": true, "redirectSilentIframeUri": http://APP_SERVER/assets/silent-refresh.html", "redirectUri": "/", "redirectUriLogout": "/logout" }, "implicitFlow": true, "silentLogin": true,
  • 47. Learn. Connect. Collaborate. ADF Application OAuth 2.0 Implicit Grant Flow with Silent login 1 2 User redirect to Identity Service Log In User Logged In
  • 48. OAuth 2.0 Password Grant app.config.json "authType" : "OAUTH", "oauth2": { "host": ”http://AUTH_SERVER/auth/realms/alfresco", "clientId": "alfresco", "scope": "openid", "secret": "", "implicitFlow": true, "redirectSilentIframeUri": http://APP_SERVER/assets/silent-refresh.html", "redirectUri": "/", "redirectUriLogout": "/logout" }, "implicitFlow": false,
  • 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>
  • 53. Learn. Connect. Collaborate. Tree view listSearch Filters <adf-search-filter #searchFilter> </adf-search-filter> 1. Categories and widgets 2. Chip List Component 3. Facet Fields
  • 54. Learn. Connect. Collaborate. Search Filters The Search Filter supports a number of widgets out of the box, each implemented by an ADF component:
  • 55. Learn. Connect. Collaborate. Categories and widgets "categories": [ { "id": "queryName", "name": "Name", "enabled": true, "expanded": true, "component": { "selector": "text", "settings": { "pattern": "cm:name:'(.*?)'", "field": "cm:name", "placeholder": "Enter the name” }}}, { "id": "checkList", "name": "Check List", "enabled": true, "component": { "selector": "check-list", "settings": { "pageSize": 5, "operator": "OR", "options": [ { "name": "Folder", "value": "TYPE:'cm:folder'" }, { "name": "Document", "value": "TYPE:'cm:content'" } ] }}}, <adf-search-filter #searchFilter> </adf-search-filter>
  • 57. Learn. Connect. Collaborate. FacetField "search": { "facetFields": { "expanded": true, "fields": [ { "field": "content.mimetype", "mincount": 1, "label": "SEARCH.FACET_FIELDS.TYPE" }, { "field": "content.size", "mincount": 1, "label": "SEARCH.FACET_FIELDS.SIZE" }, { "field": "creator", "mincount": 1, "label": "SEARCH.FACET_FIELDS.CREATOR" }, { "field": "modifier", "mincount": 1, "label": "SEARCH.FACET_FIELDS.MODIFIER" }, { "field": "created", "mincount": 1, "label": "SEARCH.FACET_FIELDS.CREATED" } ] }, } <adf-search-filter #searchFilter> </adf-search-filter>
  • 59. Learn. Connect. Collaborate. Search chip list <adf-search-filter #searchFilter></adf-search-filter> <adf-search-chip-list [searchFilter]="searchFilter"></adf-search-chip-list>
  • 62. Learn. Connect. Collaborate. USEFUL RESOURCES • ADF Documentation – https://www.alfresco.com/abn/adf/docs/ • ADF Repository – https://github.com/Alfresco/alfresco-ng2- components • JS-API – https://github.com/Alfresco/alfresco-js-api • Gitter Channel – https://gitter.im/Alfresco/alfresco-ng2- components
  • 63. Learn. Connect. Collaborate. CONTACT ME https://twitter.com/RomanoEugenio https://github.com/eromano eugenio.romano@alfresco.com