Пример #1
0
 internal static async Task Main(string[] args)
 {
     //BenchmarkRunner.Run<HttpServiceTest>();
     //Console.Read();
     await ExcuteResult.ExcuteAsync(async() => await HttpServiceRawTest.RawTest(500).DonotCapture())
     .Error(e => Console.WriteLine(e));
 }
        /// <summary>
        ///  新增记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void BtnAddClickAsync(object sender, RoutedEventArgs e)
        {
            Lib.MemberPrizePunishEntity NewRecord = new Lib.MemberPrizePunishEntity()
            {
                MemberId = _UCPrizePunishVM.CurMember.Id,
                UserId   = AppSet.LoginUser.Id
            };

            UC_PrizePunishWin AddWin = new UC_PrizePunishWin(NewRecord);

            AddWin.Owner = AppSet.AppMainWindow;

            if (AddWin.ShowDialog().Value)
            {
                IEnumerable <MemberPrizePunishDto> MemberPlayMonths = await DataMemberPrizePunishRepository.GetRecords(new MemberPrizePunishSearch()
                {
                    MemberId = NewRecord.MemberId,
                    UserId   = NewRecord.UserId
                });

                ExcuteResult excuteResult = await DataMemberPrizePunishRepository.AddRecord(NewRecord);

                if (excuteResult.State == 0)
                {
                    NewRecord.Id = excuteResult.Tag;
                    _UCPrizePunishVM.CurRecords.Add(NewRecord);
                }
                else
                {
                    AppFuns.ShowMessage(excuteResult.Msg, Caption: "失败");
                }
            }
        }
        /// <summary>
        /// Post 数据到指定的Url(注意:此方式可同时传输 文件)
        /// </summary>
        /// <typeparam name="T">返回指定类型数据,需服务器配合</typeparam>
        /// <param name="ApiUri">Url</param>
        /// <param name="PostFormData">MultipartFormDataContent类型数据</param>
        /// <param name="processMessageHander">进度报告委托</param>
        /// <returns></returns>
        public static async Task <ExcuteResult> PostApiUriAsync(string ApiUri, MultipartFormDataContent PostFormData, ProgressMessageHandler processMessageHander = null)
        {
            HttpClient   _Client = CreateHttpClient(processMessageHander);
            ExcuteResult TResult = new ExcuteResult();

            try
            {
                HttpResponseMessage ResponseMsg = await _Client.PostAsync(ApiUri, PostFormData).ConfigureAwait(false);

                string ResponseString = await ResponseMsg.Content.ReadAsStringAsync().ConfigureAwait(false);

                if (ResponseString.Contains("errors"))
                {
                    ResponseResult ResResult = JsonConvert.DeserializeObject <ResponseResult>(ResponseString);
                    TResult = new ExcuteResult()
                    {
                        State = -1, Msg = ResResult.errors, Tag = ResResult.traceId
                    };
                }
                else
                {
                    TResult = JsonConvert.DeserializeObject <ExcuteResult>(ResponseString);
                }
            }
            catch (Exception err)
            {
                AppFuns.ShowMessage(err.Message, isErr: true);
            }
            finally
            {
                _Client?.Dispose();
            }
            return(TResult);
        }
Пример #4
0
        public ExcuteResult Delete(string id)
        {
            var result = new ExcuteResult(Operate.Delete, _connString, _table.Name);

            var old = Find(id);

            if (old.HasData)
            {
                var paramDictionary = ReflectionUtility.GetObjDic(((string)old.Value).ToObject());
                result.RollBackScript = ToFinalSql(_deleteRollBackSql, paramDictionary);
                if (Excute(_deleteSql, id) > 0)
                {
                    result.AddMessage("删除成功(id=" + id + ")");
                    result.Successful = true;
                }
                else
                {
                    result.AddMessage("删除失败(id=" + id + ")");
                    result.RollBackScript = ""; //删除失败时不需要回滚
                    result.Successful     = false;
                }
            }
            else
            {//无旧记录
                result.AddMessage("删除成功(未找到id=" + id + "的旧记录)");
                result.Successful = true;
            }
            return(result);
        }
        /// <summary>
        /// 上传计划附件
        /// </summary>
        /// <param name="UpFileInfo">该文件信息</param>
        /// <param name="PostFileStream">该文件流</param>
        /// <param name="PostFileKey">供服务器索引使用的Key。如服务器不使用之,可以为空</param>
        /// <param name="PostFileName">用于告诉服务器指定文件的名称。如服务器不使用之,可以为空</param>
        /// <param name="showUploadProgress">上传进度</param>
        /// <returns></returns>
        public static async Task <ExcuteResult> UpLoadFileInfo(Lib.PlanFileEntity UpFileInfo, Stream PostFileStream, string PostFileKey = null, string PostFileName = null, ProgressMessageHandler showUploadProgress = null)
        {
            MultipartFormDataContent V_MultFormDatas = DataApiRepository.SetFormData(UpFileInfo, PostFileStream, PostFileKey, PostFileName);
            ExcuteResult             JsonResult      = await DataApiRepository.PostApiUriAsync(_ApiUrlBase + "PlanFile/UpLoadFile", V_MultFormDatas, showUploadProgress).ConfigureAwait(false);

            return(JsonResult);
        }
        /// <summary>
        ///  新增记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void BtnAddClickAsync(object sender, RoutedEventArgs e)
        {
            Lib.MemberAppraise NewRecord = new Lib.MemberAppraise()
            {
                MemberId = _CurUcViewModel.CurMember.Id,
                UserId   = AppSet.LoginUser.Id
            };

            UC_AppraiseWin AddWin = new UC_AppraiseWin(NewRecord);

            if (AddWin.ShowDialog().Value)
            {
                IEnumerable <MemberAppraise> MemberPlayMonths = await DataMemberAppraiseRepository.GetRecords(new MemberAppraiseSearch()
                {
                    MemberId = NewRecord.MemberId,
                    UserId   = NewRecord.UserId
                });

                ExcuteResult excuteResult = await DataMemberAppraiseRepository.AddRecord(NewRecord);

                if (excuteResult.State == 0)
                {
                    NewRecord.Id = excuteResult.Tag;
                    _CurUcViewModel.CurRecords.Add(NewRecord);
                }
                else
                {
                    AppFuns.ShowMessage(excuteResult.Msg, Caption: "失败");
                }
            }
        }
Пример #7
0
        public ExcuteResult ToSelectItems(string name = "", string value = "")
        {
            var result = new ExcuteResult(Operate.Items, _connString, _table.Name);
            var items  = new List <SelectListItem>();

            if (!name.HasValue() || !_table.ColumnNames.Contains(name))
            {//智能匹配
                name = _table.ColumnNames.FirstOrDefault(a => a.ToLower().Contains("name"));
                if (!name.HasValue())
                {
                    name = _table.PrimaryKey;
                }
            }
            var sql  = string.Format("select {0},{1} from {2}", _table.PrimaryKey, name, _table.Name);
            var temp =
                sql.ExecuteReader2(_connString)
                .Select(a => new SelectListItem()
            {
                Value = a[0], Text = a[1], Selected = value == a[0]
            })
                .ToList();

            if (temp.Any())
            {
                result.Value   = temp.Serialize();
                result.HasData = true;
            }
            return(result);
        }
        /// <summary>
        ///  新增记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void BtnAddClickAsync(object sender, RoutedEventArgs e)
        {
            Lib.MemberRelations NewRecord = new Lib.MemberRelations()
            {
                MemberId = _CurUcViewModel.CurMember.Id,
                Birthday = _CurUcViewModel.CurMember.Birthday.AddYears(-25),
                UserId   = AppSet.LoginUser.Id
            };

            UC_RelationsWin AddWin = new UC_RelationsWin(NewRecord);

            AddWin.Owner = AppSet.AppMainWindow;

            if (AddWin.ShowDialog().Value)
            {
                ExcuteResult excuteResult = await DataMemberRelationsRepository.AddRecord(NewRecord);

                if (excuteResult.State == 0)
                {
                    NewRecord.Id = excuteResult.Tag;
                    _CurUcViewModel.CurRecords.Add(NewRecord);
                    _CurUcViewModel.CurRecords.OrderBy(x => x.OrderIndex);
                }
                else
                {
                    AppFuns.ShowMessage(excuteResult.Msg, Caption: "失败");
                }
            }
        }
        /// <summary>
        /// 编辑一条记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void BtnEditClickAsync(object sender, RoutedEventArgs e)
        {
            if (RecordListBox.SelectedItem is Lib.MemberPrizePunishEntity SelectedRec)
            {
                Lib.MemberPrizePunishEntity RecCloneObj = CloneObject <Lib.MemberPrizePunishEntity, Lib.MemberPrizePunishEntity> .Trans(SelectedRec);

                UC_PrizePunishWin AddWin = new UC_PrizePunishWin(RecCloneObj);
                AddWin.Owner = AppSet.AppMainWindow;

                if (AddWin.ShowDialog().Value)
                {
                    ExcuteResult excuteResult = await DataMemberPrizePunishRepository.UpdateRecord(RecCloneObj);

                    if (excuteResult != null && excuteResult.State == 0)
                    {
                        PropertyInfo[] TargetAttris = SelectedRec.GetType().GetProperties();
                        PropertyInfo[] SourceAttris = RecCloneObj.GetType().GetProperties();
                        foreach (PropertyInfo item in SourceAttris)
                        {
                            var tempObj = TargetAttris.Where(x => x.Name.Equals(item.Name, StringComparison.Ordinal)).FirstOrDefault();
                            if (tempObj != null)
                            {
                                item.SetValue(SelectedRec, item.GetValue(RecCloneObj));
                            }
                        }
                    }
                    else
                    {
                        AppFuns.ShowMessage(excuteResult.Msg, Caption: "失败");
                    }
                }
            }
        }
Пример #10
0
    public override ExcuteResult Excute(object lastRetVal, FSMHandle handle, Stack<State> stack)
    {
        Dictionary<string, object> variables = null;
        int count = str.Length - str.Replace("$", "").Length;
        foreach (var entity in stack)
        {
            if (--count == 0)
            {
                variables = entity.variables;
                break;
            }
        }
        if (variables == null)
        {
            Debug.LogError("must not be null");
        }

        if (isSetter)
        {
            if (!variables.ContainsKey(name))
            {
                variables.Add(name, lastRetVal);
            }
            else
            {
                variables[name] = lastRetVal;
            }
        }
        ExcuteResult ret = new ExcuteResult();
        ret.retVal = variables[name];
        return ret;
    }
Пример #11
0
    public override ExcuteResult Excute(object lastRetVal, FSMHandle handle, Stack<State> stack)
    {
        if (methodInfo == null)
        {
            Debug.LogError(name + " has no method");
        }

        object retValue = Excute(ToParam(lastRetVal), handle, stack);

        ExcuteResult ret = new ExcuteResult();
        if (methodInfo.ReturnType == typeof(Boolean))
        {
            if (retValue is bool && (bool)retValue == false)
            {
                ret.stopParagraph = false;
                ret.stopSentence = true;
            }
        }
        else
        {
            ret.retVal = retValue;
        }

        return ret;
    }
Пример #12
0
 public override ExcuteResult Excute(object lastRetVal, FSMHandle handle, Stack<State> stack)
 {
     ExcuteResult ret = new ExcuteResult();
     ret.stopParam = lastRetVal;
     ret.stopTokenType = type;
     ret.stopParagraph = true;
     ret.stopSentence = true;
     return ret;
 }
Пример #13
0
        /// <summary>
        /// 更新计划进度
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void btn_UpdatePlan(object sender, RoutedEventArgs e)
        {
            _UCPlanInfoVM.CurPlan.CurrectState = PlanStatus.Running;
            ExcuteResult JsonResult = await DataPlanRepository.UpdatePlan(_UCPlanInfoVM.CurPlan);

            AppFuns.ShowMessage(JsonResult.Msg);
            _UCPlanInfoVM.SetPlanOperateGrant();
            _UCPlanInfoVM.SetPlanFileDelete();
        }
Пример #14
0
        public ExcuteResult Download(string id, string fileColumnName)
        {
            var result = new ExcuteResult(Operate.Download, _connString, _table.Name);
            var old    = (Find(id).Value as string).ToObject();

            old.name     = fileColumnName;
            result.Value = old;
            return(result);
        }
            public async void UpdateEntityInfoAsync()
            {
                ExcuteResult excute = await DataSystemRepository.UpdateServerSettings(EntitySettingServer);

                if (excute.State == 0)
                {
                    AppFuns.ShowMessage("更新成功!");
                    AppSet.ServerSetting = EntitySettingServer;
                }
            }
Пример #16
0
        /// <summary>
        /// 更新文件信息(文件名及文件描述)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void btn_SaveChange(object sender, RoutedEventArgs e)
        {
            ExcuteResult JsonResult = await DataPlanFileRepository.UpdateFileInfo(_CurUCViewModel.CurFile);

            if (JsonResult.State == 0)
            {
                AppFuns.SetStateBarText(JsonResult.Msg);
            }
            AppFuns.ShowMessage(JsonResult.Msg, "消息");
        }
Пример #17
0
        public ExcuteResult Info()
        {
            var result = new ExcuteResult(Operate.Info, _connString, _table.Name);
            var temp   = _table.ColumnItems;

            if (temp.Any())
            {
                result.Value   = temp.Serialize();
                result.HasData = true;
            }
            return(result);
        }
Пример #18
0
        public ExcuteResult All()
        {
            var result = new ExcuteResult(Operate.List, _connString, _table.Name);
            var temp   = _querySql.ExecuteReader2(_connString);
            var json   = ToJson(temp);

            if (temp.Any())
            {
                result.Value   = json;
                result.HasData = true;
            }
            return(result);
        }
        /// <summary>
        /// 从服务器删除文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void Image_Delete_MouseLeftButtonUpAsync(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            Lib.MemberFile SelectFile = LB_FileList.SelectedItem as Lib.MemberFile;
            if (!AppFuns.ShowMessage($"删除文件《{ SelectFile.Name }》?", Caption: "确认", showYesNo: true))
            {
                return;
            }
            ExcuteResult delResult = await DataMemberFileRepository.DeleteFileInfo(SelectFile);

            if (delResult != null && delResult.State == 0)
            {
                _CurUcViewModel.MFiles.Remove(SelectFile);
            }
        }
        public async Task <string> Delete(string FileId)
        {
            ExcuteResult actResult = new ExcuteResult();

            if (await _FileRepository.DeleteByIdAsync(_FileBaseDir, FileId).ConfigureAwait(false) > 0)
            {
                actResult.SetValues(0, "删除成功!");
            }
            else
            {
                actResult.SetValues(1, "删除失败!");
            }
            return(JsonConvert.SerializeObject(actResult));
        }
Пример #21
0
        public async Task <ActionResult <string> > PostAsync([FromBody] MemberPayItemEntity PEntity)
        {
            ExcuteResult actResult = new ExcuteResult();

            if (await _PayRepository.AddAsync(PEntity).ConfigureAwait(false) > 0)
            {
                actResult.SetValues(p_state: 0, p_msg: "保存成功");
            }
            else
            {
                actResult.SetValues(1, "保存失败");
            }
            return(JsonConvert.SerializeObject(actResult));
        }
        public async Task <string> PutAsync([FromBody] PlanFileEntity PEntity)
        {
            ExcuteResult actResult = new ExcuteResult();

            if (await _FileRepository.UpdateAsync(PEntity).ConfigureAwait(false) > 0)
            {
                actResult.SetValues(p_state: 0, p_msg: "文件信息更新成功", p_tag: PEntity?.Id);
            }
            else
            {
                actResult.SetValues(1, "文件信息更新失败!");
            }
            return(JsonConvert.SerializeObject(actResult));
        }
Пример #23
0
        public ExcuteResult Find(string id)
        {//返回的value是json字符串
            var result = new ExcuteResult(Operate.Find, _connString, _table.Name);
            var script = ToFinalSql(_findSql, id);
            var temp   = script.ExecuteReader2(_connString);

            if (temp.Any())
            {
                var json = ToJson(temp);
                result.Value   = json.Substring(1, json.Length - 2);//清除最外层的[]
                result.HasData = true;
            }
            return(result);
        }
Пример #24
0
        public async Task <string> PutAsync([FromBody] MemberHolidayEntity PEntity)
        {
            ExcuteResult actResult = new ExcuteResult();

            if (await _DataRepository.UpdateAsync(PEntity).ConfigureAwait(false) > 0)
            {
                actResult.SetValues(0, "更新成功");
            }
            else
            {
                actResult.SetValues(1, "更新失败");
            }
            return(JsonConvert.SerializeObject(actResult));
        }
Пример #25
0
        public async Task <ActionResult <string> > AddEntity([FromBody] MemberInfoEntity PEntity)
        {
            ExcuteResult actResult = new ExcuteResult();

            if (await _MemberRepository.AddAsync(PEntity).ConfigureAwait(false) > 0)
            {
                actResult.SetValues(0, "保存成功");
            }
            else
            {
                actResult.SetValues(1, "保存失败");
            }
            return(JsonConvert.SerializeObject(actResult));
        }
Пример #26
0
        public async Task <string> DeleteAsync(string Id)
        {
            ExcuteResult actResult = new ExcuteResult();

            if (await _DataRepository.DeleteAsync(Id).ConfigureAwait(false) > 0)
            {
                actResult.SetValues(0, "删除成功");
            }
            else
            {
                actResult.SetValues(1, "删除失败");
            }
            return(JsonConvert.SerializeObject(actResult));
        }
Пример #27
0
        public async Task <string> PostAsync([FromBody] MemberHolidayEntity PEntity)
        {
            ExcuteResult actResult = new ExcuteResult();

            if (await _DataRepository.AddAsync(PEntity).ConfigureAwait(false) > 0)
            {
                actResult.SetValues(p_state: 0, p_msg: "保存成功", p_tag: PEntity?.Id);
            }
            else
            {
                actResult.SetValues(1, "保存失败");
            }
            return(JsonConvert.SerializeObject(actResult));
        }
Пример #28
0
            public async Task <ExcuteResult> DelNode()
            {
                ExcuteResult excuteResult = new ExcuteResult();

                if (CurNote != null)
                {
                    excuteResult = await DataNoteRepository.DeleteRecord(CurNote.Id);

                    if (excuteResult.State == 0)
                    {
                        CollectNotes.Remove(CurNote);
                    }
                }
                return(excuteResult);
            }
        private async void BtnUploadFile_ClickAsync(object sender, RoutedEventArgs e)
        {
            try
            {
                ExcuteResult JsonResult = new ExcuteResult();
                if (_CurWinViewModel.EntityFile.ContentType == null)
                {
                    AppFuns.ShowMessage("请选择文件内容类型!", Caption: "警告");
                    return;
                }
                _CurWinViewModel.EntityFile.CanReadUserIds = _CurWinViewModel.GetSelectUserIds();

                if (!_CurWinViewModel.EntityFile.CanReadUserIds.Contains(AppSet.LoginUser.Id))
                {
                    if (!AppFuns.ShowMessage("你本人没有读取该文件的权限?", Caption: "确认", showYesNo: true))
                    {
                        return;
                    }
                }

                BtnUpFile.IsEnabled = false;
                ProgressMessageHandler progress = new ProgressMessageHandler();
                progress.HttpSendProgress += (object sender, HttpProgressEventArgs e) =>
                {
                    _CurWinViewModel.EntityFile.UpIntProgress = e.ProgressPercentage;
                };

                JsonResult = await DataPlanFileRepository.UpLoadFileInfo(_CurWinViewModel.EntityFile, _CurWinViewModel.UpFileInfo.OpenRead(), "upfilekey", "upfilename", progress);

                if (JsonResult != null && JsonResult.State == 0)
                {
                    _CurWinViewModel.EntityFile.Id              = JsonResult.Tag;
                    _CurWinViewModel.EntityFile.UpIntProgress   = 100;
                    _CurWinViewModel.EntityFile.DownIntProgress = 0;
                    _CallBackFunc(_CurWinViewModel.EntityFile);
                    this.Close();
                }
                else
                {
                    AppFuns.ShowMessage(JsonResult.Msg, Caption: "错误", isErr: true);
                    BtnUpFile.IsEnabled = true;
                }
            }
            catch (Exception ex)
            {
                AppFuns.ShowMessage(ex.Message, Caption: "错误", isErr: true);
            }
        }
Пример #30
0
        public async Task <string> DeleteEntity(string Id)
        {
            ExcuteResult actResult = new ExcuteResult();

            if (await _MemberRepository.DeleteAsync(Id).ConfigureAwait(false) > 0)
            {
                await _FileRepository.DeleteByOwnerIdAsync(_FileBaseDir, Id).ConfigureAwait(false);

                actResult.SetValues(0, "删除成功");
            }
            else
            {
                actResult.SetValues(1, "删除失败");
            }
            return(JsonConvert.SerializeObject(actResult));
        }
Пример #31
0
        public ExcuteResult Update(Dictionary <string, object> paramDictionary)
        {
            var result = new ExcuteResult(Operate.Update, _connString, _table.Name);

            if (!paramDictionary.ContainsKey(_table.PrimaryKey))
            {
                throw new Exception("传入参数中没有找到" + _table.Name + "的主键值(" + _table.PrimaryKey + ")");
            }
            var old = Find(paramDictionary[_table.PrimaryKey] + "");

            if (old.HasData)
            {
                result.RollBackScript = ToFinalSql(_updateRollBackSql, paramDictionary);
                var ex = Excute(_updateSql, paramDictionary);
                if (!ex.HasValue())
                {
                    result.AddMessage("更新成功");
                    result.Successful = true;
                }
                else
                {
                    result.AddMessage("更新失败=>" + ex);
                    result.RollBackScript = "";//更新失败不需要回滚
                    result.Successful     = false;
                }
            }
            else
            {//无旧记录-执行全新添加
                var temp = Add(paramDictionary);
                if (temp.Successful)
                {
                    result.AddMessage("更新成功(全新添加)");
                    result.Successful     = true;
                    result.RollBackScript = temp.RollBackScript;
                }
                else
                {
                    result.AddMessage("更新失败(全新添加)");
                    result.AddMessages(temp.Messages);
                    //此种情况无需回滚-更新时不存在旧记录且尝试添加旧记录失败
                    result.RollBackScript = "";//清空回滚脚本
                    result.Successful     = false;
                }
            }
            return(result);
        }
Пример #32
0
        /// <summary>
        /// 删除该文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void btn_DeleteFileAsync(object sender, RoutedEventArgs e)
        {
            if (AppFuns.ShowMessage($"确定要删除[{_CurUCViewModel.CurFile.Name}]文件吗?", Caption: "确认", showYesNo: true))
            {
                ExcuteResult JsonResult = await DataPlanFileRepository.DeleteFileInfo(_CurUCViewModel.CurFile);

                if (JsonResult.State == 0)
                {
                    _DelFileCallBackFun?.Invoke(_CurUCViewModel.CurFile);
                    AppFuns.SetStateBarText(JsonResult.Msg);
                }
                else
                {
                    AppFuns.ShowMessage(JsonResult.Msg, "消息");
                }
            }
        }
Пример #33
0
        /// <summary>
        /// 将计划状态重置为 正在实施
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void btn_ResetPlan(object sender, RoutedEventArgs e)
        {
            _UCPlanInfoVM.CurPlan.CurrectState = PlanStatus.Running;
            ExcuteResult JsonResult = await DataPlanRepository.UpdatePlan(_UCPlanInfoVM.CurPlan);

            if (JsonResult.State == 0)
            {
                AppSet.AppMainWindow.lblCursorPosition.Text = JsonResult.Msg;
                AppFuns.ShowMessage("计划重置成功!");
                _UCPlanInfoVM.SetPlanOperateGrant();
                _UCPlanInfoVM.SetPlanFileDelete();
            }
            else
            {
                AppFuns.ShowMessage(JsonResult.Msg);
            }
        }
Пример #34
0
 public override ExcuteResult Excute(object lastRetVal, FSMHandle handle, Stack<State> stack)
 {
     ExcuteResult ret = new ExcuteResult();
     ret.retVal = name;
     return ret;
 }