Visualforce의 레코드 보존 처리시, 표준 검증 에러를 회피해 임의의 action을 실행시킨다
18875 단어 SalesforceVisualforce
목적·목표
apex:pageMessages
apex:pageMessages
를 지우고 처리 후 다시 완료 및 오류를 표시합니다 Before (저장 1 처리)
Visualforce 코드
<apex:pageBlockButtons location="bottom">
<apex:commandButton value="保存1" action="{!save}" reRender="container" status="spinnerStatus"/>
</apex:pageBlockButtons>
동작 화면
<apex:pageBlockButtons location="bottom">
<apex:commandButton value="保存1" action="{!save}" reRender="container" status="spinnerStatus"/>
</apex:pageBlockButtons>
Try(저장 2 처리)
Visualforce 코드
<apex:pageBlockButtons location="bottom">
<apex:actionFunction name="save1B" action="{!clearVfMsg}" oncomplete="return false;" reRender="container" />
<apex:commandButton value="保存2" onclick="save1B();" action="{!save}" reRender="container" status="spinnerStatus"/>
</apex:pageBlockButtons>
동작 화면
개선
<apex:pageBlockButtons location="bottom">
<apex:actionFunction name="save1B" action="{!clearVfMsg}" oncomplete="return false;" reRender="container" />
<apex:commandButton value="保存2" onclick="save1B();" action="{!save}" reRender="container" status="spinnerStatus"/>
</apex:pageBlockButtons>
immediate="true"
를 apex:actionFunction
에 붙이면 저장 버튼을 누를 때 데이터 유형, 자릿수 (Salesforce 표준) 및 필수 항목 (Salesforce 표준)의 유효성 검사 오류가 발생하면 메시지 지우기 프로세스가 실행되지 않는 것을 방지했습니다.문제
apex:pageMessages
가 버그로 표시되지 않을 수 있습니다 (캡션 네 번째 저장 버튼을 누를 때) After(저장 3 처리)
Visualforce 코드
<apex:pageBlockButtons location="bottom">
<apex:actionFunction name="save1C" action="{!clearVfMsg}" oncomplete="save2C();" reRender="container" immediate="true"/>
<apex:actionFunction name="save2C" action="{!save}" reRender="container" status="spinnerStatus"/>
<apex:commandButton value="保存3" onclick="save1C(); return false;"/>
</apex:pageBlockButtons>
동작 화면
개선
<apex:pageBlockButtons location="bottom">
<apex:actionFunction name="save1C" action="{!clearVfMsg}" oncomplete="save2C();" reRender="container" immediate="true"/>
<apex:actionFunction name="save2C" action="{!save}" reRender="container" status="spinnerStatus"/>
<apex:commandButton value="保存3" onclick="save1C(); return false;"/>
</apex:pageBlockButtons>
apex:pageMessages
에 버그가 발생하지 않는다 학습한 것
immediate="true"
를 apex:actionFunction
에 붙이면 저장 버튼을 누를 때 데이터 유형, 자릿수 (Salesforce 표준), 필수 항목 (Salesforce 표준)의 유효성 검사 오류가 발생하는 경우에도 임의의 처리를 먼저 실행시킬 수 있습니다apex:actionFunction
의 oncomplete
를 이용하여 처리를 메소드 체인 시킬 수 있다 샘플 코드
Visualforce 페이지<apex:page controller="VfTestCtrl" title="取引先責任者 編集" lightningStylesheets="true">
<style>
.spinnerBg{
width: 100%;
height: 100%;
position: absolute;
background-color: #000;
opacity: 0.2;
z-index: 999999;
}
.spinner{
width: 100%;
height: 100%;
position: absolute;
background-image: url("/img/loading32.gif");
background-size: 16px;
background-repeat: no-repeat;
background-attachment: fixed;
background-position: center;
z-index: 9999999;
opacity: 1;
}
</style>
<apex:actionStatus id="spinnerStatus">
<apex:facet name="start">
<div class="spinnerBg"/>
<div class="spinner"/>
</apex:facet>
</apex:actionStatus>
<apex:form>
<apex:outputPanel id="container">
<apex:pageBlock title="取引先責任者 編集">
<div style="min-height: 120px">
<apex:pageMessages/>
</div>
<apex:pageBlockSection columns="1">
<apex:inputField value="{!con.TestNum__c}"/>
</apex:pageBlockSection>
<apex:pageBlockButtons location="bottom">
<apex:commandButton value="保存1" action="{!save}" reRender="container" status="spinnerStatus"/>
</apex:pageBlockButtons>
<apex:pageBlockButtons location="bottom">
<apex:actionFunction name="save1B" action="{!clearVfMsg}" oncomplete="return false;" reRender="container" />
<apex:commandButton value="保存2" onclick="save1B();" action="{!save}" reRender="container" status="spinnerStatus"/>
</apex:pageBlockButtons>
<apex:pageBlockButtons location="bottom">
<apex:actionFunction name="save1C" action="{!clearVfMsg}" oncomplete="save2C();" reRender="container" immediate="true"/>
<apex:actionFunction name="save2C" action="{!save}" reRender="container" status="spinnerStatus"/>
<apex:commandButton value="保存3" onclick="save1C(); return false;"/>
</apex:pageBlockButtons>
</apex:pageBlock>
</apex:outputPanel>
</apex:form>
</apex:page>
VF 컨트롤러public without sharing class VfTestCtrl {
public Contact con { get; set; }
private Id conId;
/** 画面表示メッセージ */
private static final String CONTACT_NOT_EXIST_MSG = '取引先責任者が存在しません。';
private static final String CONTACT_UPDATE_COMPLETE_MSG = '取引先責任者の更新が完了しました。';
public VfTestCtrl() {
this.conId = ApexPages.currentPage().getParameters().get('Id');
List<Contact> conList = queryContact(conId);
if (conList.isEmpty()) {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, CONTACT_NOT_EXIST_MSG));
return;
}
this.con = conList[0];
}
/** VFメッセージクリア処理 */
public void clearVfMsg() {
ApexPages.getMessages().clear();
}
/** 保存処理 */
public void save() {
List<Contact> conList = queryContact(conId);
if (conList.isEmpty()) {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, CONTACT_NOT_EXIST_MSG));
return;
}
update con;
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, CONTACT_UPDATE_COMPLETE_MSG));
return;
}
/** 対象の取引先責任者を取得 */
private List<Contact> queryContact(Id contactId) {
return [
SELECT
Id,
TestNum__c
FROM
Contact
WHERE
Id = :contactId
];
}
}
Reference
이 문제에 관하여(Visualforce의 레코드 보존 처리시, 표준 검증 에러를 회피해 임의의 action을 실행시킨다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/okei93/items/80a3e198162bd63878eb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<apex:page controller="VfTestCtrl" title="取引先責任者 編集" lightningStylesheets="true">
<style>
.spinnerBg{
width: 100%;
height: 100%;
position: absolute;
background-color: #000;
opacity: 0.2;
z-index: 999999;
}
.spinner{
width: 100%;
height: 100%;
position: absolute;
background-image: url("/img/loading32.gif");
background-size: 16px;
background-repeat: no-repeat;
background-attachment: fixed;
background-position: center;
z-index: 9999999;
opacity: 1;
}
</style>
<apex:actionStatus id="spinnerStatus">
<apex:facet name="start">
<div class="spinnerBg"/>
<div class="spinner"/>
</apex:facet>
</apex:actionStatus>
<apex:form>
<apex:outputPanel id="container">
<apex:pageBlock title="取引先責任者 編集">
<div style="min-height: 120px">
<apex:pageMessages/>
</div>
<apex:pageBlockSection columns="1">
<apex:inputField value="{!con.TestNum__c}"/>
</apex:pageBlockSection>
<apex:pageBlockButtons location="bottom">
<apex:commandButton value="保存1" action="{!save}" reRender="container" status="spinnerStatus"/>
</apex:pageBlockButtons>
<apex:pageBlockButtons location="bottom">
<apex:actionFunction name="save1B" action="{!clearVfMsg}" oncomplete="return false;" reRender="container" />
<apex:commandButton value="保存2" onclick="save1B();" action="{!save}" reRender="container" status="spinnerStatus"/>
</apex:pageBlockButtons>
<apex:pageBlockButtons location="bottom">
<apex:actionFunction name="save1C" action="{!clearVfMsg}" oncomplete="save2C();" reRender="container" immediate="true"/>
<apex:actionFunction name="save2C" action="{!save}" reRender="container" status="spinnerStatus"/>
<apex:commandButton value="保存3" onclick="save1C(); return false;"/>
</apex:pageBlockButtons>
</apex:pageBlock>
</apex:outputPanel>
</apex:form>
</apex:page>
public without sharing class VfTestCtrl {
public Contact con { get; set; }
private Id conId;
/** 画面表示メッセージ */
private static final String CONTACT_NOT_EXIST_MSG = '取引先責任者が存在しません。';
private static final String CONTACT_UPDATE_COMPLETE_MSG = '取引先責任者の更新が完了しました。';
public VfTestCtrl() {
this.conId = ApexPages.currentPage().getParameters().get('Id');
List<Contact> conList = queryContact(conId);
if (conList.isEmpty()) {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, CONTACT_NOT_EXIST_MSG));
return;
}
this.con = conList[0];
}
/** VFメッセージクリア処理 */
public void clearVfMsg() {
ApexPages.getMessages().clear();
}
/** 保存処理 */
public void save() {
List<Contact> conList = queryContact(conId);
if (conList.isEmpty()) {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, CONTACT_NOT_EXIST_MSG));
return;
}
update con;
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, CONTACT_UPDATE_COMPLETE_MSG));
return;
}
/** 対象の取引先責任者を取得 */
private List<Contact> queryContact(Id contactId) {
return [
SELECT
Id,
TestNum__c
FROM
Contact
WHERE
Id = :contactId
];
}
}
Reference
이 문제에 관하여(Visualforce의 레코드 보존 처리시, 표준 검증 에러를 회피해 임의의 action을 실행시킨다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/okei93/items/80a3e198162bd63878eb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)