示例#1
0
        public override bool TryGetValue(UEI experienceID, out ExperienceInfo experienceInfo)
        {
            ExperienceInfoCache info;

            if (m_ExperienceInfoCache.TryGetValue(experienceID.ID, out info) && m_ClockSource.TicksElapsed(m_ClockSource.TickCount, info.ExpiryTickCount) < m_ClockSource.SecsToTicks(ExperienceInfoTimeout))
            {
                experienceInfo = new ExperienceInfo(info.Info);
                return(true);
            }

            ExperienceInfo expInfo;

            if (InnerExperienceService.TryGetValue(experienceID, out expInfo))
            {
                info = new ExperienceInfoCache
                {
                    Info            = expInfo,
                    ExpiryTickCount = m_ClockSource.TickCount
                };
                m_ExperienceInfoCache[experienceID.ID] = info;
                experienceInfo = new ExperienceInfo(expInfo);
                return(true);
            }

            experienceInfo = default(ExperienceInfo);
            return(false);
        }
        byte[] UpdateExperienceInfo(Dictionary <string, object> request)
        {
            Dictionary <string, object> result = new Dictionary <string, object>();

            if (request.ContainsKey("public_id"))
            {
                ExperienceInfo info = new ExperienceInfo(request);

                var updated = m_service.UpdateExpereienceInfo(info);
                if (updated != null)
                {
                    result = updated.ToDictionary();
                }
                else
                {
                    result["result"] = "failed";
                }
            }
            else
            {
                result["result"] = "failed";
            }

            string xmlString = ServerUtils.BuildXmlResponse(result);

            return(Util.UTF8NoBomEncoding.GetBytes(xmlString));
        }
        /// <summary>
        /// 更新调拨单
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public virtual ExperienceInfo UpdateRequest(ExperienceInfo entityToUpdate)
        {
            var newItems = entityToUpdate.ExperienceItemInfoList;

            CheckedCondition(entityToUpdate);

            using (var scope = new TransactionScope())
            {
                ExperienceDA.UpdateExperience(entityToUpdate);

                if (newItems != null && newItems.Count > 0)
                {
                    ExperienceDA.DeleteExperienceItemByRequestSysNo(entityToUpdate.SysNo.Value);

                    newItems.ForEach(item =>
                    {
                        ExperienceDA.CreateExperienceItem(item, entityToUpdate.SysNo.Value);
                    });
                }

                scope.Complete();
            }

            return(entityToUpdate);
        }
示例#4
0
        public override void Add(ExperienceInfo info)
        {
            if (info.ID.HomeURI == null)
            {
                info.ID.HomeURI = new Uri(m_HomeURI);
            }
            var vals = new Dictionary <string, object>
            {
                { "ID", info.ID.ID },
                { "Name", info.ID.ExperienceName },
                { "HomeURI", info.ID.HomeURI },
                { "Description", info.Description },
                { "Properties", info.Properties },
                { "Owner", info.Owner },
                { "Creator", info.Creator },
                { "Group", info.Group },
                { "Maturity", info.Maturity },
                { "Marketplace", info.Marketplace },
                { "LogoID", info.LogoID },
                { "SlUrl", info.SlUrl }
            };

            using (var conn = new SqlConnection(m_ConnectionString))
            {
                conn.Open();
                conn.InsertInto("experiences", vals);
            }
        }
        public ExperienceInfo UpdateExpereienceInfo(ExperienceInfo info)
        {
            ExperienceInfoData data = new ExperienceInfoData();

            data.public_id   = info.public_id;
            data.owner_id    = info.owner_id;
            data.name        = info.name;
            data.description = info.description;
            data.group_id    = info.group_id;
            data.slurl       = info.slurl;
            data.logo        = info.logo;
            data.marketplace = info.marketplace;
            data.maturity    = info.maturity;
            data.properties  = info.properties;

            if (m_Database.UpdateExperienceInfo(data))
            {
                var find = GetExperienceInfos(new UUID[] { data.public_id });
                if (find.Length == 1)
                {
                    return(new ExperienceInfo(find[0].ToDictionary()));
                }
            }
            return(null);
        }
        ///// <summary>
        ///// 根据商品编号得到其所属产品线
        ///// </summary>
        ///// <param name="sysNo"></param>
        ///// <returns></returns>
        //public virtual ExperienceInfo GetProductLineInfo(int ProductSysNo)
        //{
        //    ExperienceInfo Experience = ExperienceDA.GetProductLineInfo(ProductSysNo);
        //    return Experience;
        //}

        /// <summary>
        /// 创建调拨单
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public virtual ExperienceInfo CreateRequest(ExperienceInfo entityToCreate)
        {
            ExperienceInfo result;
            var            newItems = entityToCreate.ExperienceItemInfoList;

            CheckedCondition(entityToCreate);

            using (var scope = new TransactionScope())
            {
                entityToCreate.Status = ExperienceHallStatus.Created;
                entityToCreate.InDate = DateTime.Now;

                //int requestSysNo = ExperienceDA.GetExperienceSequence();
                //entityToCreate.SysNo = requestSysNo;

                result = ExperienceDA.CreateExperience(entityToCreate);

                if (newItems != null && newItems.Count > 0)
                {
                    ExperienceDA.DeleteExperienceItemByRequestSysNo(result.SysNo.Value);

                    newItems.ForEach(item =>
                    {
                        ExperienceDA.CreateExperienceItem(item, result.SysNo.Value);
                    });
                }

                scope.Complete();
            }

            return(result);
        }
        /// <summary>
        /// 审核调拨单
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public virtual void AuditExperience(ExperienceInfo entityToUpdate)
        {
            List <ExperienceItemInfo> items = ExperienceDA.GetExperienceItemListByRequestSysNo(entityToUpdate.SysNo.Value);

            ExperienceInfo Experience = GetExperienceInfoBySysNo(entityToUpdate.SysNo.Value);

            CheckedCondition(Experience);

            ExperienceDA.UpdateExperienceStatus(entityToUpdate, (int)ExperienceHallStatus.Audit);

            //using (var scope = new TransactionScope())
            //{
            //    if (items != null && items.Count > 0)
            //    {
            //        items.ForEach(x =>
            //        {
            //            ExperienceDA.AuditExperienceInOrOut(x, entityToUpdate.SysNo.Value);
            //        });
            //    }

            //    ExperienceDA.UpdateExperienceStatus(entityToUpdate, (int)ExperienceHallStatus.Experienced);

            //    scope.Complete();
            //}
        }
        public ExperienceInfo LoadExperienceInfo(string requestSysNo)
        {
            int            sysNo  = int.Parse(requestSysNo);
            ExperienceInfo result = ObjectFactory <ExperienceHallAppService> .Instance.GetExperienceInfoBySysNo(sysNo);

            return(result);
        }
        private void CheckedCondition(ExperienceInfo entity)
        {
            var newItems = entity.ExperienceItemInfoList;

            if (newItems.Any(x => { return(x.AllocateQty <= 0); }))
            {
                throw new BizException("商品调拨数量必须大于0");
            }

            if (entity.AllocateType == AllocateType.ExperienceOut)
            {
                string error = string.Empty;
                newItems.ForEach(x =>
                {
                    if (ExperienceDA.GetValidStockQty(x.ProductSysNo.Value) < x.AllocateQty)
                    {
                        error += "商品 " + x.ProductSysNo.Value + " 体验厅库存不足" + Environment.NewLine;
                    }
                });

                if (!string.IsNullOrEmpty(error))
                {
                    throw new BizException(error);
                }
            }
        }
 public override void Add(ExperienceInfo info)
 {
     if (info.ID.HomeURI == null)
     {
         info.ID.HomeURI = new Uri(m_HomeURI);
     }
     m_Experiences.Add(info.ID.ID, info);
 }
示例#11
0
        /// <summary>
        /// 根据SysNo获取调拨单信息
        /// </summary>
        /// <param name="requestSysNo"></param>
        /// <returns></returns>
        public virtual ExperienceInfo GetExperienceInfoBySysNo(int requestSysNo)
        {
            ExperienceInfo Experience = ExperienceDA.GetExperienceInfoBySysNo(requestSysNo);

            if (Experience != null)
            {
                Experience.ExperienceItemInfoList = ExperienceDA.GetExperienceItemListByRequestSysNo(requestSysNo);
            }

            return(Experience);
        }
示例#12
0
        /// <summary>
        /// 更新调拨单状态
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public virtual void UpdateExperienceStatus(ExperienceInfo entity, int status)
        {
            DataCommand dc = DataCommandManager.GetDataCommand("Inventory_UpdateExperienceStatus");

            dc.SetParameterValue("@Status", status);
            dc.SetParameterValue("@AuditUser", entity.AuditUser);
            dc.SetParameterValue("@EditUser", entity.EditUser);
            dc.SetParameterValue("@SysNo", entity.SysNo.Value);

            dc.ExecuteNonQuery();
        }
示例#13
0
        /// <summary>
        /// 更新调拨单信息
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public virtual ExperienceInfo UpdateExperience(ExperienceInfo entity)
        {
            DataCommand dc = DataCommandManager.GetDataCommand("Inventory_UpdateExperience");

            dc.SetParameterValue("@RequestSysNo", entity.SysNo);
            dc.SetParameterValue("@StockSysNo", entity.StockSysNo);
            dc.SetParameterValue("@Memo", entity.Meno);
            dc.SetParameterValue("@AllocateType", (int)entity.AllocateType);
            dc.SetParameterValue("@Status", (int)entity.Status);
            dc.SetParameterValue("@EditUser", entity.EditUser);
            return(dc.ExecuteEntity <ExperienceInfo>());
        }
示例#14
0
 /* ExperienceInfo
  * <map>
  *   <key>public_id</key><uuid></uuid> x
  *   <key>agent_id</key><uuid></uuid> x
  *   <key>group_id</key><uuid></uuid> x
  *   <key>name</key><string></string> x
  *   <key>properties</key><integer></integer> x
  *   <!--<key>expiration</key><xx/>-->
  *   <key>description</key><string></string> x
  *   <!--<key>quota</key><xx/>-->
  *   <key>maturity</key><integer></integer> x
  *   <key>extended_metadata</key><string></string> x
  *   <key>slurl</key><url></url>
  * </map>
  *
  * extended_metadata is string with <llsd><map><key>marketplace</key><string></string><key>logo</key><uuid>assetid</uuid></key>
  */
 public static Map ToMap(this ExperienceInfo info) => new Map
 {
     ["public_id"]         = (AString)info.ID.ID.ToString(),
     ["agent_id"]          = info.Owner.ID,
     ["group_id"]          = info.Group.ID,
     ["name"]              = (AString)info.ID.ExperienceName,
     ["properties"]        = (Integer)(int)info.Properties,
     ["description"]       = (AString)(info.Description),
     ["maturity"]          = (Integer)(int)info.Maturity,
     ["extended_metadata"] = (AString)info.ExtendedMetadata,
     ["slurl"]             = (AString)info.SlUrl
 };
 public override void Update(UGUI requestingAgent, ExperienceInfo info)
 {
     if (!m_Experiences.ContainsKey(info.ID.ID))
     {
         throw new KeyNotFoundException();
     }
     if (!Admins[info.ID, requestingAgent])
     {
         throw new InvalidOperationException();
     }
     m_Experiences[info.ID.ID] = new ExperienceInfo(info);
 }
        public override bool TryGetValue(UEI experienceID, out ExperienceInfo experienceInfo)
        {
            ExperienceInfo res;

            if (m_Experiences.TryGetValue(experienceID.ID, out res))
            {
                experienceInfo = new ExperienceInfo(res);
                return(true);
            }
            experienceInfo = null;
            return(false);
        }
        public ExperienceInfo[] FindExperiencesByName(string search)
        {
            List <ExperienceInfo> infos = new List <ExperienceInfo>();

            ExperienceInfoData[] datas = m_Database.FindExperiences(search);

            foreach (var data in datas)
            {
                ExperienceInfo info = new ExperienceInfo(data.ToDictionary());
                infos.Add(info);
            }

            return(infos.ToArray());
        }
示例#18
0
        private ExperienceInfo AddToLocalInfo(string keycode, string info)
        {
            ExperienceInfo data = null;

            try
            {
                var sh = new ExperienceInfoClass(_dblocalfile);
                data = sh.InsertExperienceInfo(keycode, info);
                sh.ExperienceInfoRefresh(dgvLocalExperienceInfo, txtLocalExperienceKeyCode.Text);
                sh.SortGrid(dgvLocalExperienceInfo, ExperienceInfoClass.SelColInx);
            }
            catch (Exception ex)
            {
                SEMessageBox.ShowMDIDialog(FbXpertMainForm.Instance(), "#Add to Info", $@"#{ex.Message}", FormStartPosition.CenterScreen, SEMessageBoxButtons.OK, SEMessageBoxIcon.Error);
            }
            return(data);
        }
示例#19
0
        /// <summary>
        /// 创建调拨单信息
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public virtual ExperienceInfo CreateExperience(ExperienceInfo entity)
        {
            DataCommand dc = DataCommandManager.GetDataCommand("Inventory_CreateExperience");

            dc.SetParameterValue("@StockSysNo", entity.StockSysNo);
            dc.SetParameterValue("@Memo", entity.Meno);
            dc.SetParameterValue("@AllocateType", (int)entity.AllocateType);
            dc.SetParameterValue("@Status", (int)entity.Status);
            dc.SetParameterValue("@InDate", entity.InDate);
            dc.SetParameterValue("@InUser", entity.InUser);

            int sysno = dc.ExecuteScalar <int>();

            entity.SysNo = sysno;

            return(entity);
        }
示例#20
0
        private void UpdateRequestStatus(string relativeUrl, ExperienceVM requestVM, Action <int?> callback)
        {
            ExperienceInfo msg = ConvertRequestVMToInfo(requestVM);

            restClient.Update <int?>(relativeUrl, msg, (obj, args) =>
            {
                if (!args.FaultsHandle())
                {
                    //ExperienceVM vm = null;
                    if (args.Result != null)
                    {
                        //vm = ConvertRequestInfoToVM(args.Result);
                    }
                    if (callback != null)
                    {
                        callback(args.Result);
                    }
                }
            });
        }
示例#21
0
 public override bool TryGetValue(UUID experienceID, out ExperienceInfo experienceInfo)
 {
     using (var conn = new MySqlConnection(m_ConnectionString))
     {
         conn.Open();
         using (var cmd = new MySqlCommand("SELECT * FROM experiences WHERE ID = @id", conn))
         {
             cmd.Parameters.AddParameter("@id", experienceID);
             using (MySqlDataReader reader = cmd.ExecuteReader())
             {
                 if (reader.Read())
                 {
                     experienceInfo = reader.ToExperienceInfo();
                     return(true);
                 }
             }
         }
     }
     experienceInfo = default(ExperienceInfo);
     return(false);
 }
示例#22
0
        private ExperienceVM ConvertRequestInfoToVM(ExperienceInfo info)
        {
            ExperienceVM vm = info.Convert <ExperienceInfo, ExperienceVM>((i, v) =>
            {
            });

            //ExperienceVM vm = new ExperienceVM()
            //{
            //    AllocateType = info.AllocateType,
            //    AuditDate = info.AuditDate,
            //    AuditUser = info.AuditUser,
            //    EditDate = info.EditDate,
            //    EditUser = info.EditUser,
            //    InDate = info.InDate,
            //    InUser = info.InUser,
            //    Meno = info.Meno,
            //    Status = info.Status,
            //    StockSysNo = info.StockSysNo,
            //    SysNo = info.SysNo
            //};

            //if (info.ExperienceItemInfoList != null)
            //{
            //    info.ExperienceItemInfoList.ForEach(p =>
            //    {
            //        ExperienceItemVM item = new ExperienceItemVM()
            //        {
            //            AllocateQty = p.AllocateQty,
            //            AllocateSysNo = p.AllocateSysNo,
            //            ProductID = p.ProductID,
            //            ProductName = p.ProductName,
            //            ProductSysNo = p.ProductSysNo,
            //            SysNo = p.SysNo
            //        };

            //        vm.ExperienceItemInfoList.Add(item);
            //    });
            //}
            return(vm);
        }
示例#23
0
        public override void Add(ExperienceInfo info)
        {
            var vals = new Dictionary <string, object>();

            vals.Add("ID", info.ID);
            vals.Add("Name", info.Name);
            vals.Add("Description", info.Description);
            vals.Add("Properties", info.Properties);
            vals.Add("Owner", info.Owner);
            vals.Add("Creator", info.Creator);
            vals.Add("Group", info.Group);
            vals.Add("Maturity", info.Maturity);
            vals.Add("Marketplace", info.Marketplace);
            vals.Add("LogoID", info.LogoID);
            vals.Add("SlUrl", info.SlUrl);

            using (var conn = new MySqlConnection(m_ConnectionString))
            {
                conn.Open();
                conn.InsertInto("experiences", vals);
            }
        }
示例#24
0
        public void UpdateRequest(ExperienceVM requestVM, Action <int?> callback)
        {
            string relativeUrl = "/InventoryService/ExperienceHall/UpdateExperience";

            SetRequestUserInfo(requestVM, InventoryAdjustSourceAction.Update);
            ExperienceInfo msg = ConvertRequestVMToInfo(requestVM);

            restClient.Update <int?>(relativeUrl, msg, (obj, args) =>
            {
                if (!args.FaultsHandle())
                {
                    //ExperienceVM vm = null;
                    if (args.Result != null)
                    {
                        //vm = ConvertRequestInfoToVM(args.Result);
                    }
                    if (callback != null)
                    {
                        callback(args.Result);
                    }
                }
            });
        }
示例#25
0
        public ExperienceInfo UpdateExpereienceInfo(ExperienceInfo info)
        {
            // let's just pray they never add a parameter named "method"
            Dictionary <string, object> sendData = info.ToDictionary();

            sendData["METHOD"] = "updateexperienceinfo";

            string request_str = ServerUtils.BuildQueryString(sendData);

            string reply = SynchronousRestFormsRequester.MakeRequest("POST", m_ServerURI, request_str, m_Auth);

            //m_log.InfoFormat("[EXPERIENCE SERVICE CONNECTOR]: UpdateExpereienceInfo Reply: {0}", reply);

            if (reply != string.Empty)
            {
                Dictionary <string, object> replyData = ServerUtils.ParseXmlResponse(reply);

                ExperienceInfo responseInfo = new ExperienceInfo(replyData);
                return(responseInfo);
            }

            return(null);
        }
示例#26
0
        private ExperienceInfo ConvertRequestVMToInfo(ExperienceVM vm)
        {
            ExperienceInfo info = vm.ConvertVM <ExperienceVM, ExperienceInfo>((v, i) =>
            {
            });

            info.ExperienceItemInfoList = new List <ExperienceItemInfo>();

            vm.ExperienceItemInfoList.ForEach(item =>
            {
                //info.ExperienceItemInfoList.Add(new ExperienceItemInfo()
                //{
                //    AllocateQty = item.AllocateQty,
                //    ProductID = item.ProductID,
                //    ProductName = item.ProductName,
                //    ProductSysNo = item.ProductSysNo
                //});

                ExperienceItemInfo itemInfo = item.ConvertVM <ExperienceItemVM, ExperienceItemInfo>();
                info.ExperienceItemInfoList.Add(itemInfo);
            });

            return(info);
        }
        public virtual int ExperienceInOrOut(ExperienceInfo entityToUpdate)
        {
            ObjectFactory <ExperienceHallAppService> .Instance.ExperienceInOrOut(entityToUpdate);

            return(entityToUpdate.SysNo.Value);
        }
        public virtual int UpdateExperience(ExperienceInfo entityToUpdate)
        {
            ExperienceInfo result = ObjectFactory <ExperienceHallAppService> .Instance.UpdateRequest(entityToUpdate);

            return(result.SysNo.Value);
        }
        bool CheckForEquality(ExperienceInfo gInfo, ExperienceInfo testGroupInfo)
        {
            var unequal = new List <string>();

            if (!gInfo.ID.ID.Equals(testGroupInfo.ID.ID))
            {
                unequal.Add($"ExperienceID ({gInfo.ID.ID}!={testGroupInfo.ID.ID})");
            }

            if (!gInfo.ID.ExperienceName.Equals(testGroupInfo.ID.ExperienceName))
            {
                unequal.Add($"ExperienceName ({gInfo.ID.ExperienceName}!={testGroupInfo.ID.ExperienceName})");
            }

            if (gInfo.Properties != testGroupInfo.Properties)
            {
                unequal.Add($"Properties ({gInfo.Properties}!={testGroupInfo.Properties})");
            }

            if (gInfo.Owner != testGroupInfo.Owner)
            {
                unequal.Add($"Owner ({gInfo.Owner}!={testGroupInfo.Owner})");
            }

            if (gInfo.Creator != testGroupInfo.Creator)
            {
                unequal.Add($"Creator ({gInfo.Owner}!={testGroupInfo.Owner})");
            }

            if (gInfo.ID.ExperienceName != testGroupInfo.ID.ExperienceName)
            {
                unequal.Add($"Name ({gInfo.ID.ExperienceName}!={testGroupInfo.ID.ExperienceName})");
            }

            if (gInfo.ID.HomeURI == null || testGroupInfo.ID.HomeURI == null || gInfo.ID.HomeURI.ToString() != testGroupInfo.ID.HomeURI.ToString())
            {
                unequal.Add($"HomeURI ({gInfo.ID.HomeURI}!={testGroupInfo.ID.HomeURI})");
            }

            if (gInfo.Description != testGroupInfo.Description)
            {
                unequal.Add($"Description ({gInfo.Description}!={testGroupInfo.Description})");
            }

            if (gInfo.Group != testGroupInfo.Group)
            {
                unequal.Add($"Group ({gInfo.Group}!={testGroupInfo.Group})");
            }

            if (gInfo.LogoID != testGroupInfo.LogoID)
            {
                unequal.Add($"LogoID ({gInfo.LogoID}!={testGroupInfo.LogoID})");
            }

            if (gInfo.Marketplace != testGroupInfo.Marketplace)
            {
                unequal.Add($"Marketplace ({gInfo.Marketplace}!={testGroupInfo.Marketplace}");
            }

            if (gInfo.SlUrl != testGroupInfo.SlUrl)
            {
                unequal.Add($"SlUrl ({gInfo.SlUrl}!={testGroupInfo.SlUrl})");
            }
            if (unequal.Count != 0)
            {
                m_Log.InfoFormat("Equality not given! {0}", string.Join(" ", unequal));
            }
            return(unequal.Count == 0);
        }
示例#30
0
        public override void Update(UUI requestingAgent, ExperienceInfo info)
        {
            var vals = new Dictionary <string, object>();

            vals.Add("Name", info.Name);
            vals.Add("Description", info.Description);
            vals.Add("Properties", info.Properties);
            vals.Add("Owner", info.Owner);
            vals.Add("Group", info.Group);
            vals.Add("Maturity", info.Maturity);
            vals.Add("Marketplace", info.Marketplace);
            vals.Add("LogoID", info.LogoID);
            vals.Add("SlUrl", info.SlUrl);
            using (var conn = new MySqlConnection(m_ConnectionString))
            {
                conn.Open();
                conn.InsideTransaction((transaction) =>
                {
                    bool isallowed = false;
                    using (var cmd = new MySqlCommand("SELECT Admin FROM experienceadmins WHERE ExperienceID = @experienceid AND Admin LIKE @admin", conn)
                    {
                        Transaction = transaction
                    })
                    {
                        cmd.Parameters.AddParameter("@experienceid", info.ID);
                        cmd.Parameters.AddParameter("@admin", requestingAgent.ID.ToString() + "%");
                        using (MySqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                if (reader.GetUUI("Admin").EqualsGrid(requestingAgent))
                                {
                                    isallowed = true;
                                }
                            }
                        }
                    }
                    if (!isallowed)
                    {
                        using (var cmd = new MySqlCommand("SELECT Owner FROM experiences WHERE ID = @id", conn)
                        {
                            Transaction = transaction
                        })
                        {
                            cmd.Parameters.AddParameter("@id", info.ID);
                            using (MySqlDataReader reader = cmd.ExecuteReader())
                            {
                                if (reader.Read())
                                {
                                    isallowed = reader.GetUUI("Owner").EqualsGrid(requestingAgent);
                                }
                            }
                        }
                    }
                    if (!isallowed)
                    {
                        throw new InvalidOperationException("requesting agent is not allowed to edit experience");
                    }
                    conn.UpdateSet("experiences", vals, "ID = \"" + info.ID.ToString() + "\"", transaction);
                });
            }
        }