Apexで日付データのyyyy-mm-ddフォーマット変換
Date dSample = Date.newInstance(2022, 7, 21);
String.valueOf(dSample); // 2022-07-21
kinkun's blog
Apexで日付データのyyyy-mm-ddフォーマット変換
Date dSample = Date.newInstance(2022, 7, 21);
String.valueOf(dSample); // 2022-07-21
PDFファイルを作成して、Salesforceメールテンプレートに添付
Visualforceメールテンプレ―ド:
<messaging:emailTemplate subject="test: {!relatedTo.name}" recipientType="Contact" relatedToType="Opportunity">
<messaging:plainTextEmailBody >
添付送付させていただきます。
ご確認お願いいたします。
</messaging:plainTextEmailBody>
<messaging:htmlEmailBody >
<html>
<body>
<p>添付送付させていただきます。</p>
<p>ご確認お願いいたします。</p>
</body>
</html>
</messaging:htmlEmailBody>
<messaging:attachment renderAs="PDF" filename="Invoice.pdf">
<c:OppAttachmentComponent opportunityId="{!relatedTo.Id}" opportunity="{!relatedTo}"/>
</messaging:attachment>
</messaging:emailTemplate>
Component : OppAttachmentComponen
<apex:component controller="OppAttachmentComponentController" access="global" >
<apex:attribute name="opportunityId" description="OpportunityId" assignTo="{!OpportunityId}" type="Id" />
test
{!opportunity.Name}
</apex:component>
commponent controller : OppAttachmentComponentController
global class OppAttachmentComponentController {
global String OpportunityId{
get;
set {
UpdateContents2(value);
}
}
public void UpdateContents2(String OpportunityId) {
if (OpportunityId != null) {
List<Opportunity> oppList = [SELECT Id FROM Opportunity WHERE Id =:OpportunityId];
}
}
}
JavaScript Remoting 要求の設定
要求のタイムアウト (ミリ秒単位)。デフォルトは 30,000 (30 秒) です。最大値は 120,000 (120 秒 = 2 分) です。120秒に設定方法例は以下です。
<script type="text/javascript">
Visualforce.remoting.timeout = 120000; // Set timeout at page level
function getRemoteAccount() {
var accountName = document.getElementById('acctSearch').value;
// This remoting call will use the page's timeout value
Visualforce.remoting.Manager.invokeAction(
'{!$RemoteAction.AccountRemoter.getAccount}',
accountName,
handleResult
);
}
function handleResult(result, event) { ... }
</script>
カスタムアクション制限事項
VisualforceでoutputLink押下時新規タブで表示
<apex:outputLink value="{!URLFOR('/' + targetObject.Id)}" target="_blank" id="TargetObjectId">{!targetObject.Name}</apex:outputLink>
[Reference url]Visualforceアクションヘッダー非表示
<apex:page docType="html-5.0" standardController="Campaign" extensions="testController" title="testCreate" showHeader="true" showQuickActionVfHeader="false" sidebar="false" id="testyCreate">
上記の、showQuickActionVfHeader="false"にすることで、アクションヘッダー非表示
outputPanelのrendered属性
<apex:commandButton reRender="page1,page2" value="Search"/>
<br/>
<apex:OutputPanel id="page1">
<apex:OutputPanel rendered="{!isDone}">
<apexageBlock title="title1">
title1
</apex:PageBlock>
</apex:OutputPanel>
</apex:OutputPanel>
<apex:OutputPanel id="page2">
<apex:OutputPanel rendered="{!NOT(isDone)}">
<apex:PageBlock title="title2">
title2
</apex:PageBlock>
</apex:OutputPanel>
</apex:OutputPanel>
GMTからseconds取得
Long gettime = Datetime.now().getTime();
System.debug('gettime:'+gettime);
gettime = gettime/1000;
System.debug('gettime:'+gettime);
結果
17:39:16:003 USER_DEBUG [8]|DEBUG|gettime:1654591156228
17:39:16:003 USER_DEBUG [11]|DEBUG|gettime:1654591156
ここで、1654591156:seconds
ApexでawsへファイルDelete
public Integer fileUpload(Attachment file){
String attachmentBodyEncoded = EncodingUtil.base64Encode(file.Body);
String formattedDateString = Datetime.now().formatGMT('EEE, dd MMM yyyy HH:mm:ss z');
String key = awsAccessKey;
String secret = awsSecretAccessKey;
String bucketname = awsBucket;
String host = awsService + '-' + awsReign + '.amazonaws.com';
String method = 'DELETE';
String fileNameEncoded = EncodingUtil.urlEncode(file.Name, 'UTF-8');
HttpRequest req = new HttpRequest();
req.setMethod(method);
req.setEndpoint('https://' + bucketname + '.' + host + '/' + bucketname + '/' + fileNameEncoded);
req.setHeader('Host', bucketname + '.' + host);
req.setHeader('Content-Length', String.valueOf(attachmentBodyEncoded.length()));
req.setHeader('Content-Encoding', 'UTF-8');
req.setHeader('Content-type', file.ContentType);
req.setHeader('Connection', 'keep-alive');
req.setHeader('Date', formattedDateString);
req.setHeader('ACL', 'public-read-write');
req.setBodyAsBlob(EncodingUtil.base64Decode(attachmentBodyEncoded));
String stringToSign = 'DELETE\n\n' +
file.ContentType + '\n' +
formattedDateString + '\n' +
'/' + bucketname + '/' + bucketname + '/' + fileNameEncoded;
Blob mac = Crypto.generateMac('HMACSHA1', blob.valueof(stringToSign),blob.valueof(secret));
String signed = EncodingUtil.base64Encode(mac);
String authHeader = 'AWS' + ' ' + key + ':' + signed;
req.setHeader('Authorization',authHeader);
Http http = new Http();
HTTPResponse res = http.send(req);
return res.getStatusCode();
}
Apexをスケジュール設定でApexクラスが検索されない件の対応
検索されないケース
public class SampleBatchSchedule implements Schedulable {
public void execute(SchedulableContext sc) {
SampleBatch batch = new SampleBatch();
database.executebatch(batch);
}
}
検索されるケース
global class SampleBatchSchedule implements Schedulable {
public void execute(SchedulableContext sc) {
SampleBatch batch = new SampleBatch();
database.executebatch(batch);
}
}