Hi
Find the below corrections in passing parameters and calling out in deferred calls,
First change the procedure as below,
PROCEDURE SFD_EV_SC_053(attr_ VARCHAR2)
Assigning values to Attr_ as below,
Client_SYS.Add_To_Attr('P_ORDER_NO', '&NEW:ORDER_NO' , attr_);
Client_SYS.Add_To_Attr('P_LINE_NO', '&NEW:LINE_NO' , attr_);
Client_SYS.Add_To_Attr('P_REL_NO', '&NEW:REL_NO' , attr_);
Client_SYS.Add_To_Attr('P_LINE_ITEM_NO', '&NEW:LINE_ITEM_NO' , attr_);
Client_SYS.Add_To_Attr('P_SHIPMENT_ID', v_shipment_id , attr_);
transaction_sys.deferred_call('MYPACKAGE_API.SFD_EV_SC_053','PARAMETER',attr_ ,'#SQL Treatment');
Inside the stored procedure declare variables for above input parameters, then extract the value from attr_ something like below,
DECLARE
p_order_no_ VARCHAR2(100);
p_line_no_ VARCHAR2(100);
p_rel_no_ VARCHAR2(100);
p_line_item_ VARCHAR2(100);
p_shipment_id_ FLOAT;
BEGIN
p_order_no_ := Client_SYS.Get_Item_Value('P_ORDER_NO', attr_);
p_line_no_ := Client_SYS.Get_Item_Value('P_LINE_NO’, attr_);
p_rel_no_ := Client_SYS.Get_Item_Value('P_REL_NO', attr_);
p_line_item_ := Client_SYS.Get_Item_Value('P_LINE_ITEM_NO', attr_);
p_shipment_id_ := Client_SYS.Get_Item_Value('P_SHIPMENT_ID', attr_);
This should pretty much address your issue.
Thanks, and Best Regards,
Shehan
Hello @EntShehaM
I didn’t know this synthax and sounds interesting, but I still have a question : in the case in which I need to get the value of P_SHIPMENT_ID in a direct call, is that possible to get it?
Hi @romsar
I’m not 100% clear of your requirement, assume you are trying to get the Customer Order connected Shipment data. As per the understanding, you are in need of getting shipment ID using a function. In standard I don’t think we have a method to retrieve data by passing CO no, line no, rel no and line item no. You can retrieve backwards though, by passing shipment id and line no there’s a possibility of getting the connected customer order info,
SHIPMENT_LINE_API.Get_Source_Ref1(shipment_id_ => , shipment_line_no_ => );
Either you can get the info using a cursor or may have to write a custom logic.
Hope this is what you mean by direct call.
Let me know if this helps what you looking for.
Thanks, and Best Regards,
Shehan
If you do not want to change the parameters you could use a PLSQL block to send into the deferred job in the event instead. Something like this:
DECLARE
attr_ VARCHAR2(32000);
sql_msg_ VARCHAR2(32000);
stmt_ VARCHAR2(32000);
BEGIN
stmt_ :=
'DECLARE
shipment_id_ NUMBER;
BEGIN
MYPACKAGE_API.SFD_EV_SC_053(''&NEW:ORDER_NO'',''&NEW:LINE_NO'',''&NEW:REL_NO'',''&NEW:LINE_ITEM_NO'', shipment_id_);
END;';
sql_msg_ := Message_SYS.Construct('CALL_SFD');
Message_SYS.Add_Attribute(sql_msg_, 'SQL', stmt_);
Client_SYS.Clear_Attr(attr_);
Client_SYS.Add_To_Attr('SQL_DATA_', sql_msg_, attr_);
Client_SYS.Add_To_Attr('MSG_', '', attr_);
Transaction_SYS.Deferred_Call('Fnd_Event_Action_API.Action_Executeonlinesql', 'PARAMETER', attr_,
Language_SYS.Translate_Constant('Event', 'DESCRIPTION: #SQL Treatment' ));
END;