Exemple #1
0
        /// <summary>
        /// 增加单选择框
        /// </summary>
        public void AddRadio(string title, string code, ListItemCollection items)
        {
            WebMeta v = new WebMeta();

            v.GetDictionary()["DataSource"] = items;
            v["Title"] = title;
            v["Type"]  = "RadioGroup";
            v["Name"]  = code;
            this.dataSrouce.Add(v);
        }
Exemple #2
0
 protected override void Initialization()
 {
     if (submit != null)
     {
         var send = submit.GetDictionary()["send"] as WebMeta;
         send.Put(UIDialog.KEY_DIALOG_ID, this.AsyncId);
         //submit._send !=
         this.Config.Put("submit", submit);
     }
     this.Config.Put("DataSource", dataSrouce);
 }
Exemple #3
0
 void Redirect(string model, string cmd, WebMeta meta)
 {
     if (Verify(model, cmd) == false)
     {
         return;
     }
     this.InnerHeaders.Clear();
     if (meta != null)
     {
         this.InnerHeaders["Arguments"] = meta.GetDictionary();
     }
     this.ModelCommand(model, cmd, this.InnerHeaders);
     this.Send();
 }
Exemple #4
0
        /// <summary>
        /// 增加字典对说明
        /// </summary>
        /// <param name="items"></param>
        public WebMeta AddTextNameValue(string title, ListItemCollection items)
        {
            WebMeta v = new WebMeta();

            if (String.IsNullOrEmpty(title) == false)
            {
                v["Title"] = title;
            }
            v.GetDictionary()["DataSource"] = items;

            v["Type"] = "TextNameValue";
            this.dataSrouce.Add(v);
            return(v);
        }
Exemple #5
0
        public void AddCheckBox(string title, string code, ListItemCollection items, string defaultValue)
        {
            WebMeta v = new WebMeta();

            v.GetDictionary()["DataSource"] = items;
            v["Title"] = title;
            if (String.IsNullOrEmpty(defaultValue) == false)
            {
                v["DefaultValue"] = defaultValue;
            }
            v["Type"] = "CheckboxGroup";
            v["Name"] = code;
            this.dataSrouce.Add(v);
        }
Exemple #6
0
        public UIStyle Name(String key)
        {
            if (meta.ContainsKey(key))
            {
                var obj = meta.GetDictionary()[key];
                if (obj is UIStyle)
                {
                    return((UIStyle)obj);
                }
            }

            var style = new UIStyle();

            meta.Put(key, style);
            return(style);
        }
Exemple #7
0
            public override WebActivity GetFirstActivity()
            {
                var cmd = this.Context.Request.Command;

                if (this.cmds.Count > 0)
                {
                    if (String.Equals("*", this.cmds[0]))
                    {
                        if (this.cmds.Exists(g => g == cmd))
                        {
                            return(WebActivity.Empty);
                        }
                    }
                    else if (this.cmds.Exists(g => g == cmd) == false)
                    {
                        return(WebActivity.Empty);
                    }
                }
                else if (regex != null && regex.IsMatch(cmd) == false)
                {
                    return(WebActivity.Empty);
                }
                StringBuilder sb  = new StringBuilder();
                WebRequest    req = this.Context.Request;

                if (this.uri.AbsoluteUri.EndsWith("/*"))
                {
                    sb.Append(this.uri.AbsoluteUri.Substring(0, this.uri.AbsoluteUri.Length - 1));
                }
                else
                {
                    sb.Append(this.uri.AbsoluteUri.TrimEnd('/'));
                    sb.Append("/");
                    sb.Append(Data.Utility.GetRoot(req.Url));
                    sb.Append("/");
                }
                sb.Append(Utility.Guid(AccessToken.Token.Value));
                sb.Append("/");
                if (req.Headers.ContainsKey(EventType.Dialog))
                {
                    WebMeta meta = req.Headers.GetMeta(EventType.Dialog);
                    if (meta != null)
                    {
                        var em    = meta.GetDictionary().GetEnumerator();
                        var isOne = true;
                        while (em.MoveNext())
                        {
                            if (isOne)
                            {
                                sb.Append("?");
                                isOne = false;
                            }
                            else
                            {
                                sb.Append("&");
                            }
                            sb.Append(Uri.UnescapeDataString(em.Key.ToString()));
                            sb.Append("=");
                            sb.Append(Uri.UnescapeDataString(em.Value.ToString()));
                        }
                    }
                    else
                    {
                        String dg = req.Headers.Get(EventType.Dialog);
                        sb.Append("?");
                        sb.Append(Uri.UnescapeDataString(dg));
                    }
                }
                else
                {
                    sb.Append(req.Model);
                    sb.Append("/");
                    sb.Append(req.Command);
                    sb.Append("/");
                    WebMeta meta = req.SendValues;// ();
                    if (meta != null)
                    {
                        var em    = meta.GetDictionary().GetEnumerator();
                        var isOne = true;
                        while (em.MoveNext())
                        {
                            if (isOne)
                            {
                                sb.Append("?");
                                isOne = false;
                            }
                            else
                            {
                                sb.Append("&");
                            }
                            sb.Append(Uri.UnescapeDataString(em.Key.ToString()));
                            sb.Append("=");
                            sb.Append(Uri.UnescapeDataString(em.Value.ToString()));
                        }
                    }
                    else
                    {
                        String dg = req.SendValue;
                        if (String.IsNullOrEmpty(dg) == false)
                        {
                            sb.Append("?");
                            sb.Append(Uri.UnescapeDataString(dg));; // em.Key.ToString()));
                        }
                    }
                }
                var user = UMC.Security.Identity.Current;
                var http = new System.Net.Http.HttpClient();

                if (http.DefaultRequestHeaders.UserAgent.TryParseAdd(req.UserAgent) == false)
                {
                    http.DefaultRequestHeaders.UserAgent.ParseAdd(Uri.EscapeDataString(req.UserAgent));
                }
                if (String.IsNullOrEmpty(this.appSecret) == false)
                {
                    var nvs = new System.Collections.Specialized.NameValueCollection();
                    nvs.Add("umc-request-time", this.Context.runtime.Client.XHRTime.ToString());
                    nvs.Add("umc-request-user-id", Utility.Guid(user.Id.Value));
                    nvs.Add("umc-request-user-name", user.Name);
                    nvs.Add("umc-request-user-alias", user.Alias);
                    if (user.Roles != null && user.Roles.Length > 0)
                    {
                        nvs.Add("umc-request-user-role", String.Join(",", user.Roles));
                    }
                    nvs.Add("umc-request-sign", Utility.Sign(nvs, this.appSecret));
                    for (var i = 0; i < nvs.Count; i++)
                    {
                        http.DefaultRequestHeaders.Add(nvs.GetKey(i), Uri.EscapeDataString(nvs.Get(i)));
                    }
                }
                else
                {
                    http.DefaultRequestHeaders.Add("umc-request-time", this.Context.runtime.Client.XHRTime.ToString());
                }
                var ress       = http.GetAsync(sb.ToString()).Result;
                int StatusCode = (int)ress.StatusCode;

                if (StatusCode > 300 && StatusCode < 400)
                {
                    var url = ress.Headers.Location;
                    if (url != null)
                    {
                        this.Context.Response.Redirect(url);
                    }
                }
                String xhr = ress.Content.ReadAsStringAsync().Result;// http.GetStringAsync(sb.ToString()).Result;

                String eventPfx = "{\"ClientEvent\":";

                if (xhr.StartsWith(eventPfx))
                {
                    int index = xhr.IndexOf(",");
                    if (index > -1)
                    {
                        var webEvent = (WebEvent)(Utility.Parse(xhr.Substring(eventPfx.Length, index - eventPfx.Length), 0));
                        if ((webEvent & WebEvent.AsyncDialog) == WebEvent.AsyncDialog)
                        {
                            this.Context.Response.Redirect(new XHRer(xhr));
                        }
                        else
                        {
                            var header = (JSON.Deserialize(xhr) as Hashtable)["Headers"] as Hashtable;
                            if ((webEvent & WebEvent.Reset) == WebEvent.Reset)
                            {
                                if (header.ContainsKey("Reset"))
                                {
                                    var reset = header["Reset"] as Hashtable;
                                    if (reset != null)
                                    {
                                        String Command = reset["Command"] as string;
                                        String Model   = reset["Model"] as string;
                                        String Value   = reset["Value"] as string;
                                        if (String.IsNullOrEmpty(Model) == false && String.IsNullOrEmpty(Command) == false)
                                        {
                                            if (String.IsNullOrEmpty(Value))
                                            {
                                                this.Context.Response.Redirect(Model, Command);
                                            }
                                            else
                                            {
                                                this.Context.Response.Redirect(Model, Command, Value);
                                            }
                                        }
                                    }
                                }
                            }
                            else if ((webEvent & WebEvent.DataEvent) == WebEvent.DataEvent)
                            {
                                var rtime =
                                    this.Context.runtime;

                                if (rtime.Client.UIEvent != null)
                                {
                                    if (header.ContainsKey("DataEvent"))
                                    {
                                        var dataEvents = new List <WebMeta>();
                                        var dataEvent  = header["DataEvent"];// as Hashtable;
                                        if (dataEvent is Hashtable)
                                        {
                                            dataEvents.Add(new WebMeta(dataEvent as Hashtable));
                                        }
                                        else if (dataEvent is Array)
                                        {
                                            var des = dataEvent as Array;
                                            for (var i = 0; i < des.Length; i++)
                                            {
                                                var o = des.GetValue(i);
                                                if (o is Hashtable)
                                                {
                                                    dataEvents.Add(new WebMeta(o as Hashtable));
                                                }
                                            }
                                        }
                                        var value = dataEvents.Find(g => String.Equals("UI.Event", g["type"] as string) &&
                                                                    String.Equals(g["key"] as string, "Click"));

                                        if (value != null && value.ContainsKey("value"))
                                        {
                                            var va = value.GetDictionary()["value"] as Hashtable;
                                            if (va.ContainsKey("Value") && va.ContainsKey("Text"))
                                            {
                                                dataEvents.Remove(value);
                                                value.Put("value", new ListItem(va["Text"] as string, va["Value"] as string));
                                                if (dataEvents.Count > 0)
                                                {
                                                    this.Context.Response.Headers.Set("DataEvent", dataEvents.ToArray());
                                                }
                                                this.Context.Send(value, true);
                                            }
                                        }
                                    }
                                }
                            }
                            this.Context.Response.Redirect(Data.JSON.Expression(xhr));
                        }
                    }
                    else
                    {
                        this.Context.Response.Redirect(Data.JSON.Expression(xhr));
                    }
                }
                else
                {
                    this.Context.Response.Redirect(Data.JSON.Expression(xhr));
                }

                return(WebActivity.Empty);
            }
Exemple #8
0
            public override WebActivity GetFirstActivity()
            {
                StringBuilder sb = new StringBuilder();

                sb.Append(new Uri(this.uri, "/").AbsoluteUri);
                WebRequest req = this.Context.Request;

                sb.Append(Data.Utility.GetRoot(req.Url));
                sb.Append("/");
                sb.Append(AccessToken.Token);
                sb.Append("/");
                if (req.Headers.ContainsKey(EventType.Dialog))
                {
                    WebMeta meta = req.Headers.GetMeta(EventType.Dialog);
                    if (meta != null)
                    {
                        var em    = meta.GetDictionary().GetEnumerator();
                        var isOne = true;
                        while (em.MoveNext())
                        {
                            if (isOne)
                            {
                                sb.Append("?");
                                isOne = false;
                            }
                            else
                            {
                                sb.Append("&");
                            }
                            sb.Append(Uri.UnescapeDataString(em.Key.ToString()));
                            sb.Append("=");
                            sb.Append(Uri.UnescapeDataString(em.Value.ToString()));
                        }
                    }
                    else
                    {
                        String dg = req.Headers.Get(EventType.Dialog);
                        sb.Append("?");
                        sb.Append(Uri.UnescapeDataString(dg));; // em.Key.ToString()));
                    }
                }
                else
                {
                    sb.Append(req.Model);
                    sb.Append("/");
                    sb.Append(req.Command);
                    sb.Append("/");
                    WebMeta meta = req.SendValues;// ();
                    if (meta != null)
                    {
                        var em    = meta.GetDictionary().GetEnumerator();
                        var isOne = true;
                        while (em.MoveNext())
                        {
                            if (isOne)
                            {
                                sb.Append("?");
                                isOne = false;
                            }
                            else
                            {
                                sb.Append("&");
                            }
                            sb.Append(Uri.UnescapeDataString(em.Key.ToString()));
                            sb.Append("=");
                            sb.Append(Uri.UnescapeDataString(em.Value.ToString()));
                        }
                    }
                    else
                    {
                        String dg = req.SendValue;
                        if (String.IsNullOrEmpty(dg) == false)
                        {
                            sb.Append("?");
                            sb.Append(Uri.UnescapeDataString(dg));; // em.Key.ToString()));
                        }
                    }
                }

                var http = new System.Net.Http.HttpClient();

                http.DefaultRequestHeaders.Add("user-agent", req.UserAgent);
                String xhr = http.GetStringAsync(sb.ToString()).Result;

                String eventPfx = "{\"ClientEvent\":";

                if (xhr.StartsWith(eventPfx))
                {
                    int index = xhr.IndexOf(",");
                    if (index > -1)
                    {
                        var webEvent = (WebEvent)(Utility.Parse(xhr.Substring(eventPfx.Length, index - eventPfx.Length), 0));
                        if ((webEvent & WebEvent.AsyncDialog) == WebEvent.AsyncDialog)
                        {
                            this.Context.Response.Redirect(new XHRer(xhr));
                        }
                        else
                        {
                            this.Context.Response.Redirect(Data.JSON.Expression(xhr));
                        }
                    }
                    else
                    {
                        this.Context.Response.Redirect(Data.JSON.Expression(xhr));
                    }
                }
                else
                {
                    this.Context.Response.Redirect(Data.JSON.Expression(xhr));
                }

                return(WebActivity.Empty);
            }
Exemple #9
0
        protected override void Initialization()
        {
            var context  = WebContext.Current;
            var request  = context.Request;
            var response = context.Response;

            if (String.IsNullOrEmpty(this.AsyncId) == false && request.Items.ContainsKey(this.AsyncId))
            {
                WebMeta meta = request.SendValues;
                if (meta != null)
                {
                    response.Redirect(this.GetData(meta.GetDictionary()));
                }
                else
                {
                    var paramKey = request.Headers.GetDictionary()[EventType.Dialog] as Hashtable ?? new Hashtable();
                    response.Redirect(this.GetData(paramKey));
                }
            }
            else
            {
                var p = GetHeader();
                if (this.ValueField != null)
                {
                    p["ValueField"] = this.ValueField;
                }
                if (IsPage)
                {
                    WebMeta meta = request.SendValues;
                    if (meta != null && meta.Count > 0)
                    {
                        response.Redirect(this.GetData(meta.GetDictionary()));
                    }
                    else if (request.Arguments.Count == 0)
                    {
                        Search(request.Model, request.Command, null, request.Model, request.Command, null);
                    }
                    else
                    {
                        var pa = new WebMeta(new Hashtable(request.Arguments.GetDictionary()));
                        Search(request.Model, request.Command, pa, request.Model, request.Command, pa);
                        if (this.ValueField == null)
                        {
                            p["send"] = this.AsyncId;
                        }
                    }
                }
                if (String.IsNullOrEmpty(this.AsyncId) == false)
                {
                    request.Items[this.AsyncId] = "Header";
                }
                p["title"] = this.Title;
                if (IsAsyncData)
                {
                    this.Config.Set("Data", this.GetData(new Hashtable()));
                }
                else if (this.IsSearch)
                {
                    p["search"] = this.Keyword ?? "搜索";
                }

                if (this.IsReturnValue)
                {
                    p["type"] = "dialog";
                }
                else
                {
                    p["type"] = "grid";
                }
                if (this.AutoSearch)
                {
                    p["auto"] = "true";
                }
                this.Config.Set("Header", p);
            }
            base.Initialization();
        }
Exemple #10
0
 public WebMeta Builder(params UIDataSource[] dataSources)
 {
     return(new UMC.Web.WebMeta(_data.GetDictionary()).Put("type", "DataSource").Put("DataSource", dataSources).Put("title", this.Title));//.Put("model");
 }
Exemple #11
0
 public WebMeta Builder()
 {
     return(new UMC.Web.WebMeta(_data.GetDictionary()).Put("type", "Pager"));//.Put("DataSource", dataSources).Put("title", this.Title);//.Put("model");
 }
Exemple #12
0
 /// <summary>
 /// 设置子key头信息
 /// </summary>
 /// <param name="key">key</param>
 /// <param name="meta">头元信息</param>
 public void Set(string key, WebMeta meta)
 {
     _Dictionary[key] = meta.GetDictionary();
 }
Exemple #13
0
 /// <summary>
 /// 复制meta
 /// </summary>
 /// <param name="meta"></param>
 public WebMeta(WebMeta meta)
 {
     this._Dictionary = new Hashtable(meta.GetDictionary());
 }
Exemple #14
0
        /// <summary>
        /// 向发送客户端发送数据事情
        /// </summary>
        /// <param name="data">发送的数据</param>
        /// <param name="endResponse"></param>
        public void Send(WebMeta data, bool endResponse)
        {
            WebResponse response = this.Response;

            if (data.ContainsKey("type") && data["type"] == "UI.Event")
            {
                if (runtime.Client.UIEvent != null)
                {
                    var click = runtime.Client.UIEvent;
                    var key   = data["key"];
                    if (String.Equals(key, "Click") && data.GetDictionary()["value"] is ListItem)
                    {
                        runtime.Client.UIEvent = null;
                        runtime.Client.Session.Storage(new Hashtable(), this);
                        var value    = data.GetDictionary()["value"] as ListItem;
                        var objValue = click.Send();
                        if (objValue is Hashtable)
                        {
                            var val = objValue as Hashtable;
                            var em  = val.GetEnumerator();

                            while (em.MoveNext())
                            {
                                if (String.Equals(em.Value, "Value"))
                                {
                                    val[em.Key] = value.Value;
                                    val[String.Format("{0}_Text", em.Key)] = value.Text;
                                    //val.Put(em.Key as string, value.Value);
                                    break;
                                }
                            }
                            response.Redirect(click.Model, click.Command, new WebMeta(val), false);
                        }
                        else if (objValue is WebMeta)
                        {
                            var val = objValue as WebMeta;
                            var em  = val.GetDictionary().GetEnumerator();

                            while (em.MoveNext())
                            {
                                if (String.Equals(em.Value, "Value"))
                                {
                                    val.Put(em.Key as string, value.Value);
                                    val[String.Format("{0}_Text", em.Key)] = value.Text;
                                    break;
                                }
                            }

                            response.Redirect(click.Model, click.Command, val, false);
                        }
                        else
                        {
                            response.Redirect(click.Model, click.Command, value.Value, false);
                        }
                    }
                }
            }
            response.ClientEvent |= WebEvent.DataEvent;
            if (response.Headers.ContainsKey("DataEvent"))
            {
                var ts = response.Headers.GetDictionary()["DataEvent"];
                if (ts is WebMeta)
                {
                    response.Headers.Set("DataEvent", (WebMeta)ts, data);
                }
                else if (ts is IDictionary)
                {
                    response.Headers.Set("DataEvent", new WebMeta((IDictionary)ts), data);
                }
                else if (ts is Array)
                {
                    var ats = new System.Collections.ArrayList();
                    ats.AddRange((Array)ts);
                    ats.Add(data);

                    response.Headers.Set("DataEvent", (WebMeta[])ats.ToArray(typeof(WebMeta)));
                }
                else
                {
                    response.Headers.Set("DataEvent", data);
                }
            }
            else
            {
                response.Headers.Set("DataEvent", data);
            }
            if (endResponse)
            {
                response.ClientEvent ^= response.ClientEvent & WebEvent.Normal;
                this.End();
            }
        }