| opPrimeKey | output | longchar | Primary Key field value of loaded record(s). Keys are chr(4) separated. Key fields are chr(2) separated. |
| oiReturnStatus | output | integer | Return status of the method. |
define buffer bsSSearchFilterField for t_sSSearchFilterField.
if oiReturnStatus = 0
then oiReturnStatus = -98.
for each t_sStoredSearch on error undo, return:
/* ================================================================= */
/* Ignore usrID in input, all received stored searches will be */
/* saved as shared. Lookup stored search by reference + name. */
/* When in create mode, skip lookup. */
/* ================================================================= */
if vcActivityCode <> "Create":U
then do:
vcFreeform = "for each StoredSearch where StoredSearch.Usr_ID = 0":U
+ " and StoredSearch.StoredSearchName = '":U + t_sStoredSearch.StoredSearchName + "'":U
+ " and StoredSearch.StoredSearchLookupRef = '":U + t_sStoredSearch.StoredSearchLookupRef + "'":U.
<M-8 run DataLoad (input '' (icRowids),
input '' (icPkeys),
input '' (icObjectIds),
input vcFreeform (icFreeform),
input yes (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BStoredSearch>
if viFcReturnSuper >= 0
then find first tStoredSearch where
tStoredSearch.Usr_ID = 0 and
tStoredSearch.StoredSearchName = t_sStoredSearch.StoredSearchName and
tStoredSearch.StoredSearchLookupRef = t_sStoredSearch.StoredSearchLookupRef no-error.
end.
/* ================================================================= */
/* When in delete mode, ignore input data. */
/* When stored search not found, do not return an error. */
/* ================================================================= */
if vcActivityCode = "Delete":U
then do:
if viFcReturnSuper = -4
then delete t_sStoredSearch.
else do:
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign t_sStoredSearch.tc_Rowid = tStoredSearch.tc_Rowid
t_sStoredSearch.tc_ParentRowid = ""
opPrimeKey = (if opPrimeKey = "" then "" else opPrimeKey + chr(4))
+ string(tStoredSearch.StoredSearch_ID).
end.
next.
end.
if vcActivityCode = "Create":U
or viFcReturnSuper = -4
then do:
/* ====================================================================== */
/* When stored search not found and in modify only mode, return an error. */
/* ====================================================================== */
if vcActivityCode = "Modify":U
then do:
<M-9 run SetMessage (input #T-1'Stored search with name $1 and reference $2 does not exist.':100(6802)T-1# (icMessage),
input t_sStoredSearch.StoredSearchName + chr(2) + t_sStoredSearch.StoredSearchLookupRef (icArguments),
input 'tStoredSearch.StoredSearchName':U (icFieldName),
input t_sStoredSearch.StoredSearchName (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input t_sStoredSearch.tc_Rowid (icRowid),
input 'BLF-215':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BStoredSearch>
assign oiReturnStatus = -1.
return.
end.
/* ================================================================= */
/* When stored search not found or in create mode, create it. */
/* ================================================================= */
<M-4 run AddDetailLine (input 'StoredSearch':U (icTable),
input '' (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BStoredSearch>
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign t_sStoredSearch.tc_Status = "N":U.
end.
else do:
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign t_sStoredSearch.tc_Status = "C":U.
end.
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
/* ================================================================= */
/* Update filter items : delete existing items */
/* ================================================================= */
for each tSSearchFilterField where
tSSearchFilterField.tc_ParentRowid = tStoredSearch.tc_Rowid:
assign tSSearchFilterField.tc_Status = "D":U.
end.
/* ================================================================= */
/* Update filter items : add new items */
/* ================================================================= */
assign viFFCount = 0.
for each t_sSSearchFilterField where
t_sSSearchFilterField.tc_ParentRowid = t_sStoredSearch.tc_Rowid
break by t_sSSearchFilterField.SSearchFilterFieldBusField on error undo, return:
assign viFFCount = viFFCount + 1.
if last-of (t_sSSearchFilterField.SSearchFilterFieldBusField)
then do:
if viFFCount = 1
then do:
/* ================================================================= */
/* When only one found, then it can be re-used, and tc_status is */
/* put on "C" */
/* ================================================================= */
find first tSSearchFilterField where
tSSearchFilterField.tc_ParentRowid = tStoredSearch.tc_Rowid and
tSSearchFilterField.SSearchFilterFieldBusField = t_sSSearchFilterField.SSearchFilterFieldBusField no-error.
if available tSSearchFilterField
then assign t_sSSearchFilterField.tc_Status = "C":U.
else do:
<M-5 run AddDetailLine (input 'SSearchFilterField':U (icTable),
input tStoredSearch.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BStoredSearch>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
assign t_sSSearchFilterField.tc_Status = "N":U.
end.
assign t_sSSearchFilterField.SSearchFilterField_ID = tSSearchFilterField.SSearchFilterField_ID
t_sSSearchFilterField.StoredSearch_ID = tStoredSearch.StoredSearch_ID
t_sSSearchFilterField.tc_Rowid = tSSearchFilterField.tc_Rowid
t_sSSearchFilterField.tc_ParentRowid = tStoredSearch.tc_Rowid.
end.
else do:
for each bsSSearchFilterField where
bsSSearchFilterField.SSearchFilterFieldBusField = t_sSSearchFilterField.SSearchFilterFieldBusField :
<M-10 run AddDetailLine (input 'SSearchFilterField':U (icTable),
input tStoredSearch.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BStoredSearch>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
assign bsSSearchFilterField.tc_Status = "N":U
bsSSearchFilterField.SSearchFilterField_ID = tSSearchFilterField.SSearchFilterField_ID
bsSSearchFilterField.StoredSearch_ID = tStoredSearch.StoredSearch_ID
bsSSearchFilterField.tc_Rowid = tSSearchFilterField.tc_Rowid
bsSSearchFilterField.tc_ParentRowid = tStoredSearch.tc_Rowid.
end.
end.
assign viFFCount = 0.
end.
end.
/* ================================================================= */
/* Update Result items : delete existing items */
/* ================================================================= */
for each tSSearchResultField where
tSSearchResultField.tc_ParentRowid = tStoredSearch.tc_Rowid:
assign tSSearchResultField.tc_Status = "D":U.
end.
/* ================================================================= */
/* Update Result items : add new items */
/* ================================================================= */
for each t_sSSearchResultField where
t_sSSearchResultField.tc_ParentRowid = t_sStoredSearch.tc_Rowid on error undo, return:
find first tSSearchResultField where
tSSearchResultField.tc_ParentRowid = tStoredSearch.tc_Rowid and
tSSearchResultField.SSearchResultFieldBusField = t_sSSearchResultField.SSearchResultFieldBusField no-error.
if available tSSearchResultField
then assign t_sSSearchResultField.tc_Status = "C":U.
else do:
<M-6 run AddDetailLine (input 'SSearchResultField':U (icTable),
input tStoredSearch.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BStoredSearch>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
assign t_sSSearchResultField.tc_Status = "N":U.
end.
assign t_sSSearchResultField.SSearchResultField_ID = tSSearchResultField.SSearchResultField_ID
t_sSSearchResultField.StoredSearch_ID = tStoredSearch.StoredSearch_ID
t_sSSearchResultField.tc_ParentRowid = tStoredSearch.tc_Rowid
t_sSSearchResultField.tc_Rowid = tSSearchResultField.tc_Rowid.
end.
/* ================================================================= */
/* override value for identity fields in input */
/* ================================================================= */
assign t_sStoredSearch.StoredSearch_ID = tStoredSearch.StoredSearch_ID
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
t_sStoredSearch.tc_Rowid = tStoredSearch.tc_Rowid
t_sStoredSearch.tc_ParentRowid = ""
opPrimeKey = (if opPrimeKey = "" then "" else opPrimeKey + chr(4))
+ string(tStoredSearch.StoredSearch_ID).
end.
if oiReturnStatus = -98
then oiReturnStatus = 0.