Exemple #1
0
        /// <summary>
        /// Submit a PharmanetMessage to Pharmanet System.
        /// </summary>
        /// <param name="request">The PharmanetMessage request containing HL7v2 base 64 payload.</param>
        /// <returns>A PharmanetMessage response.</returns>
        public async Task <RequestResult <PharmanetMessageModel> > SubmitRequest(PharmanetMessageModel request)
        {
            RequestResult <PharmanetMessageModel> requestResult = new RequestResult <PharmanetMessageModel>();

            JsonSerializerOptions options = new JsonSerializerOptions();

            options.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
            string jsonOutput = JsonSerializer.Serialize <PharmanetMessageModel>(request, options);

            using HttpContent content = new StringContent(jsonOutput);

            try
            {
                Uri delegateUri = new Uri(this.pharmanetDelegateConfig.Endpoint);

                Logger.LogDebug(this.logger, $"PharmanetDelegate Proxy POST {delegateUri}. Payload: {jsonOutput}");

                HttpResponseMessage response = await this.httpClient.PostAsync(delegateUri, content).ConfigureAwait(true);

                requestResult.IsSuccessStatusCode = response.IsSuccessStatusCode;
                requestResult.StatusCode          = response.StatusCode;

                if (!requestResult.IsSuccessStatusCode)
                {
                    string msg = "PharmanetDelegate Proxy call returned with StatusCode := " + response.StatusCode;
                    Logger.LogDebug(this.logger, msg);
                    requestResult.ErrorMessage = msg;
                    return(requestResult);
                }
                else
                {
                    string?result = await response.Content.ReadAsStringAsync().ConfigureAwait(true);

                    PharmanetMessageModel?responseMessage = JsonSerializer.Deserialize <PharmanetMessageModel>(result);

                    responseMessage !.Hl7Message = TrimBadCharactersInMessage(responseMessage !.Hl7Message); // Workaround stray chars from Delegate
                    requestResult.Payload        = responseMessage;
                    Logger.LogDebug(this.logger, $"PharmanetDelegate Proxy Response: {responseMessage}");
                }
            }
#pragma warning disable CA1031 // Do not catch general exception types
            catch (Exception ex)
#pragma warning restore CA1031 // Do not catch general exception types
            {
                Logger.LogException(this.logger, $"PharmanetDelegate Exception Occurred.", ex);

                requestResult.IsSuccessStatusCode = false;
                requestResult.ErrorMessage        = ex.Message;
                requestResult.StatusCode          = System.Net.HttpStatusCode.InternalServerError;

                return(requestResult);
            }

            return(requestResult);
        }
Exemple #2
0
        /// <summary>
        /// Submit Request to Pharmanet.
        /// </summary>
        /// <param name="request">The DocumentReference to be submitted.</param>
        /// <returns>Returns a DocumentReference containing the response from PharmaNet.</returns>
        public async Task <RequestResult <DocumentReference> > SubmitRequest(DocumentReference request)
        {
            RequestResult <DocumentReference> response = new RequestResult <DocumentReference>();
            bool base64Encode = this.configuration.GetSection(PharmanetDelegateConfig.ConfigurationSectionKey).GetValue <bool>("Base64EncodeHl7Message");
            PharmanetMessageModel requestMessage = PharmanetDelegateAdapter.ToPharmanetMessageModel(request, base64Encode);

            try
            {
                Logger.LogDebug(this.logger, $"Pharmanet Request: {requestMessage.Hl7Message}");

                RequestResult <PharmanetMessageModel> result = await this.pharmanetDelegate.SubmitRequest(requestMessage).ConfigureAwait(true);

                response.StatusCode   = result.StatusCode;
                response.ErrorMessage = result.ErrorMessage;

                if (result.IsSuccessStatusCode)
                {
                    PharmanetMessageModel?message = result.Payload;

                    this.logger.LogDebug($"Pharmanet Response: {message!.Hl7Message}");
                    ResourceReference reference = PharmanetDelegateAdapter.RelatedToDocumentReference(request);
                    response.Payload = PharmanetDelegateAdapter.ToDocumentReference(message !, reference);
                    this.logger.LogDebug($"FHIR Response: {response!.Payload.ToString()}");

                    response.IsSuccessStatusCode = true;
                }
                else
                {
                    Logger.LogDebug(this.logger, $"Pharmanet Response Error: {result.ErrorMessage}");
                }
            }
#pragma warning disable CA1031 // Do not catch general exception types
            catch (Exception ex)
#pragma warning restore CA1031 // Do not catch general exception types
            {
                Logger.LogException(this.logger, "Pharmanet Exception.", ex);

                response.IsSuccessStatusCode = false;
                response.StatusCode          = System.Net.HttpStatusCode.InternalServerError;
                response.ErrorMessage        = ex.Message;
            }

            return(response);
        }