🇬🇧 English version available here
Ce projet permet d'intégrer des composants Qlik Cloud dans Salesforce Experience Cloud en utilisant des composants Lightning Web Components (LWC) et des pages Visualforce.
Ce projet résout les défis d'intégration entre Qlik Cloud et Salesforce, notamment :
- Les conflits Content Security Policy (CSP)
- Les erreurs WebAuthn
- L'intégration sécurisée des composants Qlik
- La gestion de l'authentification OAuth2
qlikEmbedLWC - Composant Lightning Web Component réutilisableqlikEmbedEnigmaLWC - Composant LWC avec Enigma.js pour intégration Qlik Cloud avancéeqlikEmbedPage- Page Visualforce de test avec intégration QlikoauthCallback- Page de callback OAuth pour l'authentificationqlikEmbedPageAuth- Page d'authentification QlikQlikAuthServiceApex - Service Apex pour authentification SSO Auth0QlikConfigServiceApex - Service Apex pour gérer les variables d'environnement via Custom Metadata TypesQlikConfig__mdt- Custom Metadata Type pour stocker la configuration Qlik
force-app/main/default/
├── lwc/
│ ├── qlikEmbed/
│ │ ├── qlikEmbed.js # Logique du composant
│ │ ├── qlikEmbed.html # Template HTML
│ │ ├── qlikEmbed.css # Styles CSS
│ │ └── qlikEmbed.js-meta.xml # Métadonnées LWC
│ └── qlikEmbedEnigma/
│ ├── qlikEmbedEnigma.js # Logique Enigma.js
│ ├── qlikEmbedEnigma.html # Template HTML
│ ├── qlikEmbedEnigma.css # Styles CSS
│ └── qlikEmbedEnigma.js-meta.xml # Métadonnées LWC
├── classes/
│ ├── QlikAuthService.cls # Service Apex pour SSO Auth0
│ └── QlikAuthService.cls-meta.xml
├── pages/
│ ├── qlikEmbedPage.page # Page principale de test
│ ├── qlikEmbedPage.page-meta.xml
│ ├── oauthCallback.page # Page de callback OAuth
│ ├── oauthCallback.page-meta.xml
│ ├── qlikEmbedPageAuth.page # Page d'authentification
│ └── qlikEmbedPageAuth.page-meta.xml
└── flexipages/
└── qlikEmbedTest.flexipage-meta.xml # Page Lightning de test
- Salesforce CLI (sf) installé
- Accès à un org Salesforce Experience Cloud
- Compte Qlik Cloud avec Web Integration ID
-
Cloner le projet
git clone <repository-url> cd "Salesforce - Experience cloud"
-
Authentification Salesforce
sf org login web --set-default-dev-hub
-
Déployer les classes Apex
sf project deploy start --source-dir force-app/main/default/classes --target-org <your-org-alias>
-
Déployer les composants LWC
sf project deploy start --source-dir force-app/main/default/lwc --target-org <your-org-alias>
-
Déployer les pages Visualforce
sf project deploy start --source-dir force-app/main/default/pages --target-org <your-org-alias>
-
Déployer les pages Lightning
sf project deploy start --source-dir force-app/main/default/flexipages --target-org <your-org-alias>
sfdx force:org:open -u qlik-auth0-dev-ed sfdx auth:web:login -r https://qlik-auth0-dev-ed.my.salesforce.com/ -a qlik-auth0-dev-ed
Chaque composant nécessite la configuration suivante :
// Configuration dans les pages Visualforce
<script
type="text/javascript"
src="https://cdn.jsdelivr.net/npm/@qlik/embed-web-components@1/dist/index.min.js"
data-host="https://your-instance.qlikcloud.com"
data-web-integration-id="YOUR_WEB_INTEGRATION_ID"
data-cross-site-cookies="true">
</script>Les variables d'environnement sont gérées via Custom Metadata Types (QlikConfig__mdt). Voir CONFIGURATION.md pour plus de détails.
Variables disponibles :
Host__c- URL de votre instance Qlik CloudWebIntegrationId__c- ID d'intégration web QlikClientId__c- CLIENT_ID Auth0 pour OAuth2RedirectUri__c- URI de redirection OAuth2DefaultAppId__c- ID de l'application Qlik par défaut
Avantages :
- ✅ Configuration centralisée
- ✅ Pas de valeurs codées en dur
- ✅ Gestion multi-environnements (dev, staging, prod)
- ✅ Modifiable sans déploiement de code
<!-- Dans une page Lightning -->
<c:qlikEmbed
app-id="your-app-id"
object-id="your-object-id"
ui="analytics/chart">
</c:qlikEmbed>Composant avancé utilisant Enigma.js pour intégration Qlik Cloud avec support SSO Auth0 :
<!-- Dans Experience Builder -->
<c:qlikEmbedEnigma
tenant="<tenant>.eu.qlikcloud.com"
app-id="your-app-id"
object-ids="htaMkv,YGN"
auth-type="oauth2"
client-id="your-auth0-client-id">
</c:qlikEmbedEnigma>Propriétés principales :
authType:'webIntegration'(défaut) ou'oauth2'pour SSO Auth0objectIds: Liste d'IDs d'objets Qlik séparés par des virgulesshowStatus: Afficher les messages de statut (défaut:false)
Fonctionnalités :
- Authentification transparente via Web Integration ID
- Support SSO Auth0 via classe Apex
QlikAuthService - Affichage dynamique de KPIs, tableaux et listes
- Gestion automatique des erreurs et redirections
<!-- Composant Qlik direct -->
<qlik-embed
ui="analytics/chart"
app-id="your-app-id"
object-id="your-object-id">
</qlik-embed>L'URL de callback doit être configurée dans Qlik Cloud :
https://your-org.my.salesforce.com/apex/oauthCallback
Service Apex pour authentification SSO Auth0 avec Qlik Cloud :
// Méthode principale
String token = QlikAuthService.getQlikAccessToken(tenant, clientId, redirectUri);Fonctionnalités :
- Récupération de l'identité utilisateur Salesforce (Email, Username, FederationIdentifier)
- Échange d'identité Salesforce contre token Qlik Cloud via Auth0
- Support Named Credential pour configuration Auth0
Configuration requise :
- Auth0 configuré pour accepter les identités Salesforce
- Qlik Cloud configuré pour accepter les tokens Auth0
- (Optionnel) Named Credential "Auth0" configuré dans Salesforce
Problème : Blocage des scripts externes ou inline
Solution : Utilisation des pages Visualforce avec configuration des attributs data-*
Problème : Conflits avec l'API WebAuthn du navigateur
Solution : Désactivation temporaire de navigator.credentials pendant le chargement
Problème : No MODULE named markup://qlik:embed found
Solution : Création dynamique des éléments <qlik-embed> via JavaScript
- Page principale :
/apex/qlikEmbedPage - Page d'authentification :
/apex/qlikEmbedPageAuth - Page multi-composants :
/apex/qlikEmbedPageMulti - Callback OAuth :
/apex/oauthCallback - Page Lightning : Utiliser Lightning App Builder
- Console du navigateur sans erreurs
- Composant Qlik visible et fonctionnel
- Authentification OAuth fonctionnelle
- Pas de violations CSP
- Utilisation de HTTPS pour toutes les communications
- Validation des paramètres OAuth
- Gestion sécurisée des tokens d'authentification
- Respect des politiques CSP de Salesforce
- OAuth2 avec Qlik Cloud
- Gestion des redirections sécurisées
- Validation des états (state) OAuth
- Gestion des erreurs d'authentification
- Salesforce CLI
- Salesforce Developer Console
- Lightning App Builder
- Qlik Cloud Console
- Fork le projet
- Créer une branche feature (
git checkout -b feature/AmazingFeature) - Commit les changements (
git commit -m 'Add some AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
- Respecter les conventions Salesforce
- Commenter le code complexe
- Tester avant de déployer
- Documenter les nouvelles fonctionnalités
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Pour toute question ou problème :
- Créer une issue sur GitHub
- Consulter la documentation Salesforce
- Contacter l'équipe de développement
- Composant LWC
qlikEmbedEnigmaavec Enigma.js - Classe Apex
QlikAuthServicepour SSO Auth0 - Support authentification OAuth2/Auth0
- Affichage dynamique de KPIs, tableaux et listes
- Gestion des iframes sandboxés Experience Cloud
- Composant LWC qlikEmbed
- Pages Visualforce de test
- Gestion OAuth callback
- Résolution des conflits WebAuthn
- Support CSP Salesforce
- Support des thèmes personnalisés
- Gestion des erreurs avancée
- Tests automatisés
- Documentation API
- Exemples d'utilisation
Note : Ce projet est maintenu par Magik Cypress Pour les mises à jour et le support, consultez régulièrement ce README.
