public UpsertDataTask(UpsertDataTaskModel model) { _taskModel = model; _bulkApiCalls = new BulkApiCalls { AuthenticationClient = model.AuthenticationClient, Urls = model.Urls, WebClient = model.WebClient, }; }
public void BatchResultsXml_Are_Cast_to_BatchResults() { //Authenticate with salesforce var authentication = new AuthenticationClient { WebClient = new TestWebClient() }; authentication.UsernamePassword("clientid", "secret", "username", "password", "http://authenticationTokenurl.com"); //Data that needs to be sent var exportData = new List<Dictionary<string, string>> { new Dictionary<string, string> { {"PersonEmail", "PersonEmail"} } }; //Upsert task var taskModel = new UpsertDataTaskModel { AuthenticationClient = authentication, UploadData = exportData, Urls = new Dictionary<string, string>(), WebClient = new TestWebClient { SalesforceReturnData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><results xmlns=\"http://www.force.com/2009/06/asyncapi/dataload\"><result><id>AccountId1</id><success>true</success><created>false</created></result><result><errors><fields>Name</fields><message>Account: bad field names on insert/update call: Name</message><statusCode>INVALID_FIELD_FOR_INSERT_UPDATE</statusCode></errors><errors><fields>XXXXXX</fields><message>Account: bad field names on insert/update call: Name</message><statusCode>INVALID_FIELD_FOR_INSERT_UPDATE</statusCode></errors><success>false</success><created>false</created></result><result><id>AccountId3</id><success>true</success><created>false</created></result></results>" }, JobObject = JobObject.Account, ExternalIdFieldName = "AppUserId__c" }; //Urls taskModel.Urls["CreateBulkJob"] = "CreateBulkJob"; taskModel.Urls["UploadBatch"] = "UploadBatch"; taskModel.Urls["CloseJob"] = "CloseJob"; taskModel.Urls["CheckBatch"] = "CheckBatch"; taskModel.Urls["GetBatchResults"] = "GetBatchResults"; //Execute task var task = new UpsertDataTask(taskModel); task.Invoke(); Assert.IsTrue(taskModel.BatchResultList.Count == 3); Assert.IsTrue(taskModel.BatchResultList[0].Id == "AccountId1"); Assert.IsTrue(taskModel.BatchResultList[0].Success); Assert.IsTrue(String.IsNullOrEmpty(taskModel.BatchResultList[1].Id)); Assert.IsFalse(taskModel.BatchResultList[1].Success); Assert.IsTrue(taskModel.BatchResultList[2].Id == "AccountId3"); Assert.IsTrue(taskModel.BatchResultList[2].Success); }
private void GetBatchResultList(UpsertDataTaskModel msg) { try { var parent = msg.BatchResults.GetElementsByTagName("results")[0]; var batchData = parent.ChildNodes.Cast<XmlElement>() .Select(s => s.OuterXml.Replace(s.NamespaceURI, "").DeSerializeXmlToClass<BatchResult>()) .ToList(); msg.BatchResultList = batchData; } catch (Exception ex) { msg.BatchResultList = new List<BatchResult>(); msg.UpsertError = "Failed to return or process batch results job"; } }