2009-07-22 3 views
2

フォームをレンダリングする日によって変更されるURLを示すLivecycleフォームでハイパーリンクを作成する方法を解明しようとしています。 1日に例えば私は、ハイパーリンクが指すようにしたいかもしれません:?Livecycleフォームのダイナミックハイパーリンク

名前がMyWebSite /マイページオプション= XXX

と私はそれがポイントにしたい、別の日に

名前がMyWebSite /マイページ?option = YYY

XXXとYYYはXMLとしてかなり簡単にフォームのデータに渡すことができますが、これに対応するようにハイパーリンクを変更する方法はわかりません。

提案がありますか?

答えて

3

これは、LiveCycle DesignerのJavaScriptを使用して実行できます。フォームのdocReadyイベントに配置された次のスクリプトは、テキストオブジェクトのURLを動的に変更できるようにします。

form1::docReady - (JavaScript, client) 
// If this code is running on the server, you don't want it to run any code 
// that might force a relayout, or you could get stuck in an infinite loop 
if (xfa.host.name != "XFAPresentationAgent") { 

    // You would load the URL that you want into this variable, based on 
    // whatever XML data is being passed into your form 
    var sURL = "www.stackoverflow.com"; // mywebsite/mypage?option=xxx 

    // URLs are encoded in XHTML. In order to change the URL, you need 
    // to create the right XHTML string and push it into the Text object's 
    // <value> node. This is a super simple XHTML shell for this purpose. 
    // You could add all sorts of markup to make your hyperlink look pretty 
    var sRichText = "<body><p><a href=\"" + sURL + "\">Foo</a></p></body>"; 

    // Assuming you have a text object called "Text1" on the form, this 
    // call will push the rich text into the node. Note that this call   
    // will force a re-layout of the form 
    this.resolveNode("Text1").value.exData.loadXML(sRichText, false, true); 
} 

注意点がいくつかあります:AcrobatのURLはAcrobatのみ9.0以降でサポートされています。したがって、古いバージョンのAcrobatを使用しているユーザーがフォームを開くと、URLは機能しません。

また、 "if(xfa.host.name!= ...)"の行からわかるように、サーバー上でフォームが生成されている場合、このコードは正しく実行されません。 docReady中にフォームがレイア​​ウトされていると、特定の古いバージョンのLiveCycleサーバーで問題が発生する可能性があります。このスクリプトをサーバー上で実行する必要がある場合は、おそらく別のイベントを選択してから、docReadyを作成する必要があります。

0

PDFのハイパーリンクを操作するためにサードパーティのコンポーネントを使用して終了しました。このソリューションは、1000ドルほどの費用がかかります。

1

私は、リンクをクリックすると同じタブで開いてWorkSpaceフォームを失ってしまい、Designer 11でそれを変更するオプションがないというWorkSpaceのユーザーからの多くの苦情がありました。あなたのためにも働きます。

私はそれを選択するために、いくつかのロジックを追加するのは簡単だろう

app.launchURL("http:/stackoverflow.com/", true);

(クライアント側で実行する、JavaScriptで)この行を持っている境界線と背景なしなしでボタンを作って、そのクリックイベントでその日に基づいた正しいURLであり、フォームの再レンダリングは発生しません。

ハイパーリンクが他のテキストと一直線に並んでいる場所では、リンクのテキストを青色と下線付きのままハイパーリンクなしに置いて、その上にボタン(背景なし、枠線なし、キャプションなし)を配置します。それが動作するには、位置付けされたフローフォームとフローされていないサブフォームが必要です。レイアウトによっては、ちょっと厄介なことがあります。

うわー、ちょうど私がパーティーに遅刻していることに気づいた。 ES4を使っている人にとっては、同様の問題に直面しています。 。 。

関連する問題