[英]Programmatically add node in AEM?
我需要使用java服務在AEM中創建一個節點。 我創建了一個工作流,其中一個進程觸發content/dam/Test
的java服務。
我是否需要使用java服務創建節點或者只是以編程方式創建節點?
有各種API可用於創建節點:
1.使用Node API
Node node = resource.adaptTo(Node.class);
node.addNode(nodeName, NodePrimaryType);
您可以通過其中任何一個來創建新節點。
工作流會話可以適應JCR會話,從那里您可以通過JCR API訪問讀/寫。
import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
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 javax.jcr.Node;
import javax.jcr.Session;
@Component
@Service
@Properties({@Property(name = Constants.SERVICE_DESCRIPTION, value = "Some Service")})
public class AddTheNodeWorkflow implements WorkflowProcess {
@Override
public final void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap args) throws WorkflowException {
try {
final String payloadPath = getPayloadPath(workItem);
final Session session = workflowSession.adaptTo(Session.class);
// get the node for the workflow payload
final Node payloadNode = session.getNode(payloadPath);
// add the node
final Node somenode = payloadNode.addNode("somenode");
somenode.setProperty("myproperty", "my property value");
} catch (Exception e) {
e.printStackTrace();
}
}
private String getPayloadPath(WorkItem workItem) {
return workItem.getWorkflowData().getPayload().toString();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.