<object>.updateByPK

The <object>.updateByPK API updates an existing record in the local database for a given primary key.

NOTE: The column names and values provided as key value pairs are case sensitive.

Quantum Visualizer (JavaScript)

Signature



<KNYObj>.updateByPK(record, options, successCallback, failureCallback)

Parameters

Parameter Type Description Required
record JSON

A dictionary containing column name and value pairs which are to be updated.

Yes
options JSON

A dictionary containing primaryKeys.

Yes
successCallback Function The function is invoked when records are updated successfully Yes
failureCallback Function The function is invoked when updating records fail with the cause of failure. Yes

Options Keys

Keys Type Description Required
primaryKeys JSON Specify the primary keys of the record to be updated. Use records primary key column names as key and respective values to populate primaryKeys JSON. Yes
trackChanges JSON

Set the trackChanges key to False, the record level operations are not tracked. When the option is set to false, the CUD operations performed on a record are not synced (uploaded).

NOTE:
  • Supported for Windows from V8 SP4 Fix Pack 6 onwards.
  • Supported for Mobile Web and Desktop Web channels from V8 SP4 Fix Pack 12 onwards.
No
trackIntermediateUpdates JSON

The option is supported only in update API. The option enables us to track the latest update performed on the record.

NOTE:
  • Supported for Windows from V8 SP4 Fix Pack 6 onwards.
  • Supported for Mobile Web and Desktop Web channels from V8 SP4 Fix Pack 12 onwards.
No
markForUpload JSON

Set the markForUpload to false, the record changes are not uploaded to the server.

NOTE:
  • Supported for Windows from V8 SP4 Fix Pack 6 onwards.
  • Supported for Mobile Web and Desktop Web channels from V8 SP4 Fix Pack 12 onwards.
No

Return Type

void

Example

var category = new kony.sdk.KNYObj("CATEGORY");
var options = {};
var record = {};
var primaryKeys = {};
record["CATEGORY_DES"] = "Update existing record";
primaryKeys["CATEGORY_ID"] = "1234"
options["primaryKeys"] = primaryKeys;

function successCallback(response) {
    kony.print("Record Updated successfully");
}

function errorCallback(error) {
    kony.print("Update failed with error: " + JSON.stringify(error));
}
category.updateByPK(record, options, successCallback, errorCallback)

//Disable change tracking - trackIntermediateUpdates
var options = {
    "trackIntermediateUpdates": false
};
var KNYObject = new kony.sdk.KNYObj("CATEGORY");
KNYObject.updateByPK(record, options, onSuccessCallback, onFailureCallback);

//Disable change tracking - trackChanges
var options = {
    "trackChanges": false
};
var KNYObject = new kony.sdk.KNYObj("CATEGORY");
KNYObject.updateByPK(record, options, onSuccessCallback, onFailureCallback);

//Mark for Upload
var options = {
    "markForUpload": false
};
KNYObject.updateByPK(record, options, onSuccessCallback, onFailureCallback);

Android (Java)

Signature

void <KNYObj>.updateByPK(HashMap<String, Object> record,
                      HashMap<String, Object> options,
                final KNYCallback callback) throws Exception 

Parameters

Parameter Type Description Required
record HashMap<String, Object> A HashMap containing column name and value pairs which are to be updated. Yes
options HashMap<String, Object>

A HashMap containing primaryKeys.

Yes
callback KNYCallback Application implements onSuccess and onFailure methods of KNYCallback interface. Yes

Options Keys

Keys Type Description Required
primaryKeys HashMap Specify the primary keys of the record to be updated. Use records primary key column names as key and respective values to populate primaryKeys map. Yes
trackChanges HashMap Set the trackChanges key to False, the record level operations are not tracked. When the option is set to false, the CUD operations performed on a record are not synced (uploaded). No
trackIntermediateUpdates HashMap The option is supported only in update API. The option enables us to track the latest update performed on the record. No
markForUpload HashMap Set the markForUpload to false, the record changes are not uploaded to the server. No

Return Type

void

Example

KNYObj category = new KNYObj("CATEGORY");

//Update record with a primary key
HashMap < String, Object > record = new HashMap < String, Object > ();
record.put("CATEGORY_PN", "7");
record.put("CATEGORY_DES", "new updated description");

HashMap < String, Object > primaryKeys = new HashMap < > ();
primaryKeys.put("CATEGORY_ID", "123");

HashMap < String, Object > options = new HashMap < > ();
options.put("primaryKeys", primaryKeys);

try {
    category.updateByPK(record, options, new KNYCallback() {
        @Override
        public void onSuccess(Object object) {
            Log.d("Object Update", "Object Update Successful for category");
        }
        @Override
        public void onFailure(object error) {
            OfflineObjectsException e = (OfflineObjectsException) error;
            Log.e("Object Update", "Object Update Unsuccessful for category with Error :" + e.getMessage());
        }
    });

    //Update record with composite primary key
    HashMap < String, Object > record = new HashMap < String, Object > ();
    record.put("CATEGORY_PN", "7");
    record.put("CATEGORY_DES", "new updated description");

    HashMap < String, Object > primaryKeys = new HashMap < > ();
    primaryKeys.put("CATEGORY_KEY1", "123");
    primaryKeys.put("CATEGORY_KEY2", "124");

    HashMap < String, Object > options = new HashMap < > ();
    options.put("primaryKeys", primaryKeys);

    try {
        //Invoke the update API. This will update the record where the composite primary key (composed of CATEGORY_KEY1 and CATEGORY_KEY2) will be updated.
        category.updateByPK(record, options, new KonySyncCallback() {
            @Override
            public void onSuccess(Object object) {
                Log.d("Object Update", "Object Update Successful for category");
            }
            @Override
            public void onFailure(object error) {
                OfflineObjectsException e = (OfflineObjectsException) error;
                Log.e("Object Update", "Object Update Unsuccessful for category with Error :" + e.getMessage());
            }
        });
    } catch (Exception e) {
        Log.e("Object Update", "Object Update Unsuccessful for category with Error :" + e.getMessage());
    }

    //Disable change tracking - trackIntermediateUpdates
    HashMap < String, Object > options = new HashMap < > ();
    options.put(KSPublicConstants.TRACK_INTERMEDIATE_UPDATES, false);
    sdkObjectSync.updateByPK(record, options, new KNYCallback() {
        @Override
        public void onSuccess(Object object) {}
        @Override
        public void onFailure(object error) {}
    });

    //Disable change tracking - trackChanges
    HashMap < String, Object > options = new HashMap < > ();
    options.put(KSPublicConstants.TRACK_CHANGES, false);
    sdkObjectSync.updateByPK(record, options, new KNYCallback() {
        @Override
        public void onSuccess(Object object) {}
        @Override
        public void onFailure(object error) {}
    });

    //Mark for Upload
    HashMap < String, Object > options = new HashMap < > ();
    options.put(KSPublicConstants.MARK_FOR_UPLOAD, false);
    sdkObjectSync.updateByPK(record, options, new KNYCallback() {
        @Override
        public void onSuccess(Object object) {}
        @Override
        public void onFailure(object error) {}
    });

iOS (Objective C)

Signature

void <KNYObj>.updateByPK:(NSDictionary<NSString *, id> *)record
             options:(NSDictionary <NSString *, id> *)options
           onSuccess:(KNYSuccessCompletionHandler)onSuccess
           onFailure:(KNYFailureCompletionHandler)onFailure 

Parameters

Parameter Type Description Required
record NSDictionary<NSString*, id> A dictionary containing column name and value pairs which are to be updated. Yes
options NSDictionary<NSString*, id>

A dictionary containing primaryKeys.

Yes
onSuccess KNYSuccessCompletionHandler The function is invoked when records are updated successfully. Yes
onFailure KNYFailureCompletionHandler The function is invoked when updating records fail with the cause of failure. Yes

Options Keys

Keys Type Description Required
primaryKeys NSDictionary<NSString*, id> Specify the primary keys of the record to be updated. Use records primary key column names as key and respective values to populate primaryKeys dictionary. Yes
trackChanges NSDictionary<NSString*, id> Set the trackChanges key to False, the record level operations are not tracked. When the option is set to false, the CUD operations performed on a record are not synced (uploaded). No
trackIntermediateUpdates NSDictionary<NSString*, id> The option is supported only in update API. The option enables us to track the latest update performed on the record. No
markForUpload NSDictionary<NSString*, id> Set the markForUpload to false, the record changes are not uploaded to the server. No

Return Type

void

Examples

//Example 1: Update record with a primary key 
KNYObj * _categories = [
    [KNYObj alloc] initWithName: @"CATEGORY"
    error: & ;error
];
NSMutableDictionary * recordToUpdate = [NSMutableDictionary new];
recordToUpdate[@"CATEGORY_DES"] = @"updated description";
recordToUpdate[@"CATEGORY_PN"] = @"3";
NSMutableDictionary * options = [NSMutableDictionary new];
NSMutableDictionary * primaryKeys = [NSMutableDictionary new];
primaryKeys[@"CATEGORY_ID"] = @"112";
options[@"primaryKeys"] = primaryKeys;

[_categories updateByPK: recordToUpdate options: options onSuccess: ^ (id object) {
        NSLog(@"Update record succeded");
    }
    onFailure: ^ (id object) {
        OfflineObjectsError * error = (OfflineObjectsError) object;
        NSLog(@"Update record failed with error %@", [error.userInfo localizedDescription]);
    }
];

NS

//Update record with composite primary key
KNYObj * _categories = [
    [KNYObj alloc] initWithName: @"CATEGORY"
    error: & ;error
];
NSMutableDictionary * recordToUpdate = [NSMutableDictionary new];
recordToUpdate[@"CATEGORY_DES"] = @"updated description";
recordToUpdate[@"CATEGORY_PN"] = @"3";
NSMutableDictionary * options = [NSMutableDictionary new];
NSMutableDictionary * primaryKeys = [NSMutableDictionary new];
primaryKeys[@"PRIMARY_KEY1"] = @"123";
primaryKeys[@"PRIMARY_KEY2"] = @"222";
options[@"primaryKeys"] = primaryKeys;

[_categories updateByPK: recordToUpdate options: @{}
    onSuccess: ^ (id object) {
        NSLog(@"Update record succeded");
    }
    onFailure: ^ (id object) {
        OfflineObjectsError * error = (OfflineObjectsError) object;
        NSLog(@"Update record failed with error %@", [error.userInfo localizedDescription]);
    }
];

//Disable change tracking - trackIntermediateUpdates
NSDictionary < NSString * , id > * options = @ {
    KNYCONSTANTS_TRACK_INTERMEDIATE_UPDATES: @NO
};
[sdkObjectSync updateByPK: record options: options onSuccess: ^ (id object) {}
    onFailure: ^ (id Object) {}
];

//Disable change tracking - trackChanges
NSDictionary < NSString * , id > * options = @ {
    KNYCONSTANTS_TRACK_CHANGES_UPDATES: @NO
};
[sdkObjectSync updateByPK: record options: options onSuccess: ^ (id object) {}
    onFailure: ^ (id object) {}
];

//Mark for Upload
NSDictionary < NSString * , id > * options = @ {
    KNYCONSTANTS_MARK_FOR_UPLOAD: @NO
};
[sdkObjectSync updateByPK: record options: options onSuccess: ^ (id object) {}
    onFailure: ^ (id object) {}
];
NOTE:
  • The trackChanges flag must be used consistently (either always true or always false) for all CUD operations on a record. You must not update the value of "change tracking" flag in between CUD operations on a record.
  • The trackIntermediateChanges flag is not applicable in Create and Delete APIs.
  • When you set both markForUpload and trackChanges flags, an error is reported as these are mutually exclusive options.
  • When you set both trackIntermediateUpdates and trackChanges flags, an error is reported as these are mutually exclusive options.
  • The change tracking option for Cascade Delete is also applicable for the child records.
  • For Hierarchical Objects, you must provide a proper value for both parent and child record operations.