public static void UpdateContact(IOrganizationService service, ITracingService trace, Entity entity,
                                         Entity image)
        {
            try
            {
                // Check if the entity contains status and email attributes
                if (!image.Contains(CrmContext.Contact.EmailAddress1) ||
                    !image.Contains(CrmContext.Base.StateCode))
                {
                    return;
                }

                trace.Trace("Start processing update on contact information");

                var newStatus = entity.GetAttributeValue <OptionSetValue>(CrmContext.Base.StateCode);
                var oldStatus = image.GetAttributeValue <OptionSetValue>(CrmContext.Base.StateCode);

                trace.Trace($"Old status: {oldStatus.Value}");
                trace.Trace($"New status: {newStatus.Value}");

                // Check for change in status
                if (!oldStatus.Value.Equals(newStatus.Value))
                {
                    trace.Trace("The account status has been changed");

                    var emailAddress = image.GetAttributeValue <string>(CrmContext.Contact.EmailAddress1);

                    // Create user change request
                    var changeRequest = new UserChangeRequestDTO()
                    {
                        EmailAddress = emailAddress,
                        RequestType  = newStatus.Value == CrmContext.StateCodes.Active ? "Unblock" : "Block"
                    };

                    // Send user request to Azure Function API
                    UpdateUser(service, trace, changeRequest);
                }
            }
            catch (FaultException <OrganizationServiceFault> ex)
            {
                throw new InvalidPluginExecutionException(
                          $"An error occurrd in the organizationservice. {ex.Detail.Message}");
            }
            catch (TimeoutException ex)
            {
                throw new InvalidPluginExecutionException($"A timeout occurred. {ex.Message}");
            }
            catch (FaultException ex)
            {
                throw new InvalidPluginExecutionException($"An error occurrd. {ex.Message}");
            }
        }
        private static void UpdateUser(IOrganizationService service, ITracingService trace, UserChangeRequestDTO request)
        {
            //Get the application settings
            var xFunctionKey      = SettingHelper.RetrieveSetting(trace, SettingHelper.SecureConfigKeys.UsersFunctionKey);
            var xFunctionEndPoint = SettingHelper.RetrieveSetting(trace, SettingHelper.SecureConfigKeys.UsersEndPoint);

            trace.Trace($"Sending request to users Azure Function: {xFunctionEndPoint}");
            trace.Trace($"Function key - {xFunctionKey}");

            // Call mail API via APIM.
            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("x-functions-key", xFunctionKey);

                trace.Trace($"Content: {GlobalHelper.JsonSerializer<UserChangeRequestDTO>(request)}");

                var content = new StringContent(GlobalHelper.JsonSerializer <UserChangeRequestDTO>(request), Encoding.UTF8, "application/json");

                var response = httpClient.PostAsync(
                    xFunctionEndPoint, content).GetAwaiter().GetResult();

                if (response.IsSuccessStatusCode)
                {
                    trace.Trace($"Success: user change request is successfully send.");
                }
                else
                {
                    var errorContent = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();

                    trace.Trace($"Error: user change request failed - {errorContent}");
                }
            }
        }