Description
Read field values of a specific record in one of the class temp-tables.
(Used from referential integrity)
Parameters
icTableName | input | character | class temp-table name |
icQuery | input | character | read statement |
icFieldNames | input | character | Comma seperated list of table field names |
ilConvertToDisplayFormat | input | logical | Only relevant for decimal or date fields |
ocFieldValues | output | character | chr(3) seperated list of the field values (if a record is found) |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
BLF
QadFinancials
program code (program1/database.p)
if oiReturnStatus = 0
then oiReturnStatus = -98.
assign viFields = num-entries(icFieldNames).
if not icTableName begins "t_o":U
then return.
<M-2 run DataDescription
(input '' (icRowids),
input '' (icPkey),
input '' (icObjectIds),
input vcFcComponentName begins 'BCustom[' (ilAllTables),
output viFcReturnSuper (oiReturnStatus)) in database>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
find first tFcDynRel where
tFcDynRel.tcFcTo = substring(icTableName,4,-1,"CHARACTER":U) no-error.
if not available tFcDynRel
then return.
create query vhQuery in widget-pool "non-persistent".
vhQuery:forward-only = yes.
vhQuery:set-buffers(tFcDynRel.thFcBuffer).
assign vlFcOk = vhQuery:query-prepare (icQuery).
if vlFcOk
then assign vlFcOk = vhQuery:query-open().
if vlFcOk = no
then do:
delete object vhQuery.
assign oiReturnStatus = -3.
<M-5 run SetMessage (input 'Invalid query : ':U + icQuery (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'S':U (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-315':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in database>
return.
end.
vhQuery:get-first().
if not vhQuery:query-off-end
then do viFcCount1 = 1 to viFields:
if viFcCount1 > 1
then assign ocFieldValues = ocFieldValues + chr(3).
assign vhField = ?.
assign vhField = tFcDynRel.thFcBuffer:buffer-field(entry(viFcCount1,icFieldNames)) no-error.
if vhField <> ?
then do:
if vhField:data-type = "logical":U
then assign vcValue = (if vhField:buffer-value = yes
then "TRUE":U
else if vhField:buffer-value = no
then "FALSE":U
else "?":U).
else if vhField:data-type = "date":U
then do:
assign vtemp = date (vhField:buffer-value).
if ilConvertToDisplayFormat
then assign vcValue = <M-3 DisplayDate (input vtemp (itDate)) in database>.
else assign vcValue = string(year(vtemp),"9999":U)
+ string(month(vtemp),"99":U)
+ string(day(vtemp),"99":U).
end.
else if vhField:data-type = "decimal":U
and ilConvertToDisplayFormat
then assign vcValue = <M-4 DisplayDecimal (input decimal (vhField:buffer-value) (idDecimal),
input vhField:format (icFormat)) in database>.
else assign vcValue = string(vhField:buffer-value).
assign ocFieldValues = ocFieldValues + (if vcValue = ? then "?":U else vcValue).
end.
end.
vhQuery:query-close().
delete object vhQuery.
if oiReturnStatus = -98
then oiReturnStatus = 0.