Class MultiFileItem

All Implemented Interfaces:
HasHandlers, HasBlurHandlers, HasCanEditChangedHandlers, HasChangedHandlers, HasChangeHandlers, HasClickHandlers, HasDoubleClickHandlers, HasEditorEnterHandlers, HasEditorExitHandlers, HasFocusHandlers, HasIconClickHandlers, HasIconKeyPressHandlers, HasItemHoverHandlers, HasKeyDownHandlers, HasKeyPressHandlers, HasKeyUpHandlers, HasPendingStatusChangedHandlers, HasPickerIconClickHandlers, HasReadOnlyDisplayChangedHandlers, HasShowContextMenuHandlers, HasShowValueHandlers, HasTitleClickHandlers, HasTitleDoubleClickHandlers, HasTitleHoverHandlers, HasValueHoverHandlers, HasValueIconClickHandlers

public class MultiFileItem extends CanvasItem
The MultiFileItem provides an interface for a user to save one or more files that are related to a DataSource record, where each file is represented by a record in a related DataSource.

Use MultiFileItem when a record may have one or more files associated with it (such as attachments to an email message) where no information about the files needs to be stored other than the files themselves. If you have several fields associated with each file (such as an uploaded document with a version, comments and processes associated with it), consider instead an ordinary DataSource with on field of type "binary", and using the FileItem for upload.

See the Uploading Files overview for more information on upload.

DataSource Setup

In a relationship sometimes called a "master-detail" relationship, the MultiFileItem stores files in a "detail" DataSource which are related to a "master" DataSource record being edited by the form which contains the MultiFileItem.

To use a MultiFileItem:

  • declare a "detail" DataSource to store the related files. At a minimum, this DataSource must have:
    • a primaryKey field
    • a field declaring a foreignKey relationship to the primaryKey of the "master" DataSource
    • a field of type "binary"
  • bind a DynamicForm to the "master" DataSource
  • in the DynamicForm bound to the "master" DataSource, declare a field with editorType:"MultiFileItem" and a dataSource property set to the ID of the "detail" DataSource
An example "detail" DataSource for storing files is shown below. This "detail" DataSource assumes a "master" DataSource with DataSource.ID "masterRecord" and with a primaryKey field "id".
  
    <DataSource ID="uploadedFiles" serverType="sql">
      <fields>
         <field name="fileId" type="sequence" primaryKey="true" hidden="true"/>
         <field name="masterRecordId" type="number" foreignKey="masterRecord.id" hidden="true"/>
         <field name="file" type="binary" title="File"/>
      </fields>
    </DataSource>
  
  

Aside from a single "binary" field, the "detail" DataSource should generally have only hidden fields, as shown above. Additional internal fields (such as a "lastUpdated" field) may be added, but will not be editable via MultiFileItem.

Display

The MultiFileItem appears as a list of files related to the current record. An optional button, the removeButton allows removing files. A second optional button, the editButton, launches a picker for uploading further files.

Saving

In all cases, uploading a new file is an "add" DSRequest against the dataSource.

The MultiFileItem has two modes, according to whether the "master" record is being newly created via an "add" operation or whether the master record is pre-existing ("update" operation).

If the master record is pre-existing, each file added by the user is uploaded as soon as the user exits the picker launched from the edit button, and the list of files shown in the main form reflects the actual list of stored files.

If the master record is being newly created, files are not actually uploaded until after the master record is confirmed saved, and the list of fields shown in the main form reflects files which will be uploaded after the master record is saved.

In both cases, if there are multiple files to upload, they are uploaded one at a time, as a series of separate "add" DSRequests against the dataSource.

Also in both cases, deletion of any file is immediate. In the case of a pre-existing master record, all files shown actually exist as DataSource records, and deletion is performed as a "remove" DSRequest against the dataSource.

See Also:
  • Constructor Details

    • MultiFileItem

      public MultiFileItem()
    • MultiFileItem

      public MultiFileItem(JavaScriptObject jsObj)
    • MultiFileItem

      public MultiFileItem(String name)
    • MultiFileItem

      public MultiFileItem(String name, String title)
  • Method Details

    • getOrCreateRef

      public static MultiFileItem getOrCreateRef(JavaScriptObject jsObj)
    • changeAutoChildDefaults

      public static void changeAutoChildDefaults(String autoChildName, Canvas defaults)
      Changes the defaults for Canvas AutoChildren named autoChildName.
      Parameters:
      autoChildName - name of an AutoChild to customize the defaults for.
      defaults - Canvas defaults to apply. These defaults override any existing properties without destroying or wiping out non-overridden properties. For usage tips on this param, see SGWTProperties.
      See Also:
    • changeAutoChildDefaults

      public static void changeAutoChildDefaults(String autoChildName, FormItem defaults)
      Changes the defaults for FormItem AutoChildren named autoChildName.
      Parameters:
      autoChildName - name of an AutoChild to customize the defaults for.
      defaults - FormItem defaults to apply. These defaults override any existing properties without destroying or wiping out non-overridden properties. For usage tips on this param, see SGWTProperties.
      See Also:
    • changePickerIconDefaults

      public static void changePickerIconDefaults(FormItemIcon defaults)
    • setEditButtonPrompt

      public MultiFileItem setEditButtonPrompt(String editButtonPrompt)
      The prompt of the edit button.
      Parameters:
      editButtonPrompt - New editButtonPrompt value. Default value is "Add files"
      Returns:
      MultiFileItem instance, for chaining setter calls
    • getEditButtonPrompt

      public String getEditButtonPrompt()
      The prompt of the edit button.
      Returns:
      Current editButtonPrompt value. Default value is "Add files"
    • setEmptyMessage

      public MultiFileItem setEmptyMessage(String emptyMessage)
      Empty message to display when there are no files listed.
      Parameters:
      emptyMessage - New emptyMessage value. Default value is "Click icon to add..."
      Returns:
      MultiFileItem instance, for chaining setter calls
    • getEmptyMessage

      public String getEmptyMessage()
      Empty message to display when there are no files listed.
      Returns:
      Current emptyMessage value. Default value is "Click icon to add..."
    • setPickerAddAnotherFileButtonTitle

      public MultiFileItem setPickerAddAnotherFileButtonTitle(String pickerAddAnotherFileButtonTitle)
      The contents of the "Add another" file button in the picker launched by the edit button.
      Parameters:
      pickerAddAnotherFileButtonTitle - New pickerAddAnotherFileButtonTitle value. Default value is "<u>Add&nbsp;another</u>"
      Returns:
      MultiFileItem instance, for chaining setter calls
      See Also:
    • getPickerAddAnotherFileButtonTitle

      public String getPickerAddAnotherFileButtonTitle()
      The contents of the "Add another" file button in the picker launched by the edit button.
      Returns:
      Current pickerAddAnotherFileButtonTitle value. Default value is "<u>Add&nbsp;another</u>"
      See Also:
    • setPickerCancelButtonTitle

      public MultiFileItem setPickerCancelButtonTitle(String pickerCancelButtonTitle)
      The title of the cancel button in the picker lauched by the edit button.
      Parameters:
      pickerCancelButtonTitle - New pickerCancelButtonTitle value. Default value is "Cancel"
      Returns:
      MultiFileItem instance, for chaining setter calls
    • getPickerCancelButtonTitle

      public String getPickerCancelButtonTitle()
      The title of the cancel button in the picker lauched by the edit button.
      Returns:
      Current pickerCancelButtonTitle value. Default value is "Cancel"
    • setPickerConstructor

      public MultiFileItem setPickerConstructor(String pickerConstructor)
      MultiFileItems use a MultiFilePicker instance as their picker. The generated picker autoChild may be customized via the standard com.smartgwt.client.types.AutoChild pattern.
      Parameters:
      pickerConstructor - New pickerConstructor value. Default value is "MultiFilePicker"
      Returns:
      MultiFileItem instance, for chaining setter calls
      See Also:
    • getPickerConstructor

      public String getPickerConstructor()
      MultiFileItems use a MultiFilePicker instance as their picker. The generated picker autoChild may be customized via the standard com.smartgwt.client.types.AutoChild pattern.
      Returns:
      Current pickerConstructor value. Default value is "MultiFilePicker"
      See Also:
    • setPickerUploadButtonInitialTitle

      public MultiFileItem setPickerUploadButtonInitialTitle(String pickerUploadButtonInitialTitle)
      The initial title of the upload button in the picker lauched by the edit button that is used before the form is saved.
      Parameters:
      pickerUploadButtonInitialTitle - New pickerUploadButtonInitialTitle value. Default value is "OK"
      Returns:
      MultiFileItem instance, for chaining setter calls
      See Also:
    • getPickerUploadButtonInitialTitle

      public String getPickerUploadButtonInitialTitle()
      The initial title of the upload button in the picker lauched by the edit button that is used before the form is saved.
      Returns:
      Current pickerUploadButtonInitialTitle value. Default value is "OK"
      See Also:
    • setPickerUploadButtonTitle

      public MultiFileItem setPickerUploadButtonTitle(String pickerUploadButtonTitle)
      The title of the upload button in the picker lauched by the edit button that is used after the form is saved.
      Parameters:
      pickerUploadButtonTitle - New pickerUploadButtonTitle value. Default value is "Save"
      Returns:
      MultiFileItem instance, for chaining setter calls
      See Also:
    • getPickerUploadButtonTitle

      public String getPickerUploadButtonTitle()
      The title of the upload button in the picker lauched by the edit button that is used after the form is saved.
      Returns:
      Current pickerUploadButtonTitle value. Default value is "Save"
      See Also:
    • setPickerUploadProgressLabel

      public MultiFileItem setPickerUploadProgressLabel(String pickerUploadProgressLabel)
      Specifies the label of the progress meter in the picker lauched by the edit button. This property is a dynamic string, similar to the Canvas.dynamicContents feature, with the variables fileName and formattedFileSize.
      Parameters:
      pickerUploadProgressLabel - New pickerUploadProgressLabel value. Default value is "Saving ${fileName} ${formattedFileSize}"
      Returns:
      MultiFileItem instance, for chaining setter calls
      See Also:
    • getPickerUploadProgressLabel

      public String getPickerUploadProgressLabel()
      Specifies the label of the progress meter in the picker lauched by the edit button. This property is a dynamic string, similar to the Canvas.dynamicContents feature, with the variables fileName and formattedFileSize.
      Returns:
      Current pickerUploadProgressLabel value. Default value is "Saving ${fileName} ${formattedFileSize}"
      See Also:
    • setRemoveButtonPrompt

      public MultiFileItem setRemoveButtonPrompt(String removeButtonPrompt)
      The prompt of the remove button.
      Parameters:
      removeButtonPrompt - New removeButtonPrompt value. Default value is "Remove selected files"
      Returns:
      MultiFileItem instance, for chaining setter calls
    • getRemoveButtonPrompt

      public String getRemoveButtonPrompt()
      The prompt of the remove button.
      Returns:
      Current removeButtonPrompt value. Default value is "Remove selected files"
    • setDefaultProperties

      public static void setDefaultProperties(MultiFileItem multiFileItemProperties)
      Class level method to set the default properties of this class. If set, then all existing and subsequently created instances of this class will automatically have default properties corresponding to the properties of the class instance passed to this function. This is a powerful feature that eliminates the need for users to create a separate hierarchy of subclasses that only alter the default properties of this class. Can also be used for skinning / styling purposes.

      Note: This method is intended for setting default attributes only and will affect all instances of the underlying class (including those automatically generated in JavaScript). This method should not be used to apply standard EventHandlers or override methods for a class - use a custom subclass instead. Calling this method after instances have been created can result in undefined behavior, since it bypasses any setters and a class instance may have already examined a particular property and not be expecting any changes through this route.

      Parameters:
      multiFileItemProperties - properties that should be used as new defaults when instances of this class are created
      See Also: