When 워크플로우 사용자 지정 및 확장 워크플로 개체에 액세스할 수 있습니다.
워크플로우 Java API는 com.adobe.granite.workflow
패키지 및 여러 하위 패키지. API의 가장 중요한 멤버는 com.adobe.granite.workflow.WorkflowSession
클래스 이름을 지정합니다. 다음 WorkflowSession
클래스는 디자인 타임 및 런타임 워크플로우 개체 모두에 액세스할 수 있도록 합니다.
또한 이 클래스는 워크플로우 주기를 위한 몇 가지 방법을 제공합니다.
다음 표는 프로그래밍 방식으로 워크플로우와 상호 작용할 때 사용할 몇 가지 주요 Java 개체의 참조 설명서에 대한 링크를 제공합니다. 다음 예제에서는 코드에서 클래스 개체를 가져오고 사용하는 방법을 보여 줍니다.
기능 | 오브젝트 |
---|---|
워크플로우 액세스 | WorkflowSession |
워크플로우 인스턴스 실행 및 쿼리 | Workflow WorkItem WorkflowData |
워크플로우 모델 관리 | WorkflowModel WorkflowNode WorkflowTransition |
워크플로우에 있는 노드에 대한 정보 | WorkflowStatus |
에 설명된 대로 스크립트 찾기, AEM (Apache Sling을 통해)은 서버측 ECMA 스크립트를 실행하는 ECMA 스크립트 엔진을 제공합니다. 다음 org.apache.sling.scripting.core.ScriptHelper
클래스는 스크립트에서 즉시 사용할 수 있습니다. sling
변수를 채우는 방법을 설명합니다.
다음 ScriptHelper
클래스는 SlingHttpServletRequest
당신이 결국 WorkflowSession
object; 예:
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
워크플로우 콘솔에서는 REST API를 많이 사용합니다. 따라서 이 페이지에서는 워크플로우에 대한 REST API에 대해 설명합니다.
curl 명령줄 도구를 사용하면 Workflow REST API를 사용하여 워크플로우 개체에 액세스하고 인스턴스 주기를 관리할 수 있습니다. 이 페이지 전체의 예에서 curl 명령줄 도구를 통해 REST API를 사용하는 방법을 보여 줍니다.
다음 작업이 REST API에서 지원됩니다.
웹 개발을 위한 Firefox 확장인 Firebug를 사용하여 콘솔을 작동할 때 HTTP 트래픽을 따를 수 있습니다. 예를 들어, POST
요청.
이 페이지에서는 AEM이 포트의 localhost에서 실행된다고 가정합니다 4502
설치 컨텍스트가 " /
" (루트) 설치가 아닌 경우 HTTP 요청이 적용되는 URI를 적절하게 조정해야 합니다.
에 지원되는 렌더링 GET
요청은 JSON 렌더링입니다. 용 URL GET
다음과 같이 해야 합니다. .json
확장 프로그램(예:
http://localhost:4502/etc/workflow.json
다음 HTTP 요청 메서드는 다음에 적용됩니다.
http://localhost:4502/etc/workflow/instances
HTTP 요청 메서드 | 작업 |
GET |
사용 가능한 워크플로우 인스턴스를 나열합니다. |
POST |
새 워크플로우 인스턴스를 만듭니다. 매개 변수는 다음과 같습니다. |
다음 HTTP 요청 메서드는 다음에 적용됩니다.
http://localhost:4502/etc/workflow/instances.{state}
HTTP 요청 메서드 | 작업 |
---|---|
GET |
사용 가능한 워크플로우 인스턴스 및 해당 상태 나열( RUNNING , SUSPENDED , ABORTED 또는 COMPLETED ) |
다음 HTTP 요청 메서드는 다음에 적용됩니다.
http://localhost:4502/etc/workflow/instances/{id}
HTTP 요청 메서드 | 작업 |
GET |
각 워크플로우 모델에 대한 링크를 포함하는 인스턴스 데이터(정의 및 메타데이터)를 가져옵니다. |
POST |
인스턴스의 상태를 변경합니다. 새 상태가 매개 변수로 전송됩니다 state 및 에는 다음 값 중 하나가 있어야 합니다. RUNNING , SUSPENDED , 또는 ABORTED .새 상태에 연결할 수 없는 경우(예: 종료된 인스턴스를 일시 중단할 때) 409 (CONFLICT ) 응답을 다시 클라이언트로 보냅니다. |
다음 HTTP 요청 메서드는 다음에 적용됩니다.
http://localhost:4502/etc/workflow/models
HTTP 요청 메서드 | 작업 |
GET |
사용 가능한 워크플로우 모델을 나열합니다. |
POST |
새 워크플로우 모델 만들기. 매개 변수가 title 가 전송되면 지정된 제목을 사용하여 새 모델이 만들어집니다. JSON 모델 정의를 매개 변수로 첨부 model 제공된 정의에 따라 새 워크플로우 모델을 만듭니다.A 201 응답 (CREATED )가 새 워크플로우 모델 리소스의 URL을 포함하는 위치 헤더로 다시 전송됩니다.모델 정의가 라는 파일 매개 변수로 첨부된 경우에도 같은 작업이 수행됩니다 modelfile .두 경우 모두 model 및 modelfile 매개 변수, type 직렬화 형식을 정의하는 데 필요합니다. OSGI API를 사용하여 새로운 직렬화 형식을 통합할 수 있습니다. 워크플로우 엔진과 함께 표준 JSON 직렬 변환기가 제공됩니다. 해당 유형은 JSON입니다. 형식에 대한 예는 아래를 참조하십시오. |
예: 브라우저에서 http://localhost:4502/etc/workflow/models.json
는 다음과 유사한 json 응답을 생성합니다.
[
{"uri":"/var/workflow/models/activationmodel"}
,{"uri":"/var/workflow/models/dam/adddamsize"}
,{"uri":"/var/workflow/models/cloudconfigs/dtm-reactor/library-download"}
,{"uri":"/var/workflow/models/ac-newsletter-workflow-simple"}
,{"uri":"/var/workflow/models/dam/dam-create-language-copy"}
,{"uri":"/var/workflow/models/dam/dam-create-and-translate-language-copy"}
,{"uri":"/var/workflow/models/dam-indesign-proxy"}
,{"uri":"/var/workflow/models/dam-xmp-writeback"}
,{"uri":"/var/workflow/models/dam-parse-word-documents"}
,{"uri":"/var/workflow/models/dam/process_subasset"}
,{"uri":"/var/workflow/models/dam/dam_set_last_modified"}
,{"uri":"/var/workflow/models/dam/dam-autotag-assets"}
,{"uri":"/var/workflow/models/dam/update_asset"}
,{"uri":"/var/workflow/models/dam/update_asset_offloading"}
,{"uri":"/var/workflow/models/dam/dam-update-language-copy"}
,{"uri":"/var/workflow/models/dam/update_from_lightbox"}
,{"uri":"/var/workflow/models/cloudservices/DTM_bundle_download"}
,{"uri":"/var/workflow/models/dam/dam_download_asset"}
,{"uri":"/var/workflow/models/dam/dynamic-media-encode-video"}
,{"uri":"/var/workflow/models/dam/dynamic-media-video-thumbnail-replacement"}
,{"uri":"/var/workflow/models/dam/dynamic-media-video-user-uploaded-thumbnail"}
,{"uri":"/var/workflow/models/newsletter_bounce_check"}
,{"uri":"/var/workflow/models/projects/photo_shoot_submission"}
,{"uri":"/var/workflow/models/projects/product_photo_shoot"}
,{"uri":"/var/workflow/models/projects/approval_workflow"}
,{"uri":"/var/workflow/models/prototype-01"}
,{"uri":"/var/workflow/models/publish_example"}
,{"uri":"/var/workflow/models/publish_to_campaign"}
,{"uri":"/var/workflow/models/screens/publish_to_author_bin"}
,{"uri":"/var/workflow/models/s7dam/request_to_publish_to_youtube"}
,{"uri":"/var/workflow/models/projects/request_copy"}
,{"uri":"/var/workflow/models/projects/request_email"}
,{"uri":"/var/workflow/models/projects/request_landing_page"}
,{"uri":"/var/workflow/models/projects/request_launch"}
,{"uri":"/var/workflow/models/request_for_activation"}
,{"uri":"/var/workflow/models/request_for_deactivation"}
,{"uri":"/var/workflow/models/request_for_deletion"}
,{"uri":"/var/workflow/models/request_for_deletion_without_deactivation"}
,{"uri":"/var/workflow/models/request_to_complete_move_operation"}
,{"uri":"/var/workflow/models/reverse_replication"}
,{"uri":"/var/workflow/models/salesforce-com-export"}
,{"uri":"/var/workflow/models/scene7"}
,{"uri":"/var/workflow/models/scheduled_activation"}
,{"uri":"/var/workflow/models/scheduled_deactivation"}
,{"uri":"/var/workflow/models/screens/screens-update-asset"}
,{"uri":"/var/workflow/models/translation"}
,{"uri":"/var/workflow/models/s7dam/request_to_remove_from_youtube"}
,{"uri":"/var/workflow/models/wcm-translation/create_language_copy"}
,{"uri":"/var/workflow/models/wcm-translation/prepare_translation_project"}
,{"uri":"/var/workflow/models/wcm-translation/translate-i18n-dictionary"}
,{"uri":"/var/workflow/models/wcm-translation/sync_translation_job"}
,{"uri":"/var/workflow/models/wcm-translation/translate-language-copy"}
,{"uri":"/var/workflow/models/wcm-translation/update_language_copy"}
]
다음 HTTP 요청 메서드는 다음에 적용됩니다.
http://localhost:4502*{uri}*
위치 *{uri}*
저장소의 모델 노드에 대한 경로입니다.
HTTP 요청 메서드 | 작업 |
GET |
가져오기 HEAD 모델의 버전(정의 및 메타데이터)입니다. |
PUT |
업데이트 HEAD 모델의 버전입니다(새 버전을 생성합니다).모델의 새 버전에 대한 전체 모델 정의를 다음 매개 변수로 추가해야 합니다. model . 추가 type 매개 변수는 새 모델을 만들 때 필요하며, 값을 지정해야 합니다 JSON . |
POST |
PUT과 동일한 동작입니다. AEM 위젯이 지원되지 않으므로 필요합니다. PUT 작업. |
DELETE |
모델을 삭제합니다. 방화벽/프록시 문제를 해결하기 위해 POST 에는 다음이 포함되어 있습니다 X-HTTP-Method-Override 값이 있는 헤더 항목 DELETE 또한 DELETE 요청. |
예: 브라우저에서 http://localhost:4502/var/workflow/models/publish_example.json
반환 json
다음 코드와 유사한 응답:
{
"id":"/var/workflow/models/publish_example",
"title":"Publish Example",
"version":"1.0",
"description":"This example shows a simple review and publish process.",
"metaData":
{
"multiResourceSupport":"true",
"tags":"wcm,publish"
},
"nodes":
[{
"id":"node0",
"type":"START",
"title":"Start",
"description":"The start node of the workflow.",
"metaData":
{
}
},
{
"id":"node1",
"type":"PARTICIPANT",
"title":"Validate Content",
"description":"Validate the modified content.",
"metaData":
{
"PARTICIPANT":"admin"
}
},
{
"id":"node2",
"type":"PROCESS",
"title":"Publish Content",
"description":"Publish the modified content.",
"metaData":
{
"PROCESS_AUTO_ADVANCE":"true",
"PROCESS":"com.day.cq.wcm.workflow.process.ActivatePageProcess"
}
},
{
"id":"node3",
"type":"END",
"title":"End",
"description":"The end node of the workflow.",
"metaData":
{
}
}],
"transitions":
[{
"from":"node0",
"to":"node1",
"metaData":
{
}
},
{
"from":"node1",
"to":"node2",
"metaData":
{
}
},
{
"from":"node2",
"to":"node3",
"metaData":
{
}
}
]}
다음 HTTP 요청 메서드는 다음에 적용됩니다.
http://localhost:4502/etc/workflow/models/{id}.{version}
HTTP 요청 메서드 | 작업 |
---|---|
GET |
지정된 버전에서 모델의 데이터를 가져옵니다(있는 경우). |
다음 HTTP 요청 메서드는 다음에 적용됩니다.
http://localhost:4502/bin/workflow/inbox
HTTP 요청 메서드 | 작업 |
GET |
HTTP 인증 헤더로 식별되는 사용자의 받은 편지함에 있는 작업 항목을 나열합니다. |
POST |
URI가 매개 변수로 전송되는 작업 항목을 완료합니다 item 및 는 해당 워크플로우 인스턴스를 매개 변수로 정의된 다음 노드로 진행합니다 route 또는 backroute 한 발자국 뒤로 물러서지 않으면매개 변수가 delegatee 가 전송되면 매개 변수로 식별되는 작업 항목이 전송됩니다 item 지정된 참가자에게 위임됩니다. |
다음 HTTP 요청 메서드는 다음에 적용됩니다.
http://localhost:4502/bin/workflow/inbox/{id}
HTTP 요청 메서드 | 작업 |
---|---|
GET |
받은 편지함의 데이터(정의 및 메타데이터)를 가져옵니다 WorkItem 식별됨. |
실행 중인 모든 워크플로우의 목록을 가져오려면 GET을 수행하십시오.
http://localhost:4502/etc/workflow/instances.RUNNING.json
curl 사용 예:
curl -u admin:admin http://localhost:4502/etc/workflow/instances.RUNNING.json
다음 uri
결과에 표시되는 를 인스턴스로 사용할 수 있습니다 id
다른 명령에서 다음을 수행합니다. 예:
[
{"uri":"/etc/workflow/instances/server0/2017-03-08/request_for_activation_1"}
]
이 curl
명령은 워크플로우 상태 대신 RUNNING
.
를 변경하려면 워크플로우 제목 에 표시됨 인스턴스 워크플로우 콘솔의 탭에서 POST
명령:
끝: http://localhost:4502/etc/workflow/instances/{id}
다음 매개 변수와 함께 사용할 수 있습니다.
action
: 값은 다음과 같습니다. UPDATE
workflowTitle
: 워크플로우 제목curl 사용 예:
curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/{id}
# for example
>[!CAUTION]
>
>AEM 6.4 has reached the end of extended support and this documentation is no longer updated. For further details, see our [technical support periods](https://helpx.adobe.com/kr/support/programs/eol-matrix.html). Find the supported versions [here](/docs/?lang=ko).
curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
사용 가능한 모든 워크플로우 모델 목록을 보려면 다음 작업을 수행하십시오.
http://localhost:4502/etc/workflow/models.json
curl 사용 예:
curl -u admin:admin http://localhost:4502/etc/workflow/models.json
참조 - 워크플로우 모델 관리.
다음 com.adobe.granite.workflow.WorkflowSession
클래스는 javax.jcr.Session
개체 또는 org.apache.sling.api.resource.ResourceResolver
개체.
JSP 스크립트(또는 서블릿 클래스의 Java 코드)에서 HTTP 요청 개체를 사용하여 SlingHttpServletRequest
객체에 대한 액세스를 제공하는 객체 ResourceResolver
개체. 조정 ResourceResolver
개체 WorkflowSession
.
<%
%><%@include file="/libs/foundation/global.jsp"%><%
%><%@page session="false"
import="com.adobe.granite.workflow.WorkflowSession,
org.apache.sling.api.SlingHttpServletRequest"%><%
SlingHttpServletRequest slingReq = (SlingHttpServletRequest)request;
WorkflowSession wfSession = slingReq.getResourceResolver().adaptTo(WorkflowSession.class);
%>
를 사용하십시오 sling
변수를 가져옵니다. SlingHttpServletRequest
개체를 가져오는 데 사용하는 개체 ResourceResolver
개체. 조정 ResourceResolver
개체 WorkflowSession
개체.
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
다음 예는 워크플로우 모델에 액세스하는 방법을 보여줍니다.
WorkflowSession.createNewModel
메서드를 사용합니다.사용된 예:
/var/workflow/models/mymodel/jcr:content/model
).모델을 삭제하면 deleted
모델 속성 metaData
하위 노드 true
.
삭제해도 모델 노드가 제거되지 않습니다.
새 모델을 생성할 때:
워크플로우 모델 편집기를 사용하려면 모델이 아래 특정 노드 구조를 사용해야 합니다 /var/workflow/models
. 모델의 부모 노드는 형식이어야 합니다 cq:Page
사용 jcr:content
노드(다음 속성 값 포함):
sling:resourceType
: cq/workflow/components/pages/model
cq:template
: /libs/cq/workflow/templates/model
모델을 생성할 때 먼저 모델을 생성해야 합니다 cq:Page
노드 및 jcr:content
노드 를 모델 노드의 상위로 지정합니다.
다음 id
모델을 식별하는 데 필요한 일부 메서드가 리포지토리에 있는 모델 노드의 절대 경로입니다.
/var/workflow/models/<*model_name>*/jcr:content/model
자세한 내용은 모든 워크플로우 모델을 나열하는 방법.
<%@include file="/libs/foundation/global.jsp"%><%
%><%@page session="false" import="com.adobe.granite.workflow.WorkflowSession,
com.adobe.granite.workflow.model.WorkflowModel,
org.apache.sling.api.SlingHttpServletRequest"%><%
SlingHttpServletRequest slingReq = (SlingHttpServletRequest)request;
WorkflowSession wfSession = slingReq.getResourceResolver().adaptTo(WorkflowSession.class);
/* Create the parent page */
String modelRepo = new String("/var/workflow/models");
String modelTemplate = new String ("/libs/cq/workflow/templates/model");
String modelName = new String("mymodel");
Page modelParent = pageManager.create(modelRepo, modelName, modelTemplate, "My workflow model");
/* create the model */
String modelId = new String(modelParent.getPath()+"/jcr:content/model")
WorkflowModel model = wfSession.createNewModel("Made using Java",modelId);
/* delete the model */
wfSession.deleteModel(modelId);
%>
var resolver = sling.getRequest().getResource().getResourceResolver();
var wfSession = resolver.adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
var pageManager = resolver.adaptTo(Packages.com.day.cq.wcm.api.PageManager);
//create the parent page node
var workflowPage = pageManager.create("/var/workflow/models", "mymodel", "/libs/cq/workflow/templates/model", "Created via ECMA Script");
var modelId = workflowPage.getPath()+ "/jcr:content/model";
//create the model
var model = wfSession.createNewModel("My Model", modelId);
//delete the model
var model = wfSession.deleteModel(modelId);
# deleting the model by its id
>[!CAUTION]
>
>AEM 6.4 has reached the end of extended support and this documentation is no longer updated. For further details, see our [technical support periods](https://helpx.adobe.com/kr/support/programs/eol-matrix.html). Find the supported versions [here](/docs/?lang=ko).
curl -u admin:admin -X DELETE http://localhost:4502/etc/workflow/models/{id}
필요한 세부 수준 때문에 curl은 모델을 만들거나 읽는 데 실용적이지 않은 것으로 간주됩니다.
를 사용할 수 있습니다 WorkflowStatus API 노드의 워크플로우 상태에 대한 정보를 읽어들이려면
다양한 방법에는 다음과 같은 매개 변수가 있습니다.
excludeSystemWorkflows
이 매개 변수는 true
시스템 워크플로우를 관련 결과에서 제외해야 함을 나타냅니다.
사용자 osgI 구성을 업데이트할 수 있습니다. Adobe Granite Workflow PayloadMapCache 워크플로우가 Models
를 시스템 워크플로우로 간주합니다. 기본(런타임) 워크플로우 모델은 다음과 같습니다.
/var/workflow/models/scheduled_activation/jcr:content/model
/var/workflow/models/scheduled_deactivation/jcr:content/model
자동 진행해야 하는 경우 참가자 사전 정의된 시간 내에 완료되지 않은 단계:
OSGI 이벤트 리스너를 구현하여 작업 생성 및 수정 사항을 수신합니다.
시간 제한(기한)을 지정한 다음 해당 시간에 실행할 예약된 슬링 작업을 만듭니다.
시간 제한이 만료되고 작업이 트리거될 때 알림을 받는 작업 처리기를 작성합니다.
작업이 아직 완료되지 않은 경우 이 처리기는 작업에 필요한 작업을 수행합니다
이 접근 방식을 사용할 수 있도록 수행할 작업을 명확히 정의해야 합니다.
다음은 워크플로우 인스턴스와 상호 작용(프로그래밍 방식으로)하는 방법에 대한 기본 예를 제공합니다.
// starting a workflow
WorkflowModel model = wfSession.getModel(workflowId);
WorkflowData wfData = wfSession.newWorkflowData("JCR_PATH", repoPath);
wfSession.startWorkflow(model, wfData);
// querying and managing a workflow
Workflow[] workflows workflows = wfSession.getAllWorkflows();
Workflow workflow= wfSession.getWorkflow(id);
wfSession.suspendWorkflow(workflow);
wfSession.resumeWorkflow(workflow);
wfSession.terminateWorkflow(workflow);
// starting a workflow
var model = wfSession.getModel(workflowId);
var wfData = wfSession.newWorkflowData("JCR_PATH", repoPath);
wfSession.startWorkflow(model, wfData);
// querying and managing a workflow
var workflows = wfSession.getWorkflows(“RUNNING“);
var workflow= wfSession.getWorkflow(id);
wfSession.suspendWorkflow(workflow);
wfSession.resumeWorkflow(workflow);
wfSession.terminateWorkflow(workflow);
워크플로우 시작
# starting a workflow
curl -d "model={id}&payloadType={type}&payload={payload}" http://localhost:4502/etc/workflow/instances
# for example:
curl -u admin:admin -d "model=/var/workflow/models/request_for_activation&payloadType=JCR_PATH&payload=/content/we-retail/us/en/products" http://localhost:4502/etc/workflow/instances
인스턴스 나열
# listing the instances
curl -u admin:admin http://localhost:4502/etc/workflow/instances.json
그러면 모든 인스턴스가 나열됩니다. 예:
[
{"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_1"}
,{"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_2"}
]
자세한 내용은 실행 중인 모든 워크플로우 목록을 가져오는 방법 를 사용하십시오.
워크플로우 일시 중단
# suspending a workflow
curl -d "state=SUSPENDED" http://localhost:4502/etc/workflow/instances/{id}
# for example:
curl -u admin:admin -d "state=SUSPENDED" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
워크플로우 다시 시작
# resuming a workflow
curl -d "state=RUNNING" http://localhost:4502/etc/workflow/instances/{id}
# for example:
curl -u admin:admin -d "state=RUNNING" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
워크플로우 인스턴스 종료
# terminating a workflow
curl -d "state=ABORTED" http://localhost:4502/etc/workflow/instances/{id}
# for example:
curl -u admin:admin -d "state=ABORTED" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
다음은 작업 항목과 상호 작용(프로그래밍)하는 방법에 대한 기본 예를 제공합니다.
// querying work items
WorkItem[] workItems = wfSession.getActiveWorkItems();
WorkItem workItem = wfSession.getWorkItem(id);
// getting routes
List<Route> routes = wfSession.getRoutes(workItem);
// delegating
Iterator<Participant> delegatees = wfSession.getDelegatees(workItem);
wfSession.delegateWorkItem(workItem, delegatees.get(0));
// completing or advancing to the next step
wfSession.complete(workItem, routes.get(0));
// querying work items
var workItems = wfSession.getActiveWorkItems();
var workItem = wfSession.getWorkItem(id);
// getting routes
var routes = wfSession.getRoutes(workItem);
// delegating
var delegatees = wfSession.getDelegatees(workItem);
wfSession.delegateWorkItem(workItem, delegatees.get(0));
// completing or advancing to the next step
wfSession.complete(workItem, routes.get(0));
받은 편지함에서 작업 항목 나열
# listing the work items
curl -u admin:admin http://localhost:4502/bin/workflow/inbox
현재 받은 편지함에 있는 작업 항목에 대한 세부 사항이 나열됩니다. 예:
[{
"uri_xss": "/var/workflow/instances/server0/2018-02-26/prototype-01_2/workItems/node2_var_workflow_instances_server0_2018-02-26_prototype-01_2",
"uri": "/var/workflow/instances/server0/2018-02-26/prototype-01_2/workItems/node2_var_workflow_instances_server0_2018-02-26_prototype-01_2",
"currentAssignee_xss": "workflow-administrators",
"currentAssignee": "workflow-administrators",
"startTime": 1519656289274,
"payloadType_xss": "JCR_PATH",
"payloadType": "JCR_PATH",
"payload_xss": "/content/we-retail/es/es",
"payload": "/content/we-retail/es/es",
"comment_xss": "Process resource is null",
"comment": "Process resource is null",
"type_xss": "WorkItem",
"type": "WorkItem"
},{
"uri_xss": "configuration/configure_analyticstargeting",
"uri": "configuration/configure_analyticstargeting",
"currentAssignee_xss": "administrators",
"currentAssignee": "administrators",
"type_xss": "Task",
"type": "Task"
},{
"uri_xss": "configuration/securitychecklist",
"uri": "configuration/securitychecklist",
"currentAssignee_xss": "administrators",
"currentAssignee": "administrators",
"type_xss": "Task",
"type": "Task"
},{
"uri_xss": "configuration/enable_collectionofanonymoususagedata",
"uri": "configuration/enable_collectionofanonymoususagedata",
"currentAssignee_xss": "administrators",
"currentAssignee": "administrators",
"type_xss": "Task",
"type": "Task"
},{
"uri_xss": "configuration/configuressl",
"uri": "configuration/configuressl",
"currentAssignee_xss": "administrators",
"currentAssignee": "administrators",
"type_xss": "Task",
"type": "Task"
}
작업 항목 위임
# delegating
curl -d "item={item}&delegatee={delegatee}" http://localhost:4502/bin/workflow/inbox
# for example:
curl -u admin:admin -d "item=/etc/workflow/instances/server0/2017-03-08/request_for_activation_1/workItems/node1_etc_workflow_instances_server0_2017-03-08_request_for_act_1&delegatee=administrators" http://localhost:4502/bin/workflow/inbox
다음 delegatee
워크플로우 단계에 유효한 옵션이어야 합니다.
다음 단계로 작업 항목 완료 또는 진행
# retrieve the list of routes; the results will be similar to {"results":1,"routes":[{"rid":"233123169","label":"End","label_xss":"End"}]}
http://localhost:4502/etc/workflow/instances/<path-to-the-workitem>.routes.json
# completing or advancing to the next step; use the appropriate route ID (rid value) from the above list
curl -d "item={item}&route={route}" http://localhost:4502/bin/workflow/inbox
# for example:
curl -u admin:admin -d "item=/etc/workflow/instances/server0/2017-03-08/request_for_activation_1/workItems/node1_etc_workflow_instances_server0_2017-03-08_request_for_activation_1&route=233123169" http://localhost:4502/bin/workflow/inbox
OSGi 이벤트 프레임워크를 사용하여 com.adobe.granite.workflow.event.WorkflowEvent
클래스는 를 정의합니다. 또한 이 클래스는 이벤트의 주제에 대한 정보를 얻는 데 유용한 몇 가지 방법을 제공합니다. 예: getWorkItem
메서드 반환 WorkItem
이벤트에 관련된 작업 항목에 대한 개체입니다.
다음 예제 코드는 워크플로우 이벤트를 수신하고 이벤트 유형에 따라 작업을 수행하는 서비스를 정의합니다.
package com.adobe.example.workflow.listeners;
import org.apache.sling.event.jobs.JobProcessor;
import org.apache.sling.event.jobs.JobUtil;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import com.adobe.granite.workflow.event.WorkflowEvent;
import com.adobe.granite.workflow.exec.WorkItem;
/**
* The <code>WorkflowEventCatcher</code> class listens to workflow events.
*/
@Component(metatype=false, immediate=true)
@Service(value=org.osgi.service.event.EventHandler.class)
public class WorkflowEventCatcher implements EventHandler, JobProcessor {
@Property(value=com.adobe.granite.workflow.event.WorkflowEvent.EVENT_TOPIC)
static final String EVENT_TOPICS = "event.topics";
private static final Logger logger = LoggerFactory.getLogger(WorkflowEventCatcher.class);
public void handleEvent(Event event) {
JobUtil.processJob(event, this);
}
public boolean process(Event event) {
logger.info("Received event of topic: " + event.getTopic());
String topic = event.getTopic();
try {
if (topic.equals(WorkflowEvent.EVENT_TOPIC)) {
WorkflowEvent wfevent = (WorkflowEvent)event;
String eventType = wfevent.getEventType();
String instanceId = wfevent.getWorkflowInstanceId();
if (instanceId != null) {
//workflow instance events
if (eventType.equals(WorkflowEvent.WORKFLOW_STARTED_EVENT) ||
eventType.equals(WorkflowEvent.WORKFLOW_RESUMED_EVENT) ||
eventType.equals(WorkflowEvent.WORKFLOW_SUSPENDED_EVENT)) {
// your code comes here...
} else if (
eventType.equals(WorkflowEvent.WORKFLOW_ABORTED_EVENT) ||
eventType.equals(WorkflowEvent.WORKFLOW_COMPLETED_EVENT)) {
// your code comes here...
}
// workflow node event
if (eventType.equals(WorkflowEvent.NODE_TRANSITION_EVENT)) {
WorkItem currentItem = (WorkItem) event.getProperty(WorkflowEvent.WORK_ITEM);
// your code comes here...
}
}
}
} catch(Exception e){
logger.debug(e.getMessage());
e.printStackTrace();
}
return true;
}
}