hiratake55 / RForcecom

RForcecom provides the connection to Force.com and Salesforce.com from R
http://cran.r-project.org/web/packages/RForcecom/index.html
Other
49 stars 25 forks source link

Error in rforcecom.query() #5

Closed ampu3ro closed 9 years ago

ampu3ro commented 11 years ago
Error in rbind(deparse.level, ...) :
 numbers of columns of arguments do not match

Occurs when some fields are not present. Can be fixed with rbind.fill() in library(plyr)

hiratake55 commented 11 years ago

Sorry for delay in my response. I couldn't find out the reasons of this issue. By the way, is #6 the same issue? If true, I patched.

ampu3ro commented 11 years ago

No worries. It's not the same issue as far as I can tell. The more I thought about it, the less sure I was about the cause of the issue but it seems to be that rforcecom.queryMore() is returning a varying number of fields so that when rbind() is called to combine the new dataframe with the main one that will be returned, there is a matching error. I think the number of columns is relevant because when I replace the rbind() function in rforcecom.query() with rbind.fill() in the plyr package it runs with no errors and returns the full dataframe as expected

hiratake55 commented 11 years ago

Patched the issue on RForcecom 0.6. Would you update and try it again?

mcdelaney commented 11 years ago

i get the same error message as ampu3ro above:

"Error in rbind(deparse.level, ...) : numbers of columns of arguments do not match"

it looks like when the 'querymore' function is invoked and variables that returned no values in the previous query are returned with actual values, the function fails. Any chance you could take a look at this?

ampu3ro commented 11 years ago

Took another look at this and think I know the root cause: Fields that have all null values are not returned from the Salesforce API. When rforcecom.queryMore() is called it runs another query (of the next 2000 records) that may or may not have all null values. When the any set of 2000 have all null values and another has at least 1 value rbind() fails and you get the error. rbind.fill() fixes the issue because it pads columns in the dataframe that do not match. Hope this helps!

hiratake55 commented 11 years ago

Hi Ampuero,

Thank you for your report. I'll check and fix.

--Takekatsu

On Oct 17, 2013, at 22:15, ampu3ro notifications@github.com wrote:

Took another look at this and think I know the root cause: Fields that have all null values are not returned from the Salesforce API. When rforcecom.queryMore() is called it runs another query (of the next 2000 records) that may or may not have all null values. When the any set of 2000 have all null values and another has at least 1 value rbind() fails and you get the error. rbind.fill() fixes the issue because it pads columns in the dataframe that do not match. Hope this helps!

\ Reply to this email directly or view it on GitHub.

hiratake55 commented 11 years ago

Hi Ampero,

Today, I sent a patched version to CRAN. It will be available on CRAN repo in a few days.

Thank you.

--Takekatsu

On Fri, Oct 18, 2013 at 8:58 AM, Takekatsu Hiramura hiratake55@gmail.comwrote:

Hi Ampuero,

Thank you for your report. I'll check and fix.

--Takekatsu

On Oct 17, 2013, at 22:15, ampu3ro notifications@github.com wrote:

Took another look at this and think I know the root cause: Fields that have all null values are not returned from the Salesforce API. When rforcecom.queryMore() is called it runs another query (of the next 2000 records) that may or may not have all null values. When the any set of 2000 have all null values and another has at least 1 value rbind() fails and you get the error. rbind.fill() fixes the issue because it pads columns in the dataframe that do not match. Hope this helps!

— Reply to this email directly or view it on GitHubhttps://github.com/hiratake55/RForcecom/issues/5#issuecomment-26502905 .

平村 健勝 (Takekatsu HIRAMURA)

bojanduric commented 9 years ago

Hi, This is great and it works perfectly on most of my queries. However,I am getting QUERY_TIMEOUT error. Is it possible to tweak on my side and have this http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_callouts_timeouts.htm callout limit extended?

Thanks

EDIT: just read part of SalesForce API Developer's Guide. It seem that default batchSize is 250 but it could be scaled to 2000. Is there a way to tweak current RForcecom package to this size or you already maxed this out?

Thanks