Scott/Matt, Here is the wsdl:
<?xml version="1.0" encoding="utf-8" ?> - <definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0=" " xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace=" " xmlns="http://schemas.xmlsoap.org/wsdl/"> - <types> - <s:schema elementFormDefault="qualified" targetNamespace="http://focisnet.verizon.com/FocisBusinessService/BusinessService"> - <s:element name="SubmitReturn"> - <s:complexType> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="ra" type="s0:OrderReturn" /> </s:sequence> </s:complexType> </s:element> - <s:complexType name="OrderReturn"> - <s:complexContent mixed="false"> - <s:extension base="s0:FocisObject"> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="OrderReturnItems" type="s0:ArrayOfOrderReturnItem" /> <s:element minOccurs="0" maxOccurs="1" name="MRLAddress" type="s0:Address" /> <s:element minOccurs="0" maxOccurs="1" name="ReturnReasonCode" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="RetType" type="s0:ReturnType" /> <s:element minOccurs="0" maxOccurs="1" name="Cust" type="s0:Buyer" /> <s:element minOccurs="0" maxOccurs="1" name="OrderNumber" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="FreightCreditAmount" type="s:float" /> <s:element minOccurs="0" maxOccurs="1" name="ReasonComment" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="GenerateMRL" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPRARefNum" type="s:string" /> </s:sequence> </s:extension> </s:complexContent> </s:complexType> <s:complexType name="FocisObject" abstract="true" /> - <s:complexType name="Address"> - <s:complexContent mixed="false"> - <s:extension base="s0:FocisObject"> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="Company" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="FirstName" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="LastName" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="NameOnAddress" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="AddrLine1" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="AddrLine2" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="AddrLine3" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="City" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="State" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="Zip" type="s:string" /> </s:sequence> </s:extension> </s:complexContent> </s:complexType> - <s:complexType name="ArrayOfOrderReturnItem"> - <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="OrderReturnItem" nillable="true" type="s0:OrderReturnItem" /> </s:sequence> </s:complexType> - <s:complexType name="OrderReturnItem"> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="ProductCode" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="CreditAmount" type="s:float" /> <s:element minOccurs="0" maxOccurs="1" name="ServicePlanProductCode" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="RequestedQty" type="s:int" /> <s:element minOccurs="0" maxOccurs="1" name="ReplacementProductCode" type="s:string" /> </s:sequence> </s:complexType> - <s:simpleType name="ReturnType"> - <s:restriction base="s:string"> <s:enumeration value="Replacement" /> <s:enumeration value="Credit" /> <s:enumeration value="Termination" /> </s:restriction> </s:simpleType> - <s:complexType name="Buyer"> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="TaxExemptCertNum" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="TaxExempt" type="s:int" /> <s:element minOccurs="0" maxOccurs="1" name="BTN" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BTNCustomerCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="ShippingAddress" type="s0:Address" /> <s:element minOccurs="0" maxOccurs="1" name="CustomerClassCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="DayPhoneNum" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="SSN" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="EmailAddr" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="VTPCustomerNumber" type="s:string" /> </s:sequence> </s:complexType> - <s:element name="SubmitReturnResponse"> - <s:complexType> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="SubmitReturnResult" type="s0:ReturnSubmissionInfo" /> </s:sequence> </s:complexType> </s:element> <s:complexType name="ReturnSubmissionInfo" /> - <s:element name="SubmitSSPOrder"> - <s:complexType> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="ord" type="s0:SSPOrder" /> </s:sequence> </s:complexType> </s:element> - <s:complexType name="SSPOrder"> - <s:complexContent mixed="false"> - <s:extension base="s0:WebOrder"> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="SSPDSLInfo" type="s0:DSLInfo" /> </s:sequence> </s:extension> </s:complexContent> </s:complexType> - <s:complexType name="WebOrder"> - <s:complexContent mixed="false"> - <s:extension base="s0:Order"> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="WebOrderNumber" type="s:string" /> </s:sequence> </s:extension> </s:complexContent> </s:complexType> - <s:complexType name="Order"> - <s:complexContent mixed="false"> - <s:extension base="s0:FocisObject"> - <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="TaxAmount" type="s:float" /> <s:element minOccurs="0" maxOccurs="1" name="SourceOfOrder" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BillingInfos" type="s0:ArrayOfBillingInfo" /> <s:element minOccurs="0" maxOccurs="1" name="ShippingAddress" type="s0:Address" /> <s:element minOccurs="0" maxOccurs="1" name="OrderItems" type="s0:ArrayOfOrderItem" /> <s:element minOccurs="0" maxOccurs="1" name="Comment" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="DiscountTotal" type="s:float" /> <s:element minOccurs="0" maxOccurs="1" name="RepID1" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPInfo" type="s0:BusinessPartnerInfo" /> <s:element minOccurs="0" maxOccurs="1" name="Cust" type="s0:Buyer" /> <s:element minOccurs="1" maxOccurs="1" name="PrefShipDate" type="s:dateTime" /> <s:element minOccurs="0" maxOccurs="1" name="ShipMethod" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="FreightAmount" type="s:float" /> <s:element minOccurs="0" maxOccurs="1" name="RAShipMethod" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="dtPrefDeliveryDate" type="s:dateTime" /> </s:sequence> </s:extension> </s:complexContent> </s:complexType> - <s:complexType name="ArrayOfBillingInfo"> - <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="BillingInfo" nillable="true" type="s0:BillingInfo" /> </s:sequence> </s:complexType> - <s:complexType name="BillingInfo"> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="BillingMethodDesc" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BillingMethodCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BillingAddress" type="s0:Address" /> <s:element minOccurs="0" maxOccurs="1" name="CheckingAccountNum" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="CheckingAccountRoutingNum" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="CheckingAccountCheckNum" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="CreditCardAccountName" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="CreditCardAccountNum" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="CreditCardExpiration" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="CreditCardAuth" type="s:string" /> </s:sequence> </s:complexType> - <s:complexType name="ArrayOfOrderItem"> - <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="OrderItem" nillable="true" type="s0:OrderItem" /> </s:sequence> </s:complexType> - <s:complexType name="OrderItem"> - <s:complexContent mixed="false"> - <s:extension base="s0:FocisObject"> - <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="DiscountAmt" type="s:float" /> <s:element minOccurs="0" maxOccurs="1" name="PromoCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="ServicePlanProductCode" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="SellingPrice" type="s:float" /> <s:element minOccurs="0" maxOccurs="1" name="ProductCode" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="OrderQty" type="s:int" /> <s:element minOccurs="0" maxOccurs="1" name="Description" type="s:string" /> </s:sequence> </s:extension> </s:complexContent> </s:complexType> - <s:complexType name="BusinessPartnerInfo"> - <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="BPOrderDate" type="s:dateTime" /> <s:element minOccurs="0" maxOccurs="1" name="BPRepCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPBatchCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPOrigCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPGroupCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPBillingCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPNotifyCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPCustomerNum" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPOrderRefNum" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPOfferingCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="CustomField1" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="CustomField2" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="CustomField3" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="CustomField4" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="CustomField5" type="s:string" /> </s:sequence> </s:complexType> - <s:complexType name="DSLInfo"> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="VOLOrderNumber" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="BPDSLServiceReady" type="s:dateTime" /> <s:element minOccurs="0" maxOccurs="1" name="BPCircuitID" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="DSLPhoneNumber" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPDomainName" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPDNS1" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPDNS2" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPMailServer" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPSMTPServer" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="NNTPServer" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPAccountName" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="BPAccountPwd" type="s:string" /> </s:sequence> </s:complexType> - <s:element name="SubmitSSPOrderResponse"> - <s:complexType> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="SubmitSSPOrderResult" type="s0:OrderSubmissionInfo" /> </s:sequence> </s:complexType> </s:element> - <s:complexType name="OrderSubmissionInfo"> - <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="Status" type="s0:OrderSubmissionStatus" /> <s:element minOccurs="0" maxOccurs="1" name="OrderNumber" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="TaxAmount" type="s:float" /> <s:element minOccurs="0" maxOccurs="1" name="Errors" type="s0:ArrayOfString" /> </s:sequence> </s:complexType> - <s:simpleType name="OrderSubmissionStatus"> - <s:restriction base="s:string"> <s:enumeration value="OK" /> <s:enumeration value="REJECTED" /> </s:restriction> </s:simpleType> - <s:complexType name="ArrayOfString"> - <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string" /> </s:sequence> </s:complexType> - <s:element name="SubmitCancelRequest"> - <s:complexType> - <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="lnSSPElementID" type="s:int" /> </s:sequence> </s:complexType> </s:element> - <s:element name="SubmitCancelRequestResponse"> - <s:complexType> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="SubmitCancelRequestResult" type="s0:CancelSubmissionInfo" /> </s:sequence> </s:complexType> </s:element> - <s:complexType name="CancelSubmissionInfo"> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="Status" type="s0:CancelSubmissionInfo" /> </s:sequence> </s:complexType> - <s:element name="TestAddress"> - <s:complexType> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="addr" type="s0:TestAddressClass" /> </s:sequence> </s:complexType> </s:element> - <s:complexType name="TestAddressClass"> - <s:complexContent mixed="false"> - <s:extension base="s0:Address"> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="TestAddressProperty" /> </s:sequence> </s:extension> </s:complexContent> </s:complexType> - <s:element name="TestAddressResponse"> - <s:complexType> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="TestAddressResult" type="s:string" /> </s:sequence> </s:complexType> </s:element> - <s:element name="SubmitOrder"> - <s:complexType> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="ord" type="s0:WebOrder" /> <s:element minOccurs="1" maxOccurs="1" name="ValidateOnly" type="s:short" /> </s:sequence> </s:complexType> </s:element> - <s:element name="SubmitOrderResponse"> - <s:complexType> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="SubmitOrderResult" type="s0:OrderSubmissionInfo" /> </s:sequence> </s:complexType> </s:element> - <s:element name="GetAuthUser"> <s:complexType /> </s:element> - <s:element name="GetAuthUserResponse"> - <s:complexType> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="GetAuthUserResult" type="s:string" /> </s:sequence> </s:complexType> </s:element> </s:schema> </types> - <message name="SubmitReturnSoapIn"> <part name="parameters" element="s0:SubmitReturn" /> </message> - <message name="SubmitReturnSoapOut"> <part name="parameters" element="s0:SubmitReturnResponse" /> </message> - <message name="SubmitSSPOrderSoapIn"> <part name="parameters" element="s0:SubmitSSPOrder" /> </message> - <message name="SubmitSSPOrderSoapOut"> <part name="parameters" element="s0:SubmitSSPOrderResponse" /> </message> - <message name="SubmitCancelRequestSoapIn"> <part name="parameters" element="s0:SubmitCancelRequest" /> </message> - <message name="SubmitCancelRequestSoapOut"> <part name="parameters" element="s0:SubmitCancelRequestResponse" /> </message> - <message name="TestAddressSoapIn"> <part name="parameters" element="s0:TestAddress" /> </message> - <message name="TestAddressSoapOut"> <part name="parameters" element="s0:TestAddressResponse" /> </message> - <message name="SubmitOrderSoapIn"> <part name="parameters" element="s0:SubmitOrder" /> </message> - <message name="SubmitOrderSoapOut"> <part name="parameters" element="s0:SubmitOrderResponse" /> </message> - <message name="GetAuthUserSoapIn"> <part name="parameters" element="s0:GetAuthUser" /> </message> - <message name="GetAuthUserSoapOut"> <part name="parameters" element="s0:GetAuthUserResponse" /> </message> - <portType name="BusinessServiceSoap"> - <operation name="SubmitReturn"> <input message="s0:SubmitReturnSoapIn" /> <output message="s0:SubmitReturnSoapOut" /> </operation> - <operation name="SubmitSSPOrder"> <input message="s0:SubmitSSPOrderSoapIn" /> <output message="s0:SubmitSSPOrderSoapOut" /> </operation> - <operation name="SubmitCancelRequest"> <input message="s0:SubmitCancelRequestSoapIn" /> <output message="s0:SubmitCancelRequestSoapOut" /> </operation> - <operation name="TestAddress"> <input message="s0:TestAddressSoapIn" /> <output message="s0:TestAddressSoapOut" /> </operation> - <operation name="SubmitOrder"> <input message="s0:SubmitOrderSoapIn" /> <output message="s0:SubmitOrderSoapOut" /> </operation> - <operation name="GetAuthUser"> <input message="s0:GetAuthUserSoapIn" /> <output message="s0:GetAuthUserSoapOut" /> </operation> </portType> - <binding name="BusinessServiceSoap" type="s0:BusinessServiceSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> - <operation name="SubmitReturn"> <soap:operation soapAction=" /SubmitReturn" style="document" /> - <input> <soap:body use="literal" /> </input> - <output> <soap:body use="literal" /> </output> </operation> - <operation name="SubmitSSPOrder"> <soap:operation soapAction=" /SubmitSSPOrder" style="document" /> - <input> <soap:body use="literal" /> </input> - <output> <soap:body use="literal" /> </output> </operation> - <operation name="SubmitCancelRequest"> <soap:operation soapAction=" " style="document" /> - <input> <soap:body use="literal" /> </input> - <output> <soap:body use="literal" /> </output> </operation> - <operation name="TestAddress"> <soap:operation soapAction=" /TestAddress" style="document" /> - <input> <soap:body use="literal" /> </input> - <output> <soap:body use="literal" /> </output> </operation> - <operation name="SubmitOrder"> <soap:operation soapAction=" /SubmitOrder" style="document" /> - <input> <soap:body use="literal" /> </input> - <output> <soap:body use="literal" /> </output> </operation> - <operation name="GetAuthUser"> <soap:operation soapAction=" /GetAuthUser" style="document" /> - <input> <soap:body use="literal" /> </input> - <output> <soap:body use="literal" /> </output> </operation> </binding> - <service name="BusinessService"> - <port name="BusinessServiceSoap" binding="s0:BusinessServiceSoap"> <soap:address location=" " /> </port> </service> </definitions> -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Scott Keene Sent: Friday, January 23, 2004 3:21 PM To: [EMAIL PROTECTED] Subject: RE: [CFCDev] Invoking .NET webservice with CF... Matt's right about the .NET service having interoperability issues. If it's VB.NET and it was auto-generated from VisualStudio, you can almost guarantee it has interop issues! Not to totally MS-bash, but even the .NET runtime has some implementation issues. Do you know if this service was auto-generated? Also I'm curious - does the WSDL at least contain a complex type definition for Order at all, or does it point to any schema location that contains it? This line here: <s:extension base="s0:Order"> Would lead me to believe it is defined in a separate file that it references. (Again, just curious as to how VB is generating WSDL in these cases.) Scott > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Matt Liotta > Sent: Friday, January 23, 2004 3:06 PM > To: [EMAIL PROTECTED] > Subject: Re: [CFCDev] Invoking .NET webservice with CF... > > If you try creating a web service using a CFC that extends > another I believe you will find that the web service provides > the API without indicating anything about the implementation. > Requiring that a consumer understand an inheritance hierarchy > means that your API doesn't hide implementation details. > Thus, I believe that the .NET web service to which you refer > is not interoperable and should be changed. > > -Matt > > > On Jan 23, 2004, at 2:52 PM, Houk, Gary wrote: > > > All, > > > > We have a web service that is written in VB.NET > > > > � > > > > The web service accepts a complex type as a parameter. > > > > � > > > > This type is called "WebOrder". > > > > � > > > > In .NET, this WebOrder class inherits from a base class > called Order. > > > > � > > > > When exposed via a web service, the WSDL for the WebOrder looks like > > this: > > > > � > > > > <s:complexType name="WebOrder"> > > > > - <s:complexContent mixed="false"> > > > > - <s:extension base="s0:Order"> > > > > - <s:sequence> > > > > � <s:element > > minOccurs="0"maxOccurs="1"name="WebOrderNumber"type="s:string"/> > > > > � </s:sequence> > > > > � </s:extension> > > > > � </s:complexContent> > > > > � </s:complexType> > > > > � > > > > (please note the extension base bit) > > > > � > > > > The problem is, when CF automatically generates the structs for the > > web service, it seems that it doesn't recognize that WebOrder is > > derived from Order. > > > > � > > > > If I use <cfset> to explicitly add all of the members or > Order I get > > an error that says that CF can't find a method that accepts those > > parameters. > > > > � > > > > If I only use the unique property of WebOrder, the .NET web service > > will not accept the order, because it doesn't contain any of the > > required data for the Order base class. > > > > Thanks, > > > > - Gary > > > > � > > ---------------------------------------------------------- > You are subscribed to cfcdev. To unsubscribe, send an email > to [EMAIL PROTECTED] with the words 'unsubscribe cfcdev' > in the message of the email. > > CFCDev is run by CFCZone (www.cfczone.org) and supported by > Mindtool, Corporation (www.mindtool.com). > > An archive of the CFCDev list is available at > www.mail-archive.com/[EMAIL PROTECTED] > ---------------------------------------------------------- You are subscribed to cfcdev. To unsubscribe, send an email to [EMAIL PROTECTED] with the words 'unsubscribe cfcdev' in the message of the email. CFCDev is run by CFCZone (www.cfczone.org) and supported by Mindtool, Corporation (www.mindtool.com). An archive of the CFCDev list is available at www.mail-archive.com/[EMAIL PROTECTED] ---------------------------------------------------------- You are subscribed to cfcdev. To unsubscribe, send an email to [EMAIL PROTECTED] with the words 'unsubscribe cfcdev' in the message of the email. CFCDev is run by CFCZone (www.cfczone.org) and supported by Mindtool, Corporation (www.mindtool.com). An archive of the CFCDev list is available at www.mail-archive.com/[EMAIL PROTECTED]
