いいね!数

0

閲覧数
130

Xpagesの開発で以下を実現する方法を教えてください。

ビューコントロールを使ってビューを作成しています。

4列目はユーザーがクリックすると特定のurlを開くようにしたいと思い、以下の設定をしてみたのですが

エラーが出てうまく動作しませんでした。

 

①列のプロパティの「表示」にてコンテンツタイプをHTMLにしました。

 

②ビューコントロールのすべてのプロパティ>>データ>>data>>varにrowdataと設定しました。

 

③列のプロパティのデータにて、計算結果の値に以下のコードを記述しました。

var url= rowdata.getDocument().getItemValueString("Link");
var LinkName=rowdata.getDocument().getItemValueString("LinkName");
if(url.isEmpty()){return "URLなし";}else{return "<a href='"+url+"'target' _blank'>"+LinkName+">></a>";}

以上でXpagesを実行すると以下のエラーがでます。

JavaScript 計算式を実行中にエラーが発生しました
スクリプトインタープリタエラー、行=1、列=15: [TypeError] タイプ「lotus.domino.local.View [Static Java Interface Wrapper, lotus.domino.local.View: lotus.domino.View]」のオブジェクトでメソッド「getDocument()」を呼び出し中にエラーが発生しました

 

この設定は間違いでしょうか?

問題点等をご指摘いただければ助かります。

よろしくお願いいたします。

サーバー情報: | クライアント情報: | 
カテゴリ:アプリ開発 - XPages | タグ:
  | 質問日時:2020/03/16 11:53:02

回答・コメント

いいね!数

0

こんにちわ。

xp:viewpaelの部分が、どうなってるかコードで見せてもらった方がわかりやすいかも。

直感的には指定したrowdataがNotesviewEntryになってないか、getDocumentの呼び出しは重すぎて禁止されてるのかじゃないか。

/Yac

 

回答日時:2020/03/16 12:59:21

いいね!数

0

yac4423さん、回答ありがとうございます。

以下、viewPanelのコードです

<xp:viewPanel rows="30" id="viewPanel1" viewStyle="width:100%" showColumnHeader="false">

                                                <xp:this.data>
                                                    <xp:dominoView var="rowdata" databaseName="develope\mone_bunsyo.nsf" viewName="Syuryou_V">
                                                    </xp:dominoView>
                                                </xp:this.data>
                                                <xp:viewColumn id="viewColumn4" style="width:3px;white-space:nowrap;font-size:11pt" columnName="Category">
                                                    <xp:this.facets>
                                                        <xp:viewColumnHeader xp:key="header" id="viewColumnHeader4" value="Category">
                                                        </xp:viewColumnHeader>
                                                    </xp:this.facets>
                                                </xp:viewColumn>
                                                <xp:viewColumn columnName="Subject" id="viewColumn1" style="width:200px;font-size:12pt;color:rgb(0,0,0);background-color:rgb(234,255,255);text-align:center">
                                                    <xp:viewColumnHeader value="件名" id="viewColumnHeader1">
                                                    </xp:viewColumnHeader>
                                                </xp:viewColumn>
                                                <xp:viewColumn columnName="Body" id="viewColumn2" style="width:600px;font-size:12pt">
                                                    <xp:viewColumnHeader value="本文" id="viewColumnHeader2">
                                                    </xp:viewColumnHeader>
                                                </xp:viewColumn>
                                                <xp:viewColumn columnName="LinkName" id="viewColumn3" style="font-size:12pt;color:rgb(0,0,255)" contentType="html">

                                                    <xp:viewColumnHeader value="リンク先" id="viewColumnHeader3">
                                                    </xp:viewColumnHeader>
                                                </xp:viewColumn>
                                            </xp:viewPanel>

 

また、getDocumentの呼び出しは重すぎて禁止されてるかどうかはどこを見ればわかるのでしょうか?

回答日時:2020/03/16 13:20:45

いいね!数

0

すみません。コード訂正です。

<xp:viewPanel rows="30" id="viewPanel1" viewStyle="width:100%" showColumnHeader="false">

                                                <xp:this.data>
                                                    <xp:dominoView var="rowdata" databaseName="develope\mone_bunsyo.nsf" viewName="Syuryou_V">
                                                    </xp:dominoView>
                                                </xp:this.data>
                                                <xp:viewColumn id="viewColumn4" style="width:3px;white-space:nowrap;font-size:11pt" columnName="Category">
                                                    <xp:this.facets>
                                                        <xp:viewColumnHeader xp:key="header" id="viewColumnHeader4" value="Category">
                                                        </xp:viewColumnHeader>
                                                    </xp:this.facets>
                                                </xp:viewColumn>
                                                <xp:viewColumn columnName="Subject" id="viewColumn1" style="width:200px;font-size:12pt;color:rgb(0,0,0);background-color:rgb(234,255,255);text-align:center">
                                                    <xp:viewColumnHeader value="件名" id="viewColumnHeader1">
                                                    </xp:viewColumnHeader>
                                                </xp:viewColumn>
                                                <xp:viewColumn columnName="Body" id="viewColumn2" style="width:600px;font-size:12pt">
                                                    <xp:viewColumnHeader value="本文" id="viewColumnHeader2">
                                                    </xp:viewColumnHeader>
                                                </xp:viewColumn>
                                                <xp:viewColumn id="viewColumn3" style="font-size:12pt;color:rgb(0,0,255)" contentType="html">

                                                    <xp:this.value><![CDATA[#{javascript:var url= rowdata.getDocument().getItemValueString("Link");
var LinkName=rowdata.getDocument().getItemValueString("LinkName");
if(url.isEmpty()){return "URLなし";}else{return "<a href='"+url+"'target' _blank'>"+LinkName+">></a>";}}]]></xp:this.value><xp:viewColumnHeader
                                                        id="viewColumnHeader3">
                                                    </xp:viewColumnHeader>
                                                </xp:viewColumn>
                                            </xp:viewPanel>

回答日時:2020/03/16 13:43:58

いいね!数

0

こんにちわ。

var="rowdata"はxp:viewPanelの方に付けるものという感じがしますけどね。

/Yac

回答日時:2020/03/16 14:10:49

いいね!数

0

var="rowdata"をxp:viewPanelの方に付けてみたら出来ました!!

yac4423さん、ありがとうございます!

 

<xp:viewPanel rows="30" var="rowdata" id="viewPanel1" viewStyle="width:100%" showColumnHeader="false">

                                                <xp:this.data>
                                                    <xp:dominoView var="rowdata" databaseName="develope\mone_bunsyo.nsf" viewName="Syuryou_V">
                                                    </xp:dominoView>
                                                </xp:this.data>
                                                <xp:viewColumn id="viewColumn4" style="width:3px;white-space:nowrap;font-size:11pt" columnName="Category">
                                                    <xp:this.facets>
                                                        <xp:viewColumnHeader xp:key="header" id="viewColumnHeader4" value="Category">
                                                        </xp:viewColumnHeader>
                                                    </xp:this.facets>
                                                </xp:viewColumn>
                                                <xp:viewColumn columnName="Subject" id="viewColumn1" style="width:200px;font-size:12pt;color:rgb(0,0,0);background-color:rgb(234,255,255);text-align:center">
                                                    <xp:viewColumnHeader value="件名" id="viewColumnHeader1">
                                                    </xp:viewColumnHeader>
                                                </xp:viewColumn>
                                                <xp:viewColumn columnName="Body" id="viewColumn2" style="width:600px;font-size:12pt">
                                                    <xp:viewColumnHeader value="本文" id="viewColumnHeader2">
                                                    </xp:viewColumnHeader>
                                                </xp:viewColumn>
                                                <xp:viewColumn id="viewColumn3" style="font-size:12pt;color:rgb(0,0,255)" contentType="html">

                                                    <xp:this.value><![CDATA[#{javascript:var url= rowdata.getDocument().getItemValueString("Link");
var LinkName=rowdata.getDocument().getItemValueString("LinkName");
if(url.isEmpty()){return "URLなし";}else{return "<a href='"+url+"'target' _blank'>"+LinkName+"</a>";}}]]></xp:this.value><xp:viewColumnHeader
                                                        id="viewColumnHeader3">
                                                    </xp:viewColumnHeader>
                                                </xp:viewColumn>
                                            </xp:viewPanel>

回答日時:2020/03/16 14:17:23

いいね!数

0

ビューとは言え、html内に直接入力値を書き出してるので、ちゃんとエスケープ処理入れとかないとXSS脆弱性が入り込む恐れがあります。

ここは質問されてもあまり詳しくないので答えられませんが。

/yac

回答日時:2020/03/16 14:24:25