Visualforce page のまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)

+ [Known Visualforce Mobile Issues](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/vf_dev_best_practices_known_issues_intro.htm)


# できないこと

+ [Visualforceページでダッシュボード表示](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ifmoz)

:::note
いろいろと試してみましたが、Visualforceページではレポートやダッシュボードを表示することができませんでした。また、Salesforceサポートに問い合わせたところ、やはり表示できないとのことでした。

詳しくは以下のリンクをご参照ください： [Salesforceサポート記事](https://help.salesforce.com/s/articleView?id=000384802&type=1)
:::

+ [Visualforce ページを別ウィンドウか別タブで表示させたい](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eryTrSAI)

:::note
対応していないので、 Lightning Webコンポーネントを経由する必要があると考えます。

カスタムアクションボタンでSalesforce別タブで画面を開く 
https://qiita.com/panxl/items/a22298173764fda96a25
:::

+ [VF ページで Lightning ダッシュボードを使用するにはどうすればいいですか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KAomy)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/3cd373df-56cd-24a5-4bb9-cf4a7e401cfe.png)


:::note
vf ページの URL でダッシュボードを直接呼び出しています。内部で確認したところ、vf ページにダッシュボードを直接読み込むことはできないことがわかりました。ダッシュボードは Lightning ドメインにリダイレクトされます。VF ページは VF ドメイン上にあるため、ダッシュボードは VF ドメインに読み込まれず、フレーム化が拒否されます
:::


# 画面遷移させる : LEXだとgetParameters().put()が動作しない

+ [作成画面上書きVF→標準編集画面　の遷移について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007OXfE8)

:::note

```
PageReference pageReference;

if(Userinfo.getUiThemeDisplayed().equals('Theme4d')){
    //新たに追加したもの
    pageReference = new PageReference('/lightning/r/CustomObject__c/' + record.Id + '/edit?recordTypeId=' + recordType.Id + '&backgroundContext=/lightning/r/CustomObject__c/' + record.Id + '/view');
}else{
    //もともとあったもの
    pageReference = new PageReference('/' + record.Id + '/e');
    pageReference.getParameters().put('nooverride', '1');
    pageReference.getParameters().put('RecordType', recordType.Id);
    pageReference.getParameters().put('retURL', record.Id);
}
```

:::

+ [同じコントローラーで 2 つのページを作成し、最初のページを 2 番目のページに転送しようとしましたが、setRedirect(false) を使用しても機能しません。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eoeFX)


# エラー

+ [VF が PDF としてレンダリングされ、アップグレード後にスタイルが使用されなくなりました](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007FViN8SAL)

:::note
OK、解決策が見つかりました。機能は動作しているようです。 RenderAsPdf が Post-API 27 で動作しなくなったという非常に古い記事を見つけました。VF ページに HTML タグを追加する必要があります。 applyHtmlTag="false" を apex:page タグに追加する必要もあります。

OK have found the solution, seems features do work. I found a very old article where RenderAsPdf stopped working Post-API 27. You need to add a HTML tag in VF page. You will also need to add applyHtmlTag="false" to the apex:page tag.

```
<apex:page controller="ShowPDFReportController" renderAs="pdf" applyHtmlTag="false" name="ShowPDFReport" showHeader="false" sidebar="false" title="PDF DashBoard" standardStylesheets="false" applyBodyTag="false" action="{!LoadData}" >
<html>
    <head>      
        <style type="text/css">
            table.maintable {border: 2px solid red;border-collapse: collapse;}
        </style>
    </head>
    <apex:form >
        <table class="maintable"><tr><td class="title">Top Donors</td></tr></table><br />
    </apex:form>
</html>
</apex:page>
```

:::

+ [Visualforce Pages - Lost formatting](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007F54Rg)

:::note
Solution was to amend apex page tag to include on all Visualforce pages

```
applyHtmlTag="false"
showHeader="false"
```
:::

+ [MessageChannel can't be referenced in Visualforce page having isExposed parameter set to false](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000JcuJk)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/4fbd438e-05ac-4bd6-7cc2-e3934bd2d532.png)

With the help of Salesforce Support, I found the piece of documentation that references this piece of functionality. 

As documented here (https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/message_channel_considerations.htm),   "Visualforce supports only LightningMessageChannels where isExposed is true." This feature is working as documented.

+ [Blank page intermittently encountered when opening or redirecting to a Visualforce page in Chrome 67 or newer](https://qiita.com/Keiji_otsubo/items/0b9cfbbb459849226453)

+ [Page Issues" the window shows "No Issues" for every visualforce page, even those where there is a Page Issues is > 0. ](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000PmKOf)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/e04f0871-1b87-38ad-a10a-6f9a0dcb6e51.png)

:::note
After opening a support ticket, I learned that I had to rerun the visualforce scan by clicking on Scan for Visualforce Pages. Since changes had happened in the org since the last scan, this caused a conflict and it wasn't able to show the details of the page issues. Rerunning the scan enabled me to see the actual issues when clicking on the page issues number. Simple but not obvious fix.

サポートチケットを開いた後、[Visualforce ページのスキャン] をクリックして Visualforce スキャンを再実行する必要があることがわかりました。前回のスキャン以降に組織で変更が発生したため、競合が発生し、ページの問題の詳細を表示できませんでした。スキャンを再実行すると、ページの問題番号をクリックすると実際の問題を確認できるようになりました。シンプルですが明らかな修正ではありません。
:::

+ [IFrame が Salesforce VF ページまたは Aura で機能しない](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000074VvlzSAC)

+ [Visualforceページのエラー追跡方法を教えてください](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eonN0)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a82c501d-aea1-6958-e943-61f3bf8613ff.png)

ビューステートが170Kを超えていた

:::note
以下の方法を試してみてください

開発者コンソールの [View State (ビューステート)] タブでは、Visualforce ページ要求のビューステートを調べることができます。

https://help.salesforce.com/s/articleView?id=sf.code_dev_console_tab_view_state.htm&type=5

[View State（ビューステート）とは〜対象と減らし方〜](https://qiita.com/xQIEBo4zFWKZ0ig/items/a990a21a3969dfadb33c)
:::

+ [Visualforcceページに遷移するボタンを作成後、遷移元のURLがNULLになってしまう](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmFqz)

+ [Error occured while loading a visualforce page](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000lLDh)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/adccf961-ae58-fa2d-5caa-ca99a0e60974.png)



# Visualforce Basics > Using Standard Controllers

+ [Pressing the PREVIEW button causes a transition to a blank screen.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007bLFXl)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/ce54a308-148c-3fb2-ddd0-fc53b226ca85.png)

:::note
私自身はChrome(拡張機能は何にも入れてません)を使っていますが、以下を読むと Firefox あるいは IE を使えってあるのですが、今更IEはあり得ないので、Firefoxあるいはsafariを使ってみてください 

What browser are you using?I was encountering this message in the dev console while I was writing some visualforce. It looks like this option is set by default for visualforce pages to help prevent clickjacking and Chrome doesn't support the ALLOW-FROM X-frame option (https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet⌗X-Frame-Options_Header_Types). If this is preventing you from completing a trailhead then you could try using Firefox or IE. Or you could try adding the showHeader="false" arg to your page tag. This disables the default headers in visualforce but you may still fail the trailhead validation test depending on how the validation is calculated. 

https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T4DSvSAN
:::


# The static resource does not require a '/' in the image URL. If you're using a slash, try removing it and check the challenge again.

+ [The 'ShowImage' page doesn't include a reference to the specified image. Hint: The static resource does not require a '/' in the image URL. If you're using a slash, try removing it and check the challenge again.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Jg4zI)

:::note
Try this

```
<apex:page>
<apex:image url="{!URLFOR($Resource.vfimagetest, 'cats/kitten1.jpg')}" />
</apex:page>
```

https://developer.salesforce.com/forums/?id=906F0000000BTKGIA4
:::

# DOMException: Failed to execute 'querySelectorAll' on 'Element': '*,:x' is not a valid selector.

+ [in VisualForce Page Error Occured : DOM Exception: Failed to execute 'querySelectorAll'](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007RK5yp)

# 「Visualforce」コンポーネントの「Visualforce ページ名」には無効な値が含まれています。

+ [Lightningアプリケーションビルダー 保存時のエラー](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007clXyM)


:::note alert
Component 'Visualforce' has an invalid value for property 'Visualforce Page Name'.
:::

:::note

<apex:slds />をVF Pageに追加したら解決するみたいです。

```
<apex:page showHeader="false" applyHtmlTag="true" applyBodyTag="false">
    <head>
        <apex:slds />
    </head>
    <body class="slds-scope" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
        <!-- Your SLDS-styled content -->
        <span class="slds-icon_container slds-icon-utility-announcement" title="Description of icon when needed">
            <svg class="slds-icon slds-icon-text-default" aria-hidden="true">
                <use xlink:href="{!URLFOR($Asset.SLDS, '/assets/icons/utility-sprite/svg/symbols.svg#announcement')}"></use>
            </svg>
            <span class="slds-assistive-text">Description of icon when needed</span>
        </span>
    </body>
</apex:page>
```

:::

# PDFの作成

+ [VF Pageを使った段組みありの帳票出力](https://qiita.com/Keiji_otsubo/items/d4c198160d10936c7c7e)
+ [PDFを作成し、Salesforceメールテンプレートに添付する方法](https://qiita.com/Keiji_otsubo/items/63581eade221ec5e1a51)
+ [visualforceのpdfで動的な画像を表示したい](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eqZgO)

# .docx formatのファイルを作る。

+ [.docx format in visualforce](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Jear0)

残念ですができません。

:::note
I don't think you can do it with just the VF page.

DOCX is part of Microsoft Office Open XML specification (also known as OOXML or OpenXML) and was introduced with Office 2007. DOCX is a zipped, XML-based file format. Microsoft Word 2007 and later uses DOCX as the default file format when creating a new document. Support for loading and saving legacy DOC files is also included.

https://www.leadtools.com/help/sdk/v21/dh/to/file-formats-microsoft-word-document-docx-doc.html
:::

# 日付のフォーマットと１日前の表示

+ [Deduct 1 day from date in Visualforce](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Mhyoj)

```
<apex:outputText value="{0, date, MMMM d','  yyyy}">
    <apex:param value="{!contact.Birthdate - 1}" /> 
</apex:outputText>
```


# 開発

+ [VisualForce Pageの連動選択リストに値を挿入したい](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000JfTKBSA3)
+ [Visualforceを使いこなす方法](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007epuyV)
+ [VF: Power BI Dashboard Embedded in Salesforce Account Page](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A92o5)

# トレイルヘッド

+ ["Create & Edit Visualforce Pages" Challenge Question](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000QMZVs)

:::note
You are absolutely correct. Visualforce pages always display with the standard Lightning Experience user interface when they run in Lightning Experience. There’s no way to suppress or alter the Lightning Experience header or sidebar. In particular, the showHeader and sidebar attributes of <apex:page> have no effect on Visualforce pages when displayed in Lightning Experience.

However, to pass this particular challenge you need to use showHeader attribute in visualforce page. If you don't use showHeader attribute it won't allow you to pass the challenge.

```
<apex:page showHeader="false" title="DisplayImage" >

    <apex:image value="https://developer.salesforce.com/files/salesforce-developer-network-logo.png" height="100" width="300" />

</apex:page>
```

https://developer.salesforce.com/forums/?id=9062I000000XlkjQAC

あなたは完全に正しいです。 Visualforce ページは、Lightning Experience で実行する場合、常に標準の Lightning Experience ユーザインターフェースで表示されます。 Lightning Experience のヘッダーやサイドバーを抑制したり変更したりする方法はありません。特に、<apex:page> の showHeader 属性とsidebar 属性は、Lightning Experience で表示される Visualforce ページには影響しません。

ただし、この特定の課題をクリアするには、visualforce ページで showHeader 属性を使用する必要があります。 showHeader 属性を使用しない場合、チャレンジに合格することはできません。
:::

+ [We can’t find 'Station Status' in an h1 tag in the StationCheck Visualforce page.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmGtD)

:::note

```HTML
<apex:page sidebar="false">
<!--Flight Systems Checklist Visualforce Page-->
   <h1>StationStatus</h1>
   <apex:form id="stationReadinessChecklist">
      <apex:pageBlock title="Station Readiness Checklist">
         <apex:pageBlockButtons >
            <!--Adding Save Button-->
            <apex:commandButton value="Save" action="{!save}"/>
         </apex:pageBlockButtons>
      </apex:pageBlock>
   </apex:form>
</apex:page>
```
:::




# 標準の Lead オブジェクトの VF ページリストビューボタンを作成しようとしています。フィールド名とテキストボックスの間の幅を狭くしたいのですが、実現できませんでした。

+ [VF page List view button](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007clN4b)

:::note
I coudnt get the style property of output text working for some reson but this worked 
 
```
<div style="word-wrap:break-word; width:100px;" >     <apex:outputText value="ssssssssssssssssssssssssssssssssssssssssssssss"   ></apex:outputText>     </div>
```

https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T4XdaSAF
:::


# vfRetURLInSFX

+ [パラメータ"vfRetURLInSFX"について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eqPQL)

:::note
何か仕様が変わったような投稿がありますね。

 after Summer'24 release, vfRetURLINSFX returns List view Developer name instead List view ID in the url 

https://salesforce.stackexchange.com/questions/349924/capture-list-view-id-from-url

ちょっと気になる記述が... 残念ながら詳細が書いてありそうなヘルプのリンクは404エラーです。

+ 概要: StandardSetController の一部のメソッドは、廃止されたパラメータ vfRetURLinSFX を使用するため、回帰してしまいます。この問題を回避するには、Lightning Experience の [チェックボックスの表示 (複数レコード選択用)] チェックボックスを選択します。
 https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000A72gOSAR
 :::

+ [【既知の問題】retURL is not passed down through LWC stack, causing vfRetURLInSFX to not be set](https://issues.salesforce.com/issue/a028c00000zJYBqAAO/returl-is-not-passed-down-through-lwc-stack-causing-vfreturlinsfx-to-not-be-set)
:::

# 画像

+ [VisualforceでPDFをしているのですが、「!$Resource」を使った箇所が表示されないという問題が起きてしまいました。](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000J5FLe)

:::note
以下の質問ではapex:imageでは機能しなかったのでimg に変えたようです

https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T48iLSAR

```
<apex:image url="{!imageURL}" />
```

:::