public GetListResponse<Configuration> GetChildren(ConfigRequest req) { try { string name = Util.GetConnName<Configuration>(); var db = ImardaDatabase.CreateDatabase(name); object[] args = new object[5]; args[0] = req.ID; Guid[] levels = req.GetLevels(); int n = Math.Min(levels.Length, 4); Array.Copy(levels, 0, args, 1, n); using (IDataReader dr = db.ExecuteDataReader("GetChildren", args)) { var list = new List<Configuration>(); while (dr.Read()) { var c = GetFromData<Configuration>(dr); list.Add(c); } return new GetListResponse<Configuration>(list); } } catch (Exception ex) { return ErrorHandler.Handle<GetListResponse<Configuration>>(ex); } }
public GetListResponse<Configuration> GetHierarchy(ConfigRequest req) { try { string name = Util.GetConnName<Configuration>(); var db = ImardaDatabase.CreateDatabase(name); object[] args = new object[7]; args[0] = req.ID; args[1] = 0; // hierarchy Guid[] levels = req.GetLevels(); int n = levels.Length; for (int i = 0; i < n; i++) args[i + 2] = levels[i]; using (IDataReader dr = db.ExecuteDataReader("GetConfiguration", args)) { var list = new List<Configuration>(); while (dr.Read()) { var c = GetFromData<Configuration>(dr); list.Add(c); } list.Reverse(); // -> [0] becomes root return new GetListResponse<Configuration>(list); } } catch (Exception ex) { return ErrorHandler.Handle<GetListResponse<Configuration>>(ex); } }
/// <summary> /// Run startup scripts /// </summary> /// <param name="conn"></param> /*protected override void internalUpdateDatabase(System.Data.SqlClient.SqlConnection conn) { }*/ protected override void OnStart(string[] args) { base.OnStart(args); // Initialize session cache with object expiry time IImardaConfiguration service = ImardaProxyManager.Instance.IImardaConfigurationProxy; ChannelInvoker.Invoke(delegate(out IClientChannel channel) { channel = service as IClientChannel; var request = new ConfigRequest(new Guid("fd17ad5d-1844-4737-bce0-451a90182fcf"), null); var response = service.GetConfigValue(request); if (response.Status) { int expiration = response.Item.As<int>(30); if (expiration > 0) SessionObjectCache.Instance.Expiration = TimeSpan.FromMinutes(expiration); } }); }
public SimpleResponse<int> GetChildrenCount(ConfigRequest req) { try { string name = Util.GetConnName<Configuration>(); var db = ImardaDatabase.CreateDatabase(name); object[] args = new object[5]; args[0] = req.ID; Guid[] levels = req.GetLevels(); int n = Math.Min(levels.Length, 4); Array.Copy(levels, 0, args, 1, n); int count = (int)db.ExecuteScalar("GetChildrenCount", args); return new SimpleResponse<int>(count); } catch (Exception ex) { return ErrorHandler.Handle<SimpleResponse<int>>(ex); } }
public static string CalcPreferences(ICultureConfigGroup config, IImardaConfiguration iConfig) { Guid unitSystemID = config.UnitSystem; if (unitSystemID == Guid.Empty) { unitSystemID = new RegionInfo(config.Region).IsMetric ? MetricUnitSystemID : USCustomaryUnitSystemID; } Guid regionID = CultureIDs.Instance.GetCountryGuid(config.Region); var req = new ConfigRequest(RegionMeasurementUnitsID, null, unitSystemID, regionID); var resp = iConfig.GetConfigValue(req); ErrorHandler.Check(resp); string regionMeasurementUnits = resp.Item.As<string>(); string preferences = StringUtils.MergeNonArrayKeyValuePairs( regionMeasurementUnits, config.PreferredMeasurementUnits, "Region|" + config.Region, "Locale|" + config.Locale ); return preferences; }
/// <summary> /// Create the report objects. Do not download the report yet. /// </summary> /// <param name="repTask"></param> /// <param name="companyID"></param> /// <param name="reportName">The name of the report, valid filename</param> /// <returns>the report server URL where to download the report</returns> private Uri RunReport(ReportTask repTask, Guid companyID, out string reportName, out string ext) { _Log.InfoFormat("Run report {0}", repTask.ID); reportName = ""; ext = ""; ReportDef rdef = repTask.Definition; string pref = String.Empty; IImardaConfiguration service1 = ImardaProxyManager.Instance.IImardaConfigurationProxy; ChannelInvoker.Invoke(delegate(out IClientChannel channel) { channel = service1 as IClientChannel; Guid unitSys = rdef.UnitSystemID; _Log.InfoFormat("unitSys = {0}", unitSys); if (unitSys == CultureHelper.MetricUnitSystemID || unitSys == CultureHelper.USCustomaryUnitSystemID || unitSys == CultureHelper.ImperialUnitSystemID) { _Log.Info("Specific Unit System selected"); Guid countryID = CultureIDs.Instance.GetCountryGuid(CultureHelper.GetRegion(rdef.Locale)); _Log.InfoFormat("countryID = {0}", countryID); var req1 = new ConfigRequest(CultureHelper.RegionMeasurementUnitsID, null, unitSys, countryID); GetItemResponse<ConfigValue> resp1 = service1.GetConfigValue(req1); ErrorHandler.CheckItem(resp1); _Log.InfoFormat("prefs = {0} {1}", resp1.Item.UID, resp1.Item.Value); pref = resp1.Item.As<string>(); } else { _Log.Info("Company/User Unit System selected"); Guid personID = (unitSys == Guid.Empty || unitSys == new Guid("B820DAA2-6059-43EE-998B-7293A2CF4B6F")) ? Guid.Empty : repTask.TaskOwnerID; _Log.InfoFormat("personID = {0}", personID); SimpleResponse<string> resp1 = service1.GetCulturePreferences(new GenericRequest(personID, companyID)); ErrorHandler.Check(resp1); pref = resp1.Value; } }); _Log.InfoFormat("pref = {0}", pref); //ReportType linkedReportType = null; //IImardaReport service2 = ImardaProxyManager.Instance.IImardaReportProxy; //ChannelInvoker.Invoke(delegate(out IClientChannel channel) // { // channel = service2 as IClientChannel; // GetItemResponse<ReportType> resp2 = service2.GetReportType(new IDRequest(rdef.ReportTypeID)); // ErrorHandler.CheckItem(resp2); // ReportType reportType = resp2.Item; // string context = rdef.ReportContext(companyID, repTask.GetTimeZoneInfo(), DateTime.UtcNow, // pref); // _Log.InfoFormat("Report Parameters = {0}", context); // _Log.InfoFormat("Period = {0} ~ {1}", rdef.PeriodBegin, rdef.PeriodEnd); // var parameters = new ParamsForCreateLinkedReportType // { // CompanyID = companyID, // UserID = repTask.TaskOwnerID, // Name = reportType.Name, // Version = reportType.Version, // OwnerID = repTask.TaskOwnerID, // ReportNumber = null, // ReportParameters = context, // Description = string.Format( // // new Locale(rdef.Locale), // "{0} {1:dd MMM yyyy HH:mm} - {2:dd MMM yyyy HH:mm}", // rdef.Description, rdef.PeriodBegin, rdef.PeriodEnd) // }; // resp2 = service2.CreateLinkedReportType(parameters.AsGenericRequest()); // ErrorHandler.CheckItem(resp2); // _Log.InfoFormat("Create Linked Report", resp2.Item); // linkedReportType = resp2.Item; // }); //string name = null; //string url = String.Empty; //IImardaReport service3 = ImardaProxyManager.Instance.IImardaReportProxy; //ChannelInvoker.Invoke(delegate(out IClientChannel channel) // { // _Log.InfoFormat("Create snapshot {0}", linkedReportType.ID); // channel = service3 as IClientChannel; // channel.OperationTimeout = TimeSpan.FromMinutes(5); // var req = new GenericRequest(linkedReportType.ID); // GetItemResponse<Report> resp3 = service3.CreateSnapshot(req); // _Log.InfoFormat("Result {0}", resp3); // ErrorHandler.CheckItem(resp3); // Report report = resp3.Item; // _Log.DebugFormat("Original Format {0}", rdef.RenderFormat.ToString()); // url = report.GetReportFormatURL(_ReportHost, rdef.RenderFormat.ToString(), out name); // _Log.DebugFormat("Format After Get ReportUrl{0}", rdef.RenderFormat.ToString()); // name = MakeFileName(name, companyID, rdef.RenderFormat); // _Log.InfoFormat("Report URL {0} => [{1}] with Render Format => {2}", url, name, rdef.RenderFormat.ToString()); // }); //reportName = name; //ext = rdef.RenderFormat.ToString(); //return String.IsNullOrEmpty(url) ? null : new Uri(url); var tempuri = string.Empty; return String.IsNullOrEmpty(tempuri) ? null : new Uri(tempuri); //return new Uri(); }
public SimpleResponse<int> SaveHierarchy(ConfigRequest req) { try { int result; object value = req.AppParameter; req.AppParameter = null; var resp = GetHierarchy(req); ErrorHandler.Check(resp); // Example: // array of existing Configuration objects: // // L1 L2 L3 L4 L5 // 0 - - - - - // 1 x1 - - - - // 2 x1 x2 - - - existingLevel=2 // // request new // // [0] [1] [2] [3] // x1 x2 n3 n4 depth=4 // // create: // // L1 L2 L3 L4 L5 // i=3 x1 x2 n3 - - // i=4 x1 x2 n3 n4 - // var list = resp.List; int existingLevel = list.Count - 1; int depth = req.Depth; if (existingLevel == depth) { if (value == null) { var resp1 = GetChildrenCount(req); ErrorHandler.Check(resp1); if (resp1.Value == 0) { // no child nodes: can delete var resp3 = DeleteConfigurationByUID(new IDRequest(list[existingLevel].UID)); ErrorHandler.Check(resp3); result = -1; } else { // has child nodes, can not delete: do nothing result = 0; } } else { Configuration c = list[existingLevel]; c.VersionValue = ConfigItemVersion.Create(req.ValueType, value, false, Guid.Empty).ToString(); var resp1 = SaveConfigurationByUID(new SaveRequest<Configuration>(c)); ErrorHandler.Check(resp1); result = 1; } } else // exisitingLevel < depth { if (value == null) { result = 0; } else { Guid[] levels = new Guid[5]; Array.Copy(req.GetLevels(), levels, depth); string sValue = ConfigItemVersion.Create(req.ValueType, value, false, Guid.Empty).ToString(); result = 0; for (int i = existingLevel + 1; i <= depth; i++) { bool combine = i != 0 && req.Combine; var c = new Configuration { ID = req.ID, Combine = combine, ValueType = req.ValueType, Notes = req.Notes, VersionValue = combine ? string.Empty : sValue, Level1 = i >= 1 ? levels[0] : Guid.Empty, Level2 = i >= 2 ? levels[1] : Guid.Empty, Level3 = i >= 3 ? levels[2] : Guid.Empty, Level4 = i >= 4 ? levels[3] : Guid.Empty, Level5 = i >= 5 ? levels[4] : Guid.Empty, UID = SequentialGuid.NewDbGuid(), }; var resp2 = SaveConfigurationByUID(new SaveRequest<Configuration>(c)); ErrorHandler.Check(resp2); result++; } } } return new SimpleResponse<int>(result); } catch (Exception ex) { return ErrorHandler.Handle<SimpleResponse<int>>(ex); } }
public SimpleResponse<string> GetCompanyCustomUnits(IDRequest request) { try { Guid companyID = request.ID; RemoveCachedCulture(new IDRequest(companyID)); string result = string.Empty; // first get root level var req0 = new ConfigRequest(CultureHelper.PreferredMeasurementUnitsID, null) { IgnoreCache = true }; var resp0 = GetConfigValue(req0); ErrorHandler.CheckItem(resp0); Guid uid0 = resp0.Item.UID; // then get level1, but this may not exist var req1 = new ConfigRequest(CultureHelper.PreferredMeasurementUnitsID, null, companyID) { IgnoreCache = true }; var resp1 = GetConfigValue(req1); ErrorHandler.CheckItem(resp1); Guid uid1 = resp1.Item.UID; if (!uid0.Equals(uid1)) { // UIDs are different, this means that level1 exists: get the value on this level var resp = GetConfigurationByUID(new IDRequest(uid1)); result = resp.Item.VersionValue; } return new SimpleResponse<string>(result); } catch (Exception ex) { return ErrorHandler.Handle<SimpleResponse<string>>(ex); } }
public BusinessMessageResponse SetUserLocale(ConfigRequest req) { // // L0 L1 L2 | null | not null // ---------+-----------------+----------------- // 1 0 0 | do nothing [a] | create L1,L2 [d] // 1 1 0 | do nothing [b] | create L2 [e] // 1 1 1 | delete L2 [c] | update L2 [f] // BusinessMessageResponse resp = null; try { Guid[] levels = req.GetLevels(); Guid companyID = levels[0]; // Database column LEVEL1 Guid personID = levels[1]; // Database column LEVEL2 Guid localeItemID = new Guid(CultureConfigGroup.LocaleItemID); req.ID = localeItemID; string locale = (string)req.AppParameter ?? string.Empty; req.AppParameter = null; // root level var req0 = new ConfigRequest(localeItemID, null) { IgnoreCache = true }; var resp0 = GetConfigValue(req0); ErrorHandler.CheckItem(resp0); Guid uid0 = resp0.Item.UID; // company level (L1) var req1 = new ConfigRequest(localeItemID, null, companyID) { IgnoreCache = true }; var resp1 = GetConfigValue(req1); ErrorHandler.CheckItem(resp1); Guid uid1 = resp1.Item.UID; // user/person level (L2) var req2 = new ConfigRequest(localeItemID, null, companyID, personID) { IgnoreCache = true }; var resp2 = GetConfigValue(req2); ErrorHandler.CheckItem(resp2); Guid uid2 = resp2.Item.UID; if (uid1.Equals(uid0)) { // [a] or [d] if (locale == string.Empty) { // [a] resp = new BusinessMessageResponse(); } else { // [d] string locale0 = (string)resp0.Item.Value; resp = CreateLocaleConfig(locale0, companyID, Guid.Empty); ErrorHandler.Check(resp); resp = CreateLocaleConfig(locale, companyID, personID); } } else if (uid2.Equals(uid1)) { // [b] or [e] if (locale == string.Empty) { // [b] resp = new BusinessMessageResponse(); } else { // [e] resp = CreateLocaleConfig(locale, companyID, personID); } } else // level 2 record exists { // [c] or [f] if (locale == string.Empty) { // [c] resp = DeleteConfigurationByUID(new IDRequest(uid2)); } else { // [f] resp2.Item.Value = locale; resp = UpdateConfigValue(new SaveRequest<ConfigValue>(resp2.Item)); } } ErrorHandler.Check(resp); return resp; } catch (Exception ex) { return ErrorHandler.Handle(ex); } }
public BusinessMessageResponse SetCompanyValue(ConfigRequest req) { // // L0 L1 | null | not null // ------+-----------------+----------------- // 1 0 | do nothing [a] | create L1 [c] // 1 1 | update L1 [b]*| update L1 [d] // // *assign L0 value to L1, coz combine=false BusinessMessageResponse resp = null; try { Guid id = req.ID; // first get root level (L0) var req0 = new ConfigRequest(id, null) { IgnoreCache = true }; var resp0 = GetConfigValue(req0); Guid uid0 = resp0.Item.UID; // we need this to compare to uid1 string newValue = (string)req.AppParameter; Guid companyID = req.GetLevels()[0]; // Database column LEVEL1 // now get L1 (company level) var req1 = new ConfigRequest(id, null, companyID) { IgnoreCache = true }; GetItemResponse<ConfigValue> resp1 = GetConfigValue(req1); ErrorHandler.CheckItem(resp1); if (resp1.Item.UID.Equals(uid0)) { // Csae [a] or [c] if (newValue == null) { // Case [a] resp = new BusinessMessageResponse(); } else { // Case [c] Configuration cfg = new Configuration { UID = SequentialGuid.NewDbGuid(), ID = id, Combine = false, ValueType = 1, VersionValue = newValue, Notes = req.Notes, Level1 = companyID }; resp = SaveConfigurationByUID(new SaveRequest<Configuration>(cfg)); } } else { // case [b] or [d] if (newValue == null) { // case [b] resp1.Item.Value = resp0.Item.Value; } else { // case [d] resp1.Item.Value = newValue; } resp = UpdateConfigValue(new SaveRequest<ConfigValue>(resp1.Item)); } ErrorHandler.Check(resp); return resp; } catch (Exception ex) { return ErrorHandler.Handle(ex); } }
public BusinessMessageResponse SetCompanyCustomUnits(ConfigRequest req) { // // L0 L1 | null | not null // ------+-----------------+----------------- // 1 0 | do nothing [a] | create L1 [c] // 1 1 | update L1 [b]*| update L1 [d] // // *assign L0 value to L1, coz combine=false BusinessMessageResponse resp = null; try { // first get root level var req0 = new ConfigRequest(CultureHelper.PreferredMeasurementUnitsID, null) { IgnoreCache = true }; var resp0 = GetConfigValue(req0); ErrorHandler.CheckItem(resp0); Guid uid0 = resp0.Item.UID; // we need this to compare to level 1 string newValue = (string)req.AppParameter; Guid companyID = req.GetLevels()[0]; // Database column LEVEL1 // now get level 1, may not exist var req1 = new ConfigRequest(CultureHelper.PreferredMeasurementUnitsID, null, companyID) { IgnoreCache = true }; GetItemResponse<ConfigValue> resp1 = GetConfigValue(req1); ErrorHandler.CheckItem(resp1); if (resp1.Item.UID.Equals(uid0)) { // Case [a] or [c] if (string.IsNullOrEmpty(newValue)) { // Case [a] resp = new BusinessMessageResponse(); } else { // Case [c] // L1 record not in database, create one Configuration cfg = new Configuration { UID = SequentialGuid.NewDbGuid(), ID = CultureHelper.PreferredMeasurementUnitsID, Combine = true, ValueType = 11, VersionValue = newValue, Notes = req.Notes, Level1 = companyID, }; resp = SaveConfigurationByUID(new SaveRequest<Configuration>(cfg)); } } else { // Case [b] or [d] string val = newValue ?? string.Empty; resp = UpdateConfigValue(new SaveRequest<ConfigValue>(resp1.Item)); // case [b] or [d] if (string.IsNullOrEmpty(newValue)) { // case [b] val = (string)resp0.Item.Value; } else { // case [d] val = newValue; } resp1.Item.Value = val; resp = UpdateConfigValue(new SaveRequest<ConfigValue>(resp1.Item)); } ErrorHandler.Check(resp); return resp; } catch (Exception ex) { return ErrorHandler.Handle(ex); } }
public BusinessMessageResponse SaveUserSecurityEntity(SaveRequest<SecurityEntity> request) { try { BusinessMessageResponse response = null; ImardaSecurityBusiness.IImardaSecurity service = ImardaProxyManager.Instance.IImardaSecurityProxy; ChannelInvoker.Invoke(delegate(out IClientChannel channel) { channel = service as IClientChannel; response = service.SaveUserSecurityEntity(request); ErrorHandler.Check(response); }); var cfgservice = ImardaProxyManager.Instance.IImardaConfigurationProxy; ChannelInvoker.Invoke(delegate(out IClientChannel channel) { channel = cfgservice as IClientChannel; SecurityEntity se = request.Item; var localeID = new Guid("5e93c6a7-3ee3-4a75-a6f8-b783296afa7d"); var cfgreq = new ConfigRequest(localeID, se.Locale, se.CompanyID, se.CRMId) { IgnoreCache = true }; var cfgresp = cfgservice.SetUserLocale(cfgreq); ErrorHandler.Check(cfgresp); }); return response; } catch (Exception ex) { return ErrorHandler.Handle(ex); } }
public GetItemResponse<SecurityEntity> GetUserSecurityEntity(IDRequest request) { try { GetItemResponse<SecurityEntity> response = null; ImardaSecurityBusiness.IImardaSecurity service = ImardaProxyManager.Instance.IImardaSecurityProxy; ChannelInvoker.Invoke(delegate(out IClientChannel channel) { channel = service as IClientChannel; response = service.GetSecurityEntityByCrmID(request); }); var cfgservice = ImardaProxyManager.Instance.IImardaConfigurationProxy; ChannelInvoker.Invoke(delegate(out IClientChannel channel) { channel = cfgservice as IClientChannel; var localeID = new Guid("5e93c6a7-3ee3-4a75-a6f8-b783296afa7d"); var cfgreq = new ConfigRequest(localeID, null, request.CompanyID, request.ID) { IgnoreCache = true }; var cfgresp = cfgservice.GetConfigValue(cfgreq); ErrorHandler.Check(cfgresp); response.Item.Locale = cfgresp.Item.As<string>(); }); return response; } catch (Exception ex) { return ErrorHandler.Handle<GetItemResponse<SecurityEntity>>(ex); } }