apex:commandLinkをボタン風に変更する
apex:commandButtonを使って別画面起動が出来なくて、苦肉の策でapex:commandLinkをボタン風にしてごまかした記録。
やり方は、スタイルで「btn」をあてる。
押下不可状態にしたければ、スタイルは「btnDisabled」となる。
<apex:commandLink value="commandLink" styleClass="btn" /> <apex:commandLink value="commandLink" styleClass="btnDisabled" />
これの結果。
これだけだと、リンクのアンカーラインが表示されてしまう。
なので、aタグに対してスタイルをあてる。
a{ text-decoration: none; }
これの結果。
しかし、まだ課題が。
カーソルをあてると、アンカーラインが表示される。色が変わる。
カーソルがキャプチャ出来ていないが、こんな感じ。
これの対応は少し面倒。
/* 押下可能ボタン */ a:link.lnk2btn{ text-decoration: none; color: black; } a:visited.lnk2btn{ text-decoration: none; color: black; } a:hover.lnk2btn{ text-decoration: none; color: black; } a:active.lnk2btn{ text-decoration: none; color: black; } /* 押下不可ボタン */ a:link.lnk2btnD{ text-decoration: none; } a:visited.lnk2btnD{ text-decoration: none; } a:hover.lnk2btnD{ text-decoration: none; } a:active.lnk2btnD{ text-decoration: none; }
リンク先表示済みの場合など色が変わるので、それぞれのスタイルを作成する。
なお、上記順番で記述しないと反応しない。
押下可能可否でクラスを分けたのは、押下不可の場合、文字色を変えるため。黒ではおかしい。
そのため、apex:commandLinkの方も書き換える
<apex:commandLink value="commandLink" styleClass="btn lnk2btn" /> <apex:commandLink value="commandLink" styleClass="btnDisabled lnk2btnD" />
最後に、押下不可ボタンを押下したときに無反応にさせる。
onclickを追加する。
<apex:commandLink value="commandLink" styleClass="btn lnk2btn" /> <apex:commandLink value="commandLink" styleClass="btnDisabled lnk2btnD" onclick="return false;" />
元々がリンクであるため、縦に配置するとボタン同士がくっついたりするので、適宜調整は必要。
オブジェクトのAPI参照名を取得する
標準オブジェクトのSOQLを書こうとすると、あれ?API参照名何だっけ?となるので取得する処理を書いてみた。
標準オブジェクトと同名のカスタムオブジェクトを作成していた場合、カスタムオブジェクトが取得される可能性がある。まあ、そこはSchema#getGlobalDescribeの気まぐれなので・・・
public void getObjectApiName(String targetObjectName){ Boolean fined = false; Map<String, Schema.SObjectType> gd = Schema.getGlobalDescribe(); for (String sKey : gd.keySet()) { Schema.DescribeSObjectResult targetObject = gd.get(sKey).getDescribe(); if(targetObject.getLabel() == targetObjectName){ System.debug('★' + ' : '+ targetObjectName + ' -> ' + targetObject.getName()); fined = true; break; } } if(!fined){ System.debug('★' + ' : '+ targetObjectName + ' -> 不明'); } }
ファイルリスト作成マクロ
ファイルリストを作成するExcelマクロ。
拡張子は「xls;xlsx」のように指定。セパレータは何でも良い。
さぼったので、見つけたファイルの拡張子が上記文字列に含んでいるかのチェックしかしていない。
なので、「xlsx」と指定しても「xls」も拾えてしまう。
セパレータを定数にして、splitでリストに入れて、リストをチェックすれば回避可能かと。
' ------------------------------------------------------------------ ' ファイルリストの生成 ' A列にファイルのフルパス、B列にファイル名を出力 ' targetFolder :検索対象のフォルダパス ' targetExtensions :検索対象の拡張子(何かで区切ってあること) ' outputSheet :ファイルリストの出力先シート ' outputStartRow :ファイルリストの出力先開始行番号 ' ------------------------------------------------------------------ Private Sub createFileList(targetFolder As String, targetExtensions As String, outputSheet As Worksheet, outputStartRow As Integer) Dim fileList As Object Dim fileObj As Variant Dim folderList As Object Dim folderObj As Variant Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim fileExtension As String ' ファイルを取得 Set fileList = CreateObject("Scripting.FileSystemObject").GetFolder(targetFolder).Files For Each fileObj In fileList ' 拡張子をチェック fileExtension = fso.GetExtensionName(fileObj.Path) If targetExtensions = "" Or InStr(targetExtensions, fileExtension) <> 0 Then outputStartRow = outputStartRow + 1 outputSheet.Cells(outputStartRow, 1) = fileObj.Path outputSheet.Cells(outputStartRow, 2) = fso.GetBaseName(fileObj.Path) End If Next ' サブフォルダを取得し、そのサブフォルダ内のリストを生成 Set folderList = CreateObject("Scripting.FileSystemObject").GetFolder(targetFolder).SubFolders For Each folderObj In folderList Call createFileList(folderObj.Path, targetExtensions, outputSheet, outputStartRow) Next End Sub
表の行番号表示
apex:variableを使う
page内で使用可能な変数
文字列型(?)なので、VALUEを使用し数値に変換し加算する
<apex:variable var="rowNum" value="1" /> <apex:repeat value="{!list}" var="detail"> <tr> <td> <apex:outputLabel value="{!rowNum}" /> </td> <td> <apex:outputLabel value="{!detail}" /> </td> </tr> <apex:variable var="rowNum" value="{!VALUE(rowNum) + 1}" /> </apex:repeat>
List、Mapの宣言時の初期化
List<String> listFoo = new List<String> { 'Red', 'Yellow', 'Pink', 'Green', 'Purple' }; Map<String, String> mapFoo = new Map<String, String>{ 'アントニオ猪木' => '猪木寛至', 'ジャイアント馬場' => '馬場正平', '北斗晶' => '佐々木久子', 'アジャ・コング' => '宍戸江利花' };
Mapの中身の確認
Integer i = 0; Map<String, String> mapFoo = new Map<String, String>(); for (String sKey : mapFoo.keySet()) { System.debug('★' + (++i) + ' : '+ sKey + ' -> ' + mapFoo.get(sKey)); }
ファイル名の末尾に更新日時を付与するVBScript
エビデンスの画像ファイルに日時を付与したくて作ったもの。
以下のコードを拡張子vbsにして保存。
vbsファイルにリネーム対象のファイル(複数可)をD&Dする。
'---------------------------------------- ' ファイル名の末尾に更新日時を付与する '---------------------------------------- Option Explicit ' 引数確認 if WScript.Arguments.Count < 1 then WScript.Quit end if ' FileSystemObject生成 Dim fso Set fso = CreateObject("Scripting.FileSystemObject") Dim targetPath, changePath For Each targetPath In WScript.Arguments ' パスがファイルで、存在する場合に処理 if fso.FileExists(targetPath) then ' 更新日付を付与したパスを取得 changePath = createNewFilePath(targetPath) ' リネーム Call fso.MoveFile(targetPath, changePath) ' コピー 'Call fso.CopyFile(targetPath, changePath) end if Next '------------------------------ ' 更新日付を付与したパスを生成 '------------------------------ Function createNewFilePath(targetPath) Dim fo Set fo = fso.GetFile(targetPath) ' ファイル更新日時取得 + 不要文字削除 Dim lastModified lastModified = fo.DateLastModified lastModified = Replace(lastModified, "/", "") lastModified = Replace(lastModified, ":", "") lastModified = Replace(lastModified, " ", "_") ' ファイルパス分割 Dim targetDir Dim targetBaseName Dim targetExt targetDir = fso.GetParentFolderName(targetPath) targetBaseName = fso.GetBaseName(targetPath) targetExt = fso.GetExtensionName(targetPath) ' 変更後ファイルパス生成し、返却 createNewFilePath = targetDir & "\" & targetBaseName & "_" & lastModified & "." & targetExt End Function