Как добавить средство выбора загрузки файлов в мою форму Alfresco

Как добавить средство выбора загрузки файлов/данных в мою форму в Alfresco Share? Мне нужно нажать на мою кнопку, после чего должно появиться средство выбора файлов. Кто-нибудь может помочь?


person Dmitrii Nikeshkin    schedule 31.08.2012    source источник
comment
Где вы реализуете эту форму и как? Это часть дашлета или вы собираете пользовательский компонент страницы?   -  person Will Abson    schedule 31.08.2012
comment
Я добавил свой блок/форму в свойства документа (страница сведений о документе). Это часть дашлета или вы собираете пользовательский компонент страницы? - Думаю второе. Я создаю файлы js, ftl, xml со скриптом, интерфейсом, конфигурацией соответственно. Затем я добавляю регион в свои файлы cutom-details.ftl и custom-details.xml.   -  person Dmitrii Nikeshkin    schedule 03.09.2012


Ответы (3)


Ознакомьтесь с кодом консоли управления пользователями, определенным в users.js. , который позволяет загружать CSV-файл, содержащий сведения о пользователе.

Сначала вам нужно определить элемент управления кнопки HTML, а затем добавить некоторый скрипт на стороне клиента, чтобы привязать его к элементу управления загрузкой.

Определите кнопку в HTML-шаблоне вашего компонента

<span class="yui-button yui-push-button" id="${args.htmlid?html}-uploadusers-button">
   <span class="first-child"><button>${msg("button.uploaduser")}</button></span>
</span>

Затем создайте кнопку YUI в коде на стороне клиента (например, в вашей функции onReady())

var uploadUsersButton = Alfresco.util.createYUIButton(this, "uploadusers-button", this.onUploadUsersClick);

Затем определите обработчик нажатия кнопки как новую функцию прототипа вашего компонента - следующий пример взят из функции ConsoleUsers_onUploadUsersClick() в users.js, которую вам нужно будет изменить в соответствии с вашими потребностями.

onUploadUsersClick: function onUploadUsersClick()
{
   // Force the use of the HTML (rather than Flash) uploader because there are issues with the
   // Flash uploader in these circumstances when Sharepoint is being used. The Flash uploader
   // picks up the wrong JSESSIONID cookie which causes the upload to fail.
   if (!this.fileUpload)
   {
      this.fileUpload = Alfresco.util.ComponentManager.findFirst("Alfresco.HtmlUpload") 
   }

   // Show uploader for single file select - override the upload URL to use appropriate upload service
   var uploadConfig =
   {
      uploadURL: "api/people/upload.html",
      mode: this.fileUpload.MODE_SINGLE_UPLOAD,
      onFileUploadComplete:
      {
         fn: this.onUsersUploadComplete,
         scope: this
      }
   };

   this.fileUpload.show(uploadConfig);

   // Make sure the "use Flash" tip is hidden just in case Flash is enabled...
   var singleUploadTip = Dom.get(this.fileUpload.id + "-singleUploadTip-span");
   Dom.addClass(singleUploadTip, "hidden");
   Event.preventDefault(e);
}

Обратите внимание на использование параметра uploadURL в объекте конфигурации. Вы должны установить это на URL-адрес пользовательского веб-скрипта репозитория, который вы создаете, который знает, как обрабатывать содержимое загруженного файла.

Пример загрузки пользователя также определяет метод onUsersUploadComplete(), на который вы увидите ссылку. Вы можете реализовать здесь свой собственный метод компонента, чтобы предпринять соответствующие действия, такие как обновление пользовательского интерфейса на основе результатов загрузки.

person Will Abson    schedule 04.09.2012
comment
Спасибо за ответ. Можете ли вы объяснить мне, как я могу получить кнопку «Загрузить» из toolbar.js, а затем добавить ее в свой блок? То же, с кусками кода. - person Dmitrii Nikeshkin; 05.09.2012
comment
Привет @will: это действительно полезно, есть ли способ добавить настраиваемое поле вместе со средством выбора файлов для отображения во внешнем интерфейсе и для передачи внутреннего веб-скрипта? - person Vishal Zanzrukia; 02.07.2019

Для создания формы необходимо поместить в путь три файла:

/Alfresco/Tomcat/shared/classes/alfresco/site-webscript/org/alfresco/components/dashlets

Там у вас должно быть:

yourCustomForm.get.desc.xml
yourCustomForm.get.html.ftl
yourCustomForm.get.js

в XML вы должны поместить что-то вроде этого:

<webscript>
<shortname>My Form</shortname>
<description>Form to upload new doc</description>
<family>dashlet</family>
<url>/components/dashlets/yourCustomForm</url>
<authentication>user</authentication>
</webscript>

FTL-файл:

<!-- Pre-requisite: flash-upload and html-upload components are also included on the page -->
<#assign fileUploadConfig = config.scoped["DocumentLibrary"]["file-upload"]!>
<#if fileUploadConfig.getChildValue??>
<#assign adobeFlashEnabled = fileUploadConfig.getChildValue("adobe-flash-enabled")!"true">
</#if>
<script type="text/javascript">//<![CDATA[
new Alfresco.getFileUploadInstance().setOptions(
{
adobeFlashEnabled: ${((adobeFlashEnabled!"true") == "true")?string}
});
//]]>
</script>

этот файл включает Flash- или HTML-версию формы загрузки в Share. (он уже существует, код представляет собой файлы с именем file-upload.get* в

/Alfresco/Tomcat/webapps/share/classes/alfresco/site-webscript/org/alfresco/components/upload directory

там вы также можете найти flash и HTML-код по умолчанию.

JS должен включать файл js для загрузки файла, поэтому:

<#include "../component.head.inc">
<!-- File-Upload -->
<@script type="text/javascript" src="${page.url.context}/res/components/upload/file-upload.js">
</@script>

очевидно, исходный файл-upload.js должен иметь правильный путь, поэтому, если вы работаете в общем каталоге, вы должны скопировать туда также файлы, упомянутые выше.

Надеюсь, это поможет. Я имею в виду Alfresco 4 Enterprise на RHEL 5.5, где мы реализовали аналогичную форму (на самом деле мы сделали дашлет, который создает контент, а не загрузку, но это почти та же концепция. Взгляните сюда: https://forums.alfresco.com/en/viewtopic.php?f=48&t=41486

person Teqnology    schedule 31.08.2012
comment
Спасибо за ответ. Но мне не нужно создавать новую форму, мне нужно добавить кнопку в мой блок/форму, которую я создал ранее. - person Dmitrii Nikeshkin; 03.09.2012
comment
для блока/формы вы имеете в виду дашлет в разделе «Поделиться» на главном экране? - person Teqnology; 03.09.2012
comment
Нет, я имею в виду блок на странице сведений о документе. Например, Действия над документом, Свойства документа, Разрешения. - person Dmitrii Nikeshkin; 03.09.2012
comment
Хм, так вам нужно обновить версию существующего узла? Вы имеете в виду, что вы находитесь на экране, где у вас есть предварительный просмотр документа, а справа у вас есть действия, которые нужно выполнить на этом конкретном узле? Итак, кнопка добавления, о которой вы говорите, является перезаписью документа, который вы сейчас просматриваете? правильно? В этом случае вам также понадобится настраиваемый сценарий действия слияния, в зависимости от того, какой формат MIMETYPE файлов вы загружаете. - person Teqnology; 04.09.2012
comment
Нет, вы не понимаете, мне нужно добавить кнопку загрузки файла, например кнопку загрузки панели инструментов, в мой блок (дополнительные файлы), который был создан ранее, мой блок выглядит как блок свойств, действий на странице сведений о документе. - person Dmitrii Nikeshkin; 04.09.2012
comment
не могли бы вы показать мне скрин вашего блока, просто чтобы понять, о чем мы говорим? Потому что, если вы имеете в виду блок внутри страницы сведений о документе, то, если вы загружаете документ, вы выполняете это действие с узлом, в данном случае с другим документом, а не с папкой, например. - person Teqnology; 04.09.2012
comment
Мой блок (1) Мой блок (2) Deposit1 Deposit2 - person Dmitrii Nikeshkin; 05.09.2012

Чтобы отобразить новый блок в блоке действий с документом на странице сведений о документе, вам необходимо добавить новый компонент на страницу сведений о документе. В site-data\template-instances\document-details.xml добавьте

<component>
         <region-id>document-uploadcustom</region-id>
         <url>/components/documentUploadCustom</url>
</component>

Пусть /components/documentUploadCustom будет вашим URL-адресом веб-скрипта.

В templates\org\alfresco\document-details.ftl добавьте регион для нового компонента, например <@region id="document-uploadcustom" scope="template"/> Ваш код может быть следующим:

<@region id="document-actions" scope="template"/>
<@region id="document-tags" scope="template"/>
<@region id="document-links" scope="template"/>
<@region id="document-metadata" scope="template"/>
<@region id="document-uploadcustom" 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"/>

Как загрузить файл, можно узнать из repo-toolbar.js, onFileUpload и file-upload.js.

person swemon    schedule 03.09.2012
comment
Нет, мне не нужно показывать новый элемент в блоке действий документа, мне нужно добавить новый элемент в мой блок, который находится в блоке свойств документа. - person Dmitrii Nikeshkin; 04.09.2012
comment
Мой блок под названием «Дополнительные файлы». И мне нужно добавить в голову UploadButton. - person Dmitrii Nikeshkin; 04.09.2012