/// <summary> /// Изменяем урл приводя его к урлу родительского журнала. /// </summary> /// <param name="urlBuilder"></param> /// <param name="menuItem"></param> private static void MoveReferenceToParent(MainPageUrlBuilder urlBuilder, BaseMenuItem menuItem, BaseMenuItem parentItem) { if (string.IsNullOrEmpty(menuItem.ReferenceName)) { return; } var keys = urlBuilder.QueryParameters.Keys.Where(r => r.EndsWith(".id")).ToList(); if (keys.Count == 0) { return; } var newValues = new Dictionary <string, string>(); foreach (var key in keys) { if (key == menuItem.ReferenceName + ".id") { var value = urlBuilder.QueryParameters[key]; urlBuilder.QueryParameters.Remove(key); urlBuilder.QueryParameters["ref" + parentItem.TableName] = value; } else if (key.StartsWith(menuItem.ReferenceName)) { var value = urlBuilder.QueryParameters[key]; urlBuilder.QueryParameters.Remove(key); var newKey = key.Substring(menuItem.ReferenceName.Length + 1); newValues[newKey] = value; } else { urlBuilder.QueryParameters.Remove(key); } foreach (var newValue in newValues) { urlBuilder.QueryParameters[newValue.Key] = newValue.Value; } } }
/// <summary> /// Изменяем урл приводя его к урлу дочернего журнала. /// </summary> /// <param name="menuItem"></param> /// <param name="parentMenuItem"></param> /// <param name="url"></param> private static void MoveReferenceToChilds(BaseMenuItem menuItem, BaseMenuItem parentMenuItem, MainPageUrlBuilder url) { if (string.IsNullOrEmpty(menuItem.ReferenceName)) { return; } var keys = url.QueryParameters.Keys.Where(r => r.EndsWith(".id")).ToList(); var refKey = "ref" + parentMenuItem.TableName; if (!parentMenuItem._isCurrentTable && menuItem.Menu.BaseNavigatorControl.BaseNavigatorValues.ContainsKey(parentMenuItem.TableType) && menuItem.Menu.BaseNavigatorControl.BaseNavigatorValues[parentMenuItem.TableType] != null) { //проставление референса по родительской таблице, если она выбрана //смотрим в навигаторе потому как навигатор хранит выбранные записи по референсам (в урле хранится лишнее) var value = menuItem.Menu.BaseNavigatorControl.BaseNavigatorValues[parentMenuItem.TableType].ToString(); url.QueryParameters[refKey] = value; url.QueryParameters[menuItem.ReferenceName + ".id"] = value; } if (keys.Count == 0 && !parentMenuItem._isCurrentTable) { return; } foreach (var key in keys) { var value = url.QueryParameters[key]; url.QueryParameters.Remove(key); url.QueryParameters[menuItem.ReferenceName + "." + key] = value; } //проставляем референс по выбранной записи //смотрим в этой коллекции потому как в текущем журнале изменяется выбранная в урле if (parentMenuItem._isCurrentTable && url.QueryParameters.ContainsKey(refKey)) { var value = url.QueryParameters[refKey]; url.QueryParameters[menuItem.ReferenceName + ".id"] = value; } }