コード例 #1
0
        /// <summary>
        ///     checks if Benachrichtigung <paramref name="b" /> has an entry with key <paramref name="keyName" /> in
        ///     <see cref="BO4E.BO.Benachrichtigung.Infos" /> which fulfills a predicate
        /// </summary>
        /// <typeparam name="T">expected type of the info property</typeparam>
        /// <param name="b">Benachrichtigung object</param>
        /// <param name="keyName">key name of the info property</param>
        /// <param name="predicate"></param>
        /// <param name="passByDefault">defines default behaviour, e.g. if no such key is present</param>
        /// <param name="typeConverter">allows to provide an explicit type converter</param>
        /// <returns>
        ///     true if there's an info object with given key <paramref name="keyName" /> of type <typeparamref name="T" />
        ///     fulfilling <paramref name="predicate" /> or there's no such property but <paramref name="passByDefault" /> is true
        /// </returns>
        public static bool Has <T>(this BO.Benachrichtigung b, string keyName, Predicate <T> predicate,
                                   bool passByDefault = true, TypeConverter typeConverter = null) where T : IComparable
        {
            if (!b.Has(keyName))
            {
                return(passByDefault);
            }
            foreach (var info in b.Infos.Where(gssi => gssi.KeyColumn == keyName))
            {
                try
                {
                    if (typeConverter == null)
                    {
                        typeConverter = TypeDescriptor.GetConverter(typeof(T));
                    }

                    {
                        var value = (T)typeConverter.ConvertFromString(info.Value);
                        return(predicate(value));
                    }
                }
                catch (NotSupportedException)
                {
                }
            }

            return(false);
        }
コード例 #2
0
 /// <summary>
 ///     check if a specific info exists
 /// </summary>
 /// <param name="b">Benachrichtigung</param>
 /// <param name="key">key to be checked</param>
 /// <returns>true if key is in <see cref="BO4E.BO.Benachrichtigung.Infos" /></returns>
 public static bool Has(this BO.Benachrichtigung b, string key)
 {
     if (b.Infos == null || b.Infos.Count == 0)
     {
         return(false);
     }
     return(b.Infos.Any(gssi => gssi.KeyColumn == key));
 }
コード例 #3
0
 /// <summary>
 ///     checks if <see cref="BO4E.BO.Benachrichtigung.Infos" /> contains a key value pair
 /// </summary>
 /// <param name="b"></param>
 /// <param name="key"></param>
 /// <param name="value"></param>
 /// <returns></returns>
 public static bool Has(this BO.Benachrichtigung b, string key, string value)
 {
     return(Has(b, new GenericStringStringInfo
     {
         KeyColumn = key,
         Value = value
     }));
 }
コード例 #4
0
 /// <summary>
 ///     checks if <paramref name="b" /> contains a key value pair specified in <paramref name="gssi" /> in
 ///     <see cref="BO4E.BO.Benachrichtigung.Infos" />
 /// </summary>
 /// <param name="b"></param>
 /// <param name="gssi"></param>
 /// <returns></returns>
 public static bool Has(this BO.Benachrichtigung b, GenericStringStringInfo gssi)
 {
     if (b.Infos == null || b.Infos.Count == 0)
     {
         return(false);
     }
     // ToDo für Hamid: Bitte prüfen, warum Contains false zurückliefert.
     return(b.Infos.Any(m => m.KeyColumn == gssi.KeyColumn && m.Value == gssi.Value));
 }
コード例 #5
0
        /// <summary>
        ///     moves key value pairs from <see cref="BO4E.BO.Benachrichtigung.Infos" /> to
        ///     <see cref="BO4E.BO.BusinessObject.UserProperties" /> for more convenient handling.
        /// </summary>
        /// <param name="b">Benachrichtigung</param>
        /// <param name="overwriteExistingKeys">set true to overwrite userProperties with same key</param>
        // ToDo: make method generic MoveInfosTouserProperties<boT>(...)
        public static void MoveInfosToUserProperties(this BO.Benachrichtigung b, bool overwriteExistingKeys = false)
        {
            if (b.Infos != null && b.Infos.Count > 0)
            {
                if (b.UserProperties == null)
                {
                    b.UserProperties = new Dictionary <string, object>();
                }
                foreach (var info in b.Infos)
                {
                    if (b.UserProperties.ContainsKey(info.KeyColumn) && overwriteExistingKeys)
                    {
                        b.UserProperties.Remove(info.KeyColumn);
                    }
                    b.UserProperties.Add(info.KeyColumn,
                                         info.Value); // might throw exception if key exists and !overwriteExistingKeys. That's ok.
                }

                b.Infos = null; // set to null after all elements have been moved
            }
        }