cancel
Showing results for 
Search instead for 
Did you mean: 

Alresco functionality questions. Does it exist?

grantgochnauer
Champ in-the-making
Champ in-the-making
First off let me say that I have been a big integrator of Documentum versions 4 and 5 on large enterprise projects. I am currently evaluating using Alfresco for smaller clients with less enterprise level requirements that Documentum offers. However, there are some basic capabilities that a CMS or WCM need for our team to be able to leverage Alfresco for our clients.

Let me outline the components that I feel are pretty necessary for a CMS/WCM. Forgive me if I touch on things that Alfresco does have and I am unaware. In fact, I’d like to be pointed out for that type of discrepancy because that means the feature I am looking for exists �.

1)   Lifecycle. What I mean by this is that each piece of content in the CMS has a state attached to it. I have gone through the Alfresco 1.0 RC1 release and the only way I can see mimicking this concept is to create folders (WIP/Staging/Active) and move content from one folder to another via simple workflow. The reason this seems odd to me is that the state of the content is dependant on its location and not an intrinsic property of the content itself.
2)   Publishing and clear separation of content displayed on a website and the repository. With Documentum you can publish out content from your repository to another file location and database which contain all the meta-data about the content. This is great because if your CMS goes down, your public facing site will not.
3)   Templating. From what I understand about the new template feature introduced in 1.0RC1 is that it is more of a transformation layer and less of a user input template. When I think of template, I think of creating some concrete input form with various elements which guide the user in creating a new type of content. For example, I could have templates for home pages, modules, footers. Each template would have only the relevant questions inside like “titleâ€? or “header imageâ€? and so forth. The template system in Alfresco now seems to be more like take this HTML and make it into another HTML or other file format.
4)   User definable meta-data and content types (object types). I don’t see any way to create custom types of content which can be queried against in an application. For example, if I have 10 pieces of “general contentâ€?, I want to be able to add meta-data to each piece of that content. This meta-data could include information such as where this content should be displayed on the site or some other business metric. Also, it seems that if I create content in Alfresco, it’s a single type: html. What if I want to create and define my own types like a “homepageâ€? type or a “footerâ€? type? I don’t see a way to do this now.

Question
1)   What is the best way to query for content out of the repository? I am currently working on a Spring based platform (I notice you guys leverage Spring which is GREAT). It seems looking at the APIs available it’s through dependency injection (ala Spring) or Web Services. If I use IOC, doesn’t that mean that my platform which wants to use repository services have to be running in the same JVM?

I have listed some pretty large reaching features above and I realize Alfresco is still a young product. The reason I am writing this is because I believe Alfresco could become the #1 Open Source CMS out there. I am very excited about the CMS which is why I wanted to start this discussion.

Thanks,
Grant
18 REPLIES 18

gavinc
Champ in-the-making
Champ in-the-making
Hi Grant,

I can comment on point 4…

You can do this with RC1, if you have a look at http://www.alfresco.org/mediawiki/index.php/Data_Dictionary_Guide, this shows how to add custom meta-data and configure the client to show it.

Also, not mentioned in the wiki (it needs updating to reflect some recent changes) you can also configure what sub-types of content you can create through the UI. In web-client-config.xml there is a section at the bottom that looks like:

<config evaluator="string-compare" condition="Custom Content Types">
   <content-types>
      <!– <type id="my:content-type"/> –>
   </content-types>
</config>

If you uncomment the line and reference your custom content type in the properties screen of the add content and create content wizards you will get a drop down list of the object types. You should see your custom ones in there.

Unfortunately, at the moment you won't get prompted for the custom meta-data during the creation process, but you can go the details screen for the content to enter it. This is a feature we will be added in the near future (http://www.alfresco.org/jira/browse/AWC-188).

grantgochnauer
Champ in-the-making
Champ in-the-making
That is great about the meta-data. I will have to check it out. Will this meta-data then be accessible via a database lookup or some method I can access on the client side?

gavinc
Champ in-the-making
Champ in-the-making
You can always get hold of the metadata for any node you have in the repository via the NodeService, you can either get a single property with the getProperty() method or all properties via the getProperties() method.

Have a look at org.alfresco.web.bean.wizard.NewSpaceWizard, which has some examples of using the node service. It also shows the use of the client side representation of a node (the Node) object, this helps reduce the number of calls you need to make to the NodeService.

Is this what you were meaning?

kevinr
Star Contributor
Star Contributor
Hello,

I can comment on point 3:

>3) Templating. From what I understand about the new template feature introduced in 1.0RC1 is that it is more of a transformation layer and less of a user input template. When I think of template, I think of creating some concrete input form with various elements which guide the user in creating a new type of content. For example, I could have templates for home pages, modules, footers. Each template would have only the relevant questions inside like “title� or “header image� and so forth. The template system in Alfresco now seems to be more like take this HTML and make it into another HTML or other file format.

Yes you are correct, at the moment templating is more of a transformation layer. However, we have created a JSF component that outputs the result of any template and therefore could be used to display the results in-line on any JSP page, such as the Spaces browse screen or customized document details screen.

Please see this forum article for more info:

http://www.alfresco.org/forums/viewtopic.php?t=268

Thanks,

Kevin

davidc
Star Contributor
Star Contributor
I'll comment on point 1:

Yes, you're correct, the lifecycle state is not intrinsicly part of the content itself.  We'll be adding explicit support after v1.0 - the likely route is to use the categorisation support already in Alfresco i.e. we'll create a lifecycle classification (with WIP/Staging/Active etc categories) which can be applied to any content.  The current 'Link Item to Category' will be extended to allow the setting of a category for a specific classification.

That way, all sorts of other behaviour can be attached to the content lifecycle state using rules and actions.

grantgochnauer
Champ in-the-making
Champ in-the-making
Thank you for your responses everyone. This has been very helpful.

I still have one outstanding question with regards to how to access to repository (both metadata and content) from outside Alfresco. This relates to my question #2 about publishing and my last question about repository access.

I want to make sure there is a clear separation between our application and the CMS. From what I can understand currently, the CMS would need to be running in order for the public site to be accessible if all the pages are being created dynamically, correct? In other words, there is no way to publish meta-data and content at the moment.

In any case, what do you recommend as the best approach for accessing data within Alfresco from another self-contained web application (which is using Spring). I want to be able to run these on two separate physical machines. The access also needs to be very quick as we are thinking of using this to hold the pieces to create the content on every single page for our sites.

Thanks again for your responses! I look forward to a great product.

–Grant

ctanis
Champ in-the-making
Champ in-the-making
<config evaluator="string-compare" condition="Custom Content Types">
   <content-types>
      <!– <type id="my:content-type"/> –>
   </content-types>
</config>

apologies for polluting your thread with a tangent, but I just tried this, using type id="my:sop" from the exampleModel.xml

The properties page for the create new content consistently throws the following error:


javax.faces.el.EvaluationException: Cannot get value for expression '#{AddContentWizard.objectTypes}' at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:399) at javax.faces.component.UISelectItems.getValue(UISelectItems.java:55) at org.apache.myfaces.util.SelectItemsIterator.hasNext(SelectItemsIterator.java:103) at org.apache.myfaces.renderkit.RendererUtils.internalGetSelectItemList(RendererUtils.java:485) at org.apache.myfaces.renderkit.RendererUtils.getSelectItemList(RendererUtils.java:461) at org.apache.myfaces.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:277) at org.apache.myfaces.renderkit.html.HtmlRendererUtils.renderMenu(HtmlRendererUtils.java:251) at org.apache.myfaces.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:54) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:331) at javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:349) at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:253) at _jsp._jsp._wizard._create_22dcontent._properties__jsp._jspService(_properties__jsp.java:664) at com.caucho.jsp.JavaPage.service(JavaPage.java:63) at com.caucho.jsp.Page.pageservice(Page.java:570) at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:159) at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:208) at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:268) at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:106) at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:415) at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234) at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:300) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:95) at org.alfresco.web.app.servlet.AlfrescoFacesServlet.service(AlfrescoFacesServlet.java:49) at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:99) at org.alfresco.web.app.servlet.ModeDetectionFilter.doFilter(ModeDetectionFilter.java:59) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70) at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:68) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70) at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:189) at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:163) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:208) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:259) at com.caucho.server.port.TcpConnection.run(TcpConnection.java:341) at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:490) at com.caucho.util.ThreadPool.run(ThreadPool.java:423) at java.lang.Thread.run(Thread.java:595) Caused by: javax.faces.el.EvaluationException: org.alfresco.web.bean.wizard.AddContentWizard at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:78) at org.apache.myfaces.el.ELParserHelper$MyPropertySuffix.evaluate(ELParserHelper.java:532) at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145) at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:380) … 36 more Caused by: javax.faces.el.EvaluationException: Bean: org.alfresco.web.bean.wizard.AddContentWizard, property: objectTypes at org.apache.myfaces.el.PropertyResolverImpl.getProperty(PropertyResolverImpl.java:404) at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:71) … 39 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.myfaces.el.PropertyResolverImpl.getProperty(PropertyResolverImpl.java:400) … 40 more Caused by: java.lang.NullPointerException at org.alfresco.web.bean.wizard.BaseContentWizard.getObjectTypes(BaseContentWizard.java:497) … 45 more

any ideas?  feel free to move this post.

Thanks,
-craig

paulhh
Champ in-the-making
Champ in-the-making
Grant

On #2, again it's all planned and will get implemented at some stage (may be someone out there will help).  We prefer taking general purpose approaches to providing functionality, so publishing out from the repository to an external "site" is just part of a general systems integration set of capabilities we'd like to have.  Approaches that we've been talking about include having an FTP rule action that could be triggered by a data event (e.g. life-cycle when implemented) for pushing out the content and a database export (of some kind - probably as XML) that gives the metadata in a simple schema.

We probably aren't far off giving people the basic elements that would allow them to do the final mapping to their live site.

Cheers
Paul.

grantgochnauer
Champ in-the-making
Champ in-the-making
Grant

On #2, again it's all planned and will get implemented at some stage (may be someone out there will help).  We prefer taking general purpose approaches to providing functionality, so publishing out from the repository to an external "site" is just part of a general systems integration set of capabilities we'd like to have.  Approaches that we've been talking about include having an FTP rule action that could be triggered by a data event (e.g. life-cycle when implemented) for pushing out the content and a database export (of some kind - probably as XML) that gives the metadata in a simple schema.

We probably aren't far off giving people the basic elements that would allow them to do the final mapping to their live site.

Cheers
Paul.

Paul, thanks for the response. I look forward to all the new functionality planned.

In the mean time, how would you suggest pulling content and meta-data out of the respository if the website was running on a different JVM than the repository?

Thanks again,
Grant