Esempio n. 1
0
        private void Parse(string queryString)
        {
            string[] parts = queryString.Split('&');

            foreach (string part in parts)
            {
                int equalToPosition = part.IndexOf('=');

                string name = part.Substring(0, equalToPosition);
                string val  = part.Substring(equalToPosition + 1);
                val = HttpUtility.UrlDecode(val);

                if (StringHelper.IsEqual(name, ENCRYPTED_KEY))
                {
                    if (val.Length > 0)
                    {
                        string decryptedString = HttpUtility.UrlDecode(StringHelper.Decrypt(val));

                        string[] keyValue = decryptedString.Split('&');

                        for (int i = 0; i < keyValue.Length; i++)
                        {
                            string param = keyValue[i];
                            equalToPosition = param.IndexOf('=');

                            if (equalToPosition > 0)
                            {
                                string paramName  = param.Substring(0, equalToPosition);
                                string paramValue = param.Substring(equalToPosition + 1);

                                QueryStrings.Add(paramName, paramValue);
                            }
                        }
                    }
                }
                else
                {
                    QueryStrings.Add(name, val);
                }
            }
        }
        /// <summary>
        /// 推送数据到目标地址
        /// </summary>
        public void Push()
        {
            //取出设置
            String  QueryString  = BPM.Settings["PowerForms_Push_QueryString"] != null && !string.IsNullOrEmpty(BPM.Settings["PowerForms_Push_QueryString"].ToString()) ? Convert.ToString(BPM.Settings["PowerForms_Push_QueryString"]) : "";
            Boolean Asynchronous = BPM.Settings["PowerForms_Push_Asynchronous"] != null && !string.IsNullOrEmpty(BPM.Settings["PowerForms_Push_Asynchronous"].ToString()) ? Convert.ToBoolean(BPM.Settings["PowerForms_Push_Asynchronous"]) : true;
            Int32   FormMethod   = BPM.Settings["PowerForms_Push_FormMethod"] != null && !string.IsNullOrEmpty(BPM.Settings["PowerForms_Push_FormMethod"].ToString()) ? Convert.ToInt32(BPM.Settings["PowerForms_Push_FormMethod"]) : (Int32)EnumFormMethod.POST;

            if (!String.IsNullOrEmpty(TransferUrl))//推送的目标地址不能为空
            {
                //构造查询的字符串
                QueryStrings = CreateQueryStrings();

                //将值转换到键值对中存储
                if (ContentList != null && ContentList.Count > 0)
                {
                    TemplateFormat xf = new TemplateFormat(BPM);
                    foreach (DNNGo_PowerForms_ContentItem item in ContentList)
                    {
                        if (String.IsNullOrEmpty(QueryStrings.Get(item.FieldName)))//不存在该键值时才能进入
                        {
                            QueryStrings.Add(item.FieldName, xf.ViewContentValue2(item));
                        }
                    }
                }



                //设置中设置的查询参数
                if (!String.IsNullOrEmpty(QueryString))
                {
                    List <String> ListQuery = WebHelper.GetList(QueryString, "\r\n");
                    foreach (String query in ListQuery)
                    {
                        List <String> nvs = WebHelper.GetList(query, "=");
                        if (nvs != null && nvs.Count == 2 && !String.IsNullOrEmpty(nvs[0]) && !String.IsNullOrEmpty(nvs[1]))
                        {
                            if (String.IsNullOrEmpty(QueryStrings.Get(nvs[0])))//不存在该键值时才能进入
                            {
                                QueryStrings.Add(nvs[0], nvs[1]);
                            }
                        }
                    }
                }


                //将提交的表单实体转换
                Type           t         = typeof(DNNGo_PowerForms_Content);
                PropertyInfo[] Propertys = t.GetProperties();
                //循环字段列表
                foreach (PropertyInfo Property in Propertys)
                {
                    if (String.IsNullOrEmpty(_QueryStrings.Get(Property.Name)))//不存在该键值时才能进入
                    {
                        if (Property.Name != "Item" && Property.Name != "ContentValue")
                        {
                            object o = Property.GetValue(SubmitContent, null);
                            if (Property.Name == "UserName")
                            {
                                _QueryStrings.Add("DisplayName", o.ToString());
                            }
                            else
                            {
                                _QueryStrings.Add(Property.Name, o.ToString());
                            }
                        }
                    }
                }


                //移除模块编号和页面编号
                if (_QueryStrings[DNNGo_PowerForms_Content._.ModuleId] != null)
                {
                    _QueryStrings.Remove(DNNGo_PowerForms_Content._.ModuleId);
                }
                if (_QueryStrings[DNNGo_PowerForms_Content._.PortalId] != null)
                {
                    _QueryStrings.Remove(DNNGo_PowerForms_Content._.PortalId);
                }



                if (Asynchronous)
                {
                    //异步推送
                    ManagedThreadPool.QueueUserWorkItem(new WaitCallback(ThreadUploadValues), this);
                }
                else
                {
                    //webX.UploadValues(new Uri(TransferUrl), EnumHelper.GetEnumTextVal(FormMethod, typeof(EnumFormMethod)), QueryStrings);
                    PushData();
                }
            }
        }