Erweiterung der Dokumentenansicht um einen Twister

cancel
Showing results for 
Search instead for 
Did you mean: 
stuhlgang
Member II

Erweiterung der Dokumentenansicht um einen Twister

Hallo, ich grüße euch,

mein Ziel ist es, die bestehende Standard-Alfresco-Dokumentenansicht in Alfresco Share um einen weiteren Bereich zu erweitern, wo Dokumentaktionen, Metadaten, Versionhistorie etc. enthalten sind.


Folgende Schritte habe ich gemacht:

1. Neue Region definiert in alfresco/site-data/template-instances/document-details.xml wie folgt:

<!– Document Rating –>
<component>
<region-id>document-rating</region-id>
<url>/components/document-details/document-rating</url>
<properties>
<nodeRef>{nodeRef}</nodeRef>
</properties>
</component>



2. Den Freemarker template angepasst für die Dokumentenansicht alfresco/web-extension/templates/org/alfresco/document-details.ftl wie folgt:


<div class="yui-u">
<@region id="document-actions" scope="template"/>
<@region id="document-rating" scope="template"/>
<@region id="document-tags" scope="template"/>
<@region id="document-links" scope="template"/>
<@region id="document-metadata" scope="template"/>
<@region id="document-sync" scope="template"/>
<@region id="document-permissions" scope="template"/>
<@region id="document-workflows" scope="template"/>
<@region id="document-versions" scope="template"/>
<@region id="document-publishing" scope="template"/>
<#if imapServerEnabled>
<@region id="document-attachments" scope="template"/>
</#if>
</div>




3. Einen Webscript erstellt, die die URL in der Region mappt:
a) Freemarker


<#if document??>
<!– Parameters and libs –>
<#include "/org/alfresco/include/alfresco-macros.lib.ftl" />
<#assign el=args.htmlid?js_string/>

<!– Markup –>
<div class="document-rating-header document-details-panel">
<h2 id="${el}-heading" class="thin dark">
${msg("heading")}
</h2>
<div id="${el}-formContainer"></div>
<script type="text/javascript">//<![CDATA[
Alfresco.util.createTwister("${el}-heading", "DocumentRating");

new Alfresco.DocumentRating("${el}").setOptions(
{
nodeRef: "${nodeRef?js_string}",
site: <#if site??>"${site?js_string}"<#else>null</#if>,
formId: <#if formId??>"${formId?js_string}"<#else>null</#if>
}).setMessages(
${messages}
);
//]]></script>
</div>
</#if>



b) controller:


<import resource="classpath:/alfresco/templates/org/alfresco/import/alfresco-util.js">

function main()
{
AlfrescoUtil.param('nodeRef');
AlfrescoUtil.param('site', null);
AlfrescoUtil.param('formId', "doc-details-rating");
var documentDetails = AlfrescoUtil.getNodeDetails(model.nodeRef, model.site);
if (documentDetails)
{
model.document = documentDetails;
}
}

main();



c) descriptor:


<webscript>
<shortname>document-rating</shortname>
<description>Document Rating Component</description>
<url>/components/document-details/document-rating</url>
</webscript>


d) header:


<#include "/org/alfresco/components/form/form.get.head.ftl">
<!– Document Rating Header –>
<@script type="text/javascript" src="${page.url.context}/res/components/document-details/document-rating.js"></@script>

<@link rel="stylesheet" type="text/css" href="${page.url.context}/res/components/rating/document-rating.css" />
<@script type="text/javascript" src="${page.url.context}/res/components/rating/document-fiveStarsRating.js"></@script>
<@script type="text/javascript" src="${page.url.context}/res/components/rating/document-compactRating.js"></@script>


Dazu existieren noch eine Properties-Datei und die client-seitige Komponente, die an der Stelle zunächst unwichtig sind.

Dabei stoße ich auf ein Problem, welches für mich zunächst nicht erklärbar ist: bei Einbindung einer neuen Region in document-details.ftl bleibt die Dokumentenansicht hängen.

Mittlerweile habe ich herausbekommen, dass sich die neue Region document-rating mit der Region document-metadata beißt. Wenn ich document-metadata herausnehme, alle anderen belasse und meins integriere, wird mein neuer Bereich korrekt dargestellt. Sobald die document-metadata dazu eingbunden wird, wird die Dokumentenansicht nicht geladen. Sowohl IE als auch Firefox zeigen einen Fehler, dass nicht genug Stackspeicher da ist und ein Skript ausgeführt wird, welches nicht zu Ende läuft. Es sieht also nach stack overflow aus. Ist mir aber Rätsel warum.

Ich sehe keine Gemeinsamkeiten zwischen den beiden Regionen, die sich in Quere kommen können und ich weiß nicht mehr und der Fehler ist nicht mehr erklärbar für mich. Habe keine Ideen mehr. Habe ich da etwas nicht berücksichtigt oder falsch gemacht?

Hat vielleicht einer von euch eine Idee? Diese sind immer herzlich willkommen bei mir Smiley Happy

Bei Fragen gerne an mich.

Danke
1 Reply
stuhlgang
Member II

Re: Erweiterung der Dokumentenansicht um einen Twister

Ich habe die Ursache gefunden. Das Import-Statement in der header-Datei motiviert den Browser zum Aufhängen:

<#include "/org/alfresco/components/form/form.get.head.ftl">


In allen Webskripten unter share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/document-details, die zur Einbettung in die Dokumentensicht genutzt werden, außer document-metadata.get.head.ftl, importieren

<#include "../component.head.inc">


Wenn ich meinen Import-Statement mit dem anderen ersetze, wird mein Twister korrekt geladen.

Die Ursache scheint also darin zu liegen, dass form.get.head.ftl zwei Mal bzw. mehrmals in unterschiedlichen Skripten eingebettet wird, obwohl es für mich immer noch ein Rätsel ist, warum. Zumal Header-Dateien lediglich Referenzen zu anderen Skripten und Stylesheets beinhalten.