Quick Start (MTOM): Creating search rules using the web service API

The following C# code example creates two text patterns that the Output service searches for. The first text pattern is Mortgage. If found, the Output service uses the form design named Mortgage.xdp. The second text pattern is Automobile. If found, the Output service uses the form design named AutomobileLoan.xdp. If neither text pattern is located, the Output service uses the default form design named Loan.xdp. The Loan.pdf is written to the C:\Adobe folder located on the J2EE application server hosting LiveCycle, not the client computer. (See Creating Search Rules.)

/** 
    * 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 LiveCycle   
    */ 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ServiceModel; 
using System.IO; 
 
//A reference to the Output service  
using CreateSearchRules.ServiceReference1; 
 
 
namespace CreateSearchRules 
{ 
       class Program 
       { 
           static void Main(string[] args) 
           { 
               try 
               { 
                   //Create an OutputServiceClient object 
                   OutputServiceClient outputClient = new OutputServiceClient(); 
                   outputClient.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://hiro-xp:8080/soap/services/OutputService?blob=mtom"); 
 
                   //Enable BASIC HTTP authentication 
                   BasicHttpBinding b = (BasicHttpBinding)outputClient.Endpoint.Binding; 
                   b.MessageEncoding = WSMessageEncoding.Mtom; 
                   outputClient.ClientCredentials.UserName.UserName = "administrator"; 
                   outputClient.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; 
 
                   //Create a BLOB object to store form data 
                   BLOB inData = new BLOB(); 
 
                   //Reference XML data to merge into the PDF document 
                   string inputFileName = "C:\\Adobe\Loan.xml"; 
                   FileStream fs = new FileStream(inputFileName, FileMode.Open); 
 
                   //Get the length of the file stream and create a byte array  
                   int len = (int)fs.Length; 
                   byte[] byteArray = new byte[len]; 
 
                   //Populate the byte array with the contents of the file stream 
                   fs.Read(byteArray, 0, len); 
 
                   //Populate the BLOB object 
                   inData.MTOM = byteArray; 
 
                   //Define two sets of rules 
                   Rule mortageRule = new Rule(); 
                   mortageRule.pattern = "Mortgage"; 
                   mortageRule.form = "Mortgage.xdp"; 
 
                   Rule automobileRule = new Rule(); 
                   automobileRule.pattern = "Automobile"; 
                   automobileRule.form = "AutomobileLoan.xdp"; 
 
                   //Add the Rules to a MyArrayOfXsdAnyType object 
                   MyArrayOf_xsd_anyType inputRules = new MyArrayOf_xsd_anyType(); 
                   inputRules.Add(mortageRule); 
                   inputRules.Add(automobileRule); 
     
                   //Set PDF run-time options - including the rules 
                   PDFOutputOptionsSpec pdfOptions = new PDFOutputOptionsSpec(); 
                   pdfOptions.fileURI = "C:\\Adobe\Loan.pdf"; 
                   pdfOptions.lookAhead = 300; 
                   pdfOptions.rules = inputRules; 
 
                   //Set rendering run-time options 
                   RenderOptionsSpec renderOptions = new RenderOptionsSpec(); 
                   renderOptions.cacheEnabled = true; 
 
                   //Create empty objects to pass as arguments 
                   //to the generatePDFOutput method 
                   //These objects are populated by the method 
                   BLOB generatePDFOutputMetaDataDoc = new BLOB(); 
                   BLOB generatePDFOutputResultDoc = new BLOB(); 
                   OutputResult outResult = new OutputResult(); 
 
                   //Create a PDF Document using search rules 
                   outputClient.generatePDFOutput(TransformationFormat.PDF, 
                       "Loan.xdp", 
                       "C:\\Adobe", 
                       pdfOptions, 
                       renderOptions, 
                       inData, 
                       out generatePDFOutputMetaDataDoc, 
                       out generatePDFOutputResultDoc, 
                       out outResult); 
 
                   //Write the result data to Output.xml 
                   //Populate a byte array with BLOB data 
                   byte[] outByteArray = generatePDFOutputResultDoc.MTOM; 
 
                   //Create a new file to store result data 
                   string FILE_NAME = "C:\\Adobe\Output.xml"; 
                   FileStream fs2 = new FileStream(FILE_NAME, FileMode.OpenOrCreate); 
 
                   //Create a BinaryWriter object 
                   BinaryWriter w = new BinaryWriter(fs2); 
                   w.Write(outByteArray); 
                   w.Close(); 
                   fs2.Close(); 
               } 
 
               catch (Exception ee) 
               { 
                   Console.WriteLine(ee.Message); 
               } 
           } 
       } 
} 
Note: Notice that you have to specify the out keyword in front of the additional web service arguments that are passed to the generatePDFOutput method.

// Ethnio survey code removed