Search in sources :

Example 1 with GetDeletedResult

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);
    }
}
Also used : GetUpdatedResult(com.sforce.soap.partner.GetUpdatedResult) KettleException(org.pentaho.di.core.exception.KettleException) DeletedRecord(com.sforce.soap.partner.DeletedRecord) DescribeSObjectResult(com.sforce.soap.partner.DescribeSObjectResult) ArrayList(java.util.ArrayList) Date(java.util.Date) SOAPException(javax.xml.soap.SOAPException) KettleException(org.pentaho.di.core.exception.KettleException) ConnectionException(com.sforce.ws.ConnectionException) IOException(java.io.IOException) SObject(com.sforce.soap.partner.sobject.SObject) GetDeletedResult(com.sforce.soap.partner.GetDeletedResult)

Example 2 with GetDeletedResult

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());
}
Also used : DeletedRecord(com.sforce.soap.partner.DeletedRecord) GetDeletedResult(com.sforce.soap.partner.GetDeletedResult) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 3 with GetDeletedResult

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());
}
Also used : GetDeletedResult(com.sforce.soap.partner.GetDeletedResult) DeletedResult(org.teiid.translator.salesforce.execution.DeletedResult) PartnerConnection(com.sforce.soap.partner.PartnerConnection) DeletedRecord(com.sforce.soap.partner.DeletedRecord) Calendar(java.util.Calendar) GetDeletedResult(com.sforce.soap.partner.GetDeletedResult) Test(org.junit.Test)

Aggregations

DeletedRecord (com.sforce.soap.partner.DeletedRecord)3 GetDeletedResult (com.sforce.soap.partner.GetDeletedResult)3 ArrayList (java.util.ArrayList)2 Test (org.junit.Test)2 DescribeSObjectResult (com.sforce.soap.partner.DescribeSObjectResult)1 GetUpdatedResult (com.sforce.soap.partner.GetUpdatedResult)1 PartnerConnection (com.sforce.soap.partner.PartnerConnection)1 SObject (com.sforce.soap.partner.sobject.SObject)1 ConnectionException (com.sforce.ws.ConnectionException)1 IOException (java.io.IOException)1 Calendar (java.util.Calendar)1 Date (java.util.Date)1 SOAPException (javax.xml.soap.SOAPException)1 KettleException (org.pentaho.di.core.exception.KettleException)1 DeletedResult (org.teiid.translator.salesforce.execution.DeletedResult)1