Quick Start: Invoking a long-lived process using the web service API

The following C# code example invokes the FirstAppSolution/PreLoanProcess process.

    * Ensure that you create a .NET project that uses  
    * MS Visual Studio 2008 and version 3.5 of the .NET 
    * framework. This is required to invoke a  
    * LiveCycle service using MTOM. 
    * For information, see "Invoking LiveCycle using MTOM" in Programming with AEM forms.   
using System; 
using System.Collections; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.ServiceModel; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 
using System.Xml; 
using System.IO; 
//A reference to FirstAppSolution/PreLoanProcess 
using InvokePreLoanProcess.PreLoanProcess; 
//A reference to JobManager service 
using InvokePreLoanProcess.JobManager; 
namespace InvokePreLoanProcess 
       public partial class _Default : System.Web.UI.Page 
           //This method is called when the Submit Application button is  
           protected void Button1_Click(object sender, EventArgs e) 
               //Create a FirstAppSolution_PreLoanProcessClient object 
               FirstAppSolution_PreLoanProcessClient mortgageClient = new FirstAppSolution_PreLoanProcessClient(); 
               mortgageClient.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://hiro-xp:8080/soap/services/FirstAppSolution/PreLoanProcess?blob=mtom"); 
               //Enable BASIC HTTP authentication 
               BasicHttpBinding b = (BasicHttpBinding)mortgageClient.Endpoint.Binding; 
               b.MessageEncoding = WSMessageEncoding.Mtom; 
               mortgageClient.ClientCredentials.UserName.UserName = "administrator"; 
               mortgageClient.ClientCredentials.UserName.Password = "password"; 
               b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; 
               b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; 
               b.MaxReceivedMessageSize = 2000000; 
               b.MaxBufferSize = 2000000; 
               b.ReaderQuotas.MaxArrayLength = 2000000; 
               //Retrieve values that user entered into the web page 
               String userName = TextBoxName.Text; 
               String phone = TextBoxPhone.Text; 
               String amount = TextBoxAmount.Text; 
               //Create the XML to pass to the FirstAppSolution/PreLoanProcess process 
               XmlDocument myXML = CreateXML(userName, phone, amount); 
               StringWriter sw = new StringWriter(); 
               XmlTextWriter xw = new XmlTextWriter(sw); 
               InvokePreLoanProcess.PreLoanProcess.XML inXML = new XML(); 
               inXML.document = sw.ToString();  
               //INvoke the FirstAppSolution/PreLoanProcess process 
               String invocationID =  mortgageClient.invoke_Async(inXML); 
               //Create a JobManagerClient object to obtain the status of the long-lived operation 
               JobManagerClient jobManager = new JobManagerClient(); 
               jobManager.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://hiro-xp:8080/soap/services/JobManager?blob=mtom"); 
               //Enable BASIC HTTP authentication 
               BasicHttpBinding b1 = (BasicHttpBinding)jobManager.Endpoint.Binding; 
               b1.MessageEncoding = WSMessageEncoding.Mtom; 
               jobManager.ClientCredentials.UserName.UserName = "administrator"; 
               jobManager.ClientCredentials.UserName.Password = "password"; 
               b1.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; 
               b1.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; 
               b1.MaxReceivedMessageSize = 2000000; 
               b1.MaxBufferSize = 2000000; 
               b1.ReaderQuotas.MaxArrayLength = 2000000; 
               //Create a JobID object that represents the status of the  
               //long-lived operation 
               JobId jobId = new JobId(); 
               jobId.id = invocationID; 
               jobId.persistent = true; 
               JobStatus jobStatus = jobManager.getStatus(jobId); 
               System.Int16 val2 = jobStatus.statusCode; 
               LabelJobID.Text = "The job status identifier value is " + invocationID;   
               LabelStatus.Text = "The status of the long-lived operation is " + getJobDescription(val2);  
           private static XmlDocument CreateXML(String name, String phone, String amount) 
               //This method dynamically creates a DDX document  
               //to pass to the FirstAppSolution/PreLoanProcess process 
               XmlDocument xmlDoc = new XmlDocument(); 
               //Create the root element and append it to the XML DOM         
               System.Xml.XmlElement root = xmlDoc.CreateElement("LoanApp"); 
               //Create the Name element 
               XmlElement nameElement = xmlDoc.CreateElement("Name"); 
               //Create the LoanAmount element 
               XmlElement LoanAmount = xmlDoc.CreateElement("LoanAmount"); 
               //Create the PhoneOrEmail element 
               XmlElement PhoneOrEmail = xmlDoc.CreateElement("PhoneOrEmail"); 
               //Create the ApprovalStatus element 
               XmlElement ApprovalStatus = xmlDoc.CreateElement("ApprovalStatus"); 
               ApprovalStatus.AppendChild(xmlDoc.CreateTextNode("PENDING APPROVAL")); 
               //Return the XmlElement instance 
               return xmlDoc; 
           //Returns the String value of the Job Manager status code 
           private String getJobDescription(int val) 
                   case 0: 
                       return "JOB_STATUS_UNKNOWN"; 
                   case 1:  
                       return "JOB_STATUS_QUEUED"; 
                   case 2:  
                       return "JOB_STATUS_RUNNING"; 
                   case 3:  
                       return "JOB_STATUS_COMPLETED";   
                   case 4:  
                       return "JOB_STATUS_FAILED";  
                    case 5:  
                       return "JOB_STATUS_COMPLETED";  
                   case 6:  
                       return "JOB_STATUS_SUSPENDED"; 
                   case 7:  
                       return "JOB_STATUS_COMPLETE_REQUESTED"; 
                   case 8:  
                       return "JOB_STATUS_TERMINATE_REQUESTED"; 
                    case 9:  
                       return "JOB_STATUS_SUSPEND_REQUESTED"; 
                      case 10:  
                       return "JOB_STATUS_RESUME_REQUESTED"; 
               return ""; 
Note: The values located in the getJobDescription user-defined method correspond to values returned by the Job Manager service. (See Retrieving the Status of a LiveCycle Job .)

// Ethnio survey code removed