/// <summary>
        /// Perform a identifier search on the provider search service.
        /// </summary>
        /// <param name="request">
        /// The search criteria. The following fields are expected:
        /// <list type="bullet">
        /// <item><description>hpiiNumber (Mandatory)</description></item>
        /// </list>
        /// All other fields are to be null.
        /// </param>
        /// <returns>
        /// A response instance containing the result of the search:
        /// <list type="bullet">
        /// <item><description>serviceMessages</description></item>
        /// <item>
        ///     <description><b>individualProviderDirectoryEntries</b>
        ///     <list type="bullet">
        ///         <item><description>hpiiNumber</description></item>
        ///         <item><description>personalDetails</description></item>
        ///         <item><description>individualName</description></item>
        ///         <item><description>address</description></item>
        ///         <item><description>electronicCommunication</description></item>
        ///         <item><description>providerType</description></item>
        ///         <item>
        ///         <description><b>linkedOrganisations</b>
        ///         <list type="bullet">
        ///             <item><description>hpioNumber</description></item>
        ///             <item><description>organisationName</description></item>
        ///             <item><description>address</description></item>
        ///         </list>
        ///         </description>
        ///         </item>
        ///         <item><description>additionalComments</description></item>
        ///         <item><description>priorityNumber</description></item>
        ///     </list>
        ///     </description>
        /// </item>
        /// </list>
        /// </returns>
        public searchHIProviderDirectoryForIndividualResponse IdentifierSearch(searchHIProviderDirectoryForIndividual request)
        {
            Validation.ValidateArgumentRequired("request.hpiiNumber", request.hpiiNumber);
            Validation.ValidateArgumentNotAllowed("request.australianAddressCriteria", request.australianAddressCriteria);
            Validation.ValidateArgumentNotAllowed("request.familyName", request.familyName);
            Validation.ValidateArgumentNotAllowed("request.givenName", request.givenName);
            Validation.ValidateArgumentNotAllowed("request.internationalAddressCriteria", request.internationalAddressCriteria);
            Validation.ValidateArgumentNotAllowed("request.providerSpecialisation", request.providerSpecialisation);
            Validation.ValidateArgumentNotAllowed("request.providerSpecialty", request.providerSpecialty);
            Validation.ValidateArgumentNotAllowed("request.providerTypeCode", request.providerTypeCode);
            Validation.ValidateArgumentNotAllowed("request.sexSpecified", request.sexSpecified);

            return(HISearch(request));
        }
        /// <summary>
        /// Perform the service call.
        /// </summary>
        /// <param name="request">The search criteria in a searchHIProviderDirectoryForIndividual object.</param>
        /// <returns>The search results in a searchHIProviderDirectoryForIndividualResponse object.</returns>
        private searchHIProviderDirectoryForIndividualResponse HISearch(searchHIProviderDirectoryForIndividual request)
        {
            searchHIProviderDirectoryForIndividualRequest envelope = new searchHIProviderDirectoryForIndividualRequest();

            envelope.searchHIProviderDirectoryForIndividual = request;
            envelope.product   = product;
            envelope.user      = user;
            envelope.hpio      = hpio;
            envelope.signature = new SignatureContainerType();


            envelope.timestamp = new TimestampType()
            {
                created          = DateTime.Now,
                expires          = DateTime.Now.AddDays(30),
                expiresSpecified = true
            };

            // Set LastSoapRequestTimestamp
            LastSoapRequestTimestamp = envelope.timestamp;

            searchHIProviderDirectoryForIndividualResponse1 response1 = null;

            try
            {
                response1 = providerSearchHIProviderDirectoryForIndividualClient.searchHIProviderDirectoryForIndividual(envelope);
            }
            catch (Exception ex)
            {
                // Catch generic FaultException and call helper to throw a more specific fault
                // (FaultException<ServiceMessagesType>
                FaultHelper.ProcessAndThrowFault <ServiceMessagesType>(ex);
            }

            if (response1 != null && response1.searchHIProviderDirectoryForIndividualResponse != null)
            {
                return(response1.searchHIProviderDirectoryForIndividualResponse);
            }
            else
            {
                throw new ApplicationException(Properties.Resources.UnexpectedServiceResponse);
            }
        }
        /// <summary>
        /// Perform a demographic details search on the provider search service.
        /// </summary>
        /// <param name="request">
        /// The search criteria. The following fields can be provided:
        /// <list type="bullet">
        /// <item><description>givenName (Optional)</description></item>
        /// <item><description>familyName (Conditional)</description></item>
        /// <item><description>sex (Optional)</description></item>
        /// <item><description>providerTypeCode (Optional)</description></item>
        /// <item><description>providerSpecialty (Optional)</description></item>
        /// <item><description>providerSpecialisation (Optional)</description></item>
        /// <item>
        ///     <description><b>australianAddressCriteria</b> (Conditional)
        ///     <list type="bullet">
        ///         <item>
        ///             <description><b>unitGroup</b> (Optional)
        ///             <list type="bullet">
        ///                 <item><description>unitType (Conditional)</description></item>
        ///                 <item><description>unitNumber (Conditional)</description></item>
        ///             </list>
        ///             </description>
        ///         </item>
        ///         <item>
        ///             <description><b>levelGroup</b> (Optional)
        ///             <list type="bullet">
        ///                 <item><description>levelType (Conditional)</description></item>
        ///                 <item><description>levelNumber (Optional)</description></item>
        ///             </list>
        ///             </description>
        ///         </item>
        ///         <item><description>addressSiteName (Optional)</description></item>
        ///         <item><description>streetNumber (Optional)</description></item>
        ///         <item><description>lotNumber (Optional)</description></item>
        ///         <item><description>streetName (Optional)</description></item>
        ///         <item><description>streetType (Conditional on if streetTypeSpecified is set to true)</description></item>
        ///         <item><description>streetTypeSpecified (Mandatory)</description></item>
        ///         <item><description>streetSuffix (Conditional on if streetSuffixSpecified is set to true)</description></item>
        ///         <item><description>streetSuffixSpecified (Mandatory)</description></item>
        ///         <item>
        ///             <description><b>postalDeliveryGroup</b> (Optional)
        ///             <list type="bullet">
        ///                 <item><description>deliveryType (Mandatory)</description></item>
        ///                 <item><description>deliveryNumber (Optional)</description></item>
        ///             </list>
        ///             </description>
        ///         </item>
        ///         <item><description>unstructuredAddressLine (Conditional)</description></item>
        ///         <item><description>suburb (Mandatory)</description></item>
        ///         <item><description>state (Mandatory)</description></item>
        ///         <item><description>postcode (Mandatory)</description></item>
        ///     </list>
        ///     </description>
        /// </item>
        /// <item>
        ///     <description><b>internationalAddress</b> (Optional)
        ///     <list type="bullet">
        ///         <item><description>internationalAddressLine (Mandatory)</description></item>
        ///         <item><description>internationalStateProvince (Mandatory)</description></item>
        ///         <item><description>internationalPostcode (Mandatory)</description></item>
        ///         <item><description>country (Mandatory)</description></item>
        ///     </list>
        ///     </description>
        /// </item>
        /// </list>
        /// </param>
        /// <returns>
        /// A response instance containing the result of the search:
        /// <list type="bullet">
        /// <item><description>serviceMessages</description></item>
        /// <item>
        ///     <description><b>individualProviderDirectoryEntries</b>
        ///     <list type="bullet">
        ///         <item><description>hpiiNumber</description></item>
        ///         <item><description>personalDetails</description></item>
        ///         <item><description>individualName</description></item>
        ///         <item><description>address</description></item>
        ///         <item><description>electronicCommunication</description></item>
        ///         <item><description>providerType</description></item>
        ///         <item>
        ///         <description><b>linkedOrganisations</b>
        ///         <list type="bullet">
        ///             <item><description>hpioNumber</description></item>
        ///             <item><description>organisationName</description></item>
        ///             <item><description>address</description></item>
        ///         </list>
        ///         </description>
        ///         </item>
        ///         <item><description>additionalComments</description></item>
        ///         <item><description>priorityNumber</description></item>
        ///     </list>
        ///     </description>
        /// </item>
        /// </list>
        /// </returns>
        public searchHIProviderDirectoryForIndividualResponse DemographicSearch(searchHIProviderDirectoryForIndividual request)
        {
            Validation.ValidateArgumentNotAllowed("request.hpiiNumber", request.hpiiNumber);

            if (request.australianAddressCriteria != null)
            {
                Validation.ValidateArgumentNotAllowed("request.internationalAddressCriteria", request.internationalAddressCriteria);
                Validation.ValidateArgumentRequired("request.australianAddressCriteria.suburb", request.australianAddressCriteria.suburb);
                Validation.ValidateArgumentRequired("request.australianAddressCriteria.state", request.australianAddressCriteria.state);
                Validation.ValidateArgumentRequired("request.australianAddressCriteria.postcode", request.australianAddressCriteria.postcode);
            }

            if (request.internationalAddressCriteria != null)
            {
                Validation.ValidateArgumentNotAllowed("request.australianAddressCriteria", request.australianAddressCriteria);
                Validation.ValidateArgumentRequired("request.internationalAddressCriteria.internationalAddressLine", request.internationalAddressCriteria.internationalAddressLine);
                Validation.ValidateArgumentRequired("request.internationalAddressCriteria.internationalStateProvince", request.internationalAddressCriteria.internationalStateProvince);
                Validation.ValidateArgumentRequired("request.internationalAddressCriteria.internationalPostcode", request.internationalAddressCriteria.internationalPostcode);
                Validation.ValidateArgumentRequired("request.internationalAddressCriteria.country", request.internationalAddressCriteria.country);
            }

            return(HISearch(request));
        }
Ejemplo n.º 4
0
        public void Sample()
        {
            // ------------------------------------------------------------------------------
            // Set up
            // ------------------------------------------------------------------------------

            // Obtain the certificate by serial number
            X509Certificate2 tlsCert = X509CertificateUtil.GetCertificate(
                "Serial Number",
                X509FindType.FindBySerialNumber,
                StoreName.My,
                StoreLocation.CurrentUser,
                true
                );

            // The same certificate is used for signing the request.
            // This certificate will be different to TLS cert for some operations.
            X509Certificate2 signingCert = tlsCert;

            // Set up client product information (PCIN)
            // Values below should be provided by Medicare
            ProductType product = new ProductType()
            {
                platform       = "Your system platform (Eg. Windows XP SP3)", // Can be any value
                productName    = "Product Name",                              // Provided by Medicare
                productVersion = "Product Version",                           // Provided by Medicare
                vendor         = new QualifiedId()
                {
                    id        = "Vendor Id",                                // Provided by Medicare
                    qualifier = "Vendor Qualifier"                          // Provided by Medicare
                }
            };

            // Set up user identifier details
            QualifiedId user = new QualifiedId()
            {
                id        = "User Id",                                      // User ID internal to your system
                qualifier = "http://<anything>/id/<anything>/userid/1.0"    // Eg: http://ns.yourcompany.com.au/id/yoursoftware/userid/1.0
            };

            // Set up user identifier details for the hpio
            QualifiedId hpio = new QualifiedId()
            {
                id        = "Organisation Id",                            // Organisation ID internal to your system
                qualifier = "http://<anything>/id/<anything>/hpio/1.0"    // Eg: http://ns.yourcompany.com.au/id/yoursoftware/hpio/1.0
            };

            // ------------------------------------------------------------------------------
            // Client instantiation and invocation
            // ------------------------------------------------------------------------------

            // Instantiate the client
            ProviderSearchHIProviderDirectoryForIndividualClient client = new ProviderSearchHIProviderDirectoryForIndividualClient(
                new Uri("https://HIServiceEndpoint"),
                product,
                user,
                hpio,
                signingCert,
                tlsCert);

            // Set up the request
            searchHIProviderDirectoryForIndividual request = new searchHIProviderDirectoryForIndividual();

            request.hpiiNumber = HIQualifiers.HPIIQualifier + "8003610001647326";

            try
            {
                // Invoke an identifier search
                searchHIProviderDirectoryForIndividualResponse response = client.IdentifierSearch(request);
            }
            catch (FaultException fex)
            {
                string       returnError = "";
                MessageFault fault       = fex.CreateMessageFault();
                if (fault.HasDetail)
                {
                    ServiceMessagesType error = fault.GetDetail <ServiceMessagesType>();
                    // Look at error details in here
                    if (error.serviceMessage.Length > 0)
                    {
                        returnError = error.serviceMessage[0].code + ": " + error.serviceMessage[0].reason;
                    }
                }

                // If an error is encountered, client.LastSoapResponse often provides a more
                // detailed description of the error.
                string soapResponse = client.SoapMessages.SoapResponse;
            }
            catch (Exception ex)
            {
                // If an error is encountered, client.LastSoapResponse often provides a more
                // detailed description of the error.
                string soapResponse = client.SoapMessages.SoapResponse;
            }
        }