rforcecom.checkbatchstatus()的进度条

时间:2017-03-07 22:49:05

标签: r user-interface salesforce progress-bar

我要求编写文本或图形进度跟踪器,而rforcecom的批量更新功能加载最多10,000个批次。

要设置并完成批量更新,必须创建一些对象 - 没有避免它。我真的不喜欢重新运行代码以检查rforcecom.checkBatchStatus()的状态。这需要自动进行,而进度条可以显示实际进度,因为检查全局环境不是首选,并且在再次运行之前它将是静态“状态”更新。

以下是代码的设置方式:

require(Rforcecom)
## Login to Salesforce using your username and password token
## Once ready to update records, use the following:

job<- rforcecom.createBulkJob(session, operation = 'update',        
   object = 'custom_object__c')
info<- rforcecom.createBulkBatch(session, jobId = job$id, data = entry, 
   batchSize = 10000)
### Re-run this line if status(in global environment) is "In Progress" for     
### updated status
status<- lapply(info, FUN = function(x) { 
   rforcecom.checkBatchStatus(session, jobId = x$jobId, batchId = x$id)})
###Once complete, check details
details<- lapply(status, FUN = function(x){ 
   rforcecom.getBatchDetails(session, jobId = x$jobId, batchId = x$id)})    
close<- rforcecom.closeBulkJob(session, jobId = job$id)

1 个答案:

答案 0 :(得分:0)

要自动重新运行状态代码,请使用repeat循环:

repeat {
   statements...
   if (condition) {
      break
   }
}

然后,要获得进度更新的视觉效果,请使用基础R中的txtProgressBar()。对于此特定函数,我使用两个简单的伴随函数创建了自己的进度条函数。作为关于progressValue()的注释,rforcecom.checkBatchStatus()作为1和子列表的列表输出。用于检查处理的记录数的子列表名称是“numberRecordsProcessed”。

progressBar<- function(x, start = 0, finish){
   # x is your object that is performing a function over a varying time length
   # finish is your number of rows of data your function is processing
   pb <- txtProgressBar(min = start, max = finish, style = 3)
   for (i in 1:finish){
      i<- progressValue(x)
      setTxtProgressBar(pb, i)
      if (progressValue(x)/finish == 1) {
         close(pb)
      }
   }
}

finish<- function(x){
  return(as.numeric(nrow(x)))
}

progressValue<- function(x){
   x=x[[1]][["numberRecordsProcessed"]]
   return(as.numeric(x))
}

现在,把它们放在一起吧!只要您知道自己的条件:“已完成”或“失败”,就可以训练重复循环结束。重复“状态”,这将更新处理的记录数,这样做会更新进度条。当处理的记录数等于数据中的行数时,进度条将退出,重复循环也将退出。

repeat { 
   status<- lapply(info, FUN = function(x){
      rforcecom.checkBatchStatus(session, jobId = x$jobId, batchId = x$id)})
   progressBar(status, finish = finish(entry))
   if (status[[1]][["state"]]=="Completed") {
      break
   }
   if (status[[1]][["state"]]=="Failed") {
      break
   }
}