WFFM формы POST и перенаправления - PullRequest
0 голосов
/ 27 марта 2012

Я примерно следовал этому примеру, но он не решил мою проблему перенаправления, связанную с Sitecore. веб-форма sitecore для маркетологов отправляет сообщение на внешний URL

Я подтвердил, что моя форма POST работает правильно с помощью стороннего инструмента тестирования POST. У меня проблема в том, что в Sitecore они используют successMode, чтобы определить, что пользователь хочет сделать, если отправка прошла успешно. Если пользователь выбирает successmode / message, форма перенаправляется обратно к сообщению с благодарностью. Если пользователь выбирает successmode / redirect, конвейер метода успеха ищет значение страницы успеха в форме, а затем происходит перенаправление с этим URL. Проблема с перенаправлением заключается в том, что он теряет мои данные POST.

Может ли кто-нибудь предоставить пример Sitecore о том, как они выполняли форму POST, а затем перенаправили на целевой внешний URL-адрес без потери значений POST?

Использовали ли вы настройки режима успеха в форме?

Я спорю о том, следует ли переопределить конвейер перенаправления successmode, добавить условия и проверить, но я открыт для решения, которое может включать jquery.

Вот мой код:

        using Sitecore.Data;
    using Sitecore.Form.Core.Client.Data.Submit;
    using Sitecore.Form.Core.Controls.Data;
    using Sitecore.Form.Submit;
    using System.Web;
    using Sitecore.Web.UI.HtmlControls;
    using Sitecore.Text;
    using Sitecore.Forms.Core.Data;
    using Sitecore.Form.Core.Configuration;
    using Sitecore.Forms.Core.Crm;
    using System;
    using System.IO;
    using System.Net;
    using Sitecore.Diagnostics;
    using System.Text;

    namespace XXXWffmExternals
    {
        public class Redirect : ISaveAction      
        {                
            UrlString url = new UrlString("https://XXX.XXX/default.asp");

            public virtual void Execute(ID formid, AdaptedResultList fields, params object[] data)
            {
                String strResult = "";            
                strResult = setPost(url.ToString(), fields); 

            }

            public String setPost(string url, AdaptedResultList fieldListForPOST)
            {
                String resultReturn = "";

                AdaptedControlResult firstname = fieldListForPOST.GetEntry(this.First_Name, "First_Name");
                AdaptedControlResult lastname = fieldListForPOST.GetEntry(this.Last_Name, "Last_Name");
                AdaptedControlResult billingaddress = fieldListForPOST.GetEntry(this.Billing_Address, "Billing_Address");
                AdaptedControlResult billingcity = fieldListForPOST.GetEntry(this.Billing_City, "Billing_City");
                AdaptedControlResult billingstate = fieldListForPOST.GetEntry(this.Billing_State, "Billing_State");
                AdaptedControlResult billingzip = fieldListForPOST.GetEntry(this.Billing_Zip, "Billing_Zip");
                AdaptedControlResult billingphone = fieldListForPOST.GetEntry(this.Billing_Phone, "Billing_Phone");
                AdaptedControlResult email = fieldListForPOST.GetEntry(this.Email, "Email");
                AdaptedControlResult amount = fieldListForPOST.GetEntry(this.Amount, "Amount");
                AdaptedControlResult desc = fieldListForPOST.GetEntry(this.Description, "Description");
                AdaptedControlResult login = fieldListForPOST.GetEntry(this.Login, "Login");
                AdaptedControlResult acct = fieldListForPOST.GetEntry(this.Account, "Account");
                AdaptedControlResult fund = fieldListForPOST.GetEntry(this.Fund, "Fund");
                AdaptedControlResult org = fieldListForPOST.GetEntry(this.Org, "Org");

                AdaptedControlResult source_code = fieldListForPOST.GetEntry(this.Source_Code, "Source_Code");

                String post =
                    "First_Name=" + firstname.Value +
                    "&Last_Name=" + lastname.Value +
                    "&Billing_Address=" + billingaddress.Value +
                    "&Billing_City=" + billingcity.Value +
                    "&Billing_State=" + billingstate.Value +
                    "&Billing_Zip=" + billingzip.Value +
                    "&Billing_Phone=" + billingphone.Value +
                    "&Email=" + email.Value +
                    "&Amount=" + amount.Value +
                    "&Description=" + desc.Value +
                    "&Login=" + login.Value +
                    "&Account=" + acct.Value +
                    "&Fund=" + fund.Value +
                    "&Org=" + org.Value +
                    "&Invoice_Num=" + "DVXXXX";

                resultReturn = sendPost(url.ToString(), post); 

                return resultReturn;

            }

            public String sendPost(string url, string post)
            {

                String result = "";

                HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);
                objRequest.Method = "POST";
                // Set credentials to use for this request.
                objRequest.Credentials = CredentialCache.DefaultCredentials;

                // Convert POST data to a byte array.           
                byte[] byteArray = Encoding.UTF8.GetBytes(post);

                // Set the ContentLength property of the WebRequest.
                objRequest.ContentLength = byteArray.Length;
                // Set the ContentType property of the WebRequest.
                objRequest.ContentType = "application/x-www-form-urlencoded";
                // Get the request stream.
                Stream dataStream = objRequest.GetRequestStream();
                // Write the data to the request stream.
                dataStream.Write(byteArray, 0, byteArray.Length);
                // Close the Stream object.
                dataStream.Close();
                // Get the response.
                WebResponse response = objRequest.GetResponse();                      
                // Get the stream containing content returned by the server.
                dataStream = response.GetResponseStream ();
                // Open the stream using a StreamReader for easy access.
                StreamReader reader = new StreamReader (dataStream);
                // Read the content.
                result = reader.ReadToEnd ();

                // Clean up the streams.
                reader.Close ();
                dataStream.Close ();
                response.Close ();
                return result;      


            }



            public string First_Name { get; set; }       
            public string Last_Name { get; set; }       
            public string Billing_Address { get; set; }
            public string Billing_City { get; set; }
            public string Billing_State { get; set; }
            public string Billing_Zip { get; set; }
            public string Billing_Phone { get; set; }
            public string Email { get; set; }
            public string Amount { get; set; }
            public string Description { get; set; }
            public string Login { get; set; }
            public string Account { get; set; }
            public string Fund { get; set; }
            public string Org { get; set; }
            public string Invoice_Num { get; set; }
            public string Source_Code { get; set; }

        }


    }

1 Ответ

0 голосов
/ 04 апреля 2012

Почему вы хотите использовать WFFM для формы, если вы не хотите вызывать какие-либо функции WFFM? Смысл WFFM в том, чтобы помечать людей для создания своих собственных форм без участия разработчика. Вам нужно отредактировать все данные поста в вашем коде, что практически исключает возможность редактировать форму без участия разработчика. Я бы сказал, что если вы собираетесь пройти весь процесс написания всего кода для отправки кода вручную, вы можете использовать элемент Sitecore для создания формы, а затем использовать свой собственный код для обработки. Пропустить WFFM. Как вы предложили, гораздо больше работы, чем просто создание формы вручную.

Если вам действительно нужны какие-либо конечные функции WFFM, вы можете легко их вызвать ... это все же намного проще, чем пытаться переопределить базовую функциональность WFFM, чтобы добавить свои собственные функции.

...