Dynamically Assign Fields

Jenie888

Member
Is there a way to dynamically assign these fields without hardcoding F1 = ..., F2 = ..., F3 = ... instead maybe using the substring and a counter?

DEFINE TEMP-TABLE tmpImportTable
FIELD F1 AS CHAR
FIELD F2 AS CHAR
FIELD F3 AS CHAR
FIELD F4 AS CHAR
FIELD F5 AS CHAR
FIELD F6 AS CHAR
FIELD F7 AS CHAR
FIELD F8 AS CHAR
FIELD F9 AS CHAR
FIELD F10 AS CHAR.

DEFINE VARIABLE X AS INTEGER NO-UNDO.

REPEAT X = 1 TO 10:
CREATE tmpImportTable.
ASSIGN SUBSTITUTE("tmpImportTable.F&1",X) = STRING(X).
END.
 

jongpau

Member
Hi Jenie888,

Yes, if you you version 9.X you can do the following:
Code:
DEF VAR lhField  AS HANDLE NO-UNDO.
DEF VAR lhBuffer AS HANDLE NO-UNDO.

lhBuffer = BUFFER tmpImportTable:HANDLE.

DO X = 1 TO 10:
  CREATE tmpImportTable.
  ASSIGN lhField = lhBuffer:BUFFER-FIELD("F":U + STRING(X))
         lhField:BUFFER-VALUE = STRING(X).
END.
or even (if you are sure the fields are in positions 1 to 10 in the temp-table):
Code:
DEF VAR lhField  AS HANDLE NO-UNDO.
DEF VAR lhBuffer AS HANDLE NO-UNDO.

lhBuffer = BUFFER tmpImportTable:HANDLE.

DO X = 1 TO 10:
  CREATE tmpImportTable.
  ASSIGN lhField = lhBuffer:BUFFER-FIELD(X)
         lhField:BUFFER-VALUE = STRING(X).
END.

HTH.
 
Hi Jenie,
This is what you are after.

Code:
DEFINE VARIABLE hTable as HANDLE NO-UNDO.
DEFINE VARIABLE hField as HANDLE NO-UNDO.
DEFINE VARIABLE X AS INTEGER NO-UNDO.

DEFINE TEMP-TABLE tmpImportTable 
FIELD F1 AS CHAR
FIELD F2 AS CHAR
FIELD F3 AS CHAR
FIELD F4 AS CHAR
FIELD F5 AS CHAR
FIELD F6 AS CHAR
FIELD F7 AS CHAR
FIELD F8 AS CHAR
FIELD F9 AS CHAR
FIELD F10 AS CHAR.


CREATE tmpImportTable.
hTable = TEMP-TABLE tmpImportTable:DEFAULT-BUFFER-HANDLE.


REPEAT X = 1 TO 10:
    hField = hTable:BUFFER-FIELD("F" + STRING(X)).
    hField:BUFFER-VALUE = STRING(X).
END.
 

Jenie888

Member
One more thing...

Is there a way to validate of a field is in a table?

I have a statement
myGenericHandle = bufImportTable:BUFFER-FIELD(DynamicTempOrdersAssign.MappingField).

I don't really care about the handle, I just want to know if the field exsists in the table.

I know I could do a no-error and/ check the value of the handle but is there a statment or someway of just validating this? I just want to know if there is a more efficant way of checking this...
 

Jenie888

Member
Never mind I'm just gonna loop through the fields and do an if statment.

Wish buffer-compare had the option of not checking the format/type of field.
 
Top