код разрешения documentId не получает исполняемые XPages - PullRequest
3 голосов
/ 08 марта 2020

В моем XPage мне нужно установить источник данных (документ Domino)

Я пытаюсь сделать это следующим образом:

<xp:this.data>
    <xp:dominoDocument var="requestDocument" action="openDocument" databaseName="#{javascript:  print('db ok'); return database.getFilePath();}"
        documentId="#{javascript:
        print('heloooo');
           var conclusion = database.getDocumentByUNID(doc_source.getDocument().getParentDocumentUNID());
           var oConclusion = new OsnovaUI_document(conclusion);
           var requestDoc = oConclusion.getMainDocument();

           print('docID: ' + requestDoc.getUniversalID());

           return requestDoc.getUniversalID();
           }">

    </xp:dominoDocument>
</xp:this.data>

Я заметил, что этот раздел кода в documentId не выполняется. Совсем. Вот почему я положил туда heloooo. Тем не менее, databaseName работает как ожидалось. В консоли я всегда вижу

09.03.2020 00:52:11   HTTP JVM: db ok

но не heloooo: (

Что я делаю не так? Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 09 марта 2020

Наиболее вероятная причина: ignoreRequestParams не установлен на true. Если вы не укажете это, источник данных извлекает все данные о том, какой документ редактировать, основываясь на параметрах строки запроса URL (параметрах запроса HTTP). В результате параметры строки запроса URL имеют приоритет, и в случае, если ничего не задано, это означает «использовать новый документ». Если вы определили, что параметры строки запроса URL-адреса должны иметь приоритет, запуск кода, который затем просто игнорирует его, неэффективен. В результате action="openDocument" также игнорируется - если у вас есть docId в строке запроса, он откроет его, в противном случае он создаст новый документ.

documentId может быть обработан только один раз, когда страница сначала загружается. В зависимости от того, связан ли источник данных с панелью или с XPage / Custom Control, он также будет запускаться до события beforePageLoad. Таким образом, привязка во время выполнения (#{javascript:...) не имеет никакого эффекта. ${javascript:... позволит избежать путаницы.

Обработка ошибок может помочь определить, есть ли ошибка. XPages OpenLog Logger - один из наиболее распространенных (отказ от ответственности, я автор) https://openntf.org/main.nsf/project.xsp?r=project / XPages% 20OpenLog% 20Logger .

2 голосов
/ 09 марта 2020

Изменение documentId для вычисления при загрузке страницы ($), а не динамически (#):

<xp:this.data>
    <xp:dominoDocument var="requestDocument" action="openDocument">
        <xp:this.documentId><![CDATA[${javascript:
           var conclusion = database.getDocumentByUNID(doc_source.getDocument().getParentDocumentUNID());
           var oConclusion = new OsnovaUI_document(conclusion);
           var requestDoc = oConclusion.getMainDocument();

           print('docID: ' + requestDoc.getUniversalID());

           return requestDoc.getUniversalID();
        }]]></xp:this.documentId>
    </xp:dominoDocument>
</xp:this.data>

DatabaseName не требуется, если база данных является самой.

...