Ejemplo n.º 1
0
        private void SubmitApplication(LoanApplicationData loanApp)
        {
            LoanApplicationProcess loanRequestActivity = new LoanApplicationProcess(loanApp.ApplicationID)
            {
                ApplicantID = loanApp.Ssn,
                LoanApplicationSubmitted = DateTime.UtcNow
            };

            // Ensure the availability of required extensions, throw an exception if not available.
            Global.WebRoleSingleton.Extensions.Demand <IActivityTrackingEventStreamExtension>();
            Global.WebRoleSingleton.Extensions.Demand <IRulesEngineServiceClientExtension>();

            IActivityTrackingEventStreamExtension trackingEventStream = Global.WebRoleSingleton.Extensions.Find <IActivityTrackingEventStreamExtension>();
            IRulesEngineServiceClientExtension    ruleEngineClient    = Global.WebRoleSingleton.Extensions.Find <IRulesEngineServiceClientExtension>();
            IRoleConfigurationSettingsExtension   roleConfig          = Global.WebRoleSingleton.Extensions.Find <IRoleConfigurationSettingsExtension>();

            // Tells the event stream to invoke the BeginActivity operation.
            trackingEventStream.BeginActivity(loanRequestActivity);

            // Call BRE rule to obtain a pre-approval.
            SimpleValueFact result = ruleEngineClient.ExecutePolicy <SimpleValueFact>("Contoso.Cloud.Integration.Demo.LoanPreapproval", loanApp);

            // Update the LoanPreapprovalReceived milestone.
            loanRequestActivity.LoanPreapprovalDecision = Convert.ToString(result.Value);
            loanRequestActivity.LoanPreapprovalReceived = DateTime.UtcNow;

            // Display pre-approval decision.
            SetResultDisplay(loanRequestActivity.LoanPreapprovalDecision);

            // Tells the event stream to invoke the UpdateActivity.
            trackingEventStream.UpdateActivity(loanRequestActivity);

            // Submit pre-approved loan for final processing.
            if (String.Compare(loanRequestActivity.LoanPreapprovalDecision, "Preapproved", true) == 0)
            {
                // Submit the loan application for processing (this will update LoanApplicationStarted, LoanFinalDecision and LoanFinalDecisionMade milestones.
                using (var loanProcessor = new ReliableServiceBusClient <ILoanApplicationProcessingServiceChannel>(roleConfig.GetServiceBusEndpoint("LoanApplication"), roleConfig.CommunicationRetryPolicy))
                {
                    loanProcessor.RetryPolicy.ExecuteAction(() =>
                    {
                        loanProcessor.Client.Submit(loanApp);
                    });
                }
            }

            // Update the LoanFinalDecisionReceived milestone.
            loanRequestActivity.LoanFinalDecisionReceived = DateTime.UtcNow;

            // Tells the event stream to invoke the UpdateActivity and EndActivity operations.
            trackingEventStream.CompleteActivity(loanRequestActivity);
        }