Tuesday 21 February 2017

Update Document and Media MetaData Field values : 
=========================================


I want to store documents in specific User own document type.

Goto Content -> Document and Media -> click Manage -> Click Add Document Types

Name : SSC Document

Add the 3 MetaData fields for SSC Document like Expire Date ,Date and Language.

<root available-locales="en_US" default-locale="en_US">
<dynamic-element dataType="string" indexType="keyword" localizable="true" multiple="false" name="select" readOnly="false" repeatable="false" required="false" showLabel="true" type="select" width="">
<dynamic-element name="option3863" type="option" value="English">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[English]]>
</entry>
</meta-data>
</dynamic-element>
<dynamic-element name="option5214" type="option" value="French">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[French]]>
</entry>
</meta-data>
</dynamic-element>
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Select Language]]>
</entry>
<entry name="predefinedValue">
<![CDATA[[""]]]>
</entry>
<entry name="tip">
<![CDATA[]]>
</entry>
</meta-data>
</dynamic-element>
<dynamic-element dataType="date" fieldNamespace="ddm" indexType="keyword" localizable="true" name="expiryDate" readOnly="false" repeatable="false" required="false" showLabel="true" type="ddm-date" width="small">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Expiry Date]]>
</entry>
<entry name="predefinedValue">
<![CDATA[]]>
</entry>
<entry name="tip">
<![CDATA[]]>
</entry>
</meta-data>
</dynamic-element>
<dynamic-element dataType="string" indexType="keyword" localizable="true" multiple="false" name="role" readOnly="false" repeatable="false" required="false" showLabel="true" type="select" width="">
<dynamic-element name="option4347" type="option" value="Sales Document Approver">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Sales Document Approver]]>
</entry>
</meta-data>
</dynamic-element>
<dynamic-element name="option4348" type="option" value="Parts Document Approver">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Parts Document Approver]]>
</entry>
</meta-data>
</dynamic-element>
<dynamic-element name="option4349" type="option" value="Service Document Approver">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Service Document Approver]]>
</entry>
</meta-data>
</dynamic-element>
<dynamic-element name="option4350" type="option" value="Marketing Document Approver">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Marketing Document Approver]]>
</entry>
</meta-data>
</dynamic-element>
<dynamic-element name="option4351" type="option" value="Management Document Approver">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Management Document Approver]]>
</entry>
</meta-data>
</dynamic-element>
<dynamic-element name="option4352" type="option" value="Accounting Document Approver">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Accounting Document Approver]]>
</entry>
</meta-data>
</dynamic-element>
<dynamic-element name="option3746" type="option" value="Portal Admin Document Approver">
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Portal Admin Document Approver]]>
</entry>
</meta-data>
</dynamic-element>
<meta-data locale="en_US">
<entry name="label">
<![CDATA[Approved By]]>
</entry>
<entry name="predefinedValue">
<![CDATA[[""]]]>
</entry>
<entry name="tip">
<![CDATA[]]>
</entry>
</meta-data>
</dynamic-element>
</root>


While adding the documents in Document and Media.

Goto Content -> Document and Media -> Click Add section and Select SSC Document

Add the document and give to fields values like Expire Date ,Date and Language

Save the document.

Update the ExpiryDate MetaData field value programatically:

Step 1 : 

get the SSC Document structure id value
DDMStructure agcoStructure = null;
DLFileEntry dlFileEntry = null;
List<DDMStructure> ddmStructure = DDMStructureLocalServiceUtil.getDDMStructures(0,DDMStructureLocalServiceUtil.getDDMStructuresCount());

for (DDMStructure structure : ddmStructure) {
if (structure.getName(Locale.getDefault()).equalsIgnoreCase(DocumentUpdaterConstants.AGCO_DOCUMENT_TYPE)) {
agcoStructure = structure;
break;
}
}

Step 2 :

Get the dlfileentry Id

ThemeDisplay themeDisplay = (ThemeDisplay) resourceRequest.getAttribute(WebKeys.THEME_DISPLAY);
long companyId = themeDisplay.getCompanyId();
String fileEntryUUId = "d5254c81-8924-4d24-bd5e-c6f3fdce1113";
dlFileEntry = DLFileEntryLocalServiceUtil.getDLFileEntryByUuidAndCompanyId(fileEntryUUId, companyId);

long fileEntryTypeId = dlFileEntry.getFileEntryTypeId();
long version = dlFileEntry.getFileVersion().getFileVersionId();
long dlfileEntryId = dlFileEntry.getFileEntryId();

String expirationDate = "6/28/2016";

Step 3 :

Convert string to date and Make sure every date value will be store in string value so,convert date to Serializable
Serializable date = null;
SimpleDateFormat simpleDateFomat = new SimpleDateFormat("MM/dd/yyyy");
Date convertedExpirationDate = null;
convertedExpirationDate = simpleDateFomat.parse(expirationDate);
date = String.valueOf(convertedExpirationDate.getTime());

Step 4:

Get the MetaData filed value
Field fieldExpiryDate = new Field("expiryDate", date);  // expiryDate field value identify in DDMConent table

Step5 : 

Create the object of field class

Fields fields = new Fields();
fields.put(fieldExpiryDate);

Step 6 :

Create the map object generic classes of fields and pass the Structure key
Map<String, Fields> fieldsMapFinal = new HashMap<String, Fields>();
fieldsMapFinal.put(agcoStructure.getStructureKey(),fields);
DLFileEntryMetadataLocalServiceUtil.updateFileEntryMetadata(fileEntryTypeId,dlfileEntryId, version, fieldsMapFinal,serviceContextDLFile);

update success

Step 7:

When ever we can modify or update the Document new version will be created
In the above case new version couldn't create, follow below it will be update new version

ServiceContext serviceContext = new ServiceContext();
String sourceFileName = dlFileEntry.getTitle();
serviceContext.setAttribute("fileEntryTypeId", fileEntryTypeId);
FileEntry fileEntry = DLAppServiceUtil.getFileEntry(themeDisplay.getSiteGroupId(), dlFileEntry.getFolderId(),dlFileEntry.getTitle());
InputStream is = DLFileEntryLocalServiceUtil.getFileAsStream(themeDisplay.getUserId(), dlfileEntryId,fileEntry.getVersion(), false);
File file = DLFileEntryLocalServiceUtil.getFile(themeDisplay.getUserId(), dlfileEntryId,fileEntry.getVersion(), false);
DLAppServiceUtil.updateFileEntry(dlfileEntryId, sourceFileName,MimeTypesUtil.getContentType(dlFileEntry.getTitle()),dlFileEntry.getTitle(),
dlFileEntry.getDescription().concat(StringPool.SPACE),StringPool.BLANK, Boolean.FALSE, is, file.length(),serviceContext);

  Inter Portlet Communication (IPC) in Liferay 7.4 Public Render Parameter IPC: 1) Create a new module project -> SenderPortlet 2) In  Se...