2016-04-04 2 views
1

Я хотел бы знать, есть ли способ в Разведчике сделать разные формы по разным ссылкам. Сейчас все формы открываются на одинаковых ссылках. Например, если приложение работает на http://localhost:1808/, то после открытия формы лица эта форма открыта в ссылке http://localhost:1808/person?id=300, например.Scout Eclipse Неоновый разный URL-адрес для разных страниц

Есть ли способ сделать это?

ответ

4

The Deep-Link функция доступна на выпуске/6.0.x отрасли и как это работает:

Вы можете передать параметр URL "DL" в сервлет Scout. Параметр «dl» содержит строку в этом формате: [имя обработчика] - [данные]. Пример: Форма -123456.

Для каждого шаблона глубокой связи, который вы хотите обработать в своем приложении Scout, вам необходимо зарегистрировать обработчик глубокой привязки, который реализует IDeepLinkHandler и обычно наследуется от AbstractDeepLinkHandler. В конструкторе вы указываете регулярное выражение, которое соответствует вашему шаблону глубокой привязки, и извлекает данные в виде группы регулярных выражений. В методе handleImpl вы реализуете все, что должно делать глубокая ссылка в модели Scout. Обработчик глубокой привязки будет автоматически зарегистрирован как (Scout) Bean.

Вот пример код, чтобы открыть форму Scout с глубокой ссылкой:

public class FormDeepLinkHandler extends AbstractDeepLinkHandler { 

    private static final String HANDLER_NAME = "form"; 

    public FormDeepLinkHandler() { 
    super(defaultPattern(HANDLER_NAME, "\\d+")); 
    } 

    @Override 
    public void handleImpl(Matcher matcher) throws DeepLinkException { 
    String formId = matcher.group(1); 
    IForm form = getFormById(formId); 
    form.start(); 
    } 

    private IForm getFormById(String formId) throws DeepLinkException { 
    if ("300".equals(formId)) { 
     return new ScoutInfoForm(); 
    } 
    // throw a DeepLinkException when resource requested by deep-link does not exist 
    throw new DeepLinkException("Form not found"); 
    } 

    public BrowserHistoryEntry createBrowserHistoryEntry(IForm form) { 
    return DeepLinkUriBuilder.createRelative() 
     .parameterInfo(form.getTitle()) 
     .parameterPath(toDeepLinkPath(getFormId(form))) 
     .createBrowserHistoryEntry(); 
    } 

    private String getFormId(IForm form) { 
    // TODO: return an ID for different forms, or you could use form.getFormId(); 
    return "300"; 
    } 

    @Override 
    public String getName() { 
    return HANDLER_NAME; 
    } 

} 

Дополнительный createBrowserHistoryEntry (IForm) создает запись, которая будет использоваться в истории браузера, что означает, что он будет изменять URL в адресной строке вашего браузера. Он также позволяет использовать кнопки истории назад/вперед в приложении Scout. Для этого вы могли бы сделать это в форме:

@Override 
    protected void execInitForm() { 
    BrowserHistoryEntry entry = BEANS.get(FormDeepLinkHandler.class).createBrowserHistoryEntry(this); 
    ClientSessionProvider.currentSession().getDesktop().setBrowserHistoryEntry(entry); 
    } 

С, что вы можете, наконец, начать свою форму, открыв URL:
http://foo.com/?dl=form-300&i=Title-of-the-form

Примечание: параметр «я» не является обязательным. Вы можете использовать его, чтобы сделать URL более понятным для людей или как подсказку для поисковых сканеров.

0

Ключевое слово, которое вы ищете, это «Глубокие ссылки». Я боюсь, что у нас не так много документации, потому что эта функция все еще находится в разработке. Первая версия была добавлена ​​с Neon.M6.

Цель состоит в том, чтобы иметь возможность прыгать где-то в приложении с определенным URL-адресом.

Эта функция позволяет также работать с кнопками «Назад/Вперед» из веб-браузера (с некоторыми ограничениями).

У нас есть один пример реализации в нашей Widgets демонстрационного приложения:

http://<URL to the APP>/?deeplink=widget-svgfield 

Примечание: Имя параметров, вероятно, изменится в будущем от dl и i вместо deeplink и info.

Смежные вопросы