Files
Riabu_Integration/force-app/main/default/classes/RiabuTokenUpdateJob.cls
2025-11-26 16:38:23 +05:30

62 lines
2.5 KiB
OpenEdge ABL

public class RiabuTokenUpdateJob implements Queueable, Database.AllowsCallouts {
private String recordName;
private String newAccessToken;
private String newRefreshToken;
//private Datetime expiryTime;
public RiabuTokenUpdateJob(String recordName, String accessToken, String refreshToken) {
this.recordName = recordName;
this.newAccessToken = accessToken;
this.newRefreshToken = refreshToken;
//this.expiryTime = expiryTime;
}
public void execute(QueueableContext qc) {
MetadataService.MetadataPort service = MetadataUtil.createService();
MetadataService.IReadResult readResult =
service.readMetadata('CustomMetadata', new String[] { 'RIABU_Integration__mdt.' + recordName });
MetadataService.CustomMetadata cmdt =
(MetadataService.CustomMetadata) readResult.getRecords()[0];
// Keep existing field values
List<MetadataService.CustomMetadataValue> updatedValues = cmdt.values;
// Update Access Token
upsertValue(updatedValues, 'Access_Token__c', newAccessToken);
// Update Refresh Token only if returned
if(String.isNotBlank(newRefreshToken)){
upsertValue(updatedValues, 'Refresh_Token__c', newRefreshToken);
}
cmdt.values = updatedValues;
MetadataService.SaveResult[] results =
service.updateMetadata(new MetadataService.Metadata[] { cmdt });
if (results[0].success) {
System.debug(' CMDT Updated Successfully');
} else {
System.debug(' CMDT Update Failed: ' + results[0].errors[0].message);
}
}
private void upsertValue(List<MetadataService.CustomMetadataValue> listVals, String fieldName, String fieldValue) {
Boolean found = false;
for(MetadataService.CustomMetadataValue v : listVals) {
if(v.field == fieldName){
v.value = fieldValue;
found = true;
break;
}
}
if(!found){
MetadataService.CustomMetadataValue newVal = new MetadataService.CustomMetadataValue();
newVal.field = fieldName;
newVal.value = fieldValue;
listVals.add(newVal);
}
}
private MetadataService.CustomMetadataValue createValue(String fieldName, String val) {
MetadataService.CustomMetadataValue v = new MetadataService.CustomMetadataValue();
v.field = fieldName;
v.value = val;
return v;
}
}