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>