2016-08-29 2 views
0

"every"문을 부정하는 간단한 방법이 있습니까? 들어오는 구매 주문 및 요청을 확인하는 제어 도구를 구현하려고합니다. 각 구매 주문 (PO)에 대해 이전에 요청 (REQ)을 작성해야합니다. 다음 코드는 (긍정) 일치하는 PO/REQ 쌍을 감지하지만 해당 REQ (제외 어)가없는 모든 PO가 필요합니다."모든"진술에 대한 부정? WSO2 CEP/Siddhi

from every a1 = PO -> b1 = REQ[a1.ITEM_ID == b1.ITEM_ID and a1.QUANTITY == b1.QUANTITY and a1.CREATED_BY == b1.CREATED_BY] within 1 day select 'No REQ created before' as ALERT_MESSAGE insert into ALERT; 

답변

0

sample on detecting non-occurrences with patterns을 참조 할 수 있습니다. 그러나 PO 이벤트 이전에 REQ 이벤트가 왔는지 확인하려면 사용자의 요구 사항을 충족시키기 위해 메모리 이벤트 테이블을 사용해야 할 수도 있습니다. 인 메모리 테이블을 사용하여 동일한 결과를 얻으려면 다음 샘플을 참조하십시오.

@Import('REQStream:1.0.0') 
define stream REQ (ITEM_ID int, QUANTITY int, CREATED_BY string); 

@Import('POStream:1.0.0') 
define stream PO (ITEM_ID int, QUANTITY int, CREATED_BY string); 

@Export('ALERTStream:1.0.0') 
define stream ALERT (ITEM_ID int, ALERT string); 

define table REQ_TABLE (ITEM_ID int, QUANTITY int, CREATED_BY string); 

define trigger DAILY_TRIGGER at every 1 day; 

from REQ 
insert into REQ_TABLE; 

-- check whether request exists before the purchase 
from PO[not((REQ_TABLE.ITEM_ID == ITEM_ID and REQ_TABLE.QUANTITY == QUANTITY and REQ_TABLE.CREATED_BY == CREATED_BY) in REQ_TABLE)] 
select ITEM_ID, 'No REQ created before' as ALERT 
insert into ALERT; 

-- purge reauests table daily 
from DAILY_TRIGGER join REQ_TABLE 
select REQ_TABLE.ITEM_ID, REQ_TABLE.QUANTITY, REQ_TABLE.CREATED_BY 
insert into PURGE_STREAM; 

-- if there's no matching purchase order came up for previous day 
from PURGE_STREAM 
select ITEM_ID, 'No purchase order came up for a day' as ALERT 
insert into ALERT; 

from PO 
insert into DEL_STREAM; 

from PURGE_STREAM 
insert into DEL_STREAM; 

-- delete corresponding request from table 
from DEL_STREAM 
delete REQ_TABLE 
    on REQ_TABLE.ITEM_ID == ITEM_ID and REQ_TABLE.QUANTITY == QUANTITY and REQ_TABLE.CREATED_BY == CREATED_BY; 
+0

감사합니다. 나는 당신의 코드를 재사용하지는 않았지만 그 뒤에 숨은 아이디어는 내가이 문제를 해결하는 것을 도왔다. – Wenzel