Разрешение на настраиваемое действие Alfresco

Я выполнил пользовательское действие. Я вижу действие в библиотеке документальных фильмов, но не вижу его на странице многогранных результатов поиска.

 <action id="custom-action" type="javascript"  label="actions.custom.action">
        <param name="function">onCustomActionlick</param>
     </action>

Итак, я зашел в файл aikau-1.0.8.1.jar\META-INF\js\aikau\1.0.8.1\alfresco\renderers\_ActionsMixin.js.

Я вижу, что мы делаем тест, чтобы определить, разрешено ли действие в этом файле:

if (this.filterActions === false || AlfArray.arrayContains(this.allowedActions, action.id))

В firebug я вижу, что действие моего костюма не находится в объекте allowedActions. Мой вопрос почему?

Я думаю, что действия, не имеющие разрешения, всегда разрешены всем пользователям. Я прав ?

Что я могу сделать, чтобы разрешить это действие и сделать его видимым на странице многогранных результатов поиска?

Заранее спасибо.


person soung    schedule 08.09.2015    source источник


Ответы (3)


Вам нужно написать модуль расширения, который описан здесь: https://forums.alfresco.com/comment/159331#comment-159331.

В коде JavaScript вам нужно получить идентификатор виджета MERGED_ACTIONS, добавить свое customAction в массив разрешенных действий и определить его в CustomActions.

Это код Aikau по ссылке, вероятно, он был обновлен в более новой версии Alfresco. Поэтому вам нужно расширить это в вашем модуле расширения. Вероятно, вы можете просто использовать org\alfresco\share\pages\faceted-search в качестве <sourcePackageRoot> в модуле.

widgets: [{
    id: "MERGED_ACTIONS",
    name: "alfresco/renderers/Actions",
    config: {
        filterActions: true,
        mergeActions: true,
        allowedActions: ["folder-manage-rules", "folder-download", "folder-view-details", "CUSTOM3"],
        customActions: [{
            id: "CUSTOM3",
            label: "Custom Action 3",
            icon: "document-delete",
            index: "10",
            publishTopic: "DELETE_ACTION_TOPIC",
            type: "javascript"
        }],
        widgetsForActions: [{
            name: "alfresco/renderers/actions/ManageAspects"
        }]
    }
}]
person Tahir Malik    schedule 13.09.2015
comment
Можете ли вы помочь мне добавить пользовательское действие на странице результатов поиска? - person Sanjay; 24.03.2020

Библиотека документов (по крайней мере, до Alfresco Share 5.1) создается с помощью YUI, а страница поиска — с помощью Aikau. На момент написания статьи еще не было паритета обработки действий между страницей поиска и библиотекой документов, и процесс добавления действий сильно отличается.

Чтобы ваше пользовательское действие отображалось на многогранной странице поиска, вам нужно сделать несколько вещей:

  • Расширьте страницу поиска, чтобы обновить конфигурацию для «alfresco/search/AlfSearchResult» (имеет идентификатор «FCTSRCH_SEARCH_RESULT»), чтобы добавить свои настраиваемые действия в массив «additionalDocumentAndFolderActions» (см. http://dev.alfresco.com/resource/docs/aikau-jsdoc/AlfSearchResult.html)
  • Ваше пользовательское действие опубликует тему, поэтому вам нужно создать новую службу, чтобы подписаться на эту тему, чтобы выполнить действие. Вам потребуется дополнительно расширить многогранную страницу поиска, чтобы ваша служба была включена на страницу.
person Dave Draper    schedule 07.03.2016
comment
Я пробовал stackoverflow.com/questions/60750810/, но не в состоянии увидеть пользовательское действие. - person Sanjay; 19.03.2020

Я перефразирую наш последний блог. метод, который мы использовали для этого.

Наш вариант использования заключался в том, что у нас были существующие действия в представлении библиотеки документов, которые мы не хотели воссоздавать, со стандартной конфигурацией xml.

Первым шагом является создание модуля расширения общего доступа для добавления контроллера Javascript в web-extensions/site-data/extensions/example.xml:

<extension>
  <modules>
        <module>
            <id>Example Service</id>
            <version>1.0</version>
            <auto-deploy>true</auto-deploy>
            <customizations>
                <customization>
                    <targetPackageRoot>org.alfresco.share.pages.faceted-search</targetPackageRoot>
                    <sourcePackageRoot>com.parashift.example</sourcePackageRoot>
                </customization>
            </customizations>
        </module>
    </modules>
</extension>

Это загрузит дополнительный javascript, что позволит вам настроить конфигурацию виджета.

Создайте файл в web-extension/site-webscripts/com/parashift/example/faceted-search.get.js (или любое другое имя пакета, которое вы использовали в sourcePackageRoot), добавьте файл с именем faceted-search.get.js со следующим содержимым:

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

if(searchResultPage != null) {
    searchResultPage.config = {
        enableContextMenu : false,
        mergeActions : true,
        additionalDocumentAndFolderActions : ["example-action"]
    }
}

model.jsonModel.widgets.push({
    id: "EXAMPLE_LISTENER",
    name: "parashift/action/example"
});

Это будет:

  • Добавьте example-action в список действий в результатах поиска. Это должно быть уже настроено в каком-то файле share-config.xml.
  • Добавьте новый виджет прослушивателя, который будет прослушиваться при нажатии кнопки действия.

Добавьте файл для вашего виджета слушателя: META-INF/parashift/action/example.js

define(["dojo/_base/declare",
        "dijit/_WidgetBase",
        "alfresco/core/Core"
    ],
    function(declare, _Widget, Core) {
        return declare([_Widget, Core], {

            postCreate: function () {
                this.alfSubscribe("ALF_SINGLE_DOCUMENT_ACTION_REQUEST", lang.hitch(this, this._onPayloadReceive));
            },

            _onPayloadReceive: function (payload) {

                if(payload.action.id == "example-action") {
                        this.alfLog("log", "Received action, handling accordingly");
                        ....... 
                }
            }

        });
});

Этот код будет прослушивать ALF_SINGLE_DOCUMENT_ACTION_REQUEST и выполнять функцию _onPayloadReceive. В этой функции мы фильтруем example-action и выполняем любой пользовательский код.

Переменная payload будет включать объекты document и action. Используя журнал отладки, вы можете увидеть, какова их форма.

Это примерно эквивалентно старому методу YUI:

YAHOO.Bubbling.fire("registerAction", {
    actionName: "onExampleAction",
    fn: function(file) {
      console.log("Received action, handling accordingly");
      ....
    }
});
person Cetra    schedule 28.06.2016
comment
В вашем примере отсутствует зависимость dojo/_base/lang - person plus-; 30.06.2016
comment
Можете ли вы помочь мне добавить пользовательское действие? Я пробовал код выше, но не работал. - person Sanjay; 24.03.2020