Ashwini
Ashwini

Reputation: 11

Getting Document metadata (Document Type values) in liferay 7

I am working on Liferay 7. I created a document type "My Documents" with field "Language" which is a selection dropdown with values "English", "French" and "Spanish". I uploaded a document and selected Language value as French. Now I am trying to get this Language value for the document but its returning blank. Below is the code I am using.

DDMStructure ddmStructure = null;
List<DDMStructure> structures = dLFileEntryType.getDDMStructures();
mainloop:
for (DDMStructure struct : structures) {
    if (struct.getName((Locale.ROOT)).equalsIgnoreCase("My Document")) {
        ddmStructure = struct;
        break mainloop;
    }
}

DLFileEntryMetadata fileEntryMetadata = null;
try {
    fileEntryMetadata = DLFileEntryMetadataLocalServiceUtil.getFileEntryMetadata(ddmStructure.getStructureId(), dlFileEntry.getFileVersion().getFileVersionId());
    if(Validator.isNotNull(fileEntryMetadata)) {
        ServiceContext serviceContextDLFile = new ServiceContext();
        serviceContextDLFile.setCompanyId(companyId);
        serviceContextDLFile.setAttribute("fileEntryTypeId", fileEntryTypeId);
        serviceContextDLFile.setAttribute("fileEntryMetadataId", fileEntryMetadata.getFileEntryMetadataId());
        serviceContextDLFile.setAttribute("DDMStorageId", fileEntryMetadata.getDDMStorageId());
        serviceContextDLFile.setAttribute("fileEntryId", fileEntryMetadata.getFileEntryId());
        serviceContextDLFile.setAttribute("fileVersionId", fileEntryMetadata.getFileVersionId());

        DDMFormValues ddmFormValues = StorageEngineManagerUtil.getDDMFormValues(fileEntryMetadata.getDDMStructureId(), null, serviceContextDLFile);
        List<DDMFormFieldValue> ddmFormFieldValues =  ddmFormValues.getDDMFormFieldValues();
        if(Validator.isNotNull(ddmFormFieldValues) && !ddmFormFieldValues.isEmpty()) {
            for(DDMFormFieldValue formfieldValue : ddmFormFieldValues) {
                if(formfieldValue.getName().equalsIgnoreCase("Language")) {
                    String languageRawName = formfieldValue.getValue().getString(Locale.US);
                    String language = languageRawName.replace("[\"", "").replace("\"]", "");
                }
            }
        }
    }                   
} catch (NoSuchFileEntryMetadataException nsfene) {
//  LOGGER.error("ERROR:: ", nsfene);
} catch(PortalException portalException) {
//  LOGGER.error("ERROR:: " , portalException);
}

I have not given any predefined value for Language field while creating Document Type. When I am giving any predefined value for Language field, the above code is returning that predefined value. Please tell if I am missing something or there is any other approach do achieve this.

Upvotes: 0

Views: 1043

Answers (1)

jorgediaz-lr
jorgediaz-lr

Reputation: 972

Stored data in document library documents is not internationalized.

I think you have to always use the default language of the instance.

Upvotes: 1

Related Questions