Présentation
Une applink permet de créer, dans le contexte d’une application existante (ex: portail services), un accès à un folder ou bien un fichier de Oracle Content & Experience Cloud (CEC). L’UI de CEC est alors embarquée sous forme d’iframe, mais l’URL d’accès ne peut pas être dérobée et utilisée en dehors de la fenêtre parent. Remarque: il existe un temps d’attente perceptible par l’utilisateur de l’ordre de 7 à 8 sec lors de la création d’un applink.
Un applink sera utile pour générer le visualisateur/Downloader de fichier à partir de l’interface existante d’une application.
Mise en oeuvre:
Le code ci-dessous permet de valider le bon fonctionnement. Pour des raisons de confidentialité, on utilise un token (Bearer) obtenu avec OAuth. Dans le cadre d’une échange de serveur à serveur, il faudra utiliser une Basic authentication à la place, car il ne peut pas y avoir d’interaction avec l’utilisateur, et donc pas de demande d’authentification.
(Le Client Credential Flow ne semble pas etre proposé dans CEC.)
Les appels REST se feront à partir d’un compte technique.
Pour faire fonctionner ce script, s’authentifier sur CEC avec un compte technique, puis lancer l’URL :
https://<tenant>/documents/web?IdcService=GET_OAUTH_TOKEN
et récupérer le token Value et le remplacer ci-dessous.
(Si c’est une Basic Authentication, mettre « Basic <uid:pwd en base 64> » à la place)
<html> <!-- Test Applinks for Oracle Content & Experience Cloud Patrick Monaco GPM Factory --> <head> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <script> var dAppLinkUrl; var dAppLinkAccessToken; var dAppLinkRefreshToken; var dAppLinkRoleName; function createAppLink(id, role, assignedUser){ var token=`Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXg1dCI6IlEzX0hJbUtZd0Z5RXBqcFlDejhSYWNwWHNhQSIsImtpZCI6ImZyY2F0aGV0ZXJ0cmlhbC5jZXJ0In0.eyJzdWIiOiJwbW8iLCJvcmFjbGUub2F1dGgudXNlcl9vcmlnaW5faWRfdHlwZSI6IkxEQVBfVUlEIiwib3JhY2xlLm9hdXRoLnVzZXJfb3JpZ2luX2lkIjoicG1vIiwiaXNzIjoiZnJjYXRoZXRlcnRyaWFsIiwib3JhY2xlLm9hdXRoLnN2Y19wX24iOiJmcmNhdGhldGVydHJpYWxTZXJ2aWNlUHJvZmlsZSIsImlhdCI6MTUxMTI3NjU1Nywib3JhY2xlLm9hdXRoLnBybi5pZF90eXBlIjoiTERBUF9VSUQiLCJvcmFjbGUub2F1dGgudGtfY29udGV4dCI6InJlc291cmNlX2FjY2Vzc190ayIsImV4cCI6MTUxMTg4MTM1NiwiYXVkIjpbImh0dHBzOi8vY29udGVudC1mcmNhdGhldGVydHJpYWwuZG9jdW1lbnRzLnVzMi5vcmFjbGVjbG91ZC5jb206NDQzL2RvY3VtZW50cyJdLCJvcmFjbGUub2F1dGguc3ViLmlkX3R5cGUiOiJMREFQX1VJRCIsInBybiI6InBtbyIsImp0aSI6ImE5MmUyOTU2LTY5ZjMtNDI0NS1hOWEwLTIyMzJiM2M4NzQ5NCIsIm9yYWNsZS5vYXV0aC5jbGllbnRfb3JpZ2luX2lkIjoiYjE5N2VkMjUtY2E0OC00MTZlLTlmYTAtYTk1Mjc3MTk2Nzk3Iiwib3JhY2xlLm9hdXRoLnNjb3BlIjoiaHR0cHM6Ly9jb250ZW50LWZyY2F0aGV0ZXJ0cmlhbC5kb2N1bWVudHMudXMyLm9yYWNsZWNsb3VkLmNvbTo0NDMvZG9jdW1lbnRzIiwidXNlci50ZW5hbnQubmFtZSI6ImZyY2F0aGV0ZXJ0cmlhbCIsIm9yYWNsZS5vYXV0aC5pZF9kX2lkIjoiNzg3NzE0MTYzNDcwOTQyMyJ9.AhmTxXszGWYyQDdu9DSBohyu8KY5LHwUGBdEO33EjAWvQcse23lcXWU8q97jgM4C4KUWLalokQ3KHjJvUrgDUaUp0PC0_hAarknr7MmczBdpCC5X-iByUyYU98T_Q87USCAM_e_N7-l--5S5nFUwBOI15PGC16iZjA0wDnXvu9ATyqB_Fmz8wDZP-XAwHSyy1dyy7OFcK_IYBwVFgdhcY2PTXM97XN6b_QXN4ZJ-F37U8vQMupF1kq958OgDSukRPKz4coY7sGMFUHRfwhnZQ6L-ZkLXvMgk2NAHQPweL5dbYKMiAEdpBei15Q3sFCKEJNTRqmKqEw87Acg8YaDH7Q` var payload = `{ "assignedUser": "` + assignedUser + `", "userLocale": "French", "role": "` + role +`" }`; $.ajax({ type: "POST", url: "https://<tenant>.documents.us2.oraclecloud.com/documents/api/1.2/applinks/file/" + id, data: payload, processData: false, headers: { "Authorization" : token }, cache: false, DataType: "html", success: function(response) { dAppLinkUrl = response.appLinkUrl; dAppLinkAccessToken = response.accessToken; dAppLinkRefreshToken = response.refreshToken; dAppLinkRoleName = response.role; $('#content_frame').attr("src", dAppLinkUrl); console.log(dAppLinkUrl); console.log('Role=' + dAppLinkRoleName); }, error: function (xhr, status) { alert('SB001 - Unknown error - Status: ' + status + responseText); } }); } </script> </head> <body> <script> $( document ).ready(function() { // folder -- var id = "XXXXXXX21EAA21040E6FBAA684E9015A1C98104"; var id = "XXXXXXXXXXX6913F16E4FBAA684E9015A1C98104"; var role = "downloader"; var assignedUser = "XXXXXXXXXX2C91FBAA684E9015"; //Create Folder Applink or Create File Applink service var appLink = createAppLink(id, role, assignedUser); function OnMessage (evt) { //alert('evt= ' + evt.data.message); console.log("DOCSRestFilterSample: onMessage function " + evt); if (evt.data.message === 'appLinkReady') { //alert('appLink ready'); console.log("OnMessage invoked for appLinkReady event..."); var embedPreview = "true"; var iframe= document.getElementById("content_frame"); var iframewindow= iframe.contentWindow ? iframe.contentWindow : iframe.contentDocument.defaultView; var msg = { message: 'setAppLinkTokens', appLinkRefreshToken:dAppLinkRefreshToken, appLinkAccessToken:dAppLinkAccessToken, appLinkRoleName:dAppLinkRoleName, embedPreview:embedPreview } console.log("DOCSRestFilterSample: sending message to iframe with access and refresh tokens"); iframewindow.postMessage(msg, '*'); } }; window.addEventListener && window.addEventListener('message', OnMessage, false); }); </script> <body> <iframe id="content_frame" src="" style="width: 100%; height: 620px; overflow: scroll;" > </iframe> </body> </html>