private void OnEditProperties(object sender, RoutedEventArgs e) { var button = sender as Button; if (button != null) { var data = _dataGrid.SelectedItem as ValueDataField; if (data == null) { return; } var clonedCollection = new ObservableCollection <ValueDataFieldPropertiesEditorDialog.ValueDataFieldProperty>( data.Properties.Select(CreateValueDataFieldProperty)); var dialog = new ValueDataFieldPropertiesEditorDialog(clonedCollection); if (dialog.ShowDialog() == true) { data.Properties.Clear(); foreach (var item in clonedCollection.Where(p => !string.IsNullOrEmpty(p.Name))) { var value = item.UseWfVariable ? string.Format("{0}{1}", ValueDataFieldConstants.WfVariableFlag, item.Value) : SerializationHelper.ConvertToTrueType(item.Value, item.Type); data.Set(item.Name, value); } button.DataContext = data; } } }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null || !(parameter is Type)) { return(null); } return(SerializationHelper.ConvertToTrueType(value, (Type)parameter)); }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) { return(null); } return(SerializationHelper.ConvertToTrueType(value, typeof(bool))); }
protected virtual object GetCorrectedEditValue(object editValue) { // если тип поля и тип ключа лукапа не совпадают. то сами приводим к нужному if (editValue != null && ValueMemberType != null && !ValueMemberType.IsInstanceOfType(editValue)) { return(SerializationHelper.ConvertToTrueType(editValue, ValueMemberType)); } return(editValue); }
public override void Initialize(IDictionary parameters) { base.Initialize(parameters); _barcodeCount = parameters.Contains(BarcodeCountParameterName) ? (int)SerializationHelper.ConvertToTrueType(parameters[BarcodeCountParameterName], typeof(int)) : BarcodeCountDefault; // получаем ШК var filter = "barcode2entity = 'SKU' and rownum < " + _barcodeCount + 1; using (var mgr = IoC.Instance.Resolve <IBaseManager <Barcode> >()) _barcodes = mgr.GetFiltered(filter, null).Select(i => i.BarcodeValue).ToArray(); }
private object GetValueFromNode(Node node, Type valueType) { if (valueType.IsValueType || (typeof(string) == valueType)) { // хитро определяем, что значения нет if (node.Nodes == null) { return(valueType.IsByRef ? null : Activator.CreateInstance(valueType)); } return(SerializationHelper.ConvertToTrueType(node.Value, valueType)); } if (typeof(IEnumerable).IsAssignableFrom(valueType) && valueType != typeof(XmlDocument) && !typeof(IDictionary).IsAssignableFrom(valueType)) { var itemType = valueType.IsGenericType ? valueType.GetGenericArguments()[0] : typeof(string); var listType = valueType.IsInterface ? typeof(List <>).MakeGenericType(itemType) : valueType; var list = (IList)Activator.CreateInstance(listType); foreach (var n in node.Nodes) { list.Add(GetValueFromNode(n, itemType)); } return(list); } // если сложный объект, то разбираем его сложно if (typeof(IXmlSerializable).IsAssignableFrom(valueType) && (node.Value != null || node.Nodes != null)) { if (node.Value != null) { using (var sr = new StringReader(node.Value)) using (var xmlReader = XmlReader.Create(sr)) return(XmlDocumentConverter.ConvertTo(valueType, xmlReader)); } } if (valueType == typeof(XmlDocument)) { if (string.IsNullOrEmpty(node.Value)) { return(null); } var doc = new XmlDocument(); doc.LoadXml(node.Value); return(doc); } return(node.Value); }
public override void Initialize(IDictionary parameters) { base.Initialize(parameters); IoC.Instance.Register <IViewService, RclPackingViewService>(LifeTime.Singleton); Assert.IsTrue(parameters.Contains(TargetTeCodeParameterName)); _packingPlaceCode = (string)SerializationHelper.ConvertToTrueType(parameters[PackingPlaceParameterName], typeof(string)); Assert.IsNotNull(_packingPlaceCode); Assert.IsTrue(parameters.Contains(TargetTeCodeParameterName)); _targetTeCode = (string)SerializationHelper.ConvertToTrueType(parameters[TargetTeCodeParameterName], typeof(string)); Assert.IsNotNull(_targetTeCode); _checkWhs = true; if (parameters.Contains(CheckWhsParameterName)) { _checkWhs = (bool)SerializationHelper.ConvertToTrueType(parameters[CheckWhsParameterName], typeof(bool)); } _rclPackingActivity = new RclPackingActivity(); _barcodes = new Dictionary <string, Barcode[]>(); using (var mgr = IoC.Instance.Resolve <IBaseManager <TE> >()) { _sourceTeList = mgr.GetFiltered(string.Format("tecurrentplace='{0}' and tepackstatus='TE_PKG_NONE'", _packingPlaceCode)).ToArray(); _targetTe = mgr.Get(_targetTeCode); } using (var mgr = IoC.Instance.Resolve <IBaseManager <Barcode> >()) { foreach (var te in _sourceTeList) { _barcodes.Add(te.GetKey <string>(), mgr.GetFiltered(string.Format("barcode2entity = 'SKU' and barcodekey in (select p.skuid_r from wmsproduct p where p.tecode_r = '{0}')", te.GetKey <string>())).ToArray()); } } _random = new Random(); _teCount = _sourceTeList.Count(); var vs = IoC.Instance.Resolve <IViewService>() as RclPackingViewService; if (vs == null) { throw new Exception("IViewService is not RclPackingViewService"); } vs.Barcodes = _barcodes; }
//protected override void OnSelectedItemChanged(object oldValue, object newValue) //{ // base.OnSelectedItemChanged(oldValue, newValue); // var sel = (Partner)newValue; // SetProperties(sel); //} protected override object GetCorrectedEditValue(object editValue) { var bo = editValue as WMSBusinessObject; if (bo != null) { return(bo.GetProperty(LookupInfo.ValueMember)); } // если тип поля и тип ключа лукапа не совпадают. то сами приводим к нужному if (editValue != null && ValueMemberType != null && !ValueMemberType.IsInstanceOfType(editValue)) { return(SerializationHelper.ConvertToTrueType(editValue, ValueMemberType)); } return(editValue); }
public T Get <T>(string name) { if (string.IsNullOrEmpty(name) || !Properties.ContainsKey(name)) { return(default(T)); } try { return((T)SerializationHelper.ConvertToTrueType(Properties[name], typeof(T))); } catch (Exception ex) { throw new OperationException(Resources.ExceptionResources.TypeConversionError, "ValueDataField.", name, typeof(T), ex); } }
public T Get <T>(string paramName) { if (_context == null) { throw new OperationException("ServiceContext is null"); } var value = _context.Get(paramName); if (string.IsNullOrEmpty(value)) { return(default(T)); } return((T)SerializationHelper.ConvertToTrueType(value, typeof(T))); }
protected object GetTrueKeyValue <TEnt>(string id, IBaseManager <TEnt> mgr) where TEnt : WMSBusinessObject, new() { var tmp = (WMSBusinessObject)mgr.New(); var keyName = tmp.GetPrimaryKeyPropertyName(); var descriptor = TypeDescriptor.GetProperties(tmp.GetType()) .Cast <PropertyDescriptor>() .FirstOrDefault(i => i.Name.EqIgnoreCase(keyName)); if (descriptor == null) { return(null); } var type = descriptor.PropertyType; return(SerializationHelper.ConvertToTrueType(id, type)); }
public void StartSession(string clientcode, string clienttypecode, string clientip, string clientmac, string clientSessionAppKey, ref decimal?clientSessionId, string clientSessionUserDomainName, string clientSessionClientVersion, string clientSessionServiceId, string clientOSVersion) { var clientCodeParam = new TransmitterParam { Name = "clientcode", Type = typeof(string), Value = clientcode, IsOut = false }; var clienttypecodeParam = new TransmitterParam { Name = "clienttypecode", Type = typeof(string), Value = clienttypecode, IsOut = false }; var clientipParam = new TransmitterParam { Name = "clientip", Type = typeof(string), Value = clientip, IsOut = false }; var clientmacParam = new TransmitterParam { Name = "clientmac", Type = typeof(string), Value = clientmac, IsOut = false }; var clientSessionAppKeyParam = new TransmitterParam { Name = "clientSessionAppKey", Type = typeof(string), Value = clientSessionAppKey, IsOut = false }; var clientSessionIdParam = new TransmitterParam { Name = "clientSessionId", Type = typeof(decimal?), Value = clientSessionId, IsOut = true }; var clientSessionUserDomainNameParam = new TransmitterParam { Name = "clientSessionUserDomainName", Type = typeof(string), Value = clientSessionUserDomainName, IsOut = false }; var clientSessionClientVersionParam = new TransmitterParam { Name = "clientSessionClientVersion", Type = typeof(string), Value = clientSessionClientVersion, IsOut = false }; var clientSessionServiceIdParam = new TransmitterParam { Name = "clientSessionServiceId", Type = typeof(string), Value = clientSessionServiceId, IsOut = false }; var clientOSVersionParam = new TransmitterParam { Name = "clientOSVersion", Type = typeof(string), Value = clientOSVersion, IsOut = false }; var telegram = new RepoQueryTelegramWrapper(typeof(ClientSession).Name, "StartSession", new[] { clientCodeParam, clienttypecodeParam, clientipParam, clientmacParam, clientSessionAppKeyParam, clientSessionIdParam, clientSessionUserDomainNameParam, clientSessionClientVersionParam, clientSessionServiceIdParam, clientOSVersionParam }); ProcessTelegramm(telegram); clientSessionId = clientSessionIdParam.Value == null ? (decimal?)null : (decimal)SerializationHelper.ConvertToTrueType(clientSessionIdParam.Value, typeof(decimal)); }
private bool CheckDefaultValue() { if (!string.IsNullOrEmpty(Source.REPORTFILTERDEFAULTVALUE) && Source.REPORTFILTERDATATYPE != null) { Type dataType; using (var sysObjectManager = IoC.Instance.Resolve <ISysObjectManager>()) dataType = sysObjectManager.GetTypeBySysObjectId((int)Source.REPORTFILTERDATATYPE); try { var tmp = SerializationHelper.ConvertToTrueType(Source.REPORTFILTERDEFAULTVALUE, dataType); Source.REPORTFILTERDEFAULTVALUE = tmp.To <String>(); } catch { GetViewService().ShowDialog(StringResources.Error, string.Format("Указанное значение '{0}' не соответствует типу '{1}'", Source.REPORTFILTERDEFAULTVALUE, dataType), MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.Yes); return(false); } } return(true); }
public static T ConvertTo <T>(this object value) { if (value == null) { return(default(T)); } var type = typeof(T); if (type == typeof(DateTime?) && value.To <string>() == string.Empty) { return(default(T)); } var result = SerializationHelper.ConvertToTrueType(value, type); if (result == null && !type.IsNullable()) { return(default(T)); } return((T)result); }
private void ValidatePMConfig(string propertyName) { if (Attributes != null) { var attrs = Attributes.Where(i => i.ObjectName_r.Equals(propertyName)); Errors.Remove(propertyName); foreach (var a in attrs) { switch (a.MethodCode_r) { case "MUST_SET": if (ValidatableObject.Members[a.ObjectName_r] == null) { Errors.Add(a.ObjectName_r, new ValidateError("Поле должно быть заполнено (MUST_SET)", ValidateErrorLevel.Critical)); } break; case "MUST_COMPARE": var prevValue = ValidatableObject.GetInitialValue(a.ObjectName_r); if (prevValue != null) { var objType = prevValue.GetType(); var newValue = SerializationHelper.ConvertToTrueType( ValidatableObject.Members[a.ObjectName_r], objType); if (!Equals(newValue, prevValue)) { Errors.Add(a.ObjectName_r, new ValidateError("Неверно указано значение (MUST_COMPARE)", ValidateErrorLevel.Critical)); } } break; case "RANGE_WEEK": case "RANGE_DAY": case "RANGE_MONTH": case "RANGE_YEAR": var rangeValue = ValidatableObject.GetInitialValue(a.ObjectName_r); if (rangeValue != null) { if (!RangeDate((DateTime)rangeValue, (DateTime)SerializationHelper.ConvertToTrueType(ValidatableObject.Members[a.ObjectName_r], typeof(DateTime)), a.MethodCode_r)) { Errors.Add(a.ObjectName_r, new ValidateError( string.Format("Указан не допустимый диапазон ({0})", a.MethodCode_r), ValidateErrorLevel.Critical)); } } break; case MinMaxValidateMethodCode: if (a.ValidatorHandle != null) { var validError = a.ValidatorHandle(ValidatableObject.Members[a.ObjectName_r]); if (!string.IsNullOrEmpty(validError)) { Errors.Add(a.ObjectName_r, new ValidateError(validError, ValidateErrorLevel.Critical)); } } break; } } } }
private void FillArtToKit(KitWrapper kit, IUnitOfWork uow) { var arts = ArtLoadHelper.FindArtByArtName(kit.MANDANTID, kit.ARTNAME, GetModeEnum.Full, uow); using (var artMgr = IoC.Instance.Resolve <IBaseManager <Art> >()) { if (uow != null) { artMgr.SetUnitOfWork(uow); } // если его нет, то создаем артикул и SKU if (!arts.Any()) { if (kit.KITINSART == 1) { var art = new Art { ArtName = kit.ARTNAME, ArtDesc = kit.ARTDESC, ArtCommercDay = 0, ArtPickOrder = 1, ARTABCD = kit.ARTABCD, MANDANTID = kit.MANDANTID }; SetXmlIgnore(art, false); artMgr.Insert(ref art); kit.ARTCODE_R = art.ArtCode; Log.DebugFormat("Создан артикул комплекта '{0}'", kit.ARTCODE_R); } else { throw new IntegrationLogicalException("Не существует артикул комплекта = '{0}'", kit.ARTNAME); } // есть ли тип ЕИ var mtFilter = string.Format("{0} = '{1}'", SourceNameHelper.Instance.GetPropertySourceName(typeof(MeasureType), MeasureType.MeasureTypeNamePropertyName), kit.KITMEASURE); var mtMgr = IoC.Instance.Resolve <IBaseManager <MeasureType> >(); mtMgr.SetUnitOfWork(uow); var measureTypes = mtMgr.GetFiltered(mtFilter).ToArray(); string measureTypeCode; if (!measureTypes.Any()) { var measureType = new MeasureType { MeasureTypeCode = "U" + kit.KITMEASURE, MeasureTypeName = kit.KITMEASURE }; SetXmlIgnore(measureType, false); mtMgr.Insert(ref measureType); measureTypeCode = measureType.MeasureTypeCode; Log.DebugFormat("Создан тип ЕИ (ID = {0})", measureTypeCode); } else { measureTypeCode = measureTypes[0].MeasureTypeCode; Log.DebugFormat("Найден тип ЕИ (ID = {0})", measureTypeCode); } // есть ли ЕИ var measureFilter = string.Format("{0} = '{1}'", SourceNameHelper.Instance.GetPropertySourceName(typeof(Measure), Measure.MeasureNamePropertyName), kit.KITMEASURE); var measureMgr = IoC.Instance.Resolve <IBaseManager <Measure> >(); measureMgr.SetUnitOfWork(uow); var measures = measureMgr.GetFiltered(measureFilter).ToArray(); string measureCode; if (!measures.Any()) { var measure = new Measure { MeasureTypeCodeR = measureTypeCode, MeasureFactor = 1, MeasureName = kit.KITMEASURE, MeasureCode = kit.KITMEASURE }; SetXmlIgnore(measure, false); measureMgr.Insert(ref measure); measureCode = measure.MeasureCode; Log.DebugFormat("Создана ЕИ (ID = {0})", measureCode); } else { measureCode = measures[0].MeasureCode; Log.DebugFormat("Найдена ЕИ (ID = {0})", measureCode); } var skuMgr = IoC.Instance.Resolve <IBaseManager <SKU> >(); skuMgr.SetUnitOfWork(uow); var sku = new SKU { ArtCode = kit.ARTCODE_R, MeasureCode = measureCode, SKUCount = (double)SerializationHelper.ConvertToTrueType(kit.KITCOUNT, typeof(double)), SKUPrimary = true, SKUName = kit.ARTNAME + "_" + kit.KITMEASURE + "_1" }; SetXmlIgnore(sku, false); skuMgr.Insert(ref sku); Log.DebugFormat("Создана SKU шапки комплекта (ID = {0})", sku.SKUID); } else { var firstOrDefault = arts.FirstOrDefault(); if (firstOrDefault != null) { kit.ARTCODE_R = firstOrDefault.ArtCode; } } } }
public virtual T Get <T>(string key) { return((T)SerializationHelper.ConvertToTrueType(this[key], typeof(T))); }
public override void Initialize(IDictionary parameters) { base.Initialize(parameters); IoC.Instance.Register <IViewService, PackingViewService>(); Assert.IsTrue(parameters.Contains(PackingPlaceParameterName)); _packingPlace = (string)SerializationHelper.ConvertToTrueType(parameters[PackingPlaceParameterName], typeof(string)); Assert.IsNotNull(_packingPlace); Assert.IsTrue(parameters.Contains(PackingTeParameterName)); _packingTe = (string)SerializationHelper.ConvertToTrueType(parameters[PackingTeParameterName], typeof(string)); Assert.IsTrue(parameters.Contains(PackingCountParameterName)); _packingCount = (int)SerializationHelper.ConvertToTrueType(parameters[PackingCountParameterName], typeof(int)); BPWorkflowManager.SetObjectCachable(PackWorkflowCodes.WfPack); _model = new PackingViewModel(); // даем моделе время на инициализацию if (!new TaskFactory().StartNew(() => { while (_model.AvailableTE == null || _model.PackingProducts == null) { Thread.Sleep(1); } }).Wait(30000)) { throw new TimeoutException("Истекло время создания модели"); } if (!new TaskFactory().StartNew(() => { _model.AvailableTE.Clear(); _model.PackingProducts.Clear(); _model.CurrentPlaceCode = null; _model.CurrentPlaceCode = _packingPlace; while (_model.AvailableTE.Count == 0 || _model.PackingProducts.Count == 0) { Thread.Sleep(1); } }).Wait(30000)) { throw new TimeoutException("Не удалось обновить данные"); } _model.VisiblePackingProducts = _model.PackingProducts; var packTE = _model.AvailableTE.FirstOrDefault(i => i.GetKey <string>() == _packingTe); Assert.IsNotNull(packTE); _model.SelectedPack = packTE; _model.SetActivePackCommand.Execute(null); _model.SelectedPackingProducts.Clear(); _model.SelectedPackingProducts.Add(_model.PackingProducts.First()); var filters = FilterHelper.GetArrayFilterIn("barcodekey", _model.PackingProducts.Select(i => i.SKUID.ToString()).Distinct().Cast <object>(), " and barcode2entity = 'SKU'"); using (var mgr = IoC.Instance.Resolve <IBaseManager <Barcode> >()) _barcodes = mgr.GetFiltered(string.Join(";", filters), GetModeEnum.Partial).Select(j => j.BarcodeValue).ToArray(); }
protected override void Execute(NativeActivityContext context) { var iwb = Source.Get(context); if (iwb == null) { throw new NullReferenceException("Source"); } var vs = IoC.Instance.Resolve <IViewService>(); // проверим настройку параметров по манданту var cpvMgr = IoC.Instance.Resolve <ICustomParamManager>(); var cpValid = cpvMgr.GetCPByInstance("IWB", iwb.GetKey().ToString(), FilterHelper.GetAttrEntity <CustomParam>(CustomParam.CustomParamCodePropertyName)).ToArray(); var allow = cpValid.FirstOrDefault(i => i.GetKey().ToString().EqIgnoreCase("IWBStickerArtL1")) != null && cpValid.FirstOrDefault(i => i.GetKey().ToString().EqIgnoreCase("IWBStickerArtValueL2")) != null; if (!allow) { vs.ShowDialog(string.Format("Стикеровка по накладной '{0}'", iwb.GetKey()), string.Format("Для манданта '{0}' отсутствуют параметры стикеровки!", iwb.GetProperty(IWB.VMANDANTCODEPropertyName)), System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Information, System.Windows.MessageBoxResult.OK); Result.Set(context, -1); return; } // получаем информацию по товарам var stickerList = new List <IwbStickerCpv>(); cpValid = cpvMgr.GetCPByInstance("ART", iwb.GetKey().ToString(), FilterHelper.GetAttrEntity <CustomParam>(CustomParam.CustomParamCodePropertyName)).ToArray(); allow = cpValid.FirstOrDefault(i => i.GetKey().ToString().EqIgnoreCase("ARTStickerNeedL2")) != null; if (allow) { DataTable table; using (var mgr = IoC.Instance.Resolve <IBPProcessManager>()) table = mgr.ExecuteDataTable( string.Format( "select ARTCODE_R, SUM(QTYSKU) as QTY from vwinput inner join wmscustomparamvalue on vwinput.artcode_r=wmscustomparamvalue.cpvkey where wmscustomparamvalue.cpv2entity='ART' and wmscustomparamvalue.customparamcode_r='ARTStickerNeedL2' and wmscustomparamvalue.cpvvalue=1 and iwbid_r = {0} group by ARTCODE_R", iwb.GetKey())); var rows = table.Rows.Cast <DataRow>(); foreach (var r in rows) { decimal?cpvCode = null; var artCode = r["ARTCODE_R"].ToString(); decimal?stickerCount = null; var exist = iwb.CustomParamVal == null ? null : iwb.CustomParamVal.FirstOrDefault( i => i.CustomParamCode.EqIgnoreCase("IWBStickerArtL1") && i.CPVValue.EqIgnoreCase(artCode)); if (exist != null) { cpvCode = exist.GetKey <decimal>(); var child = iwb.CustomParamVal.FirstOrDefault( i => i.CPVParent == cpvCode && i.CustomParamCode.EqIgnoreCase("IWBStickerArtValueL2")); if (child != null) { stickerCount = (decimal)SerializationHelper.ConvertToTrueType(child.CPVValue, typeof(decimal)); } } var productCount = (decimal)SerializationHelper.ConvertToTrueType(r["QTY"], typeof(decimal)); stickerList.Add(new IwbStickerCpv(cpvCode, artCode, productCount, stickerCount)); } } if (iwb.CustomParamVal != null) { var parentIwb = iwb.CustomParamVal.ToArray() .Where(i => i.CPVParent == null && i.CustomParamCode.EqIgnoreCase("IWBStickerArtL1")); foreach (var parent in parentIwb) { var exist = stickerList.FirstOrDefault(i => i.ArtCode.EqIgnoreCase(parent.CPVValue)); if (exist == null) { decimal?cpvCode = parent.CPVID; var artCode = parent.CPVValue; decimal?stickerCount = null; var child = iwb.CustomParamVal.FirstOrDefault( i => i.CPVParent == parent.CPVID && i.CustomParamCode.EqIgnoreCase("IWBStickerArtValueL2")); if (child != null) { stickerCount = (decimal)SerializationHelper.ConvertToTrueType(child.CPVValue, typeof(decimal)); } stickerList.Add(new IwbStickerCpv(cpvCode, artCode, null, stickerCount)); } } } var obj = new IwbStikerViewModel(); obj.PanelCaption = string.Format("Стикеровка по накладной '{0}'", iwb.GetKey()); obj.AllowEditing = true; obj.Source = new ObservableCollection <IwbStickerCpv>(stickerList); var result = vs.ShowDialogWindow(obj, true, false, "50%", "50%"); // сохраняем if (!result.HasValue || !result.Value) { Result.Set(context, -1); } else { SaveStickerCpv(context, obj.Source); Result.Set(context, 0); } }
private static object NodeToValue(Node node, Type valueType) { //Передаем XmlDocument if (valueType == typeof(XmlDocument)) { if (node.Value == null) { return(null); } var doc = new XmlDocument(); doc.LoadXml(node.Value); return(doc); } // INFO: вынес отдельно от IXmlSerializable чтобы проверить приходит ли документ if (typeof(XmlDocument).IsAssignableFrom(valueType)) { if (node.Value == null) { return(null); } var doc = new XmlDocument(); doc.LoadXml(node.Value); return(XmlDocumentConverter.ConvertTo(valueType, doc)); } // сложный объект пусть сам себя разбирает if (typeof(IXmlSerializable).IsAssignableFrom(valueType)) { var doc = new XmlDocument(); if (node.Value != null) { doc.LoadXml(node.Value); } return(node.Value != null?XmlDocumentConverter.ConvertTo(valueType, doc) : null); } // если ожидаем коллекцию if (IsCollectionType(valueType)) { var itemType = valueType.GetGenericArguments()[0]; // создаем коллекцию var res = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(itemType)); foreach (var n in node.Nodes) { var internalValue = NodeToValue(n, itemType); res.Add(internalValue); } return(res); } if (valueType.IsNullable() && node.Value == null) { return(null); } var universalResult = SerializationHelper.ConvertToTrueType(node.Value, valueType); if (universalResult != null) { return(universalResult); } return(node.Value); }
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return(value == null ? null : SerializationHelper.ConvertToTrueType(value, typeof(string))); }
public static void Initialize() { // Добавляем стратегию валидации обязательности при создании WMSValidateAttribute.RegisterStrategy("requirement", context => { // если значение есть - нечего и проверять var isNull = IsNullValueCheck(context.Property.GetValue(context.Obj)); if (!isNull) { return(false); } // читаем параметры if (string.IsNullOrEmpty(context.Parameters)) { throw new DeveloperException("Ожидались параметры валидации, а их нет"); } var pCreate = context.Parameters.ToLower().Contains("create"); var pEdit = context.Parameters.ToLower().Contains("edit"); if (!pCreate && !pEdit) { throw new DeveloperException("Ошибка в параметрах валидации"); } if (pCreate && pEdit) { return(true); } // смотрим, может ли объекты сказать о себе (новый или редактируемый) var isNew = context.Obj as IIsNew; if (isNew == null) { throw new DeveloperException( "Ожидается, что объекты валидации обязательности должны поддерживать интерфейс IIsNew"); } if (pCreate && isNew.IsNew) { return(true); } if (pEdit && !isNew.IsNew) { return(true); } return(false); }); // Добавляем стратегию проверки наличия всех обязательных полей для globalparam WMSValidateAttribute.RegisterStrategy("gpv.requirement", context => { // вычитываем параметры для данного типа var mngGlobalParam = IoC.Instance.Resolve <IGlobalParamManager>(); var globalParData = mngGlobalParam.GetByEntity(context.Obj.GetType()); // отбираем обязательные var requireGlobalParData = globalParData.Where(p => p.GlobalParamMustSet).ToArray(); // обязательных нет - ошибки тоже нет if (requireGlobalParData.Length == 0) { return(false); } // получаем список введенных параметров var temp = context.Property.GetValue(context.Obj) as IList; var collect = temp?.Cast <GlobalParamValue>().ToArray(); // бежим по обязательным и смотрим ввели ли уже такие var errorList = string.Empty; foreach (var p in requireGlobalParData) { // если есть - идем дальше if (collect != null && collect.Any(i => i.GlobalParamCode_R.EqIgnoreCase(p.GlobalParamCode))) { continue; } errorList += string.Format("{0} ({1}){2}", p.GlobalParamName, p.GlobalParamCode, Environment.NewLine); } if (string.IsNullOrEmpty(errorList)) { return(false); } context.ErrorMessage += string.Format(":{0}{1}", Environment.NewLine, errorList); return(true); }); // Добавляем стратегию проверки максимального кол-ва параметров globalparamvalue WMSValidateAttribute.RegisterStrategy("gpv.maxcount", context => { var temp = context.Property.GetValue(context.Obj) as IList; var collect = temp == null ? null : temp.Cast <GlobalParamValue>().ToArray(); // коллекция пустая - превышать нечего if (collect == null || collect.Length == 0) { return(false); } // вычитываем параметры для данного типа var mngGlobalParam = IoC.Instance.Resolve <IGlobalParamManager>(); var globalParData = mngGlobalParam.GetByEntity(context.Obj.GetType()); var errorList = string.Empty; foreach (var p in globalParData) { var count = collect.Count(i => i.GlobalParamCode_R.EqIgnoreCase(p.GlobalParamCode)); if (count > p.GlobalParamCount) { errorList += string.Format("{0} ({1}){2}", p.GlobalParamName, p.GlobalParamCode, Environment.NewLine); } } if (string.IsNullOrEmpty(errorList)) { return(false); } context.ErrorMessage += string.Format(":{0}{1}", Environment.NewLine, errorList); return(true); }); // Добавляем стратегию проверки максимального кол-ва параметров customparamvalue WMSValidateAttribute.RegisterStrategy("cpv.maxcount", context => { var temp = context.Property.GetValue(context.Obj) as IList; var collect = temp == null ? null : temp.Cast <CustomParamValue>().ToArray(); // коллекция пустая - превышать нечего if (collect == null || collect.Length == 0) { return(false); } // вычитываем параметры для данного типа var mgrCustomParam = IoC.Instance.Resolve <ICustomParamManager>(); var customParData = mgrCustomParam.GetByEntity(context.Obj.GetType()); var errorList = string.Empty; foreach (var p in customParData) { var pk = p.GetKey().To <string>(); var count = collect.Count(i => i.CustomParamCode.EqIgnoreCase(pk)); if (count > p.CustomParamCount) { errorList += string.Format("{0} ({1}){2}", p.CustomParamName, pk, Environment.NewLine); } } if (errorList.Length == 0) { return(false); } context.ErrorMessage += string.Format(":{0}{1}", Environment.NewLine, errorList); return(true); }); // Добавляем стратегию проверки наличия всех обязательных полей для customparam WMSValidateAttribute.RegisterStrategy("cpv.requirement", context => { // вычитываем параметры для данного типа var mgrCustomParam = IoC.Instance.Resolve <ICustomParamManager>(); var obj = context.Obj as IHasParent; if (obj != null && string.IsNullOrEmpty(obj.SourceTypeName) && string.IsNullOrEmpty(obj.TargetTypeName)) { return(false); } var customParData = obj == null ? mgrCustomParam.GetByEntity(context.Obj.GetType()) : mgrCustomParam.GetByEntity(context.Obj.GetType(), obj.SourceTypeName, obj.TargetTypeName); // отбираем обязательные var requireCustomParData = customParData.Where(p => p.CustomParamMustHave).ToArray(); // обязательных нет - ошибки тоже нет if (requireCustomParData.Length == 0) { return(false); } var pCreate = context.Parameters.ToLower().Contains("create"); var pEdit = context.Parameters.ToLower().Contains("edit"); if (!pCreate && !pEdit) { throw new DeveloperException("Ошибка в параметрах валидации"); } // смотрим, может ли объекты сказать о себе (новый или редактируемый) var isNew = context.Obj as IIsNew; if (isNew == null) { throw new DeveloperException( "Ожидается, что объекты валидации обязательности должны поддерживать интерфейс IIsNew"); } if (isNew.IsNew && pEdit) { return(false); } if (!isNew.IsNew && pCreate) { return(false); } // получаем список введенных параметров var temp = context.Property.GetValue(context.Obj) as IList; var collect = temp == null ? null : temp.Cast <CustomParamValue>().ToArray(); // бежим по обязательным и смотрим ввели ли уже такие var errorList = string.Empty; foreach (var p in requireCustomParData) { var pk = p.GetKey().To <string>(); // если есть - идем дальше if (collect != null && collect.Any(i => i.CustomParamCode.EqIgnoreCase(pk))) { continue; } errorList += string.Format("{0} ({1}){2}", p.CustomParamName, pk, Environment.NewLine); } if (errorList.Length == 0) { return(false); } context.ErrorMessage += string.Format(":{0}{1}", Environment.NewLine, errorList); return(true); }); // Добавляем стратегию проверки минимального граничного значения WMSValidateAttribute.RegisterStrategy("range.min", context => { var value = context.Property.GetValue(context.Obj); if (value == null) { return(false); } var notNullType = context.Property.PropertyType.GetNonNullableType(); var rangeTypedValue = SerializationHelper.ConvertToTrueType(context.Value, notNullType); var comparable = rangeTypedValue as IComparable; if (comparable == null) { throw new DeveloperException("Type {0} is not implement IComparable", rangeTypedValue); } return(comparable.CompareTo(value) > 0); }); // Добавляем стратегию проверки максимального граничного значения WMSValidateAttribute.RegisterStrategy("range.max", context => { var value = context.Property.GetValue(context.Obj); if (value == null) { return(false); } var notNullType = context.Property.PropertyType.GetNonNullableType(); var rangeTypedValue = SerializationHelper.ConvertToTrueType(context.Value, notNullType); var comparable = rangeTypedValue as IComparable; if (comparable == null) { throw new DeveloperException("Type {0} is not implement IComparable", rangeTypedValue); } return(comparable.CompareTo(value) < 0); }); // Добавляем стратегию проверки наличия значения по умолчанию WMSValidateAttribute.RegisterStrategy(DefaultValueSetter.DefaultStrategyName, context => { var eo = context.Obj as EditableBusinessObject; // если объект не новый, то не надо валидировать if (eo != null && !eo.IsNew) { return(false); } var value = context.Property.GetValue(context.Obj); var errorList = string.Empty; if ((value == null) || (value is DateTime && value.Equals(DateTime.MinValue)) || (value is Guid && value.Equals(Guid.Empty)) || (value is string && string.IsNullOrEmpty((string)value))) { var obj = (BusinessObject)context.Obj; errorList += obj.GetPropertyDefaultValue(context.Property.Name) ?? "(пустое значение)"; } if (string.IsNullOrEmpty(errorList)) { return(false); } context.ErrorMessage += ": " + errorList; return(true); }); }