Best Practices - Updating an Existing Object
The purpose of this document is to provide best practices to update an existing object.
The recommended method is the following:
- Create a
NewInstance. - Read the instance to be updated.
- If it can be read (i.e. if it already exists), set the new properties, and update the instance.
- If not, free the instance to clear the read errors, create a new instance, set all the instance properties, and insert the new instance.
Example:
# In a given class, two properties (MYKEY, MYSTRING) have to be created in MYTABLE if they don't exist
# Otherwise, update MYSTRING property
Local File MYTABLE
Local Instance MY_TABLE Using C_MYTABLE
MY_TABLE = NewInstance C_MYTABLE AllocGroup null
[L]ASTATUS = fmet MY_TABLE.AREAD(this.MYKEY)
If [L]ASTATUS = [V]CST_AOK
MY_TABLE.MYSTRING = this.MYSTRING
[L]ASTATUS = fmet MY_TABLE.AUPDATE()
If [L]ASTATUS<>[V]CST_AOK
[L]ASTATUS = fmet this.ASETERROR("MYSTRING","Error updating record"-this.MYKEY,[V]CST_AERROR)
Endif
Else
# Initialize Instance
FreeGroup MY_TABLE : # Remove error on read
MY_TABLE = NewInstance C_MYTABLE AllocGroup null : # create new instance
[L]ASTATUS = fmet MY_TABLE.AINIT()
If [L]ASTATUS=[V]CST_AOK
MY_TABLE.MYKEY = this.MYKEY
MY_TABLE.MYSTRING = this.MYKEY
[L]ASTATUS = fmet MY_TABLE.AINSERT()
If [L]ASTATUS<>[V]CST_AOK
[L]ASTATUS = fmet this.ASETERROR("MYKEY","Error creating record"-this.MYKEY,[V]CST_AERROR)
Endif
Else
# Error upon table initialization
[L]ASTATUS = fmet this.ASETERROR("MYKEY","Error upon initialization of"-this.MYKEY,[V]CST_AERROR)
Endif
Endif
FreeGroup MY_TABLE