2013-05-28 2 views
-2

Я новичок в Adobe cq5. Прошел много онлайн-блогов и учебников, но не смог получить много. Можно ли представить пример приложения Adobe cq5 с подробным объяснением, которое может хранить и извлекать данные в JCR.Нужен пример cq5

Заранее спасибо.

+0

Какие онлайн-блоги вы прочитали? Какой код вы пробовали? Перед началом игры с данными JCR вам потребуется базовое понимание концепций CQ5 (Sling, JCR, OSGi). –

+0

http://helpx.adobe.com/adobe-cq/using/persisting-cq-data-java-content.html Я пробовал это, но возникла проблема с созданием пакета OSGI. – Harish

+0

Я использовал образец JCR, который вы упомянули. Он отлично работал. попробуйте эту ссылку при создании простого пакета: http://dev.day.com/docs/en/cq/current/core/developing/development_tools/developing_with_crxde_lite.html#Managing%20a%20Bundle. Вы можете создать просто «Hello world» bundle и отобразить его, вызвав метод в вашем компоненте jsp –

ответ

2

Предлагаем вам фрагмент кода для CQ 5.4, чтобы вы начали. Он вставляет страницу контента и текст (как parsys) в произвольной позиции в иерархии контента. Позиция предоставлена ​​полезной нагрузкой workflow, но вы можете написать что-то, что выполняется из командной строки, и вместо этого использовать любой допустимый путь CRX. Преимуществом этого шага процесса является то, что вы получаете установленный для вас сеанс, и о навигации по точке вставки позаботились.

import java.text.SimpleDateFormat; 
import java.util.Date; 

import javax.jcr.Node; 
import javax.jcr.RepositoryException; 

import org.apache.sling.jcr.resource.JcrResourceConstants; 

import org.apache.felix.scr.annotations.Component; 
import org.apache.felix.scr.annotations.Properties; 
import org.apache.felix.scr.annotations.Property; 
import org.apache.felix.scr.annotations.Service; 
import org.osgi.framework.Constants; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

import com.day.cq.workflow.WorkflowException; 
import com.day.cq.workflow.WorkflowSession; 
import com.day.cq.workflow.exec.WorkItem; 
import com.day.cq.workflow.exec.WorkflowData; 
import com.day.cq.workflow.exec.WorkflowProcess; 
import com.day.cq.workflow.metadata.MetaDataMap; 

import com.day.cq.wcm.api.NameConstants; 

@Component 
@Service 
@Properties({ 
     @Property(name = Constants.SERVICE_DESCRIPTION, 
      value = "Makes a new tree of nodes, subordinate to the payload node, from the content of a file."), 
     @Property(name = Constants.SERVICE_VENDOR, value = "Acme Coders, LLC"), 
     @Property(name = "process.label", value = "Make new nodes from file")}) 
public class PageNodesFromFile implements WorkflowProcess { 

    private static final Logger log = LoggerFactory.getLogger(PageNodesFromFile.class); 
    private static final String TYPE_JCR_PATH = "JCR_PATH"; 

* * * 

    public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap args) 
      throws WorkflowException { 

     //get the payload 
     WorkflowData workflowData = workItem.getWorkflowData(); 
     if (!workflowData.getPayloadType().equals(TYPE_JCR_PATH)) { 
      log.warn("unusable workflow payload type: " + workflowData.getPayloadType()); 
      workflowSession.terminateWorkflow(workItem.getWorkflow()); 
      return; 
     } 
     String payloadString = workflowData.getPayload().toString(); 

     //the text to be inserted 
     String lipsum = "Lorem ipsum..."; 

     //set up some node info 
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("d-MMM-yyyy-HH-mm-ss"); 
     String newRootNodeName = "demo-page-" + simpleDateFormat.format(new Date()); 
     SimpleDateFormat simpleDateFormatSpaces = new SimpleDateFormat("d MMM yyyy HH:mm:ss"); 
     String newRootNodeTitle = "Demo page: " + simpleDateFormatSpaces.format(new Date()); 

     //insert the nodes 
     try { 
      Node parentNode = (Node) workflowSession.getSession().getItem(payloadString); 

      Node pageNode = parentNode.addNode(newRootNodeName); 
      pageNode.setPrimaryType(NameConstants.NT_PAGE);        //cq:Page 

      Node contentNode = pageNode.addNode(Node.JCR_CONTENT);      //jcr:content 
      contentNode.setPrimaryType("cq:PageContent");        //or use MigrationConstants.TYPE_CQ_PAGE_CONTENT 
                         //from com.day.cq.compat.migration 
      contentNode.setProperty(javax.jcr.Property.JCR_TITLE, newRootNodeTitle); //jcr:title 
      contentNode.setProperty(NameConstants.PN_TEMPLATE, 
        "/apps/geometrixx/templates/contentpage");       //cq:template 
      contentNode.setProperty(JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY, 
        "geometrixx/components/contentpage");        //sling:resourceType 

      Node parsysNode = contentNode.addNode("par"); 
      parsysNode.setProperty(JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY, 
        "foundation/components/parsys"); 

      Node textNode = parsysNode.addNode("text"); 
      textNode.setProperty(JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY, 
        "foundation/components/text"); 
      textNode.setProperty("text", lipsum); 
      textNode.setProperty("textIsRich", true); 

      workflowSession.getSession().save(); 
     } 
     catch (RepositoryException e) { 
      log.error(e.toString(), e); 
      workflowSession.terminateWorkflow(workItem.getWorkflow()); 
      return; 
     } 
    } 
} 

Я разместил further details and discussion.

Несколько моментов:

  • я включил метку времени в название и заголовок страницы содержимого быть вставлен. Таким образом, вы можете запускать много циклов кода и тестов , не очищая свой репозиторий, и вы знаете, какой тест был последним запущен . Добавлен бонус: нет дубликатов имен файлов, нет неоднозначность.

  • Adobe и Day были несовместимы в предоставлении констант для значений свойств , типов узлов и т. Д. Я использовал константы, которые мог найти, и использовал литеральные строки в другом месте.

  • Я не заполнял такие свойства, как дата последнего изменения. В коде для я бы сделал это.

  • Я смутился Node.setPrimaryType() и Node.getPrimaryNodeType(). Эти два метода только грубые дополнений; setter принимает строку, но получатель возвращает NodeType с различной информацией внутри него.

  • В моей оригинальной версии этого кода, я прочитал текст, который будет вставлен из файла, а не только с помощью статической строки «Lorem Ipsum ...»

После того, как вы работали в этом примере вы можете использовать Abobe docs для написания кода, который считывает данные с CRX.

2

Если вы хотите узнать, как написать приложение CQ, который может хранить данные и запрос от CQ ОИЦ этой статьи:

http://scottsdigitalcommunity.blogspot.ca/2013/02/querying-adobe-experience-manager-data.html

Это обеспечивает пошаговое руководством и проведет вас прямо через все процессы, включая создание пакета OSGi с использованием Maven.

FROM комментарии выше - я вижу ссылку на файл BND. Вы должны держаться подальше от CRXDE, чтобы создать OSGi и использовать Maven.