PeopleSoft doesn’t really give up how to migrate Fluid Forms. There are some posts on Oracle support, but I’ve found some discrepencies. This is a living document on how to migrate them.

Also see the previous post, which is on The Correct Way to Delete Fluid Forms.

1 The Export DMS

set log c:\temp\FluidForms.Export.log;
set output c:\temp\FluidForms.dat;

EXPORT FORM_TYPE WHERE FORM_TYPE IN ('FORMNAME');  
EXPORT FORM_TYPE_LG WHERE FORM_TYPE IN ('FORMNAME');
EXPORT FORM_TYPE_ATTCH WHERE FORM_TYPE IN ('FORMNAME');
EXPORT FORM_TYPE_AT_LG WHERE FORM_TYPE IN ('FORMNAME');

EXPORT EOFM_FORMROLE WHERE FORM_TYPE IN ('FORMNAME');  
EXPORT EOFM_TILE_IMG WHERE FORM_TYPE IN ('FORMNAME');  

EXPORT FS_SD_REC WHERE SD_RECNAME IN ('FORMNAME');  
EXPORT FS_SD_REC_LG WHERE SD_RECNAME IN ('FORMNAME');
EXPORT FS_SD_RECFLD WHERE SD_RECNAME IN ('FORMNAME');  
EXPORT FS_SD_RECFLD_LG WHERE SD_RECNAME IN ('FORMNAME'); 
EXPORT FS_SD_FLDCD WHERE SD_RECNAME IN ('FORMNAME');  
EXPORT FS_SD_FLDCD_LG WHERE SD_RECNAME IN ('FORMNAME'); 
EXPORT FS_SD_FLDPC WHERE SD_RECNAME IN ('FORMNAME');  

EXPORT FS_SD_GRP WHERE SD_GRP_NAME IN ('FORMNAME');  
EXPORT FS_SD_GRP_LG WHERE SD_GRP_NAME IN ('FORMNAME');
EXPORT FS_SD_GRPFLD WHERE SD_GRP_NAME IN ('FORMNAME');  
EXPORT FS_SD_GRPFLD_LG WHERE SD_GRP_NAME IN ('FORMNAME');
EXPORT FS_SD_PGGRP WHERE PNLGRPNAME = 'FORM_ADD' AND SD_GRP_NAME IN ('FORMNAME');  

-- Note: this is *before DELETE FS_SD_PGGRP on the import DMS.
EXPORT EOCF_DE_NATIVE WHERE EOCF_NATIVE_CODE LIKE '%FORMNAME%';
EXPORT EOCF_PHRASE_DFN WHERE EOCF_PHRASE_ID IN (SELECT B.EOCF_PHRASE_ID FROM PS_FS_SD_PGGRP B WHERE B.PNLGRPNAME = 'FORM_ADD' AND B.SD_GRP_NAME IN ('FORMNAME'));

-- Prompt Records: All, not form specific
--EXPORT PS_FS_SD_PROMPTREC; -- << Careful!

-- Approval Workflow Engine:
EXPORT EOAW_PATH WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');  
EXPORT EOAW_PATH_LNG WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
EXPORT EOAW_PRCS WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');  
EXPORT EOAW_PRCS_LNG WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
EXPORT EOAW_STAGE WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');  
EXPORT EOAW_STEP WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');  
EXPORT EOAW_STEP_LNG WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
EXPORT EOAW_STG_LNG WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
EXPORT EOAW_TIMEOUT WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
EXPORT EOAW_TIMEOUTDEF WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
EXPORT EOAWCRTA WHERE EOAWCRTA_ID LIKE '%EOFM%FORMNAME%';  
EXPORT EOAWCRTA_LNG WHERE EOAWCRTA_ID LIKE '%EOFM%FORMNAME%';  
EXPORT EOAWCRTA_REC WHERE EOAWCRTA_ID LIKE '%EOFM%FORMNAME%';  
EXPORT EOAWCRTA_RECLNG WHERE EOAWCRTA_ID LIKE '%EOFM%FORMNAME%';
EXPORT EOAWCRTA_VAL WHERE EOAWCRTA_ID LIKE '%EOFM%FORMNAME%';  
EXPORT EOAW_NOTIFYDEF WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
EXPORT EOAW_NOT_USRDEF WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');

-- User Lists
EXPORT EOAWUSER_LIST WHERE EOAWUSER_LIST_ID IN ('Your', 'User', 'Lists');

--Generic Templates
EXPORT WL_TEMPLATE_GEN WHERE WL_TEMPLATE_ID = 'Your Template';
EXPORT WL_TEMPL_GEN_TK WHERE WL_TEMPLATE_ID = 'Your Template';
EXPORT WL_TEMPL_GEN_RS WHERE WL_TEMPLATE_ID = 'Your Template';

2 The Import DMS

Note the extra “– Clean up any and all orphaned phrases.” near the end.

set log c:\temp\FluidForms.Import.log;
set input c:\temp\FluidForms.dat;

DELETE PS_FORM_TYPE WHERE FORM_TYPE IN ('FORMNAME');  
DELETE PS_FORM_TYPE_LG WHERE FORM_TYPE IN ('FORMNAME');
DELETE PS_FORM_TYPE_ATTCH WHERE FORM_TYPE IN ('FORMNAME');
DELETE PS_FORM_TYPE_AT_LG WHERE FORM_TYPE IN ('FORMNAME');

DELETE PS_EOFM_FORMROLE WHERE FORM_TYPE IN ('FORMNAME');  
DELETE PS_EOFM_TILE_IMG WHERE FORM_TYPE IN ('FORMNAME');  

DELETE PS_FS_SD_REC WHERE SD_RECNAME IN ('FORMNAME');  
DELETE PS_FS_SD_REC_LG WHERE SD_RECNAME IN ('FORMNAME');
DELETE PS_FS_SD_RECFLD WHERE SD_RECNAME IN ('FORMNAME');  
DELETE PS_FS_SD_RECFLD_LG WHERE SD_RECNAME IN ('FORMNAME'); 
DELETE PS_FS_SD_FLDCD WHERE SD_RECNAME IN ('FORMNAME');  
DELETE PS_FS_SD_FLDCD_LG WHERE SD_RECNAME IN ('FORMNAME'); 
DELETE PS_FS_SD_FLDPC WHERE SD_RECNAME IN ('FORMNAME');  

-- Note: this is *after EXPORT FS_SD_PGGRP on the export DMS.
DELETE PS_EOCF_DE_NATIVE WHERE EOCF_NATIVE_CODE LIKE '%FORMNAME%';
DELETE PS_EOCF_PHRASE_DFN WHERE EOCF_PHRASE_ID IN (SELECT B.EOCF_PHRASE_ID FROM PS_FS_SD_PGGRP B WHERE B.PNLGRPNAME = 'FORM_ADD' AND B.SD_GRP_NAME IN ('FORMNAME'));

DELETE PS_FS_SD_GRP WHERE SD_GRP_NAME IN ('FORMNAME');  
DELETE PS_FS_SD_GRP_LG WHERE SD_GRP_NAME IN ('FORMNAME');
DELETE PS_FS_SD_GRPFLD WHERE SD_GRP_NAME IN ('FORMNAME');  
DELETE PS_FS_SD_GRPFLD_LG WHERE SD_GRP_NAME IN ('FORMNAME');
DELETE PS_FS_SD_PGGRP WHERE PNLGRPNAME = 'FORM_ADD' AND SD_GRP_NAME IN ('FORMNAME');  


-- Prompt Records: All, not form specific
--DELETE PS_PS_FS_SD_PROMPTREC; -- << Careful!

-- AWE: 
DELETE PS_EOAW_PATH WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');  
DELETE PS_EOAW_PATH_LNG WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
DELETE PS_EOAW_PRCS WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');  
DELETE PS_EOAW_PRCS_LNG WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
DELETE PS_EOAW_STAGE WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');  
DELETE PS_EOAW_STEP WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');  
DELETE PS_EOAW_STEP_LNG WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
DELETE PS_EOAW_STG_LNG WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
DELETE PS_EOAW_TIMEOUT WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
DELETE PS_EOAW_TIMEOUTDEF WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
DELETE PS_EOAWCRTA WHERE EOAWCRTA_ID like '%EOFM%FORMNAME%';  
DELETE PS_EOAWCRTA_LNG WHERE EOAWCRTA_ID like '%EOFM%FORMNAME%';  
DELETE PS_EOAWCRTA_REC WHERE EOAWCRTA_ID like '%EOFM%FORMNAME%';  
DELETE PS_EOAWCRTA_RECLNG WHERE EOAWCRTA_ID like '%EOFM%FORMNAME%';
DELETE PS_EOAWCRTA_VAL WHERE EOAWCRTA_ID like '%EOFM%FORMNAME%';  
DELETE PS_EOAW_NOTIFYDEF WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');
DELETE PS_EOAW_NOT_USRDEF WHERE EOAWPRCS_ID = 'EOFM' AND EOAWDEFN_ID IN ('FORMNAME');

-- User Lists
DELETE PS_EOAWUSER_LIST WHERE EOAWUSER_LIST_ID IN ('Your', 'User', 'Lists');

--Generic Templates
DELETE PS_WL_TEMPLATE_GEN WHERE WL_TEMPLATE_ID = 'Your Template';
DELETE PS_WL_TEMPL_GEN_TK WHERE WL_TEMPLATE_ID = 'Your Template';
DELETE PS_WL_TEMPL_GEN_RS WHERE WL_TEMPLATE_ID = 'Your Template';

IMPORT *;

-- Clean up any and all orphaned phrases.
DELETE A 
FROM PS_EOCF_PHRASE_DFN A 
WHERE EOCF_LASTUPDOPRID NOT LIKE 'PS%'
AND EXISTS	
	(SELECT 1
	FROM PS_FS_SD_PGGRP B
	WHERE B.PNLGRPNAME = 'FORM_ADD' AND B.MARKET = 'GBL' AND B.PNLNAME ='FORM'
	AND B.EOCF_PHRASE_ID = A.EOCF_PHRASE_ID)
AND NOT EXISTS 
	(SELECT 1 
	FROM PS_EOCF_DE_NATIVE C
	WHERE C.EOCF_CODE_PTR = A.EOCF_CODE_PTR)
;

DELETE A 
FROM PS_FS_SD_PGGRP A
WHERE A.PNLGRPNAME = 'FORM_ADD' 
AND A.MARKET = 'GBL' 
AND A.PNLNAME ='FORM'
AND NOT EXISTS
	(SELECT 1
	FROM PS_EOCF_PHRASE_DFN B
	WHERE B.EOCF_PHRASE_ID = A.EOCF_PHRASE_ID)
;

3. The PeopleCode

You’ll also need to clear some Rowset cache. In the following AppClass method temporarily comment out the If statement so that the cache gets created again.

You can trigger it by filling out any new form in the ‘My Forms’ tile/component.

** @ FS_SD:Runtime:Utilities:SDCachedMetaDataReader._getComponentRowset()**

method _getComponentRowset
   /+ Returns Rowset +/
   ...
   
   &cache = GetRowsetCache(&strCacheName);
   &rowset = &cache.Get();
   /*   If &rowset = Null Then */
   
   ...recreates cache
   
   /*  End-If; */
   
   Return &rowset;
end-method;   

After you’ve filled in a new form you can revert the PeopleCode back to delivered (optional in development, really).