2016-04-04 4 views
0

私は、AlfrescoのAikau面取り検索ページをカスタマイズする際にいくつかの困難を抱えています。これは、dojo/AMDについての私の知識が不足している可能性があります。結果のURLをAlfresco Alkauの面取り検索ページ

私がしたいのは、ドキュメントの詳細ページのURLをダウンロードURLで置き換えることです。

私は、検索結果には私自身のカスタムモジュールが含まれるようにウィジェット拡張:

var searchResultWidget = widgetUtils.findObject(model.jsonModel, "id", "FCTSRCH_SEARCH_RESULT"); 

if(searchResultWidget) { 
    searchResultWidget.name = "mynamespace/search/CustomAlfSearchResult"; 
} 

私は、検索結果のURLがこのようにレンダリングされ理解: AlfSearchResultモジュール=> SearchResultPropertyLinkモジュールを使用しています=>ミックスイン_SearchResultLinkMixinレンダラ=>持参"generateSearchLinkPayload"関数=>結果のタイプに応じてURLをレンダリングします

この "generateSearchLinkPayload"関数をオーバーライドしたいのですが、これを行う最良の方法がわかりません。

ありがとうございました!

答えて

3

この回答は、あなたが最新バージョンのアイカウを使用できることを前提に書かれています(これは1.0.61です)。古いバージョンでは若干異なるオーバーライドが必要な場合があります...

createDisplayNameRenderer機能を無効にする必要があります。CustomAlfSearchResultウィジェット。これにより、alfresco/search/SearchResultPropertyLinkという拡張子を作成することができます。

あなたは(ZIPとして)文書やフォルダの両方をダウンロードするためalfresco/services/DocumentServiceが提供するダウンロード機能を利用したい場合、あなたはSearchResultPropertyLinkのpublishTopicpublishPayloadの両方を変更したいとしています。

getPublishTopicgenerateSearchLinkPayloadの機能を拡張する必要があります。 getPublishTopic関数の場合、戻り値を "ALF_SMART_DOWNLOAD"(alfresco/core/topicsモジュールではこれらの文字列に使用できる定数があります)に変更します。このトピックは、DocumentServiceに、ノードがフォルダまたは文書であるかどうかを判断するように指示し、完全なノードのメタデータに対するXHR要求を行います(返されるデータに含まれていないcontentUrl属性を取得するために使用できます)。ドキュメントやフォルダの種類のペイロードは、オブジェクトがダウンロードしたいの検索結果オブジェクトである単一のアレイである属性nodesが含まれるように、検索APIによって。

あなたはgenerateSearchLinkPayload機能を拡張する必要があります。

最初にthis.inheritedに電話して、デフォルトのペイロードを取得し、ドキュメントとフォルダ用に更新することをお勧めします。

うまくいけば、それはすべて意味があります - そうでない場合は、コメントを追加して、私はさらに支援を提供しようとします!

+0

あなたの助けをありがとうDave!私はAikau 1.0.25と一緒にパッケージされているAlfresco 5.1.2.5を使用するように指定するべきでした。残念ながら、このバージョンではcreateDisplayNameRenderer関数を使用できません...古いバージョンでSearchResultPropertyLinkを拡張する別の「クリーン」な方法はありますか? –

+0

OK ...これを後でもう一度見て、オプションが何であるかを見ていきます。スマートダウンロードは確実に利用できず、AlfSearchResultはあまりにもきれいに分割されないと言うように。アイカウの後のバージョンを引き出すことは可能です(明らかに、完全な統合QAプロセスを経ていないため、ここにはリスクの小さな要素があります)。しかし、それ以降のサービスパック(5.0および5.1用)は、通常、いずれにしても最新バージョンのアイカウを使用します。 –

2

これは、1.0.25.2のための答えである - 残念ながらそれはそれほど簡単ではないのです...

あなたはまだしかし、あなたがpostCreate機能を拡張する必要があり、この時間は(this.inherited(arguments)を呼び出すために覚えて、alfresco/search/AlfSearchResultウィジェットを拡張する必要があります)。元のalfresco/search/SearchResultPropertyLinkウィジェットが作成されないようにすることはできません。そのため、ウィジェットを見つけて破棄する必要があります。

ウィジェットは変数に割り当てられていないので、dijit/registryを使用してウィジェットを見つける必要があります。 dijit/registrybyNode関数を使用してthis.nameNodeに割り当てられたウィジェットを見つけてから、それを破壊する(DOMを保持するには引数trueを必ず渡してください)。ただし、DOMノードを空にして、再度起動できるようにする必要があります。

alfresco/search/SearchResultPropertyLinkに拡張子を追加する必要があります。残念ながら、スマートなダウンロード機能が利用できないため、より多くの作業を行う必要があります。ここでの違いは、contentURLを取得するために、完全なノードのメタデータを取得するためのXHR要求を行う必要があることです。 DocumentServiceにリクエストを公開することができます(「ALF_RETRIEVE_SINGLE_DOCUMENT_REQUEST」トピックを使用)。ただし、XHRの手順を実行すると、そのままダウンロードを続行することはできません。代わりに、iframeのダウンロードソリューションを使用する必要があります。この問題を解決するために最近作成したpull requestの変更を見て、自分のソリューションにバックポートすることをお勧めします。

+0

答えは部分的にしか正しくないことを認識しました。カスタムのSearchResultPropertyLinkの実装方法を編集しました。これは以前は元の回答には欠けていました。 –

関連する問題