03-08-2008 06:00 PM
05-14-2008 07:41 AM
function getHistory( doc )
{
// *BEWARE* - HERE BE DRAGONS
var field = doc.getClass().getDeclaredField( "services" );
field.setAccessible( true ); // ick - yuck - nasty - but necessary
var versionService = field.get( doc ).getVersionService();
return versionService.getVersionHistory( doc.nodeRef ).getAllVersions().toArray();
}06-13-2008 10:39 AM
<#list versionhistory as ver>
{ "versionLabel":"${ver.versionLabel}",
<#if ver.name??>"name":"${ver.name}",</#if>
<#if ver.created??>"created":"${ver.created}",</#if>
<#if ver.description??><#if ver.description!="">"description":"${ver.description}",</#if></#if>
<#if ver.modified??>"modified":"${ver.modified}",</#if>
<#if ver.frozenNodeId??>"frozenNodeId":"${ver.frozenNodeId}",</#if>
"creator":"${ver.creator}"
}<#if ver_has_next>,</#if>
</#list>
{created=Thu Jun 12 14:45:27 CEST 2008, store-protocol=workspace, frozenNodeStoreProtocol=workspace, modifier=admin, frozenAspects=[{http://www.alfresco.org/model/content/1.0}versionable, {http://www.alfresco.org/model/content/1.0}auditable, {http://www.alfresco.org/model/content/1.0}titled, {http://www.alfresco.org/model/content/1.0}lockable, {http://www.alfresco.org/model/system/1.0}referenceable, {http://www.alfresco.org/model/application/1.0}inlineeditable, {http://www.alfresco.org/model/content/1.0}author], versionLabel=1.17, versionType=MINOR, store-identifier=lightWeightVersionStore, frozenNodeStoreId=SpacesStore, node-dbid=5081, modified=Thu Jun 12 14:45:27 CEST 2008, creator=admin, description=, node-uuid=6ec6751d-387d-11dd-bc28-4995248d87ef, frozenNodeId=6153e995-3849-11dd-bc28-4995248d87ef, name=6ec6751d-387d-11dd-bc28-4995248d87ef, versionNumber=164, frozenNodeType={http://www.alfresco.org/model/content/1.0}content}
06-13-2008 12:22 PM
// n is null (or undefined)
function isNull(n) { return ( n == undefined || n == null ) };
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Scrape Version History via Freemarker ~~
// date-time formats (Java)
const DT_ISO_8601 = 'yyyy-MM-dd\'T\'HH:mm:ss.SSS zzzzz' ;
const DT_RFC_1123 = 'dd MMM yyyy HH:mm:ss ZZZZZ' ;
const DT_GMT_8601 = 'yyyy-MM-dd\'T\'HH:mm:ss.SSS \'GMT\'ZZZZZ' ;
// To add:
// '<#setting datetime_format=\"' + DT_ISO_8601 + '\" >'
function vHistory( verLabel )
{ return (
'<#setting time_zone=\"UTC\" >'
+ '<#list document.versionHistory?sort_by("createdDate")?reverse as record>'
+(isNull(verLabel)? '' : '<#if record.versionLabel == \"' + verLabel + '\" >')
+ '${record.id}'
+'\\\\'+ '${record.nodeRef}'
+'\\\\'+ '${record.name}'
+'\\\\'+ '${record.type}'
+'\\\\'+ '${record.createdDate?string(\"' + DT_ISO_8601 + '\")}'
+'\\\\'+ '${record.creator}'
+'\\\\'+ '${record.versionLabel}'
+'\\\\'+ '${record.isMajorVersion?string(\'true\',\'false\')}'
+'\\\\'+ '${record.url}'
+'\\\\'+ '<#if record.description?exists>${record.description}</#if>'
+'\\\\'+ '${record.hasAspect("cm:versionable")?string(\'true\',\'false\')}'
+'\\\\'+
'${record.properties["cm:modified"]?string(\"' + DT_ISO_8601 + '\")}'
+'\\\\'+ '${record.properties.content.size?c}'
+ '\\%%\\'
+(isNull(verLabel)? '' : '<#break></#if>')
+ '</#list>' );
}
function dateFromStringISO8601( dateString ) {
var DS = dateString.split("[-:T .]", 9);
var DP = DS.slice( 0, 7).map( Number );
return (
new Date(Date.UTC(DP[0], DP[1]-1, DP[2], DP[3], DP[4], DP[5], DP[6]))
);
}
function versionRecord( verProps )
{ // Constructor for versionRecord Object
this.id = verProps[0];
this.createdDate = dateFromStringISO8601( verProps[4] );
this.nodeRef = verProps[1];
this.name = verProps[2];
this.type = verProps[3];
this.creator = verProps[5];
this.versionlabel = verProps[6];
this.description = verProps[9];
this.url = verProps[8];
this.majorVersion = (verProps[7] == "true" ? true : false);
this.versionable = (verProps[10] == "true" ? true : false);
this.modified = dateFromStringISO8601( verProps[11] );
this.size = Number(verProps[12]);
}
// Return array of versionRecord Objects (most recent first)
function versionHist(doc) {
var versionList = new Object();
versionList.versionCount = 0;
if ( doc.hasAspect("cm:versionable") ) {
doc.processTemplate( vHistory() ).split( "\\\\%%\\\\" ).forEach(
function(element, index, array) {
versionList[index] = new versionRecord(element.split("\\\\\\\\"));
versionList.versionCount += 1;} )
return versionList; // An array of versionRecord Objects
} else return null;
}
// Return versionRecord of current version
function versionRec(doc) {
if ( doc.hasAspect("cm:versionable") &&
! isNull( doc.properties["cm:versionLabel"]) &&
doc.properties["cm:versionLabel"].length > 0 ) {
var versionLabel = doc.properties["cm:versionLabel"];
var verRecs =
doc.processTemplate( vHistory( versionLabel) ).split( "\\\\%%\\\\"
).map(
function(element, index, array) {
return element.split( "\\\\\\\\" ) }
).filter(
function(element, index, array) {
return ( element[6] == versionLabel ) }
) ;
if ( verRecs.length >= 1 )
return new versionRecord( verRecs[0] );
};
return null;
}
// Return versionRecord : -1 is most recent, 0 is first version
function versionRec2(doc, verLabel) {
if ( doc.hasAspect("cm:versionable") ) {
if ( isNull(verLabel) &&
! isNull( doc.properties["cm:versionLabel"]) &&
doc.properties["cm:versionLabel"].length > 0 )
verLabel = doc.properties["cm:versionLabel"]; // current version
var verRecs =
doc.processTemplate( vHistory() ).split( "\\\\%%\\\\" ).map(
function(element, index, array) {
return element.split( "\\\\\\\\" ) } );
if ( verRecs.length >= 1 ) {
if ( verLabel < 0 ) // start from most recent
return new versionRecord( verRecs[ -verLabel - 1 ] );
else if ( verLabel == 0 ) // start from oldest at end of array
return new versionRecord( verRecs[ verRecs.length - 1 - verLabel ] );
else { // match verLabel
verRecs = verRecs.filter(
function(element, index, array) {
return ( element[6] == verLabel ) } ) ;
if ( verRecs.length >= 1 )
return new versionRecord( verRecs[0] );
} } };
return null;
}
06-13-2008 12:48 PM
"versionHistory":[
<#list node.versionHistory as ver>
{ "versionLabel":"${ver.versionLabel}",
<#if ver.name??>"name":"${ver.name}",</#if>
<#if ver.createdDate??>"createdDate":"${ver.createdDate?date}",</#if>
<#if ver.description??><#if ver.description!="">"description":"${ver.description}",</#if></#if>
<#if ver.url??>"url":"${ver.url}",</#if>
<#if ver.frozenNodeId??>"frozenNodeId":"${ver.frozenNodeId}",</#if>
<#if ver.nodeRef??>"nodeRef":"${ver.nodeRef}",</#if>
"creator":"${ver.creator}"
}<#if ver_has_next>,</#if>
</#list>
]
06-15-2008 01:06 PM
hi sacco,
that is lifesaver for me, thanks!
function dateFromStringISO8601( dateString ) {
var DS = dateString.split("[-:T .]", 9);
var DP = DS.slice( 0, 7).map( Number );
return (
new Date(Date.UTC(DP[0], DP[1]-1, DP[2], DP[3], DP[4], DP[5], DP[6]))
);
}
Tags
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.