use of com.sforce.soap.partner.GetDeletedResult in project pentaho-kettle by pentaho.
the class SalesforceConnection method query.
public void query(boolean specifyQuery) throws KettleException {
if (getBinding() == null) {
throw new KettleException(BaseMessages.getString(PKG, "SalesforceInput.Exception.CanNotGetBiding"));
}
try {
if (!specifyQuery) {
// check if we can query this Object
DescribeSObjectResult describeSObjectResult = getBinding().describeSObject(getModule());
if (describeSObjectResult == null) {
throw new KettleException(BaseMessages.getString(PKG, "SalesforceInput.ErrorGettingObject"));
}
if (!describeSObjectResult.isQueryable()) {
throw new KettleException(BaseMessages.getString(PKG, "SalesforceInputDialog.ObjectNotQueryable", module));
}
if (this.recordsFilter == SalesforceConnectionUtils.RECORDS_FILTER_UPDATED || this.recordsFilter == SalesforceConnectionUtils.RECORDS_FILTER_DELETED) {
// The object must be replicateable
if (!describeSObjectResult.isReplicateable()) {
throw new KettleException(BaseMessages.getString(PKG, "SalesforceInput.Error.ObjectNotReplicateable", getModule()));
}
}
}
if (getSQL() != null && log.isDetailed()) {
log.logDetailed(BaseMessages.getString(PKG, "SalesforceInput.Log.SQLString") + " : " + getSQL());
}
switch(this.recordsFilter) {
case SalesforceConnectionUtils.RECORDS_FILTER_UPDATED:
// Updated records ...
GetUpdatedResult updatedRecords = getBinding().getUpdated(getModule(), this.startDate, this.endDate);
if (updatedRecords.getIds() != null) {
int nr = updatedRecords.getIds().length;
if (nr > 0) {
String[] ids = updatedRecords.getIds();
// We can pass a maximum of 2000 object IDs
if (nr > SalesforceConnectionUtils.MAX_UPDATED_OBJECTS_IDS) {
this.sObjects = new SObject[nr];
List<String> list = new ArrayList<String>();
int desPos = 0;
for (int i = 0; i < nr; i++) {
list.add(updatedRecords.getIds()[i]);
if (i % SalesforceConnectionUtils.MAX_UPDATED_OBJECTS_IDS == 0 || i == nr - 1) {
SObject[] s = getBinding().retrieve(this.fieldsList, getModule(), list.toArray(new String[list.size()]));
System.arraycopy(s, 0, this.sObjects, desPos, s.length);
desPos += s.length;
s = null;
list = new ArrayList<String>();
}
}
} else {
this.sObjects = getBinding().retrieve(this.fieldsList, getModule(), ids);
}
if (this.sObjects != null) {
this.queryResultSize = this.sObjects.length;
}
}
}
break;
case SalesforceConnectionUtils.RECORDS_FILTER_DELETED:
// Deleted records ...
GetDeletedResult deletedRecordsResult = getBinding().getDeleted(getModule(), this.startDate, this.endDate);
DeletedRecord[] deletedRecords = deletedRecordsResult.getDeletedRecords();
if (log.isDebug()) {
log.logDebug(toString(), BaseMessages.getString(PKG, "SalesforceConnection.DeletedRecordsFound", String.valueOf(deletedRecords == null ? 0 : deletedRecords.length)));
}
if (deletedRecords != null && deletedRecords.length > 0) {
getDeletedList = new HashMap<String, Date>();
for (DeletedRecord dr : deletedRecords) {
getDeletedList.put(dr.getId(), dr.getDeletedDate().getTime());
}
this.qr = getBinding().queryAll(getSQL());
this.sObjects = getQueryResult().getRecords();
if (this.sObjects != null) {
this.queryResultSize = this.sObjects.length;
}
}
break;
default:
// return query result
this.qr = isQueryAll() ? getBinding().queryAll(getSQL()) : getBinding().query(getSQL());
this.sObjects = getQueryResult().getRecords();
this.queryResultSize = getQueryResult().getSize();
break;
}
if (this.sObjects != null) {
this.recordsCount = this.sObjects.length;
}
} catch (Exception e) {
log.logError(Const.getStackTracker(e));
throw new KettleException(BaseMessages.getString(PKG, "SalesforceConnection.Exception.Query"), e);
}
}
use of com.sforce.soap.partner.GetDeletedResult in project components by Talend.
the class SalesforceGetDeletedUpdatedReaderTestIT method testGetQueryStringList.
/**
* For tSalesforceGetDeleted generate SOQL
*/
@Test
public void testGetQueryStringList() throws Throwable {
SalesforceGetDeletedReader deletedReader = new SalesforceGetDeletedReader(null, null, createSalesforceGetDeletedUpdatedProperties(false)) {
@Override
protected GetDeletedResult getResult() throws IOException, ConnectionException {
GetDeletedResult result = new GetDeletedResult();
List<DeletedRecord> records = new ArrayList<>();
for (int i = 1000; i < 1999; i++) {
DeletedRecord record = new DeletedRecord();
record.setId("0019000001fvZV" + i);
records.add(record);
}
result.setDeletedRecords(records.toArray(new DeletedRecord[records.size()]));
return result;
}
};
List<String> queryStrings = deletedReader.getQueryStringList(deletedReader.getResult());
for (String query : queryStrings) {
assertTrue(query.length() > 0);
assertTrue(query.length() < deletedReader.soqlCharacterLimit);
}
assertEquals(3, queryStrings.size());
}
use of com.sforce.soap.partner.GetDeletedResult in project teiid by teiid.
the class TestSalesforceConnectionImpl method testGetDeleted.
@Test
public void testGetDeleted() throws Exception {
PartnerConnection pc = Mockito.mock(PartnerConnection.class);
GetDeletedResult gdr = new GetDeletedResult();
Calendar c = Calendar.getInstance();
gdr.setEarliestDateAvailable(c);
gdr.setLatestDateCovered(c);
DeletedRecord dr = new DeletedRecord();
dr.setDeletedDate(c);
dr.setId("id");
gdr.setDeletedRecords(new DeletedRecord[] { dr });
Mockito.stub(pc.getDeleted("x", null, null)).toReturn(gdr);
SalesforceConnectionImpl sfci = new SalesforceConnectionImpl(pc);
DeletedResult result = sfci.getDeleted("x", null, null);
assertEquals(1, result.getResultRecords().size());
}
Aggregations