/// <summary> /// After calculation occurs in the calculation engine, provide a hook /// to perform additional custom actions. /// </summary> /// <param name="request">The request that was sent to the calculation engine.</param> /// <param name="response">The response that came back from the calculation engine.</param> /// <returns></returns> public ActionableResponse AfterCalculation(CalculationRequest request, CalculationResponse response) { // get values from named ranges of Excel file var name = request.Inputs.FirstOrDefault(x => x.Ref == "iName"); var mail = request.Inputs.FirstOrDefault(x => x.Ref == "iEmail"); // prepare the SOAP client BasicHttpBinding b = new BasicHttpBinding(); EndpointAddress ea = new EndpointAddress("https://login.salesforce.com/services/Soap/c/43.0"); b.Name = "Soap"; b.Namespace = "sforce.Soap"; b.Security.Mode = BasicHttpSecurityMode.Transport; SoapClient client = new SoapClient(b, ea); SessionHeader header; SoapClient apiClient; LoginResult loginResult; ActionableResponse ar = new ActionableResponse(); try { // authenticate to a Salesforce Web Service loginResult = client.login(null, accountName, accountPwd); header = new sforce.SessionHeader(); header.sessionId = loginResult.sessionId; EndpointAddress eaApiClient = new EndpointAddress(loginResult.serverUrl); // initialize API client apiClient = new SoapClient(b, eaApiClient); // create a Lead data Lead lead = new Lead() { // use same value for FirstName and LastName FirstName = name.Value[0][0].Value, LastName = name.Value[0][0].Value, Email = mail.Value[0][0].Value, Company = "Company Name", LeadSource = "Advertisement" }; AssignmentRuleHeader arh = new AssignmentRuleHeader(); QueryResult qr = null; LimitInfo[] li; SaveResult[] sr; // make an API request and add a Lead record to the Salesforce database apiClient.create( header, // sessionheader arh, // assignmentruleheader null, // mruheader null, // allowfieldtrunctionheader null, // disablefeedtrackingheader null, // streamingenabledheader null, // allornoneheader null, // duplicateruleheader null, // localeoptions null, // debuggingheader null, // packageversionheader null, // emailheader new sObject[] { lead }, out li, out sr); foreach (SaveResult s in sr) { if (s.success) { ar.Success = true; // for demonstration purpose we can set the id of added Lead record to a control visible on the page response.Outputs.FirstOrDefault(x => x.Ref == "Response").Value[0][0].Value = s.id; } else { // set error messages to send back to a page foreach (var e in s.errors) { ar.Messages.Add(e.message); } ar.Success = false; } } } catch (Exception ex) { // set error message to send back to a page ar.Messages.Add(ex.Message); ar.Success = false; } return(ar); }
public ActionableResponse AfterCalculation(CalculationRequest request, CalculationResponse response) { var name = request.Inputs.FirstOrDefault(x => x.Ref == "iName"); var lastName = request.Inputs.FirstOrDefault(x => x.Ref == "iSurname"); var cardNumber = request.Inputs.FirstOrDefault(x => x.Ref == "iCardNumber"); var year = request.Inputs.FirstOrDefault(x => x.Ref == "iYear"); var month = request.Inputs.FirstOrDefault(x => x.Ref == "iMonth"); var cvc = request.Inputs.FirstOrDefault(x => x.Ref == "iCVC"); var amount = Convert.ToDecimal(request.Inputs.FirstOrDefault(x => x.Ref == "iAmount").Value[0][0].Value); var address = request.Inputs.FirstOrDefault(x => x.Ref == "iAddress"); var city = request.Inputs.FirstOrDefault(x => x.Ref == "iCity"); var zip = request.Inputs.FirstOrDefault(x => x.Ref == "iZip"); var errRespo = new ActionableResponse(); errRespo.Success = false; errRespo.ResponseAction = ResponseAction.Cancel; errRespo.Messages = new System.Collections.Generic.List <string>(); try { ApiOperationBase <ANetApiRequest, ANetApiResponse> .RunEnvironment = AuthorizeNet.Environment.SANDBOX; ApiOperationBase <ANetApiRequest, ANetApiResponse> .MerchantAuthentication = new merchantAuthenticationType() { name = apiLoginId, ItemElementName = ItemChoiceType.transactionKey, Item = transactionKey, }; var creditCard = new creditCardType { cardNumber = cardNumber.Value[0][0].Value, expirationDate = month.Value[0][0].Value + year.Value[0][0].Value, cardCode = cvc.Value[0][0].Value }; var billingAddress = new customerAddressType { firstName = name.Value[0][0].Value, lastName = lastName.Value[0][0].Value, address = address.Value[0][0].Value, city = city.Value[0][0].Value, zip = zip.Value[0][0].Value }; var paymentType = new paymentType { Item = creditCard }; // Add line Items var lineItems = new lineItemType[2]; lineItems[0] = new lineItemType { itemId = "1", name = "t-shirt", quantity = 2, unitPrice = new Decimal(15.00) }; lineItems[1] = new lineItemType { itemId = "2", name = "snowboard", quantity = 1, unitPrice = new Decimal(450.00) }; var transactionRequest = new transactionRequestType { transactionType = transactionTypeEnum.authCaptureTransaction.ToString(), // charge the card amount = amount, payment = paymentType, billTo = billingAddress, lineItems = lineItems }; var req = new createTransactionRequest { transactionRequest = transactionRequest }; var controller = new createTransactionController(req); controller.Execute(); var resp = controller.GetApiResponse(); if (resp != null) { if (resp.messages.resultCode == messageTypeEnum.Ok) { if (resp.transactionResponse.messages != null) { response.Outputs.FirstOrDefault(x => x.Ref == "oResponse").Value[0][0].Value = "Successfully created transaction with Transaction ID: " + resp.transactionResponse.transId + "<br />" + "Response Code: " + resp.transactionResponse.responseCode + "<br />" + "Message Code: " + resp.transactionResponse.messages[0].code + "<br />" + "Description: " + resp.transactionResponse.messages[0].description + "<br />" + "Success, Auth Code : " + resp.transactionResponse.authCode; return(new ActionableResponse { Success = true }); } else { errRespo.Messages.Add("Failed Transaction."); if (resp.transactionResponse.errors != null) { errRespo.Messages.Add("Error Code: " + resp.transactionResponse.errors[0].errorCode); errRespo.Messages.Add("Error message: " + resp.transactionResponse.errors[0].errorText); } return(errRespo); } } else { errRespo.Messages.Add("Failed Transaction."); if (resp.transactionResponse != null && resp.transactionResponse.errors != null) { errRespo.Messages.Add("Error Code: " + resp.transactionResponse.errors[0].errorCode); errRespo.Messages.Add("Error message: " + resp.transactionResponse.errors[0].errorText); } else { errRespo.Messages.Add("Error Code: " + resp.messages.message[0].code); errRespo.Messages.Add("Error message: " + resp.messages.message[0].text); } return(errRespo); } } else { errRespo.Messages.Add("Null Response."); } return(errRespo); } catch (Exception ex) { return(new ActionableResponse { Success = false, Messages = new System.Collections.Generic.List <string>() { ex.Message }, ResponseAction = ResponseAction.Cancel }); } }