TheOpenCloudEngine / uEngine5-base

uEngine5 BPMS that totally re-written in Microservices architecture. uEngine5 can act as not only a conventional Workflow or BPMS but also as a REST api orchestrator or a BPaaS (Business process as a service) of members of OCE's MSA components.
MIT License
10 stars 13 forks source link

Instance Filter #18

Open Lusky87 opened 7 years ago

jinyoung commented 7 years ago
  1. Instance filter 구현이 필요합니다. Filter 에 들어갈 항목은 http://221.141.2.166:2020/uengine-web/processmanager/index.jsp (id/pwd: test_ko / test) 의 "인스턴스 검색" 의 폼을 구성하여 주어야 합니다.

  2. 인스턴스 검색 조건에 대한 REST 서비스의 설계는 JPA / Spring Data 에서 제공해주는 방식을 따라하면 파라미터는 자동으로 부여됩니다: 예를 들어

@RepositoryRestResource(collectionResourceRel = "instances", path = "instances")
public interface ProcessInstanceRepository extends MultitenantRepository<ProcessInstanceEntity, Long> {

    @Query("select pi from ProcessInstanceEntity pi where startDate > :startDate")
    List<ProcessInstanceEntity> findByFilter(@Param("startDate") Date startDate, @Param("endDate") Date endDate );

}

로 해주면, 자동으로 REST 서비스에 파라미터로 열리고, 검색조건에 알아서 달라붙을 겁니다:

http://localhost:8080/instances/search/findByFilter?startDate=XXXX&endDate=XXXX
  1. 현재 Instance List 에는 rootInst 들만 나타나야 합니다 (select * from ProcessInstanceEntity where mainInstId == null 조건이면 필터링 될 겁니다)
jinyoung commented 7 years ago

유엔진 스키마를 참고하세요 : https://www.slideshare.net/secret/pZk5GOcRGPJTq

SeungpilPark commented 7 years ago

작성하신 코드에서,

var url = 'instances/search/findFilterICanSee?';
        if (this.filter.instId != null ){
          url += 'instId=' + this.filter.instId;
        }
        this.$root.codi(url).get()
          .then(function (response) {

이 부분을 뷰 리소스2 예제에 따르면.... https://github.com/pagekit/vue-resource/blob/master/docs/resource.md

아래처럼 보낼경우 param 들이 쿼리파라미터 처리가 된다고 나와있으니, 한번 시도해보시고, 안되면 무식하게 가지요. (쿼리 파라미터 url 인코딩 처리로 하나하나... 스트링 + 하기.)

var url = 'instances/search/findFilterICanSee';
var params = {
     instId : this.filter.instId
    .
    .
}
        this.$root.codi(url).get(params)
          .then(function (response) {
SeungpilPark commented 7 years ago
2017-10-17 2 36 18

조용민씨 작업한내용 & TODO:

  1. 시작일, 종료일에 https://www.npmjs.com/package/vue-datepicker

  2. 시작일, 종료일 url 인코딩 (기타 다른 파라미터들도..)

  3. 시작담당자, 현담당자를 검색하기 위해서, 유엔진 스키마를 참조하여 보고있는데, 샘플 데이터가 없이는 어려운 점이 있습니다. HumanActivity 에 담당자를 지정하여 인스턴스를 실행시킬 수 있는 방안이 있으면 알려주시면 감사하겠습니다...

SeungpilPark commented 7 years ago

vue-datapicker 버리고, 가 더 깔끔하네용.

Lusky87 commented 7 years ago

default

Instance Filter를 구현하면서 시작일과 종료일의 검색이 필요했고 '\<md-input>' 의 type속성중 date를 사용하기로 하고 (크롬브라우저 사용원활) 적용하니 input은 '2017-10-18' 과 같은 String을 출력하였고 실제 Repository에서 Param을 String으로 받았으나 형변환 오류를 뱉었습니다.

이후 javascript Date변환 및 Sql Query 변환을 찾아보다보니 javascript에서는 Date로 변환시 "Wed Oct 18 2017 14:37:21 GMT+0900 (대한민국 표준시)" 과 같은 형식으로 변환이 되었고 parameter로 보낼시 Encoding이 제대로 되지않는 결과가 발생하여 JPA param을 받는 부분을 찾다보니 Entity에서 지금과같은 Annotation 선언부분을 찾았습니다.

@Temporal(TemporalType.TIMESTAMP)
    Date startedDate;

    @Temporal(TemporalType.TIMESTAMP)
    Date finishedDate;

자바에서는 모두 Date 객체 이지만, \@Temporal이라는 애노테이션을 사용하여, DB 타입에 맞도록 매핑할 수 있습니다.

Temporal 내부의 TemporalType은 아래와 같은 부분을 적용할 수 있습니다.

TemporalType.Date : 년-월-일 의 date 타입 TemporalType.Time : 시:분:초 의 time 타입 TemporalType.TIMESTAMP : date + time 의 timestamp(datetime) 타입

감사합니다.

SeungpilPark commented 7 years ago

Temporal 사용 후 인스턴스 저장,검색 모두 잘 돌아가네요. 수고하셨습니다.

이제, 담당자 검색을 해야 하는데, 담당자가 먼저 지정이 되어있어야 하겠네요.

22 에 대표님께서 코멘트를 달아주셨네요.

Lusky87 commented 7 years ago

현재 InstanceFilter 에 대한 부분은 어느정도 정리가되었습니다.

시작자와 현담당자의 endpoint 값을 http://localhost:8080/instances 에서 받아오지 못하고있는것을

확인하였습니다. endpoint부분의 추가가 필요합니다.