(function executeRule(current, previous /*null when async*/) {
 //gs.addErrorMessage("ci table  :" + current.getTableName());

 //gs.addErrorMessage('OpsRamp CI ID: ' + current.u_opsramp_ci);
 //gs.addErrorMessage('OpsRamp client ID: ' + current.company.u_opsramp_client_id);
 //gs.addErrorMessage('SNOW CI sys_id: ' + current.sys_id);
 //gs.addErrorMessage('CI Updates: ' + current.sys_mod_count);

 //If it is Partner level integration, SNOW company is mapped to OpsRamp client
 //OpsRamp client id should be in available in SNOW company - Create custom field in Company
 //and add the mapped OpsRamp client id here
 //var opsRampClientId = current.company.u_opsramp_client_id;

 //If it is client level integration, hard code the OpsRamp client id here
 var opsRampClientId = 'client_1341';

 try {
  var opsRampResourceType = 'Windows';
  if(current.getTableName() == 'cmdb_ci') {//Device Type in SNOW
   opsRampResourceType = 'POS Terminal';//Device Type in OpsRamp
  } else if (current.getTableName() == 'cmdb_ci_aix_server') {
   opsRampResourceType = 'AIX';
  } else if (current.getTableName() == 'cmdb_ci_appl_cisco_call_man') {
   opsRampResourceType = 'Cisco UCM Express';
  } else if (current.getTableName() == 'cmdb_ci_appl_groundwork') {
   opsRampResourceType = 'Work Station ';
  } else if (current.getTableName() == 'cmdb_ci_app_server_websphere') {
   opsRampResourceType = 'IBM STORWIZE';
  } else if (current.getTableName() == 'cmdb_ci_cluster_vip') {
   opsRampResourceType = 'Virtual IP';
  } else if (current.getTableName() == 'cmdb_ci_desktop_software') {
   opsRampResourceType = 'Desktop';
  } else if (current.getTableName() == 'cmdb_ci_config_automation_server') {
   opsRampResourceType = 'Management Controller';
  } else if (current.getTableName() == 'cmdb_ci_docker_engine') {
   opsRampResourceType = 'Docker';
  } else if (current.getTableName() == 'cmdb_ci_endpoint_dctm_index') {
   opsRampResourceType = 'OpsRamp Agent';
  } else if (current.getTableName() == 'cmdb_ci_generator_power_eq') {
   opsRampResourceType = 'Power';
  } else if (current.getTableName() == 'cmdb_ci_endpoint_storf') {
   opsRampResourceType = 'Xen Server';
  } else if (current.getTableName() == 'cmdb_ci_kvm') {
   opsRampResourceType = 'KVM';
  } else if (current.getTableName() == 'cmdb_ci_kvm_network') {
   opsRampResourceType = 'Network Device';
  } else if (current.getTableName() == 'cmdb_ci_lb') {
   opsRampResourceType = 'Load balancer';
  } else if (current.getTableName() == 'cmdb_ci_lb_cisco_csm') {
   opsRampResourceType = 'Cisco UCM';
  } else if (current.getTableName() == 'cmdb_ci_linux_server') {
   opsRampResourceType = 'Linux';
  } else if (current.getTableName() == 'cmdb_ci_personal_printer') {
   opsRampResourceType = 'Printer';
  } else if (current.getTableName() == 'cmdb_ci_server') {
   opsRampResourceType = 'Server';
  } else if (current.getTableName() == 'cmdb_ci_storage_switch') {
   opsRampResourceType = 'Switch';
  }

  var r;
  var response;
  if(!JSUtil.nil(current.u_opsramp_resource_id)) { // Update CI
   //gs.addErrorMessage('CI Update...');
   r = new sn_ws.RESTMessageV2('OpsRamp CI REST', 'Update');
  
   r.setStringParameter('dsnNameToken',current.dns_domain);
   r.setStringParameter('hostNameToken',current.name);
   r.setStringParameter('resourceTypeToken',opsRampResourceType);
   r.setStringParameter('osToken',current.u_operating_system);
   r.setStringParameter('serialNumberToken',current.serial_number);
   r.setStringParameter('makeToken',current.u_make);
   r.setStringParameter('modelToken',current.model_id.getDisplayValue());
   r.setStringParameter('macAddressToken',current.mac_address);
   r.setStringParameter('ipAddressToken',current.ip_address);
   r.setStringParameter('extDeviceIdToken',current.sys_id);
   r.setStringParameter('tenantId',opsRampClientId);
   r.setStringParameter('deviceId',current.u_opsramp_ci);

   //Execute script
   response = r.execute();
   //gs.addErrorMessage("status code: " + response.getStatusCode());
   //gs.addErrorMessage("status code: " + response.getErrorMessage());
   //var opsRampCIJSON = new JSON().decode(response.getBody());

  } else if(current.sys_mod_count == 0){ //Only CIs newly created
   //gs.addErrorMessage('CI Create...');
   r = new sn_ws.RESTMessageV2('OpsRamp CI REST', 'Create');
  
   r.setStringParameter('dsnNameToken',current.dns_domain);
   r.setStringParameter('hostNameToken',current.name);
   r.setStringParameter('resourceTypeToken',opsRampResourceType);
   r.setStringParameter('osToken',current.u_operating_system);
   r.setStringParameter('serialNumberToken',current.serial_number);
   r.setStringParameter('makeToken',current.u_make);
   r.setStringParameter('modelToken',current.model_id.getDisplayValue());
   r.setStringParameter('macAddressToken',current.mac_address);
   r.setStringParameter('ipAddressToken',current.ip_address);
   r.setStringParameter('extDeviceIdToken',current.sys_id);
   r.setStringParameter('tenantId',opsRampClientId);

   response = r.execute();
   //gs.addErrorMessage("status code: " + response.getStatusCode());
   //gs.addErrorMessage("status code: " + response.getErrorMessage());

   //Read OpsRamp CIId from response and update to SN CI.
   //gs.addErrorMessage('responseBody: ' + response.getBody());
   var opsRampCIJSON = new JSON().decode(response.getBody());
   var ci = new GlideRecord('cmdb_ci');
   ci.get(current.sys_id);
   ci.u_opsramp_ci = opsRampCIJSON.resourceUUID;
   ci.updateWithReferences();
  }
 } catch (e) {
  gs.addErrorMessage(e);
 }
})(current, previous);