public override async Task <EntityView> Run(EntityView entityView, CommercePipelineExecutionContext context)
        {
            Condition.Requires(entityView).IsNotNull(string.Format("{0}: The argument cannot be null.", Name));

            var request = context.CommerceContext.GetObject <EntityViewArgument>();

            if (string.IsNullOrEmpty(request != null ? request.ViewName : null) ||
                !request.ViewName.Equals(context.GetPolicy <KnownPaymentsViewsPolicy>().OrderPayments, StringComparison.OrdinalIgnoreCase) &&
                !request.ViewName.Equals(context.GetPolicy <KnownOrderViewsPolicy>().Master, StringComparison.OrdinalIgnoreCase) &&
                !request.ViewName.Equals(context.GetPolicy <KnownPaymentsViewsPolicy>().OrderPaymentDetails, StringComparison.OrdinalIgnoreCase) ||
                (!(request.Entity is Order) || !string.IsNullOrEmpty(request.ForAction)))
            {
                return(entityView);
            }

            Order order = (Order)request.Entity;

            if (!order.HasComponent <PaymentComponent>())
            {
                return(entityView);
            }

            List <PaymentComponent> payments;

            if (order.HasComponent <OnHoldOrderComponent>())
            {
                payments = (await _getOnHoldOrderCartCommand.Process(context.CommerceContext, order)).Components.OfType <PaymentComponent>().ToList();
            }
            else
            {
                payments = order.Components.OfType <PaymentComponent>().ToList();
            }

            HeidelpayPaymentComponent heidelpayComponent = null;

            if (request.ViewName.Equals(context.GetPolicy <KnownOrderViewsPolicy>().Master, StringComparison.OrdinalIgnoreCase) ||
                request.ViewName.Equals(context.GetPolicy <KnownPaymentsViewsPolicy>().OrderPayments, StringComparison.OrdinalIgnoreCase))
            {
                EntityView childPaymentView = entityView;
                if (request.ViewName.Equals(context.GetPolicy <KnownOrderViewsPolicy>().Master, StringComparison.OrdinalIgnoreCase))
                {
                    childPaymentView = entityView.ChildViews.Cast <EntityView>().FirstOrDefault(
                        ev => ev.Name.Equals(context.GetPolicy <KnownPaymentsViewsPolicy>().OrderPayments, StringComparison.OrdinalIgnoreCase));
                }

                if (childPaymentView != null)
                {
                    childPaymentView.ChildViews
                    .Where(cv => cv.Name.Equals(context.GetPolicy <KnownPaymentsViewsPolicy>().OrderPaymentDetails, StringComparison.OrdinalIgnoreCase))
                    .Cast <EntityView>().ToList().ForEach(paymentView =>
                    {
                        heidelpayComponent = payments.FirstOrDefault(s => s.Id.Equals(paymentView.ItemId, StringComparison.OrdinalIgnoreCase)) as HeidelpayPaymentComponent;
                        if (heidelpayComponent != null)
                        {
                            PopulatePaymentDetails(paymentView, heidelpayComponent);
                        }
                    });
                }

                return(entityView);
            }

            heidelpayComponent = payments.FirstOrDefault(s => s.Id.Equals(request.ItemId, StringComparison.OrdinalIgnoreCase)) as HeidelpayPaymentComponent;
            if (heidelpayComponent != null)
            {
                PopulatePaymentDetails(entityView, heidelpayComponent);
            }
            return(entityView);
        }