What is "TROLL"??????
You must see:
FUNCTION IACORE(eoBufferia IN OUT typeeodata) RETURN NUMBER
IS
CURSOR cur_GetRoutingCondition (idc_workflow IN VARCHAR2, idc_operation_node IN VARCHAR2) IS
SELECT * FROM WF_CONDITION
WHERE ID_WORKFLOW = idc_workflow AND ID_OPERATION_NODE = idc_operation_node ;
rec_GetRoutingCondition cur_GetRoutingCondition%ROWTYPE;
CURSOR cur_DoBufferiaAssign (idc_workflow IN VARCHAR2, idc_operation_node IN VARCHAR2) IS
SELECT * FROM WF_ASSIGNEMENT
WHERE ID_WORKFLOW = idc_workflow AND ID_OPERATION_NODE = idc_operation_node ;
rec_DoBufferiaAssign cur_DoBufferiaAssign%ROWTYPE;
NEXT_NODE NUMBER;
NEXT_NODE_CK NUMBER;
STOP_NODE NUMBER;
OPERATION VARCHAR2(256);
OPERATION_CALL VARCHAR2(256);
TYPE_NODE VARCHAR2(32);
WORKFLOW VARCHAR2(32);
LINE VARCHAR2(256);
STATUS_WF_V VARCHAR2(3);
pID_CHAIN_NODE NUMBER;
IA_TID VARCHAR2 (64);
IA_TID_MICRO VARCHAR2 (64);
RET_CODE_DEFAULT NUMBER;
RET_CODE NUMBER;
RetVal1 NUMBER;
StatementExc VARCHAR2(256);
SCHEMA_FUNCTION VARCHAR2(32);
PACKAGE_FUNCTION VARCHAR2(32);
DBLINK_FUNCTION VARCHAR2(32);
FIRST_NODE_FLAG VARCHAR2(2):='NO';
ID_DEBUG_SOURCE NUMBER;
MAPIN_KEYP VARCHAR2(1024);
headerBufferia typebufferia;
assignBufferia typebufferia;
checkBufferia typebufferia;
rec_WfNode WF_NODE%ROWTYPE;
rec_WfFunctionSourceCode WF_FUNCTION_SOURCE_CODE%ROWTYPE;
rec_WfLogger WF_LOGGER%ROWTYPE;
rec_WfBusiness WF_BUSINESS%ROWTYPE;
rec_WfFieldMapping WF_FIELDMAPPING%ROWTYPE;
BEGIN
headerBufferia := eoBufferia(1);
WORKFLOW := Frameworkia.getvalue(headerBufferia, 'ID_WORKFLOW');
---- DETERMINO QUALE NODO INVOCARE
pID_CHAIN_NODE := Frameworkia.getvalue(headerBufferia, 'WF_NODE_ID');
SE IL NODO E' NULL ALLORA E' IL PRIMO NODO
IF pID_CHAIN_NODE IS NULL THEN
-------DETERMINO HANDLER E FILENAME PER IL LOGGER
SELECT * INTO rec_WfLogger FROM WF_LOGGER
WHERE ID_WORKFLOW = WORKFLOW;
-- rec_WfLogger.ID_WORKFLOW
-- rec_WfLogger.ID_DEBUG_LEVEL
-- rec_WfLogger.ID_DIRHANDLER
-- rec_WfLogger.ID_FILENAME
--------INSERISCO NELL'HEADER
Frameworkia.setvalue(headerBufferia,'ID_DEBUG_WF',rec_WfLogger.ID_DEBUG_LEVEL);
Frameworkia.setvalue(headerBufferia,'ID_DIRHANDLER',rec_WfLogger.ID_DIRHANDLER);
Frameworkia.setvalue(headerBufferia,'ID_FILENAME',rec_WfLogger.ID_FILENAME);
Frameworkia.setvalue(headerBufferia,'CHARACTER_EVIDENCE','§§§§§§§§§§§§§§§§§§§§');
-------DETERMINO L'ID NODE
SELECT WF_NODE_ID INTO pID_CHAIN_NODE FROM WF_NODE
WHERE ID_WORKFLOW = WORKFLOW AND WF_FIRST_NODE = 'YES';
SELECT * INTO rec_WfNode FROM WF_NODE
WHERE ID_WORKFLOW = WORKFLOW AND WF_FIRST_NODE = 'YES';
Frameworkia.setvalue(headerBufferia,'WF_NODE_ID', rec_WfNode.WF_NODE_ID);
SELECT b.STATUS INTO STATUS_WF_V FROM WF_NODE a, WF_NAME b
WHERE a.ID_WORKFLOW = WORKFLOW AND a.WF_NODE_ID = rec_WfNode.WF_NODE_ID AND
a.ID_WORKFLOW = b.ID_WORKFLOW;
IF STATUS_WF_V = 'OFF' THEN
RETURN -1;
END IF;
IA_TID := Frameworkia.getvalue(headerBufferia, 'IA_TID');
RET_CODE_DEFAULT := 0;
RET_CODE := 0;
Frameworkia.setvalue(headerBufferia,'RET_CODE_DEFAULT',RET_CODE_DEFAULT);
Frameworkia.setvalue(headerBufferia,'RET_CODE',RET_CODE);
IF IA_TID IS NULL THEN
IA_TID := 'TIA'||dbms_random.string('U', 1*1+6)||TO_CHAR(systimestamp ,'YYYYMMDDHH24MISSFF6');
Frameworkia.setvalue(headerBufferia,'IA_TID',IA_TID);
END IF;
pID_CHAIN_NODE:=rec_WfNode.WF_NODE_ID;
Frameworkia.setvalue(headerBufferia,'ID_DEBUG_LEVEL',5);
Frameworkia.setvalue(headerBufferia,'ID_LOG_DESC','LINE 446::: FINE OPERAZIONI INIT HEADER BUFFERIA');
eoBufferia(1):=headerBufferia;
retval1:=logger(eoBufferia);
FIRST_NODE_FLAG:='SI';
END IF;
SE IL NODO E' 0 ALLORA ESCO DA TUTTI I NODI APERTI FINORA
IF pID_CHAIN_NODE > 0 THEN
IA_TID_MICRO := 'MICROTID'||dbms_random.string('U', 1*1+11)||TO_CHAR(systimestamp ,'DDHH24MISSFF6');
Frameworkia.setvalue(headerBufferia,'IA_TID_MICRO',IA_TID_MICRO);
SELECT * INTO rec_WfNode FROM WF_NODE
WHERE ID_WORKFLOW = WORKFLOW AND WF_NODE_ID = pID_CHAIN_NODE;
--- rec_WfNode.WF_NODE_ID
--- rec_WfNode.WF_FIRST_NODE
--- rec_WfNode.ID_WORKFLOW
--- rec_WfNode.ID_OPERATION_NODE
--- rec_WfNode.ID_NEXT_NODE_ID
--- rec_WfNode.ID_TYPE_NODE
--- rec_WfNode.ID_DEBUG_LEVEL
--- rec_WfNode.ID_NODE_DESC
NEXT_NODE:=rec_WfNode.ID_NEXT_NODE_ID;
TYPE_NODE:=rec_WfNode.ID_TYPE_NODE;
Frameworkia.setvalue(headerBufferia,'ID_OPERATION_NODE',rec_WfNode.ID_OPERATION_NODE);
Frameworkia.setvalue(headerBufferia,'ID_TYPE_NODE',rec_WfNode.ID_TYPE_NODE);
Frameworkia.setvalue(headerBufferia,'CHARACTER_EVIDENCE','VVVVVVVVVVVVVVVV');
Frameworkia.setvalue(headerBufferia,'ID_DEBUG_LEVEL',4);
Frameworkia.setvalue(headerBufferia,'ID_LOG_DESC','INPUT');
eoBufferia(1):=headerBufferia;
retval1:=logger(eoBufferia);
CASE TYPE_NODE
WHEN 'EODATA' THEN
FOR rec_DoBufferiaAssign IN cur_DoBufferiaAssign (rec_WfNode.ID_WORKFLOW, rec_WfNode.ID_OPERATION_NODE )
LOOP
IF rec_DoBufferiaAssign.fieldvalueN Is Not NULL THEN
assignBufferia:=eoBufferia(rec_DoBufferiaAssign.index_bufferia);
StatementExc:='begin Frameworkia.setvalue(:1,:2,:3); end;';
EXECUTE IMMEDIATE StatementExc USING IN OUT assignBufferia, rec_DoBufferiaAssign.fieldname, rec_DoBufferiaAssign.fieldvalueN ;
eoBufferia(rec_DoBufferiaAssign.index_bufferia):=assignBufferia;
END IF;
IF rec_DoBufferiaAssign.fieldvalueV Is Not NULL THEN
assignBufferia:=eoBufferia(rec_DoBufferiaAssign.index_bufferia);
StatementExc:='begin Frameworkia.setvalue(:1,:2,:3); end;';
EXECUTE IMMEDIATE StatementExc USING IN OUT assignBufferia, rec_DoBufferiaAssign.fieldname, rec_DoBufferiaAssign.fieldvalueV ;
eoBufferia(rec_DoBufferiaAssign.index_bufferia):=assignBufferia;
END IF;
IF rec_DoBufferiaAssign.fieldvalueD Is Not NULL THEN
assignBufferia:=eoBufferia(rec_DoBufferiaAssign.index_bufferia);
StatementExc:='begin Frameworkia.setvalue(:1,:2,:3); end;';
EXECUTE IMMEDIATE StatementExc USING IN OUT assignBufferia, rec_DoBufferiaAssign.fieldname, rec_DoBufferiaAssign.fieldvalueD ;
eoBufferia(rec_DoBufferiaAssign.index_bufferia):=assignBufferia;
END IF;
IF rec_DoBufferiaAssign.fieldnamev Is Not NULL THEN
assignBufferia:=eoBufferia(rec_DoBufferiaAssign.index_bufferia);
StatementExc:='begin Frameworkia.setvalue(:1,:2,:3); end;';
EXECUTE IMMEDIATE StatementExc USING IN OUT assignBufferia, rec_DoBufferiaAssign.fieldname, Frameworkia.getvalue(eoBufferia(rec_DoBufferiaAssign.index_bufferia_src), rec_DoBufferiaAssign.fieldnamev) ;
eoBufferia(rec_DoBufferiaAssign.index_bufferia):=assignBufferia;
END IF ;
Frameworkia.setvalue(headerBufferia,'CHARACTER_EVIDENCE','====================');
Frameworkia.setvalue(headerBufferia,'ID_DEBUG_LEVEL',4);
Frameworkia.setvalue(headerBufferia,'ID_LOG_DESC','LINE 482:::BUSINESS');
eoBufferia(1):=headerBufferia;
retval1:=logger(eoBufferia);
END LOOP;
WHEN 'CALL' THEN
SELECT b.OPERATION_CALL INTO OPERATION_CALL FROM WF_NODE a, WF_BUSINESS b
WHERE a.ID_WORKFLOW = rec_WfNode.ID_WORKFLOW
AND a.WF_NODE_ID = rec_WfNode.WF_NODE_ID
AND a.ID_OPERATION_NODE = b.ID_OPERATION_NODE;
SELECT * INTO rec_WfFunctionSourceCode FROM WF_FUNCTION_SOURCE_CODE b
WHERE b.OPERATION_FUNCTION_CODE = OPERATION_CALL;
-- rec_WfFunctionSourceCode.OPERATION_FUNCTION_CODE
-- rec_WfFunctionSourceCode.PACKAGE
-- rec_WfFunctionSourceCode.SCHEMA
-- rec_WfFunctionSourceCode.DBLINK
-- rec_WfFunctionSourceCode.ID_DEBUG_LEVEL
Frameworkia.setvalue(headerBufferia,'ID_DEBUG_WF_SAVED',Frameworkia.getvalue(headerBufferia, 'ID_DEBUG_WF'));
Frameworkia.setvalue(headerBufferia,'ID_DEBUG_WF',rec_WfFunctionSourceCode.ID_DEBUG_LEVEL);
Frameworkia.setvalue(headerBufferia,'ID_FUNCTION_SOURCECODE',rec_WfFunctionSourceCode.OPERATION_FUNCTION_CODE);
Frameworkia.setvalue(headerBufferia,'CHARACTER_EVIDENCE','*******************');
Frameworkia.setvalue(headerBufferia,'ID_DEBUG_LEVEL',4);
Frameworkia.setvalue(headerBufferia,'ID_LOG_DESC','LINE 468:::BUSINESS');
eoBufferia(1):=headerBufferia;
retval1:=logger(eoBufferia);
StatementExc:='begin :1:='||rec_WfFunctionSourceCode.SCHEMA||'.'
||rec_WfFunctionSourceCode.PACKAGE||'.'
||OPERATION_CALL ||'(:2); end;';
EXECUTE IMMEDIATE StatementExc USING OUT RetVal1, IN OUT eoBufferia ;
Frameworkia.setvalue(headerBufferia, 'ID_FUNCTION_SOURCECODE');
Frameworkia.setvalue(headerBufferia,'RET_CODE',RetVal1);
Frameworkia.setvalue(headerBufferia,'ID_DEBUG_WF',Frameworkia.getvalue(headerBufferia, 'ID_DEBUG_WF_SAVED'));
WHEN 'IACALL' THEN
SELECT b.OPERATION_CALL INTO OPERATION FROM WF_NODE a, WF_BUSINESS b
WHERE a.ID_WORKFLOW = WORKFLOW AND a.WF_NODE_ID = pID_CHAIN_NODE AND
a.ID_OPERATION_NODE = b.ID_OPERATION_NODE;
eoBufferia(1):=headerBufferia;
StatementExc:='declare '
||' eosBufferia IASERVICE.typeeodata;'
||' begin '
||' eosBufferia:=:1;'
||' Frameworkia.setvalue(eosBufferia(1),''ID_WORKFLOW'',:2);'
||' Frameworkia.setvalue(eosBufferia(1),''WF_NODE_ID'');'
||' :3:=COREIA.IACORE(eosBufferia); '
||' end;';
EXECUTE IMMEDIATE StatementExc USING IN OUT eobufferia,IN OPERATION , OUT RetVal1 ;
WHEN 'CHECK' THEN
FOR rec_GetRoutingCondition IN cur_GetRoutingCondition (rec_WfNode.ID_WORKFLOW, rec_WfNode.ID_OPERATION_NODE ) LOOP
CASE rec_GetRoutingCondition.operator
WHEN '==' THEN
IF Frameworkia.getvalue(eoBufferia(rec_GetRoutingCondition.index_bufferia_field), rec_GetRoutingCondition.id_field) = Frameworkia.getvalue(eoBufferia(rec_GetRoutingCondition.index_bufferia_value), rec_GetRoutingCondition.id_value) THEN
NEXT_NODE := rec_GetRoutingCondition.id_next_node_id;
EXIT;
END IF;
WHEN 'ISNL' THEN
IF Frameworkia.getvalue(eoBufferia(rec_GetRoutingCondition.index_bufferia_field), rec_GetRoutingCondition.id_field) IS NULL THEN
NEXT_NODE := rec_GetRoutingCondition.id_next_node_id;
EXIT;
END IF;
WHEN 'ISNNL' THEN
IF Frameworkia.getvalue(eoBufferia(rec_GetRoutingCondition.index_bufferia_field), rec_GetRoutingCondition.id_field) IS NOT NULL THEN
NEXT_NODE := rec_GetRoutingCondition.id_next_node_id;
EXIT;
END IF;
WHEN '>' THEN
IF Frameworkia.getvalue(eoBufferia(rec_GetRoutingCondition.index_bufferia_field), rec_GetRoutingCondition.id_field) > Frameworkia.getvalue(eoBufferia(rec_GetRoutingCondition.index_bufferia_value), rec_GetRoutingCondition.id_value) THEN
NEXT_NODE := rec_GetRoutingCondition.id_next_node_id;
EXIT;
END IF;
WHEN '<'>=' THEN
IF Frameworkia.getvalue(eoBufferia(rec_GetRoutingCondition.index_bufferia_field), rec_GetRoutingCondition.id_field) >= Frameworkia.getvalue(eoBufferia(rec_GetRoutingCondition.index_bufferia_value), rec_GetRoutingCondition.id_value) THEN
NEXT_NODE := rec_GetRoutingCondition.id_next_node_id;
EXIT;
END IF;
WHEN '<=' THEN
IF Frameworkia.getvalue(eoBufferia(rec_GetRoutingCondition.index_bufferia_field), rec_GetRoutingCondition.id_field) <= Frameworkia.getvalue(eoBufferia(rec_GetRoutingCondition.index_bufferia_value), rec_GetRoutingCondition.id_value) THEN
NEXT_NODE := rec_GetRoutingCondition.id_next_node_id;
EXIT;
END IF;
WHEN '<>' THEN
IF Frameworkia.getvalue(eoBufferia(rec_GetRoutingCondition.index_bufferia_field), rec_GetRoutingCondition.id_field) Frameworkia.getvalue(eoBufferia(rec_GetRoutingCondition.index_bufferia_value), rec_GetRoutingCondition.id_value) THEN
NEXT_NODE := rec_GetRoutingCondition.id_next_node_id;
EXIT;
END IF;
END CASE;
Frameworkia.setvalue(eoBufferia(1),'ID_DEBUG_LEVEL',4);
Frameworkia.setvalue(eoBufferia(1),'ID_LOG_DESC','LINE 530::TOWARDS:'||NEXT_NODE);
Frameworkia.setvalue(eoBufferia(1),'CHARACTER_EVIDENCE','????????????????????');
retval1:=logger(eoBufferia);
END LOOP;
WHEN 'MAP' THEN
SELECT b.* INTO rec_WfBusiness FROM WF_NODE a, WF_BUSINESS b
WHERE a.ID_WORKFLOW = rec_WfNode.ID_WORKFLOW
AND a.WF_NODE_ID = rec_WfNode.WF_NODE_ID
AND a.ID_OPERATION_NODE = b.ID_OPERATION_NODE;
MAPIN_KEYp:= Frameworkia.getvalue(eoBufferia(rec_WfBusiness.INDEXBUFFERIAKEY), rec_WfBusiness.FIELDBUFFERIAKEY);
Begin
SELECT * INTO rec_WfFieldMapping FROM WF_FIELDMAPPING
WHERE --ID_WFNODE_PARENT = rec_WfNode.WF_NODE_ID
ID_WORKFLOW = rec_WfNode.ID_WORKFLOW
AND ID_OPERATION_NODE = rec_WfBusiness.ID_OPERATION_NODE
AND MAPIN_KEY = MAPIN_KEYp;
Frameworkia.setvalue(eoBufferia(rec_WfBusiness.INDEXBUFFERIAKEY), rec_WfBusiness.FIELDBUFFERIAKEY, rec_WfFieldMapping.MAPOUT_KEY);
exception when no_data_found then
begin
SELECT * INTO rec_WfFieldMapping FROM WF_FIELDMAPPING
WHERE --ID_WFNODE_PARENT = rec_WfNode.WF_NODE_ID
ID_WORKFLOW = rec_WfNode.ID_WORKFLOW
AND ID_OPERATION_NODE = rec_WfBusiness.ID_OPERATION_NODE
AND MAPIN_KEY = 'default';
Frameworkia.setvalue(eoBufferia(rec_WfBusiness.INDEXBUFFERIAKEY), rec_WfBusiness.FIELDBUFFERIAKEY, rec_WfFieldMapping.MAPOUT_KEY);
exception when no_data_found then
Frameworkia.setvalue(eoBufferia(rec_WfBusiness.INDEXBUFFERIAKEY), rec_WfBusiness.FIELDBUFFERIAKEY);
end;
end;
Frameworkia.setvalue(headerBufferia,'CHARACTER_EVIDENCE','####################');
Frameworkia.setvalue(headerBufferia,'ID_DEBUG_LEVEL',4);
Frameworkia.setvalue(headerBufferia,'ID_LOG_DESC','LINE 736:::MAP');
eoBufferia(1):=headerBufferia;
retval1:=logger(eoBufferia);
END CASE;
--
--
-- IN QUESTA FASE IL CORE PASSA AL PROSSIMO NODO
--
Frameworkia.setvalue(headerBufferia,'WF_NODE_ID',NEXT_NODE);
eoBufferia(1):=headerBufferia;
STOP_NODE:=IACORE(eoBufferia);
IF FIRST_NODE_FLAG = 'SI' THEN
Frameworkia.setvalue(eoBufferia(1),'ID_DEBUG_LEVEL',5);
Frameworkia.setvalue(eoBufferia(1),'ID_LOG_DESC','OUTPUT');
Frameworkia.setvalue(eoBufferia(1),'CHARACTER_EVIDENCE','§§§§§§§§§§§§§§§§§§§§');
Frameworkia.setvalue(headerBufferia,'IA_TID_MICRO');
retval1:=logger(eoBufferia);
END IF;
RetVal1:=STOP_NODE;
ELSE
RETURN 0;
END IF;
RETURN RetVal1;
EXCEPTION WHEN OTHERS THEN
--dbms_output.put_line('RetVal ----------IACORE-------------= ' || sqlerrm);
LINE := 'LINE 632: EXCEPTION COREIA :'||sqlerrm;
Frameworkia.setvalue(eoBufferia(1),'WF_NODE_ID',0);
Frameworkia.setvalue(eoBufferia(1),'ID_DEBUG_LEVEL',6);
Frameworkia.setvalue(eoBufferia(1),'ID_LOG_DESC',LINE);
RetVal1:=logger(eoBufferia);
ROLLBACK;
RETURN -1;
END;