In IFS Cloud (24R2), we have a Migration Job to load our Fixed assets in. We want a custom PLSQL job to do the equivalent of clicking the “Investment” command button, but we are struggling to get this to work.
We have tried running set_investment from finite_state_machine, and also by creating a background job. Neither work.
Here is my code (from FaObject-Cust.plsql):
@Override
PROCEDURE Finite_State_Machine___ (
rec_ IN OUT fa_object_tab%ROWTYPE,
event_ IN VARCHAR2,
attr_ IN OUT VARCHAR2 )
IS
info_ VARCHAR2(32000) := NULL;
rowkey_ VARCHAR2(32000) := NULL;
objid_ VARCHAR2(32000) := NULL;
objversion_ VARCHAR2(32000) := NULL;
BEGIN
--Add pre-processing code here
super(rec_, event_, attr_);
--Add post-processing code here
IF rec_.rowstate = 'SystemStart'
THEN
Fa_Object_API.Get_Id_Version_By_Keys___ ( objid_ , objversion_, rec_.company, rec_.object_id);
--method #1
Client_SYS.Clear_Attr(attr_);
Client_SYS.Add_To_Attr('ROWSTATE', rec_.rowstate, attr_);
--
Client_SYS.Add_To_Attr('OBJID', objid_, attr_);
Client_SYS.Add_To_Attr('OBJVERSION', objversion_, attr_);
Client_SYS.Add_To_Attr('ROWKEY', rowkey_, attr_);
Transaction_Sys.Deferred_Call( procedure_name_ => 'fa_object_api.c_set_investment',
argument_type_db_ => 'ATTRIBUTE',
arguments_ => attr_,
description_ => 'Set investment flag for '||rec_.object_id );
--method #2
Client_SYS.Clear_Attr(attr_);
Client_SYS.Add_To_Attr('ACTION', 'INVESTMENT', attr_);
Client_SYS.Add_To_Attr('OBJID', objid_, attr_);
Client_SYS.Add_To_Attr('OBJVERSION', objversion_, attr_);
Client_SYS.Add_To_Attr('ACTION', 'INVESTMENT', attr_);
Transaction_SYS.Deferred_Call(procedure_name_ => 'Fa_Object_API.Set_Investment__;',
argument_type_db_ => 'ATTRIBUTE',
arguments_ => attr_,
description_ => 'Move FA object to Investment state');
END IF;
END Finite_State_Machine___;
PROCEDURE c_set_investment(attr_ IN VARCHAR2)
IS
info_ VARCHAR2(32000) := NULL;
attr3_ VARCHAR2(32000);
objid_ VARCHAR2(32000) := NULL;
objversion_ VARCHAR2(32000) := NULL;
rowkey_ VARCHAR2(32000) := NULL;
CURSOR get_data IS
SELECT rowid, rowversion
FROM fa_object_tab
WHERE rowkey = rowkey_;
BEGIN
NULL;
Transaction_SYS.Log_Status_Info(' rowkey_ = ' ||rowkey_, 'INFO');
objid_ := Client_SYS.Get_Item_Value('OBJID', attr_);
objversion_ := Client_SYS.Get_Item_Value('OBJVERSION', attr_);
Client_SYS.Clear_Attr(attr3_);
Client_SYS.Add_To_Attr('OBJID', objid_ , attr3_);
Client_SYS.Add_To_Attr('OBJVERSION', objversion_ , attr3_);
Client_SYS.Add_To_Attr('ACTION', 'DO' , attr3_);
Transaction_SYS.Log_Status_Info(' attr3_ = ' ||attr3_, 'INFO');
fa_object_api.Set_Investment__(info_,objid_, objversion_, attr3_, 'DO' );
END c_set_investment;
Incidentally, if we go to the UI after running the mig job to load the Fixed Asset in using the Mig Job, we can click on the “Investment” command button.
BTW , we are trying to automate this as our FA manager may load hundred of records at a time.
Any thoughts?