"Method Not Allowed" Api error when making multiple API Calls to entity with many records

Comments
-
Rachel Bender:
We've run into this problem many times on various calls. On all occasions without exception the API team had to fix the issue. I recommend submitting a support ticket.
I'm writing a script to get all of our records from the ContactActivity entity, which has 8,098,887 records in it. The first 10 calls, to pages 1-10, might work fine, then I start getting errors (see below). The error, "Method Not Allowed", seems incorrect, as this method does work with this entity on the first 10 calls. I'd appreciate any assistance with this. 2014-05-06 17:51:18: org: 132: REQUEST: redactedSELECT * FROM ContactActivity10020 2014-05-06 17:51:18: org: 132: name: ContactActivity; page: 20 SOAP Fault: (faultcode: HTTP, faultstring: Method Not Allowed)0 -
Rachel Bender:
I'm writing a script to get all of our records from the ContactActivity entity, which has 8,098,887 records in it. The first 10 calls, to pages 1-10, might work fine, then I start getting errors (see below). The error, "Method Not Allowed", seems incorrect, as this method does work with this entity on the first 10 calls. I'd appreciate any assistance with this. 2014-05-06 17:51:18: org: 132: REQUEST: redactedSELECT * FROM ContactActivity10020 2014-05-06 17:51:18: org: 132: name: ContactActivity; page: 20 SOAP Fault: (faultcode: HTTP, faultstring: Method Not Allowed)Hi Rachel,
I can create a Support ticket for you if you would like to have someone reach out to discuss this issue with you. If you could, you can email socialsupport@blackbaud.com with the Site ID for the organization you are working with and I can get that case started for you.
If you have any questions, please let me know.
Thank you,
0 -
Shannon Emery:
I sent you an email about an hour ago - thanks!Hi Rachel,
I can create a Support ticket for you if you would like to have someone reach out to discuss this issue with you. If you could, you can email socialsupport@blackbaud.com with the Site ID for the organization you are working with and I can get that case started for you.
If you have any questions, please let me know.
Thank you,
0 -
Rachel Bender:
Hi, I am assuming that you were using the Query interface. Can you tell me what the query was? I was not able to reproduce your issue though you do say you have 8 million records so I may need to try a different example. thx -Arturo
I sent you an email about an hour ago - thanks!0 -
Arturo Escobedo:
My query is "Select * from ContactActivity" . This could apply to any other entity with over ~1 mil records ("select * from [any entity]"). I'm just trying to get all the data. I can get the first few pages, even though the call does take like 2 minutes to return. It was because it took so long that I started to process the pages asynchronously. I get the total number of records, divide it by 100 (the number allowed per call), and then try to get all the pages. It seems to overwhelm the system very quickly. So, I started to try batches of 5 every 5 minutes, which works for a while, then starts failing, so I'm trying to work around it. Let me know if I could provide any info that could help.
Hi, I am assuming that you were using the Query interface. Can you tell me what the query was? I was not able to reproduce your issue though you do say you have 8 million records so I may need to try a different example. thx -Arturo0 -
Rachel Bender:
In that case I will be trying something like this in a loop and see what behavior I see. try { // Run a query repeatedly to get all the result records, 50 records each time QueryRequest request = new QueryRequest(); request.QueryText = "SELECT * FROM ContactActivity WHERE ContactID> 100113842 ORDER BY CreateDate"; request.PageSize = 100; // Set page size, system max is 100 request.PageNumber = 1; // Set page # while (true) { QueryResult result = kinteraConnect.Query(request); if (result.Total > 0) { // Console.WriteLine("Total: " + result.Total); // Console.WriteLine("Page #: " + request.PageNumber); // Print record details foreach (BusinessEntity record in result.Records) { ContactActivity contactActivity = (ContactActivity)record; Console.WriteLine("ContactActivityID: " + contactActivity.ContactActivityID); Console.WriteLine("Subject: " + contactActivity.Subject); Console.WriteLine("Description: " + contactActivity.Description); Console.WriteLine("OwnerID: " + contactActivity.OwnerID); Console.WriteLine("Owner: " + contactActivity.Owner); Console.WriteLine("ActivityID: " + contactActivity.ActivityID); Console.WriteLine("ContactID: " + contactActivity.ContactID); Console.WriteLine("EventID: " + contactActivity.EventID); Console.WriteLine("SourceCode: " + contactActivity.SourceCode); Console.WriteLine("CreateDate: " + contactActivity.CreateDate); Console.WriteLine(); } if (request.PageNumber * request.PageSize >= result.Total) { break; // All records have been retrieved, exit the loop } else { request.PageNumber++; // Increase page #, get next batch } } else { break; // No records found, exit loop } } } catch (Exception ex) { Console.WriteLine(" ex.Message ); }
My query is "Select * from ContactActivity" . This could apply to any other entity with over ~1 mil records ("select * from [any entity]"). I'm just trying to get all the data. I can get the first few pages, even though the call does take like 2 minutes to return. It was because it took so long that I started to process the pages asynchronously. I get the total number of records, divide it by 100 (the number allowed per call), and then try to get all the pages. It seems to overwhelm the system very quickly. So, I started to try batches of 5 every 5 minutes, which works for a while, then starts failing, so I'm trying to work around it. Let me know if I could provide any info that could help.0 -
Arturo Escobedo:
In that case I will be trying something like this in a loop and see what behavior I see. try { // Run a query repeatedly to get all the result records, 50 records each time QueryRequest request = new QueryRequest(); request.QueryText = "SELECT * FROM ContactActivity WHERE ContactID> 100113842 ORDER BY CreateDate"; request.PageSize = 100; // Set page size, system max is 100 request.PageNumber = 1; // Set page # while (true) { QueryResult result = kinteraConnect.Query(request); if (result.Total > 0) { // Console.WriteLine("Total: " + result.Total); // Console.WriteLine("Page #: " + request.PageNumber); // Print record details foreach (BusinessEntity record in result.Records) { ContactActivity contactActivity = (ContactActivity)record; Console.WriteLine("ContactActivityID: " + contactActivity.ContactActivityID); Console.WriteLine("Subject: " + contactActivity.Subject); Console.WriteLine("Description: " + contactActivity.Description); Console.WriteLine("OwnerID: " + contactActivity.OwnerID); Console.WriteLine("Owner: " + contactActivity.Owner); Console.WriteLine("ActivityID: " + contactActivity.ActivityID); Console.WriteLine("ContactID: " + contactActivity.ContactID); Console.WriteLine("EventID: " + contactActivity.EventID); Console.WriteLine("SourceCode: " + contactActivity.SourceCode); Console.WriteLine("CreateDate: " + contactActivity.CreateDate); Console.WriteLine(); } if (request.PageNumber * request.PageSize >= result.Total) { break; // All records have been retrieved, exit the loop } else { request.PageNumber++; // Increase page #, get next batch } } else { break; // No records found, exit loop } } } catch (Exception ex) { Console.WriteLine(" ex.Message ); }// Let me try this again. Having issues posting with Chrome
try
{
// Run a query repeatedly to get all the result records, 50 records each time
QueryRequest request = new QueryRequest();
request.QueryText = "SELECT * FROM ContactActivity WHERE ContactID> 100113842 ORDER BY CreateDate";
request.PageSize = 50; // Set page size, system max is 100
request.PageNumber = 1; // Set page #while (true)
{
QueryResult result = kinteraConnect.Query(request);
if (result.Total > 0)
{
// Console.WriteLine("Total: " + result.Total);
// Console.WriteLine("Page #: " + request.PageNumber);// Print record details
foreach (BusinessEntity record in result.Records)
{
ContactActivity contactActivity = (ContactActivity)record;Console.WriteLine("ContactActivityID: " + contactActivity.ContactActivityID);
Console.WriteLine("Subject: " + contactActivity.Subject);
Console.WriteLine("Description: " + contactActivity.Description);
Console.WriteLine("OwnerID: " + contactActivity.OwnerID);
Console.WriteLine("Owner: " + contactActivity.Owner);
Console.WriteLine("ActivityID: " + contactActivity.ActivityID);
Console.WriteLine("ContactID: " + contactActivity.ContactID);
Console.WriteLine("EventID: " + contactActivity.EventID);
Console.WriteLine("SourceCode: " + contactActivity.SourceCode);
Console.WriteLine("CreateDate: " + contactActivity.CreateDate);
Console.WriteLine();
}if (request.PageNumber * request.PageSize >= result.Total)
{
break; // All records have been retrieved, exit the loop
}
else
{
request.PageNumber++; // Increase page #, get next batch
}
}
else
{
break; // No records found, exit loop
}
}
}
catch (Exception ex)
{
string message = ex.Message ;
}0 -
Arturo Escobedo:
This is not a valid query for ContactActivity:// Let me try this again. Having issues posting with Chrome
try
{
// Run a query repeatedly to get all the result records, 50 records each time
QueryRequest request = new QueryRequest();
request.QueryText = "SELECT * FROM ContactActivity WHERE ContactID> 100113842 ORDER BY CreateDate";
request.PageSize = 50; // Set page size, system max is 100
request.PageNumber = 1; // Set page #while (true)
{
QueryResult result = kinteraConnect.Query(request);
if (result.Total > 0)
{
// Console.WriteLine("Total: " + result.Total);
// Console.WriteLine("Page #: " + request.PageNumber);// Print record details
foreach (BusinessEntity record in result.Records)
{
ContactActivity contactActivity = (ContactActivity)record;Console.WriteLine("ContactActivityID: " + contactActivity.ContactActivityID);
Console.WriteLine("Subject: " + contactActivity.Subject);
Console.WriteLine("Description: " + contactActivity.Description);
Console.WriteLine("OwnerID: " + contactActivity.OwnerID);
Console.WriteLine("Owner: " + contactActivity.Owner);
Console.WriteLine("ActivityID: " + contactActivity.ActivityID);
Console.WriteLine("ContactID: " + contactActivity.ContactID);
Console.WriteLine("EventID: " + contactActivity.EventID);
Console.WriteLine("SourceCode: " + contactActivity.SourceCode);
Console.WriteLine("CreateDate: " + contactActivity.CreateDate);
Console.WriteLine();
}if (request.PageNumber * request.PageSize >= result.Total)
{
break; // All records have been retrieved, exit the loop
}
else
{
request.PageNumber++; // Increase page #, get next batch
}
}
else
{
break; // No records found, exit loop
}
}
}
catch (Exception ex)
{
string message = ex.Message ;
}
SELECT * FROM ContactActivity WHERE ContactID> 100113842 ORDER BY CreateDate
CreateDate is NOT searchable
Only the following are searchable:
ContactActivityID, OwnerID, ContactID
This would be valid:
SELECT * FROM ContactActivity WHERE ContactID > 100113842
HOWEVER, the issue here is a database performance problem, so this should be escalated to engineering/development.
ContactActivity seems to be a poorly optimized table at the source database. I have had problems querying on it with ANY account that has several million records.
Based on my experience, and based on the fact that the API doesn't even have a dedicated development support ticketing mechanism, or support forum (it used to), I doubt Blackbaud is going to fix/improve/optimize this entity table.
So, you probably right by querying against ContactID because that would limit the result set from several million records, to likely several thousand max (probably much fewer).
So, as a workaround, one could iterate through every single contact (ContactID) in the database, then query for each one's activity records. And/or, do it in batches as follows: SELECT * FROM ContactActivity WHERE ContactID IN (281219283,281220230,[...etc])
This is a hack, and it will inevitably cause the query limit to be exceeded with large data sets, but it may be the only way to query against all the ContactActivity records at one time on a large data set.0 -
Eric Pecoraro:
...
This is not a valid query for ContactActivity:
SELECT * FROM ContactActivity WHERE ContactID> 100113842 ORDER BY CreateDate
CreateDate is NOT searchable
Only the following are searchable:
ContactActivityID, OwnerID, ContactID
This would be valid:
SELECT * FROM ContactActivity WHERE ContactID > 100113842
HOWEVER, the issue here is a database performance problem, so this should be escalated to engineering/development.
ContactActivity seems to be a poorly optimized table at the source database. I have had problems querying on it with ANY account that has several million records.
Based on my experience, and based on the fact that the API doesn't even have a dedicated development support ticketing mechanism, or support forum (it used to), I doubt Blackbaud is going to fix/improve/optimize this entity table.
So, you probably right by querying against ContactID because that would limit the result set from several million records, to likely several thousand max (probably much fewer).
So, as a workaround, one could iterate through every single contact (ContactID) in the database, then query for each one's activity records. And/or, do it in batches as follows: SELECT * FROM ContactActivity WHERE ContactID IN (281219283,281220230,[...etc])
This is a hack, and it will inevitably cause the query limit to be exceeded with large data sets, but it may be the only way to query against all the ContactActivity records at one time on a large data set.0 -
Rachel Bender:
...editor is mangling my responses...
I'm writing a script to get all of our records from the ContactActivity entity, which has 8,098,887 records in it. The first 10 calls, to pages 1-10, might work fine, then I start getting errors (see below). The error, "Method Not Allowed", seems incorrect, as this method does work with this entity on the first 10 calls. I'd appreciate any assistance with this. 2014-05-06 17:51:18: org: 132: REQUEST: redactedSELECT * FROM ContactActivity10020 2014-05-06 17:51:18: org: 132: name: ContactActivity; page: 20 SOAP Fault: (faultcode: HTTP, faultstring: Method Not Allowed)0 -
Rachel Bender:
There are also alternatives to reduce the overall result set, which may help:
I'm writing a script to get all of our records from the ContactActivity entity, which has 8,098,887 records in it. The first 10 calls, to pages 1-10, might work fine, then I start getting errors (see below). The error, "Method Not Allowed", seems incorrect, as this method does work with this entity on the first 10 calls. I'd appreciate any assistance with this. 2014-05-06 17:51:18: org: 132: REQUEST: redactedSELECT * FROM ContactActivity10020 2014-05-06 17:51:18: org: 132: name: ContactActivity; page: 20 SOAP Fault: (faultcode: HTTP, faultstring: Method Not Allowed)
There is a away to query by time using the GetUpdated call:
http://www.kintera.com/doc/connect/default.htm#ContactActivity.htm
I believe this returns up to 5,000 records at a time, so you would have to apply logic to iterate through time periods if more than 5K is returned, which can be dicey...especially if activity is being logged for a huge email campaign would could record several thousand records.
Also, alternatively, to reduce result sets, you can query against only the ContactActivity types (via ContactActivityID assignments) that you specify. It's undocumented, but you can get the IDs for specific ContactActivity types from the Sphere Admin (like bulk email) and exclude them from your query, like so:
SELECT * FROM ContactActivity WHERE ContactActivityID NOT IN (XX,XX,XX,XX)
You can find all the ContactActivityID types by clicking the "Activity Type Association" of a contact for (which takes you to https://www.kintera.com/kintera_sphere/events/asp/activityTypeAssociation.asp?var_functionid=development) then looking at the HTML from that page, which will will show the ContactActivityID beside the name as follows:
<input type="Checkbox" name="activityTypeID" value="2" id="Checkbox1">>Registration
So, the ContactActivityID for Registrations is 2. Therefore if you just wanted to isolate registrations, you could query like:
SELECT * FROM ContactActivity WHERE ContactActivityID = 2
etc, etc.0 -
Eric Pecoraro:
Thanks for your suggestions / ideas, I really appreciate it. Before I start getting creative .. Arturo, any updates on this issue?
There are also alternatives to reduce the overall result set, which may help:
There is a away to query by time using the GetUpdated call:
http://www.kintera.com/doc/connect/default.htm#ContactActivity.htm
I believe this returns up to 5,000 records at a time, so you would have to apply logic to iterate through time periods if more than 5K is returned, which can be dicey...especially if activity is being logged for a huge email campaign would could record several thousand records.
Also, alternatively, to reduce result sets, you can query against only the ContactActivity types (via ContactActivityID assignments) that you specify. It's undocumented, but you can get the IDs for specific ContactActivity types from the Sphere Admin (like bulk email) and exclude them from your query, like so:
SELECT * FROM ContactActivity WHERE ContactActivityID NOT IN (XX,XX,XX,XX)
You can find all the ContactActivityID types by clicking the "Activity Type Association" of a contact for (which takes you to https://www.kintera.com/kintera_sphere/events/asp/activityTypeAssociation.asp?var_functionid=development) then looking at the HTML from that page, which will will show the ContactActivityID beside the name as follows:
<input type="Checkbox" name="activityTypeID" value="2" id="Checkbox1">>Registration
So, the ContactActivityID for Registrations is 2. Therefore if you just wanted to isolate registrations, you could query like:
SELECT * FROM ContactActivity WHERE ContactActivityID = 2
etc, etc.0 -
Rachel Bender:
No problem, however... I jumped the gun on "ContactActivityID". What I said about that holds true for "ActivityID". BUT, unfortunately, ActivityID is NOT searchable via the API.
Thanks for your suggestions / ideas, I really appreciate it. Before I start getting creative .. Arturo, any updates on this issue?
I mis-spoke above. We use ActivityID to filter results on one of our offline/SQL sync'd databases AFTER we have pulled the records from the Sphere Connect API.
So, unfortunately, you'll have to work with the other options/workarounds suggested. I highly doubt BB will fix/optimize this table, or make ActivityID searchable (which I requested eons ago), so I would recommend that you start getting creative sooner than later....
0 -
Eric Pecoraro:
For the record, in case anyone at Blackbaud dev would care to be proactive on this issue of ContactActivity inaccessibility :
No problem, however... I jumped the gun on "ContactActivityID". What I said about that holds true for "ActivityID". BUT, unfortunately, ActivityID is NOT searchable via the API.
I mis-spoke above. We use ActivityID to filter results on one of our offline/SQL sync'd databases AFTER we have pulled the records from the Sphere Connect API.
So, unfortunately, you'll have to work with the other options/workarounds suggested. I highly doubt BB will fix/optimize this table, or make ActivityID searchable (which I requested eons ago), so I would recommend that you start getting creative sooner than later....
1. Enhance the current DescribeSetup->ActivityID
(Return system generated ActivityIDs in addition to the user generated ActivityIDs currently returned)
2. Make ContactActivity.ActivityID searchable/indexed
These enhancements would take a huge load off of the API resources, as well as taking the burden off of consumers attempting to shoehorn data out of ContactActivity.0 -
Eric Pecoraro:
Sorry I am getting sidetracked and our resources are somewhat limited here. Short term I think that you are dealing with too many records are a time. I think you mentioned you are making multiple calls so that would be multiple sets of 8 million each which have to be looked at and record My short term suggestion before looking at it is to use the contact id as the limiting factor. for example SELECT * FROM ContactActivity WHERE ContactID> 100113842 and ContactID < 100213842 then process all the records you get next time add maybe 100,000 or 200000 to your possible set SELECT * FROM ContactActivity WHERE ContactID> 100213842 and ContactID < 100313842 Regardless of wether you know the actual ContactID or not you will only be retrieving records that you were approved for but at the most you are querying for 100000 at a time Later on I can try creating a new project and running the example again I don't know if I grabbed the wrong wsdl but I made this call SELECT * FROM ContactActivity WHERE ContactID> 100113842 ORDER BY CreateDate"; and Eric was saying that CreateDate was invalid so I may have to track down a valid wsdl. I was going to use CreateDatea to track down the largest number.
For the record, in case anyone at Blackbaud dev would care to be proactive on this issue of ContactActivity inaccessibility :
1. Enhance the current DescribeSetup->ActivityID
(Return system generated ActivityIDs in addition to the user generated ActivityIDs currently returned)
2. Make ContactActivity.ActivityID searchable/indexed
These enhancements would take a huge load off of the API resources, as well as taking the burden off of consumers attempting to shoehorn data out of ContactActivity.0 -
Arturo Escobedo:
Sorry I am getting sidetracked and our resources are somewhat limited here. Short term I think that you are dealing with too many records are a time. I think you mentioned you are making multiple calls so that would be multiple sets of 8 million each which have to be looked at and record My short term suggestion before looking at it is to use the contact id as the limiting factor. for example SELECT * FROM ContactActivity WHERE ContactID> 100113842 and ContactID < 100213842 then process all the records you get next time add maybe 100,000 or 200000 to your possible set SELECT * FROM ContactActivity WHERE ContactID> 100213842 and ContactID < 100313842 Regardless of wether you know the actual ContactID or not you will only be retrieving records that you were approved for but at the most you are querying for 100000 at a time Later on I can try creating a new project and running the example again I don't know if I grabbed the wrong wsdl but I made this call SELECT * FROM ContactActivity WHERE ContactID> 100113842 ORDER BY CreateDate"; and Eric was saying that CreateDate was invalid so I may have to track down a valid wsdl. I was going to use CreateDatea to track down the largest number.Hmm. Google is removing all the formatting.
Sorry I am getting sidetracked and our resources are somewhat limited here.
Short term I think that you are dealing with too many records are a time. I think you mentioned you are making multiple calls so that would be multiple sets of 8 million each which have to be looked at and record
My short term suggestion before looking at it is to use the contact id as the limiting factor. for example
SELECT * FROM ContactActivity WHERE ContactID> 100113842 and ContactID < 100213842
then process all the records you get
next time add maybe 100,000 or 200000 to your possible set
SELECT * FROM ContactActivity WHERE ContactID> 100213842 and ContactID < 100313842Regardless of wether you know the actual ContactID or not you will only be retrieving records that you were approved for but at the most you are querying for 100000 at a time
Later on I can try creating a new project and running the example again I don't know if I grabbed the wrong wsdl but I made this call
SELECT * FROM ContactActivity WHERE ContactID> 100113842 ORDER BY CreateDate"; and Eric was saying that CreateDate was invalid so I may have to track down a valid wsdl. I was going to use CreateDatea to track down the largest number.0 -
Arturo Escobedo:
Thanks, I'll try that and I'll let you know how it goes.Hmm. Google is removing all the formatting.
Sorry I am getting sidetracked and our resources are somewhat limited here.
Short term I think that you are dealing with too many records are a time. I think you mentioned you are making multiple calls so that would be multiple sets of 8 million each which have to be looked at and record
My short term suggestion before looking at it is to use the contact id as the limiting factor. for example
SELECT * FROM ContactActivity WHERE ContactID> 100113842 and ContactID < 100213842
then process all the records you get
next time add maybe 100,000 or 200000 to your possible set
SELECT * FROM ContactActivity WHERE ContactID> 100213842 and ContactID < 100313842Regardless of wether you know the actual ContactID or not you will only be retrieving records that you were approved for but at the most you are querying for 100000 at a time
Later on I can try creating a new project and running the example again I don't know if I grabbed the wrong wsdl but I made this call
SELECT * FROM ContactActivity WHERE ContactID> 100113842 ORDER BY CreateDate"; and Eric was saying that CreateDate was invalid so I may have to track down a valid wsdl. I was going to use CreateDatea to track down the largest number.0 -
Rachel Bender:
So, this method is working when I can query by a primary key, it seems. For ContactActivity, I make a call, with a min and max ContactActivityId in my query, and then base my next call on the largest id I get back. I make the min the largest id I get back, and I set the max to min+100,000. This means I have to process the calls sequentially, as opposed to asynchronously, which is slower, but I get back good data, so it works, and the calls come back in 1-2 seconds. However, now I'm running into problems with entities that do not allow queries using a primary key, like ContactMembership, which only allows queries by DateUpdated. I thought I would be able to create one solution, but looks like I'm going to need several. I don't suppose there's some undocumented way of querying by ID, is there?
Thanks, I'll try that and I'll let you know how it goes.0 -
Rachel Bender:
Sorry, in the case of ContactMembership you are not allowed to use a query, you would probably need to call using RetrieveMultiple using the contact id's retrieved. That would be the type of thing that you leave running overnight I suppose. In your case maybe longer since you are dealing with a few millions. Not sure what you are trying to get exactly but some of this may be more efficient from the batch export data interface in Sphere , unless you are trying to get the data in a custom format etc...
So, this method is working when I can query by a primary key, it seems. For ContactActivity, I make a call, with a min and max ContactActivityId in my query, and then base my next call on the largest id I get back. I make the min the largest id I get back, and I set the max to min+100,000. This means I have to process the calls sequentially, as opposed to asynchronously, which is slower, but I get back good data, so it works, and the calls come back in 1-2 seconds. However, now I'm running into problems with entities that do not allow queries using a primary key, like ContactMembership, which only allows queries by DateUpdated. I thought I would be able to create one solution, but looks like I'm going to need several. I don't suppose there's some undocumented way of querying by ID, is there?0 -
Arturo Escobedo:
Arturo, thanks for your help so far, I'm almost there. I'm now dealing with entities for which I must use CreatedDate, or some other date field, because they can't be queried by ID. It seems like this works: SELECT * FROM Event where CreateDate >=01-14-2007 but this does not work: SELECT * FROM Event where CreateDate >=01-14-2007 and CreateDate <=01-14-2014 So, I can query records that are greater than a date, but not less than. Any ideas why this is?
Sorry, in the case of ContactMembership you are not allowed to use a query, you would probably need to call using RetrieveMultiple using the contact id's retrieved. That would be the type of thing that you leave running overnight I suppose. In your case maybe longer since you are dealing with a few millions. Not sure what you are trying to get exactly but some of this may be more efficient from the batch export data interface in Sphere , unless you are trying to get the data in a custom format etc...0 -
Rachel Bender:
Have you tried?:
Arturo, thanks for your help so far, I'm almost there. I'm now dealing with entities for which I must use CreatedDate, or some other date field, because they can't be queried by ID. It seems like this works: SELECT * FROM Event where CreateDate >=01-14-2007 but this does not work: SELECT * FROM Event where CreateDate >=01-14-2007 and CreateDate <=01-14-2014 So, I can query records that are greater than a date, but not less than. Any ideas why this is?
SELECT * FROM Event WHERE CreateDate BETWEEN '2007-01-14' AND '2014-01-14'0 -
Eric Pecoraro:
Actually, yes, that does work. Is this the same for the ContactPledge entity? In the docs, it's written "MM/DD/YYYY, date that Pledge is entered". My query for the ContactPledge entity is not working, however. It takes about a minute, then I see this: PHP Error[2]: SoapClient::__doRequest(): SSL: Connection reset by peer in file /var/www/sphere/protected/components/SphereApi.php at line 229 My queries do seem to work with the Events entity. Here's my query: "SELECT * FROM ContactPledge where Date between '2013-06-09' and '2013-07-09' order by Date ASC". I then tried a smaller date range: "SELECT * FROM ContactPledge where Date between '2013-06-09' and '2013-06-11' order by Date ASC" But this still takes a minute and then errors out. Can you look into this?
Have you tried?:
SELECT * FROM Event WHERE CreateDate BETWEEN '2007-01-14' AND '2014-01-14'0 -
Rachel Bender:
If I recall correctly, ContactPayment has been deprecated for several years now. Not sure about ContactPledge, but I would assume the same.
Actually, yes, that does work. Is this the same for the ContactPledge entity? In the docs, it's written "MM/DD/YYYY, date that Pledge is entered". My query for the ContactPledge entity is not working, however. It takes about a minute, then I see this: PHP Error[2]: SoapClient::__doRequest(): SSL: Connection reset by peer in file /var/www/sphere/protected/components/SphereApi.php at line 229 My queries do seem to work with the Events entity. Here's my query: "SELECT * FROM ContactPledge where Date between '2013-06-09' and '2013-07-09' order by Date ASC". I then tried a smaller date range: "SELECT * FROM ContactPledge where Date between '2013-06-09' and '2013-06-11' order by Date ASC" But this still takes a minute and then errors out. Can you look into this?
That's likely the reason for the poor performance. Not sure if BB engineering will provide performance support on those because they have been deprecated for so long...0 -
Eric Pecoraro:
Weird, it's still in the docs, https://www.blackbaud.com/files/support/helpfiles/connect/default.htm . Thanks, Eric, I'm not sure what we would do without you. What is the new version of ContactPayment? Is it ContactActivity? To BB, is there anyway I could find out what entities (at the above link) are deprecated? Anything would be appreciated.
If I recall correctly, ContactPayment has been deprecated for several years now. Not sure about ContactPledge, but I would assume the same.
That's likely the reason for the poor performance. Not sure if BB engineering will provide performance support on those because they have been deprecated for so long...0 -
Rachel Bender:
I think ContactPayment was deprecated in 2007/8.
Weird, it's still in the docs, https://www.blackbaud.com/files/support/helpfiles/connect/default.htm . Thanks, Eric, I'm not sure what we would do without you. What is the new version of ContactPayment? Is it ContactActivity? To BB, is there anyway I could find out what entities (at the above link) are deprecated? Anything would be appreciated.
Here are some links to resources we built that may be helpful regarding schema relationships:
http://shepardclient.s3.amazonaws.com/sphere/2012-06-24-160637-Connect-Describe-All-Entities.xlsx
http://shepardclient.s3.amazonaws.com/sphere/Shepard.com-Sphere-ERD.pdf0 -
Eric Pecoraro:
Sorry I can't reproduce your issue with ContactPledge, Can you try removing the Order by Date part with the same query. The queries are ultimately going off of views joined with other viewsl. (i.e. ContactPledge is not a table). You can try sending me a private message with your account id or account name, would need to try this against different data probably to see your issue. thanks -Arturo
I think ContactPayment was deprecated in 2007/8.
Here are some links to resources we built that may be helpful regarding schema relationships:
http://shepardclient.s3.amazonaws.com/sphere/2012-06-24-160637-Connect-Describe-All-Entities.xlsx
http://shepardclient.s3.amazonaws.com/sphere/Shepard.com-Sphere-ERD.pdf0
Categories
- All Categories
- Shannon parent
- shannon 2
- shannon 1
- 21 Advocacy DC Users Group
- 14 BBCRM PAG Discussions
- 89 High Education Program Advisory Group (HE PAG)
- 28 Luminate CRM DC Users Group
- 8 DC Luminate CRM Users Group
- Luminate PAG
- 5.9K Blackbaud Altru®
- 58 Blackbaud Award Management™ and Blackbaud Stewardship Management™
- 409 bbcon®
- 2K Blackbaud CRM™ and Blackbaud Internet Solutions™
- donorCentrics®
- 1.1K Blackbaud eTapestry®
- 2.8K Blackbaud Financial Edge NXT®
- 1.1K Blackbaud Grantmaking™
- 527 Education Management Solutions for Higher Education
- 21 Blackbaud Impact Edge™
- 1 JustGiving® from Blackbaud®
- 4.6K Education Management Solutions for K-12 Schools
- Blackbaud Luminate Online & Blackbaud TeamRaiser
- 16.4K Blackbaud Raiser's Edge NXT®
- 4.1K SKY Developer
- 547 ResearchPoint™
- 151 Blackbaud Tuition Management™
- 1 YourCause® from Blackbaud®
- 61 everydayhero
- 3 Campaign Ideas
- 58 General Discussion
- 115 Blackbaud ID
- 87 K-12 Blackbaud ID
- 6 Admin Console
- 949 Organizational Best Practices
- 353 The Tap (Just for Fun)
- 235 Blackbaud Community Feedback Forum
- 124 Ninja Secret Society
- 32 Blackbaud Raiser's Edge NXT® Receipting EAP
- 55 Admissions Event Management EAP
- 18 MobilePay Terminal + BBID Canada EAP
- 36 EAP for New Email Campaigns Experience in Blackbaud Luminate Online®
- 109 EAP for 360 Student Profile in Blackbaud Student Information System
- 41 EAP for Assessment Builder in Blackbaud Learning Management System™
- 9 Technical Preview for SKY API for Blackbaud CRM™ and Blackbaud Altru®
- 55 Community Advisory Group
- 46 Blackbaud Community Ideas
- 26 Blackbaud Community Challenges
- 7 Security Testing Forum
- 1.1K ARCHIVED FORUMS | Inactive and/or Completed EAPs
- 3 Blackbaud Staff Discussions
- 7.7K ARCHIVED FORUM CATEGORY [ID 304]
- 1 Blackbaud Partners Discussions
- 1 Blackbaud Giving Search™
- 35 EAP Student Assignment Details and Assignment Center
- 39 EAP Core - Roles and Tasks
- 59 Blackbaud Community All-Stars Discussions
- 20 Blackbaud Raiser's Edge NXT® Online Giving EAP
- Diocesan Blackbaud Raiser’s Edge NXT® User’s Group
- 2 Blackbaud Consultant’s Community
- 43 End of Term Grade Entry EAP
- 92 EAP for Query in Blackbaud Raiser's Edge NXT®
- 38 Standard Reports for Blackbaud Raiser's Edge NXT® EAP
- 12 Payments Assistant for Blackbaud Financial Edge NXT® EAP
- 6 Ask an All Star (Austen Brown)
- 8 Ask an All-Star Alex Wong (Blackbaud Raiser's Edge NXT®)
- 1 Ask an All-Star Alex Wong (Blackbaud Financial Edge NXT®)
- 6 Ask an All-Star (Christine Robertson)
- 21 Ask an Expert (Anthony Gallo)
- Blackbaud Francophone Group
- 22 Ask an Expert (David Springer)
- 4 Raiser's Edge NXT PowerUp Challenge #1 (Query)
- 6 Ask an All-Star Sunshine Reinken Watson and Carlene Johnson
- 4 Raiser's Edge NXT PowerUp Challenge: Events
- 14 Ask an All-Star (Elizabeth Johnson)
- 7 Ask an Expert (Stephen Churchill)
- 2025 ARCHIVED FORUM POSTS
- 322 ARCHIVED | Financial Edge® Tips and Tricks
- 164 ARCHIVED | Raiser's Edge® Blog
- 300 ARCHIVED | Raiser's Edge® Blog
- 441 ARCHIVED | Blackbaud Altru® Tips and Tricks
- 66 ARCHIVED | Blackbaud NetCommunity™ Blog
- 211 ARCHIVED | Blackbaud Target Analytics® Tips and Tricks
- 47 Blackbaud CRM Higher Ed Product Advisory Group (HE PAG)
- Luminate CRM DC Users Group
- 225 ARCHIVED | Blackbaud eTapestry® Tips and Tricks
- 1 Blackbaud eTapestry® Know How Blog
- 19 Blackbaud CRM Product Advisory Group (BBCRM PAG)
- 1 Blackbaud K-12 Education Solutions™ Blog
- 280 ARCHIVED | Mixed Community Announcements
- 3 ARCHIVED | Blackbaud Corporations™ & Blackbaud Foundations™ Hosting Status
- 1 npEngage
- 24 ARCHIVED | K-12 Announcements
- 15 ARCHIVED | FIMS Host*Net Hosting Status
- 23 ARCHIVED | Blackbaud Outcomes & Online Applications (IGAM) Hosting Status
- 22 ARCHIVED | Blackbaud DonorCentral Hosting Status
- 14 ARCHIVED | Blackbaud Grantmaking™ UK Hosting Status
- 117 ARCHIVED | Blackbaud CRM™ and Blackbaud Internet Solutions™ Announcements
- 50 Blackbaud NetCommunity™ Blog
- 169 ARCHIVED | Blackbaud Grantmaking™ Tips and Tricks
- Advocacy DC Users Group
- 718 Community News
- Blackbaud Altru® Hosting Status
- 104 ARCHIVED | Member Spotlight
- 145 ARCHIVED | Hosting Blog
- 149 JustGiving® from Blackbaud® Blog
- 97 ARCHIVED | bbcon® Blogs
- 19 ARCHIVED | Blackbaud Luminate CRM™ Announcements
- 161 Luminate Advocacy News
- 187 Organizational Best Practices Blog
- 67 everydayhero Blog
- 52 Blackbaud SKY® Reporting Announcements
- 17 ARCHIVED | Blackbaud SKY® Reporting for K-12 Announcements
- 3 Luminate Online Product Advisory Group (LO PAG)
- 81 ARCHIVED | JustGiving® from Blackbaud® Tips and Tricks
- 1 ARCHIVED | K-12 Conference Blog
- Blackbaud Church Management™ Announcements
- ARCHIVED | Blackbaud Award Management™ and Blackbaud Stewardship Management™ Announcements
- 1 Blackbaud Peer-to-Peer Fundraising™, Powered by JustGiving® Blogs
- 39 Tips, Tricks, and Timesavers!
- 56 Blackbaud Church Management™ Resources
- 154 Blackbaud Church Management™ Announcements
- 1 ARCHIVED | Blackbaud Church Management™ Tips and Tricks
- 11 ARCHIVED | Blackbaud Higher Education Solutions™ Announcements
- 7 ARCHIVED | Blackbaud Guided Fundraising™ Blog
- 2 Blackbaud Fundraiser Performance Management™ Blog
- 9 Foundations Events and Content
- 14 ARCHIVED | Blog Posts
- 2 ARCHIVED | Blackbaud FIMS™ Announcement and Tips
- 59 Blackbaud Partner Announcements
- 10 ARCHIVED | Blackbaud Impact Edge™ EAP Blogs
- 1 Community Help Blogs
- Diocesan Blackbaud Raiser’s Edge NXT® Users' Group
- Blackbaud Consultant’s Community
- Blackbaud Francophone Group
- 1 BLOG ARCHIVE CATEGORY
- Blackbaud Community™ Discussions
- 8.3K Blackbaud Luminate Online® & Blackbaud TeamRaiser® Discussions
- 5.7K Jobs Board