string getValue(int i, string VALUE_FIELD_NAME, string DATASOURCE_NAME, PageDataModel pageModel, EntityRecord record)
        {
            string value = "";

            if (VALUE_FIELD_NAME.Contains("$"))
            {
                value = pageModel.GetProperty(DATASOURCE_NAME + "[" + i + "]." + VALUE_FIELD_NAME).ToString();
            }
            else
            {
                value = record[VALUE_FIELD_NAME].ToString();
            }
            return(value);
        }
        string getKey(int i, string KEY_FIELD_NAME, string DATASOURCE_NAME, PageDataModel pageModel, EntityRecord record)
        {
            string key = "";

            if (KEY_FIELD_NAME.Contains("$"))
            {
                key = pageModel.GetProperty(DATASOURCE_NAME + "[" + i + "]." + KEY_FIELD_NAME).ToString();
            }
            else
            {
                key = record[KEY_FIELD_NAME].ToString();
            }
            return(key);
        }
        public override object Execute(Dictionary <string, object> arguments)
        {
            var result = new List <SelectOption>();

            //if pageModel is not provided, returns empty List<SelectOption>()
            if (arguments.ContainsKey("PageModel") && arguments.ContainsKey("DataSourceName") && !string.IsNullOrWhiteSpace((string)arguments["DataSourceName"]))
            {
                //replace constants with your values
                string DATASOURCE_NAME       = (string)arguments["DataSourceName"];
                string KEY_FIELD_NAME        = (string)arguments["KeyPropName"];
                string VALUE_FIELD_NAME      = (string)arguments["ValuePropName"];
                string VALUE_FIELD_NAME1     = (string)arguments["Value1PropName"];
                string VALUE_FIELD_NAME2     = (string)arguments["Value2PropName"];
                string ICON_CLASS_FIELD_NAME = (string)arguments["IconClassPropName"];
                string COLOR_FIELD_NAME      = (string)arguments["ColorPropName"];
                string SORT_ORDER_FIELD_NAME = (string)arguments["SortOrderPropName"];
                string SORT_TYPE_NAME        = (string)arguments["SortTypePropName"];

                PageDataModel pageModel = arguments["PageModel"] as PageDataModel;
                if (pageModel == null)
                {
                    return(result);
                }

                try
                {
                    //try read data source by name and get result as specified type object
                    var dataSource = pageModel.GetProperty(DATASOURCE_NAME);

                    //if data source not found or different type, return empty List<SelectOption>()
                    if (dataSource == null)
                    {
                        return(result);
                    }

                    if (dataSource is List <EntityRecord> )
                    {
                        var recordsList = (List <EntityRecord>)dataSource;
                        if (!String.IsNullOrWhiteSpace(SORT_ORDER_FIELD_NAME) && recordsList.Count > 1 && recordsList[0].Properties.ContainsKey(SORT_ORDER_FIELD_NAME) &&
                            recordsList[0][SORT_ORDER_FIELD_NAME] != null)
                        {
                            bool isDecimal = false;
                            if (decimal.TryParse((recordsList[0][SORT_ORDER_FIELD_NAME] ?? "").ToString(), out decimal outDecimal))
                            {
                                isDecimal = true;
                            }

                            if (SORT_TYPE_NAME.ToLowerInvariant() == "desc")
                            {
                                if (isDecimal)
                                {
                                    dataSource = recordsList.OrderByDescending(x => (decimal?)x[SORT_ORDER_FIELD_NAME]).ToList();
                                }
                                else
                                {
                                    dataSource = recordsList.OrderByDescending(x => (string)x[SORT_ORDER_FIELD_NAME]).ToList();
                                }
                            }
                            else
                            {
                                if (isDecimal)
                                {
                                    dataSource = recordsList.OrderBy(x => (decimal?)x[SORT_ORDER_FIELD_NAME]).ToList();
                                }
                                else
                                {
                                    dataSource = recordsList.OrderBy(x => (string)x[SORT_ORDER_FIELD_NAME]).ToList();
                                }
                            }
                        }
                        int i = 0;
                        foreach (var record in (List <EntityRecord>)dataSource)
                        {
                            if (record.Properties.ContainsKey(ICON_CLASS_FIELD_NAME) && record[ICON_CLASS_FIELD_NAME] != null)
                            {
                                var color = "#999";
                                if (record.Properties.ContainsKey(COLOR_FIELD_NAME) && record[COLOR_FIELD_NAME] != null)
                                {
                                    color = record[COLOR_FIELD_NAME].ToString();
                                }
                                var key   = getKey(i, KEY_FIELD_NAME, DATASOURCE_NAME, pageModel, record);
                                var value = getValue(i, VALUE_FIELD_NAME, DATASOURCE_NAME, pageModel, record);
                                if (VALUE_FIELD_NAME1 == "label1")
                                {
                                    result.Add(new SelectOption(key.ToString(), value.ToString(), record[ICON_CLASS_FIELD_NAME].ToString(), color));
                                }
                                else if (VALUE_FIELD_NAME2 == "label2")
                                {
                                    var value1 = getValue(i, VALUE_FIELD_NAME1, DATASOURCE_NAME, pageModel, record);
                                    result.Add(new SelectOption(key, "" + value + " - " + Environment.NewLine +
                                                                "" + value1, record[ICON_CLASS_FIELD_NAME].ToString(), color));
                                }
                                else
                                {
                                    var value1 = getValue(i, VALUE_FIELD_NAME1, DATASOURCE_NAME, pageModel, record);
                                    var value2 = getValue(i, VALUE_FIELD_NAME2, DATASOURCE_NAME, pageModel, record);
                                    result.Add(new SelectOption(key, "" + value + " - " + Environment.NewLine +
                                                                "" + value1 + "    -    " + value2 + "", record[ICON_CLASS_FIELD_NAME].ToString(), color));
                                }
                                //if (!record.Properties.ContainsKey(VALUE_FIELD_NAME1) || VALUE_FIELD_NAME1 == null)
                                //{
                                //	result.Add(new SelectOption(record[KEY_FIELD_NAME].ToString(), record[VALUE_FIELD_NAME].ToString(), record[ICON_CLASS_FIELD_NAME].ToString(), color));
                                //}
                                //else if (VALUE_FIELD_NAME1 == null)
                                //{

                                //	result.Add(new SelectOption(record[KEY_FIELD_NAME].ToString(), "" + record[VALUE_FIELD_NAME].ToString() + " - " + Environment.NewLine +
                                //		"" + record[VALUE_FIELD_NAME1].ToString(), record[ICON_CLASS_FIELD_NAME].ToString(), color));
                                //}
                                //else
                                //{
                                //	result.Add(new SelectOption(record[KEY_FIELD_NAME].ToString(), "" + record[VALUE_FIELD_NAME].ToString() + " - " + Environment.NewLine +
                                //		"" + record[VALUE_FIELD_NAME1].ToString() + "    -    " + record[VALUE_FIELD_NAME2].ToString() + "", record[ICON_CLASS_FIELD_NAME].ToString(), color));

                                //}
                            }
                            else
                            {
                                var key   = getKey(i, KEY_FIELD_NAME, DATASOURCE_NAME, pageModel, record);
                                var value = getValue(i, VALUE_FIELD_NAME, DATASOURCE_NAME, pageModel, record);
                                if (VALUE_FIELD_NAME1 == "label1")
                                {
                                    result.Add(new SelectOption(key.ToString(), value.ToString()));
                                }
                                else if (VALUE_FIELD_NAME2 == "label2")
                                {
                                    var value1 = getValue(i, VALUE_FIELD_NAME1, DATASOURCE_NAME, pageModel, record);
                                    result.Add(new SelectOption(key, "" + value + " - " + Environment.NewLine +
                                                                "" + value1));
                                }
                                else
                                {
                                    var value1 = getValue(i, VALUE_FIELD_NAME1, DATASOURCE_NAME, pageModel, record);
                                    var value2 = getValue(i, VALUE_FIELD_NAME2, DATASOURCE_NAME, pageModel, record);
                                    result.Add(new SelectOption(key, "" + value + " - " + Environment.NewLine +
                                                                "" + value1 + "    -    " + value2 + ""));
                                }
                            }
                            i++;
                        }
                    }
                    else if (dataSource is EntityRecord)
                    {
                        var record = (EntityRecord)dataSource;
                        if (record.Properties.ContainsKey(ICON_CLASS_FIELD_NAME) && record[ICON_CLASS_FIELD_NAME] != null)
                        {
                            var color = "#999";
                            if (record.Properties.ContainsKey(COLOR_FIELD_NAME) && record[COLOR_FIELD_NAME] != null)
                            {
                                color = record[COLOR_FIELD_NAME].ToString();
                            }
                            result.Add(new SelectOption(record[KEY_FIELD_NAME].ToString(), record[VALUE_FIELD_NAME].ToString(), record[ICON_CLASS_FIELD_NAME].ToString(), color));
                        }
                        else
                        {
                            result.Add(new SelectOption(record[KEY_FIELD_NAME].ToString(), record[VALUE_FIELD_NAME].ToString()));
                        }
                    }
                    else
                    {
                        throw new Exception("Input Datasource value should be of type List<EntityRecord> or EntityRecord");
                    }
                }
                catch (PropertyDoesNotExistException)
                {
                }
            }
            return(result);
        }
Пример #4
0
        public override object Execute(Dictionary <string, object> arguments)
        {
            var result = new List <SelectOption>();

            //if pageModel is not provided, returns empty List<SelectOption>()
            if (arguments.ContainsKey("PageModel") && arguments.ContainsKey("DataSourceName") && !string.IsNullOrWhiteSpace((string)arguments["DataSourceName"]))
            {
                //replace constants with your values
                string DATASOURCE_NAME       = (string)arguments["DataSourceName"];
                string KEY_FIELD_NAME        = (string)arguments["KeyPropName"];
                string VALUE_FIELD_NAME      = (string)arguments["ValuePropName"];
                string ICON_CLASS_FIELD_NAME = (string)arguments["IconClassPropName"];
                string COLOR_FIELD_NAME      = (string)arguments["ColorPropName"];

                PageDataModel pageModel = arguments["PageModel"] as PageDataModel;
                if (pageModel == null)
                {
                    return(result);
                }

                try
                {
                    //try read data source by name and get result as specified type object
                    var dataSource = pageModel.GetProperty(DATASOURCE_NAME);

                    //if data source not found or different type, return empty List<SelectOption>()
                    if (dataSource == null)
                    {
                        return(result);
                    }

                    if (dataSource is List <EntityRecord> )
                    {
                        foreach (var record in (List <EntityRecord>)dataSource)
                        {
                            if (record.Properties.ContainsKey(ICON_CLASS_FIELD_NAME) && record[ICON_CLASS_FIELD_NAME] != null)
                            {
                                var color = "#999";
                                if (record.Properties.ContainsKey(COLOR_FIELD_NAME) && record[COLOR_FIELD_NAME] != null)
                                {
                                    color = record[COLOR_FIELD_NAME].ToString();
                                }
                                result.Add(new SelectOption(record[KEY_FIELD_NAME].ToString(), record[VALUE_FIELD_NAME].ToString(), record[ICON_CLASS_FIELD_NAME].ToString(), color));
                            }
                            else
                            {
                                result.Add(new SelectOption(record[KEY_FIELD_NAME].ToString(), record[VALUE_FIELD_NAME].ToString()));
                            }
                        }
                    }
                    else if (dataSource is EntityRecord)
                    {
                        var record = (EntityRecord)dataSource;
                        if (record.Properties.ContainsKey(ICON_CLASS_FIELD_NAME) && record[ICON_CLASS_FIELD_NAME] != null)
                        {
                            var color = "#999";
                            if (record.Properties.ContainsKey(COLOR_FIELD_NAME) && record[COLOR_FIELD_NAME] != null)
                            {
                                color = record[COLOR_FIELD_NAME].ToString();
                            }
                            result.Add(new SelectOption(record[KEY_FIELD_NAME].ToString(), record[VALUE_FIELD_NAME].ToString(), record[ICON_CLASS_FIELD_NAME].ToString(), color));
                        }
                        else
                        {
                            result.Add(new SelectOption(record[KEY_FIELD_NAME].ToString(), record[VALUE_FIELD_NAME].ToString()));
                        }
                    }
                    else
                    {
                        throw new Exception("Input Datasource value should be of type List<EntityRecord> or EntityRecord");
                    }
                }
                catch (PropertyDoesNotExistException)
                {
                }
            }
            return(result);
        }