Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Сигнатура:

function (openSelectWindowOptions, hostUID, destination)

Параметры:

Название

Описание

openSelectWindowOptions

Экземпляр класса OpenSelectWindowOptions (или объект с аналогичной структурой), определяющий действие выбора.

hostUID

Уникальный идентификатор вкладки текущего пользовательского действия.

Генерируется бекэндом, передаётся в пользовательское действие в виде одноимённого параметра QueryString.

destination

Окно, содержащее основное приложение бекэнда.

Обычно нужно передавать window. parent.

Класс OpenSelectWindowOptions

Класс OpenSelectWindowOptions имеет следующую структуру:

Название

Тип

Описание

selectActionCode

String

Код вызываемого действия выбора.

entityTypeCode

String

Код типа сущности, к которой относится вызываемое действие.

parentEntityId

Number

Идентификатор родительской сущности.

isMultiple

Boolean

Указатель, является ли действие выбора множественным

Значение по умолчанию – false.

selectedEntityIDs

Array

ID сущностей, выбранные заранее.

Элементы массива имеют тип Number.

selectWindowUID

String

Уникальный идентификатор окна выбора.

Задаётся веб-приложением.

callerCallback

Function

Ссылка на метод-обработчик в веб-приложении.

Обычно определяется через BackendEventObserver.

Метод BackendEventObserver

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

Конструктор имеет следующую сигнатуру:

НЕ нашли? Не то? Что вы ищете?

function (callbackProcName, callback)

Регистрирует callback c именем callbackProcName в библиотеке PMRPC.

Метод callback должен иметь следующую сигнатуру:

function (eventType, args)

Параметры:

Название

Описание

eventType

Причина вызова callback.

Принимает одно из возможных значений, определённых в BackendEventObserver. EventType:

    1 (вызванный хост был отсоединён);

В этом случае в args. reason передаётся причина отсоединения (одно из двух значений, определённых в BackendEventObserver. HostUnbindingReason).

    2 (вызванное действие было выполнено); 3 (сущности были выбраны); 4 (окно выбора было закрыто).

args

Передаются дополнительные данные, специфичные для каждого действия.

Например, при выборе сущностей передаются:

    selectWindowUID – идентификатор окна, в котором произошёл выбор; selectedEntityIDs – массив идентификаторов выбранных сущностей.

Использование объектов QP

Внимание: данный подход является устаревшим.

В шаблон полностью вносится вёрстка для страницы (всё содержимое в тэге <html>).

Осуществляется разбиение вёрстки на блоки. Блоки оформляются в виде объектов шаблона и заменяются в теле шаблона вызовами требуемых объектов. Подобная декомпозиция применяется к созданным объектам шаблона до нужного уровня. Нужный уровень определяется наличием динамического содержимого или необходимостью переопределения. Если объект имеет динамическое содержимое, то создаётся объект типа «Publishing Container», связанный с контентом для данного содержимого. При создании других страниц, основанных на том же шаблоне, можно как создавать новые объекты страницы, так и создавать их, переопределяя требуемые объекты шаблона.
Пример создания Системы Постановка задачи. Определение требований

В примере рассматривается создание для веб-сайта одной страницы, содержащей одну зону для размещения виджета.

Для создания веб-сайта следует использовать QP и Виджетную платформу.

Дополнительная разметка для страницы не требуется.

Разработка выполняется в Visual Studio.


Проектирование Определение групп пользователей

Доступ к странице не ограничивается по группам пользователей. Таким образом, не потребуется выполнения работ с пользователями и группами пользователей для веб-сайта.

Проектирование структуры данных

Для выполнения задачи не понадобится разработка дополнительных виджетов.

В бекэнде понадобится создать статьи в контентах «ItemDefinition» и «AbstractItem», также сгенерировать классы LINQ to SQL.

Проектирование ГПИ

Внимание: для использования на странице ГПИ Виджетной платформы в разметку следует добавить код для вызова ГПИ.

Для страницы достаточно минимально необходимой разметки, содержащей одну зону для размещения виджета.


Реализация Подготовка структуры данных

Примечание: общие сведения о процедуре создания страницы приведены в разделе Процедура создания и добавления нового типа страницы в Систему.

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

В контенте «ItemDefinition» создана статья со следующим содержимым:

Название поля

Значение поля

Название (Title)

Стартовая страница

Идентификатор (Name)

start_page

Description

Корневая страница

Страница (IsPage)

Флаг установлен

Контент (PreferredContentId)

0 (контент-расширение не требуется для решения задачи)

FullName (FriendlyDescription)

Значение не задано (не требуется для решения задачи)

Категория (CategoryName)

IconUrl


После создания статью следует опубликовать.

Создание экземпляра страницы требуемого типа

В контенте «AbstractItem» создана статья, для которой в качестве значения поля Тип страницы/виджета (Discriminator) задана ранее созданная статья «Стартовая страница».

После создания статью следует опубликовать.

Примечание: создание статьи можно осуществить как с помощью ГПИ QP, так и ГПИ Виджетной платформы (пользовательское действие «Manage pages»).

Подготовка данных в QP для разработки в Visual Studio

Для сайта, в котором размещены статьи, сгенерированы требуемые для разработки данные (классы LINQ to SQL и/или сопоставление для Entity Framework). Полученные файлы скопированы в решение в Visual Studio, в проекте из которого далее должно быть создано веб-приложение.

Разработка кода веб-приложения

Для данной задачи создание модели не требуется.

Примечание: файл с кодом модели требуется размещать в проекте в директории Models.

Файл с кодом представления требуется размещать в проекте в директории Views. Для страницы создана вложенная директория StartPage, в ней размещён файл Index. cshtml со следующим кодом:

@{

  ViewBag. Title = Model. Title;

}

<div class="content">

  @Html. Raw(Model. Text)

</div>

Файл с кодом контроллера требуется размещать в проекте в директории Controllers. Создан файл StartPageController. cs со следующим кодом:

using System;

using System. Web. Mvc;

using QA. Core. Engine;

using QA. Core. Engine. Web. Mvc;

using System. Threading. Tasks;

using Main. PageModel. Pages;

namespace Main. WebUi. Controllers

{

  [Controls(typeof(Main. PageModel. Pages. StartPage))]

  public partial class StartPageController : ContentController<Main. PageModel. Pages. StartPage>

  {

  [NonAction]

  public override ActionResult Index()

  {

  throw new InvalidOperationException();

  }

  public async Task<ActionResult> Index(string id)

  {

  await Task. Yield();

  var mode = CurrentItem. Mode;

  if (mode == StartPageMode. Content)

  {

  return View(CurrentItem);

  }

  else

  {

  // в этом режиме стартовая страница должна наследовать функциональность страницы-перенаправления

  throw new NotImplementedException("The mode Redirect is not implemented yet.");

  }

  }

  }

}

Создание ГПИ

Файл с кодом разметки требуется размещать в проекте в директории Views. Создана вложенная директория Shared, в ней размещён файл _Layout. cshtml со следующим кодом:

@using QA. Engine. Extensions. Html

@using QA. Infrastructure. Web. Mvc. Extensions

@{

  var zoneState = ZoneExtensions. GetZoneState(Context);

}

<!DOCTYPE html>

<html>

<head>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  <title>@ViewBag. Title</title>

  @Scripts. Render(BundleConfig. JQuery)

  @*это нужно только для onscreen*@

  @if (zoneState!= ZoneState. Disabled)

  {

  @Styles. Render(BundleConfig. JQueryUIStyles)

  @Scripts. Render(BundleConfig. JQueryUI)

  }

  @RenderSection("headScripts", required: false)

</head>

<body>

  @{Html. ControlPanel().Render();}

  @*скрипты для панели, скрипты для Onscreen*@

  @if (zoneState!= ZoneState. Disabled)

  {

  @Scripts. Render(BundleConfig. OnScreen);

  @Styles. Render(BundleConfig. OnScreenCSS);

  <script type="text/javascript">

  // workaroud

  var ContentIdToEdit = 537;

  </script>

  }

  <div class="g-page-wrapper">

  <div class="footer__to-bottom-wrap">

  <div class="footer__to-bottom-content">

                <div class="b-wrapper">

  <H2>@ViewBag. Title</H2>

  @{ Html. WidgetZone("ZoneName").Render(); }

  @RenderBody()

  </div>

  </div>

  </div>

  </div>

  @Scripts. Render("~/bundles/bootstrap")

  @Scripts. Render(BundleConfig. QAScripts)

  @RenderSection("scripts", required: false)

</body>

</html>

Размещение виджета

В бекэнде с использованием ПУ виджетной платформы (пользовательское действие «Manage widgets») на страницу добавлен виджет типа «HTML-виджет» и задано его содержимое.

В результате при обращении к странице через веб-браузер выводится содержимое, заданное при добавлении виджета на страницу.

Приложение А

Структура БД QP8

АРТ»

Программный продукт «QP8.Framework»

Руководство разработчика

02.02.2018

Версия 0.9.7

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36