Механизм взаимодействия

Можно посмотреть в статье Межформенное взаимодействие в Web-приложениях.

Создание страницы

Для создания LookUp-страницы необходимо:

  1. Создать новую web-страницу.
  2. Добавить на неё WebObjectListView с ID = "LookUpFormWOLV".
  3. При загрузке формы
    • Принять передаваемые параметры.
    • Настроить WOLV
    • Подключить скрипты
  4. Настроить свойство LookUpFormURL у LookUp’a.

Передаваемые параметры

На LookUp-страницу передается ряд параметров для настройки WOLV’a и страницы:

  • ViewName - имя представления для WOLV
  • typeName - наименование типа данных, отображаемого в WOLV
  • connStrName - строка подключения к базе (опционально)
  • nameValueControl - параметры лукапа
  • PK - PrimaryKey выбранного мастера (если таковой имеется)
  • FormCaption - заголовок страницы (опционально)
  • csdName - наименование Column Sort Definition - определения сортировки WOLV, которая хранится в сессии
  • editPage - адрес страницы редактирования объектов WOLV
  • countOnPage - количество объектов на одной странице WOLV
  • LFName - наименование Limit Function для ограничения выгрузки данных WOLV. Limit Functon хранится в сессии.

Настройка WOLV

Необходимо перебросить значения, переданные в качестве параметров, а также провести некоторую дополнительную настройку:

LookUpFormWOLV.View = Information.GetView(Request["viewName"], Type.GetType(Request["typeName"]));
LookUpFormWOLV.LookUp = true;
LookUpFormWOLV.LookUpParam = Request["nameValueControl"];
LookUpFormWOLV.ConnStrinName = Request["connStrName"];
LookUpFormWOLV.Operations.Edit = false;
LookUpFormWOLV.Operations.Delete = false;
LookUpFormWOLV.Operations.New = false;
LookUpFormWOLV.EditPage = Request["editPage"];
LookUpFormWOLV.Operations.ShowMarks = false; 

var applyer = new WolvSettApplyer();
applyer.SettingsApply(LookUpFormWOLV);

Также необходимо проверить наличие необязательных параметров и применить их:

PrimaryKey:

if (!string.IsNullOrEmpty(Request["PK"]))
            {
                LookUpFormWOLV.SetInitialSearch("__PrimaryKey", Request["PK"]);
            }

ColumnSortDef:

if (!string.IsNullOrEmpty(Request["csdName"]))
            {
                var columnSortDef = (ColumnsSortDef[])HttpContext.Current.Session[Request["csdName"]];
                LookUpFormWOLV.InitialColumnsSort = columnSortDef;
            }

Ну и конечно же LimitFunction:

string lfName = HttpContext.Current.Request["LFName"];
if (!string.IsNullOrEmpty(lfName))
Function lf1 = LimitFunctionsHolder.LoadLimitFunction(lfName);
LookUpFormWOLV.LimitFunction = LookUpFormWOLV.LimitFunction != null
              ? FunctionBuilder.BuildAnd(LookUpFormWOLV.LimitFunction, lf1)
              : lf1;

Подключение скриптов

Для функционирования WOLV необходимо подключить следующие скрипты:

ResourcesPaths.Add("Scripts.ListView.js");
ContextHelper.ПодключитьВнешнийФайл("/shared/script/jquery-1.7.2.min.js");
ContextHelper.ПодключитьВнешнийФайл("/shared/script/jquery-ui-1.8.17.min.js");
ContextHelper.ПодключитьВнешнийФайл("/shared/script/jquery.color.js");
ContextHelper.ПодключитьВнешнийФайл("/shared/script/jquery.tooltip.js");

Полный код метода OnLoad

protected override void OnLoad(EventArgs e)
        {
            ContextHelper.ПодключитьВнешнийФайл("/shared/script/jquery-1.7.2.min.js");
            ContextHelper.ПодключитьВнешнийФайл("/shared/script/jquery-ui-1.8.17.min.js");
            ContextHelper.ПодключитьВнешнийФайл("/shared/script/jquery.color.js");
            ContextHelper.ПодключитьВнешнийФайл("/shared/script/jquery.tooltip.js");

            string viewName = Request["viewName"];
            string typeName = Request["typeName"];
            string connStrName = Request["connStrName"];
            string nameValueControl = Request["nameValueControl"];
            string selectPK = Request["PK"];
            string formCaption = Request["FormCaption"];
            string columnSortDefName = Request["csdName"];
            string editPage = Request["editPage"];
            string countOnPage = Request["CountOnPage"];

            Title = formCaption;
            LookUpFormCaption.InnerText = formCaption;

            if (viewName #  null || typeName  null || Type.GetType(typeName) == null)
                return;

            string lfName = HttpContext.Current.Request["LFName"];
            if (!String.IsNullOrEmpty(lfName))
            {
                try
                {
                    Function lf1 = LimitFunctionsHolder.LoadLimitFunction(lfName);
                    LookUpFormWOLV.LimitFunction = LookUpFormWOLV.LimitFunction != null
                                                       ? FunctionBuilder.BuildAnd(LookUpFormWOLV.LimitFunction, lf1)
                                                       : lf1;
                }
                catch (LimitFunctionNotFoundException)
                {
                    WebMessageBox.Show(
                        "Произошла ошибка при получении данных." + "\\n"
                        + "Возможно, прошло много времени с момента последних действий." + "\\n"
                        + "Обновите страницу, с которой была выполнена операция выбора значений.");

                    LookUpFormWOLV.SkipDataLoad = true;
                }
                catch (Exception ex)
                {
                    LogService.Log.Error("LookUpForm_PageLoad", ex);
                }
            }

            if (!string.IsNullOrEmpty(columnSortDefName))
            {
                var columnSortDef = (ColumnsSortDef[])HttpContext.Current.Session[columnSortDefName];
                LookUpFormWOLV.InitialColumnsSort = columnSortDef;
            }

            if (!String.IsNullOrEmpty(selectPK))
            {
                LookUpFormWOLV.SetInitialSearch("__PrimaryKey", selectPK);
            }

            LookUpFormWOLV.View = Information.GetView(viewName, Type.GetType(typeName));
            LookUpFormWOLV.LookUp = true;
            LookUpFormWOLV.LookUpParam = nameValueControl;
            LookUpFormWOLV.ConnStrinName = connStrName;
            LookUpFormWOLV.Operations.Edit = false;
            LookUpFormWOLV.Operations.Delete = false;
            LookUpFormWOLV.Operations.New = false;
            LookUpFormWOLV.EditPage = editPage;
            LookUpFormWOLV.Operations.ShowMarks = false;

            if (!IsPostBack)
            {
                int intCountOnPage;
                if (int.TryParse(countOnPage, out intCountOnPage))
                {
                    LookUpFormWOLV.ResultsPerPageProperty = intCountOnPage;
                }
            }

            var applyer = new WolvSettApplyer();
            applyer.SettingsApply(LookUpFormWOLV);

            base.OnLoad(e);
        }

Передача параметров на LookUp-форму

Передача параметров на LookUp-форму описана в статье.