Ejemplo n.º 1
0
        /// <summary>
        /// 填报数据
        /// </summary>
        /// <param name="parameterKey">参数名称。</param>
        /// <param name="elementContainer">用于从网页中查找元素的对象,当value为Hashtable时表示当前是一组Radio或CheckBox。</param>
        /// <param name="parameterValue">用于填报的数据。</param>
        /// <param name="list">用于存储多值数据的列表。</param>
        private void FillElement(FillParameterKey parameterKey, object elementContainer, Hashtable data)
        {
            this.Wait();
            FillParameter fillParameter = elementContainer as FillParameter;

            String parameterValue = data[parameterKey.Key] as String;

            if (fillParameter == null)
            {
                Hashtable table = elementContainer as Hashtable;
                if (table == null)
                {
                    return;
                }
                else if (parameterKey.Type == Matcher.TYPE_RADIO)
                {
                    // 处理radio类型的选择
                    if (parameterValue != null)
                    {
                        fillParameter = table[parameterValue] as FillParameter;
                    }
                }
                else if (parameterKey.Type == Matcher.TYPE_CHECKBOX) // 处理checkBox类型
                {
                    FillCheckBoxGroup(ref parameterValue, table);
                    data.Remove(parameterKey.Key);
                    data.Add(parameterKey.Key, parameterValue);
                    return;
                }
            }
            FillElement(fillParameter, ref parameterValue);
            data.Remove(parameterKey.Key);
            data.Add(parameterKey.Key, parameterValue);
        }
Ejemplo n.º 2
0
        protected void FillElement(FillParameterKey parameterKey, object elementContainer, string parameterValue)
        {
            this.Wait();
            FillParameter fillParameter = elementContainer as FillParameter;

            if (fillParameter == null)
            {
                Hashtable table = elementContainer as Hashtable;
                if (table == null)
                {
                    return;
                }
                else if (parameterKey.Type == Matcher.TYPE_RADIO)
                {
                    // 处理radio类型的选择
                    if (parameterValue != null)
                    {
                        if (table.ContainsKey(parameterValue) == false)
                        {
                            this.FillRecords.Add(new FillRecord(ElementType.Radio, RecordType.Failed, string.Format("单选框中不包含项 {0}", parameterValue), parameterKey.Key));
                        }

                        fillParameter = table[parameterValue] as FillParameter;
                    }
                }
                else if (parameterKey.Type == Matcher.TYPE_CHECKBOX) // 处理checkBox类型
                {
                    FillCheckBoxGroup(parameterValue, parameterKey.Key, table);
                    return;
                }
            }
            FillElement(fillParameter, parameterValue);
        }
Ejemplo n.º 3
0
        private void FillListElement(List <KeyValuePair <FillParameterKey, object> > list, List <string> values)
        {
            if (list.Count == 0)
            {
                return;
            }
            if (list.Count == 1 && (list[0].Key.Type == Matcher.TYPE_SUBMIT || list[0].Key.Type == "BUTTON/SUBMIT" ||
                                    list[0].Key.Type == Matcher.TYPE_BUTTON))
            {
                FillListElementUncertain(list[0].Value as FillParameter);
                list.Clear();
                values.Clear();
                return;
            }
            string[]        valueArray     = null;
            int             maxValueLength = 0;
            List <string[]> valueList      = new List <string[]>();

            foreach (var value in values)
            {
                valueArray = value == null ? emptyStringArray : value.Split(base.Converter.SpliterChars[0]);
                valueList.Add(valueArray);
                maxValueLength = Math.Max(maxValueLength, valueArray.Length);
            }
            base.CurrentIndex = 0;
            FillIndexes.Add(this);
            for (int valueIndex = 0; valueIndex < maxValueLength; valueIndex++)
            {
                base.CurrentIndex = valueIndex;  // 更新当前填报索引
                FillParameterKey key = null;
                object           elementContainer = null;
                string           parameterValue   = "";
                for (int i = 0; i < list.Count; i++)
                {
                    key = list[i].Key;
                    elementContainer = list[i].Value;
                    if (list[i].Key.Type == Matcher.TYPE_SUBMIT || list[i].Key.Type == "BUTTON/SUBMIT")
                    {
                        parameterValue = null;
                    }
                    else if (valueList[i].Length > valueIndex)
                    {
                        parameterValue = valueList[i][valueIndex];
                    }
                    else
                    {
                        parameterValue = "";
                    }
                    FillElement(key, elementContainer, parameterValue);
                }
                this.Wait();
            }
            list.Clear();
            values.Clear();
            FillIndexes.RemoveAt(FillIndexes.Count - 1);
        }
Ejemplo n.º 4
0
        private void GetParameters()
        {
            Hashtable uniqueTable = new Hashtable();

            _parameters.Clear();
            string    note         = "";
            Hashtable group        = null;
            Hashtable columnHeader = new Hashtable();

            using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(GetParameterFile()))
            {
                reader.Open();
                Office.Excel.ForwardReadWorksheet sheet = reader.Activate(_urlParameter.LabelName) as Office.Excel.ForwardReadWorksheet;
                if (sheet == null)
                {
                    return;
                }
                object content = null;
                if (sheet.ReadNextRow())
                {
                    while (sheet.ReadNextCell(false))
                    {
                        content = sheet.GetContent();
                        columnHeader.Add(sheet.CurrentCell.ColumnIndex, content == null ? "" : content.ToString());
                    }
                }
                FillParameter    dElement;
                FillParameterKey key;
                while (sheet.ReadNextRow())
                {
                    dElement = new FillParameter();
                    while (sheet.ReadNextCell(false))
                    {
                        content = sheet.GetContent();
                        string value = content == null ? "" : content.ToString();
                        switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string)
                        {
                        case "元素id":
                            dElement.Id = value;
                            break;

                        case "元素name":
                            dElement.Name = value;
                            break;

                        case "元素value":
                            dElement.Value = value;
                            break;

                        case "元素href":
                            dElement.href = value;
                            break;

                        case "类别":
                            dElement.Type = value == null ? "" : value.ToUpper();
                            break;

                        case "onclick":
                            dElement.OnClick = value;
                            break;

                        case "参数名称":
                            dElement.ParameterName = value;
                            break;

                        case "备注":
                            note = value;
                            break;

                        case "可新增":
                            dElement.CanAdd = value == "是";
                            break;

                        case "查找":
                            dElement.SearchString = value;
                            break;

                        case "frameId":
                            dElement.FrameId = value;
                            break;

                        case "数据所在工作表":
                            dElement.TableName = value;
                            break;

                        case "拆分规则":
                            dElement.SplitExpr = value;
                            break;

                        case "可删除":
                            dElement.CanDelete = value == "是";
                            break;

                        case "模糊匹配":
                            dElement.CanContain = value == "是";
                            break;

                        case "是否必填":
                            dElement.IsRequired = value == "是";
                            break;
                        }
                    }
                    if (string.IsNullOrEmpty(dElement.Type))
                    {
                        continue;
                    }
                    if (dElement.Type == Matcher.TYPE_RADIO || dElement.Type == Matcher.TYPE_CHECKBOX)
                    {   // 若当前参数为radio或checkbox则将其后面出现的所有此类元素作为同一参数
                        if (string.IsNullOrEmpty(dElement.ParameterName) == false &&
                            uniqueTable.ContainsKey(dElement.ParameterName) == false)
                        {
                            group = new Hashtable();
                            key   = new FillParameterKey(dElement.ParameterName, dElement.Type, dElement.CanAdd, dElement.IsRequired, dElement.CanDelete, dElement.CanContain, dElement.SearchString);
                            _parameters.Add(new KeyValuePair <FillParameterKey, object>(key, group));
                            uniqueTable.Add(dElement.ParameterName, group);
                        }

                        //只保存第一个radio或者checkbox参数,在group里面保存全部的信息
                        group.Add(dElement.Value, dElement);
                    }
                    else
                    {
                        group         = null;
                        key           = new FillParameterKey(dElement.ParameterName, dElement.Type, dElement.CanAdd, dElement.CanDelete, dElement.IsRequired, dElement.CanContain, dElement.SearchString);
                        key.TableName = dElement.TableName;
                        _parameters.Add(new KeyValuePair <FillParameterKey, object>(key, dElement));
                    }
                }
                uniqueTable.Clear();
            }
        }
Ejemplo n.º 5
0
        //得到参数
        protected void GetParameters()
        {
            Hashtable uniqueTable = new Hashtable();

            _parameters.Clear();
            string    note         = "";
            Hashtable group        = null;
            Hashtable columnHeader = new Hashtable();

            using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(GetParameterFile()))
            {
                reader.Open();
                string sheetName = string.Format("{0}({1})", _urlParameter.LabelName, this.Standard);
                // 同类车型中不同排放标准的填报规则可能不同。
                sheetName = reader.Contains(sheetName) ? sheetName : _urlParameter.LabelName;
                Office.Excel.ForwardReadWorksheet sheet = reader.Activate(sheetName) as Office.Excel.ForwardReadWorksheet;
                if (sheet == null)
                {
                    return;
                }
                object content = null;
                if (sheet.ReadNextRow())
                {
                    while (sheet.ReadNextCell(false))
                    {
                        content = sheet.GetContent();
                        columnHeader.Add(sheet.CurrentCell.ColumnIndex, content == null ? "" : content.ToString());
                    }
                }
                FillParameter    dElement;
                FillParameterKey key;
                while (sheet.ReadNextRow())
                {
                    dElement = new FillParameter();
                    while (sheet.ReadNextCell(false))
                    {
                        content = sheet.GetContent();
                        string value = content == null ? "" : content.ToString();
                        switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string)
                        {
                        case "元素id":
                            dElement.Id = value;
                            break;

                        case "元素name":
                            dElement.Name = value;
                            break;

                        case "元素value":
                            dElement.Value = value;
                            break;

                        case "类别":
                            dElement.Type = value == null ? "" : value.ToUpper();
                            break;

                        case "onclick":
                            dElement.OnClick = value;
                            break;

                        case "参数名称":
                            dElement.ParameterName = value;
                            break;

                        case "备注":
                            note = value;
                            break;

                        case "可新增":
                            dElement.CanAdd = value == "是";
                            break;

                        case "查找":
                            dElement.SearchString = value;
                            break;

                        case "frameId":
                            dElement.FrameId = value;
                            break;

                        case "是否必填":
                            dElement.IsRequired = value == "是";
                            break;

                        case "数据表":
                            dElement.TableName = value;
                            break;

                        case "查找代码":
                            dElement.FindCode = value;
                            break;
                        }
                    }
                    if (string.IsNullOrEmpty(dElement.Type))
                    {
                        continue;
                    }
                    if (dElement.Type == Matcher.TYPE_RADIO || dElement.Type == Matcher.TYPE_CHECKBOX)
                    {   // 若当前参数为radio或checkbox则将其后面出现的所有此类元素作为同一参数
                        if (uniqueTable.ContainsKey(dElement.ParameterName) == false)
                        {
                            group = new Hashtable();
                            key   = new FillParameterKey(dElement.ParameterName, dElement.Type, dElement.CanAdd, dElement.IsRequired, dElement.SearchString);
                            _parameters.Add(new KeyValuePair <FillParameterKey, object>(key, group));
                            uniqueTable.Add(dElement.ParameterName, group);
                        }
                        group.Add(dElement.Value, dElement);
                    }
                    else
                    {
                        group         = null;
                        key           = new FillParameterKey(dElement.ParameterName, dElement.Type, dElement.CanAdd, dElement.IsRequired, dElement.SearchString);
                        key.TableName = dElement.TableName;
                        _parameters.Add(new KeyValuePair <FillParameterKey, object>(key, dElement));
                    }
                }
                uniqueTable.Clear();
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        ///  填充元素(分割元素)
        /// </summary>
        /// <param name="list"></param>
        /// <param name="values"></param>
        private void FillListElement(List <KeyValuePair <FillParameterKey, object> > list, List <string> values)
        {
            //包含分割字符串
            if (list.Count == 1 && (list[0].Key.Type == Matcher.TYPE_SUBMIT || list[0].Key.Type == "BUTTON/SUBMIT" ||
                                    list[0].Key.Type == Matcher.TYPE_BUTTON))
            {
                //仅包含新增按钮的新增列表
                FillListElementUncertain(list[0].Value as FillParameter);
                list.Clear();
                values.Clear();
                return;
            }
            string[]        valueArray     = null;
            int             maxValueLength = 0;
            List <string[]> valueList      = new List <string[]>();

            foreach (var value in values)
            {
                valueArray = value == null ? emptyStringArray : value.Split(base.Converter.SpliterChars[0]);
                valueList.Add(valueArray);
                maxValueLength = Math.Max(maxValueLength, valueArray.Length);
            }
            base.CurrentIndex = 0;
            string name           = ((FillParameter)(list[0].Value)).Name;
            bool   skipLastButton = (string.IsNullOrEmpty(name) == false && name.Contains("[") && name.Contains("]"));

            FillIndexes.Add(this);
            for (int valueIndex = 0; valueIndex < maxValueLength; valueIndex++)
            {
                base.CurrentIndex = valueIndex;  // 更新当前填报索引
                FillParameterKey key = null;
                //具体的某个控件
                object elementContainer = null;
                string parameterValue   = "";
                if (valueIndex > 0)
                {
                    nameNum++;
                }
                for (int i = 0; i < list.Count; i++)
                {
                    key = list[i].Key;
                    elementContainer = list[i].Value;
                    if (list[i].Key.Type == Matcher.TYPE_SUBMIT || list[i].Key.Type == Matcher.TYPE_A || list[i].Key.Type == "BUTTON/SUBMIT" || list[i].Key.Type == Matcher.TYPE_BUTTON)
                    {
                        if (valueIndex == maxValueLength - 1 && skipLastButton)
                        {
                            continue;
                        }
                        parameterValue = null;
                    }
                    else if (valueList[i].Length > valueIndex)
                    {
                        parameterValue = valueList[i][valueIndex];
                    }
                    else
                    {
                        parameterValue = "";
                    }
                    //判断所填写是否为新增元素
                    if (valueIndex > 0)
                    {
                        //修改name
                        FillParameter fp = (FillParameter)elementContainer;
                        name = fp.Name;
                        if (string.IsNullOrEmpty(name) == false && name.Contains("[") && name.Contains("]"))
                        {
                            int index1 = name.IndexOf("["), index2 = name.IndexOf("]", index1 == -1 ? 0 : index1);
                            System.Diagnostics.Trace.Assert(index1 != -1 && index2 != -1);
                            string left  = name.Substring(0, index1);
                            string right = name.Substring(index2 + 1);
                            //拼接name
                            fp.Name     = string.Format("{0}[{1}]{2}", left, nameNum, right);
                            fp.FindCode = "";
                        }
                    }
                    FillElement(key, elementContainer, parameterValue);
                }//end for
                this.Wait();
            }
            FillIndexes.RemoveAt(FillIndexes.Count - 1);
            list.Clear();
            values.Clear();
        }