AnsweredAssumed Answered

Erweiterung der Dokumentenansicht um einen Twister

Question asked by stuhlgang on Jun 25, 2013
Latest reply on Jun 27, 2013 by stuhlgang
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 :)

Bei Fragen gerne an mich.

Danke

Outcomes