Salesforce VFのpageBlockTable TableHeader float

Salesforceのページに、ページの高さが足りない場合、ページ内DivのScroll利用して、データを見たい場合、
Tabel Header固定したい、その場合、下記方法で実見しました
目的、下記様な画面を作成したい場合

条件:
pageBlockTableで、一覧データを表示する(直接Html/RepeatもOK)

呼び出し方法
VFページ

<apex:outputPanel layout="block" style="overflow:auto;width:100%; height:300px;" id="rsTablePanel" >
<apex:pageBlockTable value="{!rsInfoList}" var="rs" id="rsTable" width="100%">
xxxxxxxxxxxxxx
</apex:pageBlockTable>
</apex:outputPanel>

Call :

———————————————–

<apex:includeScript value=”{!$Resource.JqueryLib}”/>
<apex:includeScript value=”{!$Resource.HeaderFloat}”/>
<script>
$j = jQuery.noConflict();
$j(document).ready(function() {

$j(“[id$=rsTablePanel]”).chromatable({scrolling: “no”, uniqueIdVal: “Float”});
$j(“[id$=rsTableFloat]”).width($j(“[id$=rsTable]”).width() + 2);

});
</script>

—————————
説明:rsTable <- pageBlockTableのID
uniqueIdVal->新たHeaderのID一部
rsTableFloat→新たHeaderのID: pageBlockTableのID + uniqueIdVal

Javascript Lib(HeaderFloat)
————————————————–

headerFloat

Jquery勉強サイト[よく使えるJquery Plugin]

http://www.skuare.net/test/jQuery_5.html

http://www.skuare.net/test/jTableHover.html

MessageBox:

http://jquerymsgbox.ibrahimkalyoncu.com/

download:   jquery.msgBox(v1.0)

Option Confirmable Values Description
content any string the message text. as default:’Message’
title any string the title of the message as default:’Warning’
type ‘alert’,’confirm’,’error’,’info’,’prompt’ type of the message will be shown. as default:’alert’
autoClose boolean values true for activating auto-closing, else false. as default:false
timeOut milisecons auto-close timeout. as default:content.length * 70
showButtons boolean values true for displayin buttons on message, else false. as default:true
buttons array format:[{value:”Button1″},{value:”Button2″}]. as default:[{value:”Ok”}]
success callback a callback function that passed the value of the button has been clicked.
beforeShow callback a callback before message shown.
afterShow callback a callback after message shown.
beforeClose callback a callback before message closed.
afterClose callback a callback after message closed.
opacity a value 1 between 0 the css property of the back panel of message box. as default:0.1

VFのDataListへRadioBox様なCheckBox実装

Script:

<apex:includeScript value="{!$Resource.jQuery}"/>

$j = jQuery.noConflict();
$j(document).ready(function() {

// CheckBox Select
var selectedChkbox;

$j("[id$=':type4check']").each(function (index, domEle) {
if ($j(this).attr('checked')) selectedChkbox = $j(this).attr('id');
});
$j("[id$=':type4check']").click(function(event){
if($j(this).attr('checked')){
if ($j(this).attr('id') != selectedChkbox) {
//$j(selectedChkbox).removeAttr('checked');
document.getElementById(selectedChkbox).checked=false;
}
selectedChkbox = $j(this).attr('id');
// Call Action Script
refreshActUsrList();
} else {
event.preventDefault();
}
});
});

ページ:

<apex:pageBlockTable value="{!xxxList}" var="ret" style="width:100%" id="typeBlock">
<apex:column >
<apex:facet name="header"></apex:facet>
<apex:inputCheckBox value="{!xxxx}" id="type4check"/>
</apex:column>
<apex:column >
<apex:facet name="header"><apex:outputText value="xxxxx"
styleClass="labelCol" /></apex:facet>
<apex:outputText value="{!ret.cnt.fieldzzz}" styleClass="labelCol" />
</apex:column>
<apex:column >
<apex:facet name="header"><apex:outputText value="xxxxxx"
styleClass="labelCol" /></apex:facet>
<apex:inputField value="{!ret.cnt.fieldxxx}" />
</apex:column>
</apex:pageBlockTable>

apex:outputLink 不具合?Browser不具合

apex:outputLink で作成する場合、Mouseで、リンクの上に移動すると、手の形カーソルを表示しますが、下記の場合、手の形カーソルを表示なかった、

<apex:outputLink value=”javascript:void(0)” onClick=”modalPackage()”>
<apex:outputLabel value=”{!$Label.xxxx}” style=”font-weight: bold” />
</apex:outputLink></td>

対応案

<apex:outputLink value=”javascript:void(0)” onClick=”modalPackage()”>
<apex:outputText value=”{!$Label.xxxx}” style=”font-weight: bold” />
</apex:outputLink></td>

apex:outputLabel -> apex:outputTextで文字列を出力

OracleからPowerCenterダウンロード

https://edelivery.oracle.com

Oracle Business Intelligence (10.1.3) Media Pack for Microsoft Windows (32-bit)

Oracle Business Intelligence Data Warehouse Administration Console 10.1.3.4.1 for Microsoft Windows and Informatica PowerCenter and PowerConnect Adapters 8.6.1 for Windows x86 (32-bit) (Part 1 of 2)

Oracle Business Intelligence Data Warehouse Administration Console 10.1.3.4.1 for Microsoft Windows and Informatica PowerCenter and PowerConnect Adapters 8.6.1 for Windows x86 (32-bit) (Part 2 of 2)

DataLoaderで、CSVから日付項目をUploadする、注意点

普通は 日付書式:YYYY-MM-DDで、設定して、SFへInsert/Update場合、TimeZone存在するので、SFに予想以外の実際の日付をDBにインサートされる

例:DateLoaderのTimeZone: Asia/Japan その場合、2012-05-01で、SFへInsertすると、実際2012-04-30 15:00でSFに更新しました

対応方法:

DataLoaderのTimeZoneは GMT に設定する

—————-参考——————–
http://help.salesforce.com/apex/HTViewSolution?id=000047804&language=ja

AppExchange データローダで日付データをインポートすると1日前の日付が登録される

ナレッジ記事番号: 000047804

説明
AppExchange データローダで日付項目にデータをインポート(Insert/Update)すると1日前の日付が登録されます。
例えば、「2011-11-20」というデータをインポートすると、Salesforce上では「2011/11/19」と表示されます。これはなぜでしょうか。

解決策

まず、Saleforceのデータベースでは、日付型、日付時間型項目のデータは内部的に全てGMT(グリニッジ標準時)に変換され格納される仕様になっています。

日付型、日付時間型項目へのDataLoaderによるデータ挿入更新時には、DataLoaderのタイムゾーン設定が考慮され、データベースにはGMTへ変換後の値が格納されます。

例えばDataLoaderのタイムゾーン設定がGMT+9:00となっている場合、日付型項目を2011-11-20という値で更新すると、 DataLoaderではこの値を暗黙的に2011/11/20 0:00(GMT+9:00) と解釈しGMTに変換するため2011/11/19 15:00(GMT) になります。日付型項目では時・分が切り捨てられるため、結果として2011/11/19という、マイナス1日された日付で格納されることになります。

DataLoaderのタイムゾーン設定をたとえばGMT-9:00とされて日付型項目を更新した場合に2011-11-20という値は  2011/11/20 9:00(GMT)に変換されるので、日付型でもマイナスされることはありません。同様にタイムゾーン設定をGMTとされていれば、格納時の時差変換は発 生しません。

なお日付時間型項目に関しては、GMT変換後の値が時・分単位を含め格納されており、画面から参照される場合には再度ユーザ毎のタイムゾーン設定を考慮して時差変換されますため、日付がマイナスされて見えるという現象が起きません。

上記が現状のDataLoaderおよびSalesforceのデータベースの仕様となっております。日付型へのデータ挿入更新時にはこの点を考 慮していただき、下記のようないずれかの方法を採って頂きますようお願い申し上げます。

<「2011/09/01」をSalesforceに登録する方法>
・1日足した日付をインポートする: “2011-09-02”
・9時間足した日時をインポートする: “2011-09-01T09:00:00”
・GMT指定でインポートする: “2011-09-01T00:00:00.000Z” (※「Z」はGMTをあらわします)
・データローダのタイムゾーンを(GMT)グリニッジ標準時に設定してインポートする (下記の手順を参照下さい)

<データローダのタイムゾーン変更手順>
1)データローダのツールバーからSettingsを開く
2)Time Zone に”GMT” を入力する。(日本標準時にするためには”GMT+9:00″あるいは”Asia/Tokyo”と入力する)
3)OKボタンをクリックして設定を保存する。

Salesforceに直接画像表示方法(uploadなし)

『data:image/gif;base64,~~~』形式のデータ(dataスキーム)を生成します。
画像ファイルなどのバイナリデータを Base64 エンコードに変換しています。
data スキーマでは、外部ファイルへのアクセスなしにスクリプト内で完結して画像を表示できるため、
小さなアイコンなどの表示には便利です。

例:

「R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==」画像ファイルからBase64 Encode後の内容
JavaなどLocalからSalesforceへ送信する場合、先にBase64Encodeして、送信する

注意:画像のサイズ制限があります

Javaの例:

public class UploadFileToSalesforce {
private Properties prop = null;
public UploadFileToSalesforce(Properties properties) {
prop = properties;
}
// ファイルを取得して、
public int uploadImgToSaleforce() throws Exception {

// image file path
String inFilePath = prop.getProperty(“ftp.recivePath_1”);
File inPutFile = new File(inFilePath);
//SObject[] updFilesList = null;
List<SObject> updFilesList = null;
try {
if (inPutFile.isDirectory()) {

// 存在するファイルは全部Salesforceにアップロードする
//updFilesList = new SObject[inPutFile.list().length];
updFilesList = new ArrayList<SObject>();
//int index = 0;
for (String fileName : inPutFile.list()) {
File updFild = new File(inFilePath + fileName);
String fileExtent = fileName.substring(fileName.lastIndexOf(“.”) + 1, fileName.length());
System.out.println(fileExtent);
if (“tif”.equals(fileExtent.toLowerCase())) {
String tiffFileName = updFild.getAbsolutePath();
fileExtent = “jpeg”;
String jpegFileName = tiffFileName + “.” + fileExtent;
TiffUtils.TiffToJpg(updFild.getAbsolutePath(), jpegFileName);
updFild = new File(jpegFileName);

}
FileInputStream fi = new FileInputStream(updFild);
byte[] indata = new byte[(int) updFild.length()];
System.out.println(updFild.length());
fi.read(indata);
fi.close();
EMSMANAGER__c item = new EMSMANAGER__c();
//item.setName(String.valueOf(System.nanoTime()));
String imageContent = org.apache.commons.codec.binary.Base64.encodeBase64String(indata);
String data = “data:image/” + fileExtent + “;base64,” + imageContent;
item.setFileContent__c(“<img alt='” + fileName +”‘ src='” + data + “‘ width=’500px’>”);
// updFilesList[index] = item;
updFilesList.add(item);
//index++;

if (updFilesList.size() % 20 == 0) {
SObject[] updObjList = new SObject[20];
for (int i = 0; i < updFilesList.size(); i++) {
updObjList[i] = updFilesList.get(i);
}
saveFileToSfdc(updObjList);
updFilesList.clear();
}
}
if (!updFilesList.isEmpty()) {
SObject[] updObjList = new SObject[20];
for (int i = 0; i < updFilesList.size(); i++) {
updObjList[i] = updFilesList.get(i);
}
saveFileToSfdc(updObjList);
updFilesList.clear();
}
}
} catch (Exception e) {
e.printStackTrace();
}

return 0;
}

public void saveFileToSfdc(SObject[] updFilesList) throws DataGemException, ConnectionException {
// 一ファイル位置レコードにSalesforceにアップロードする
if (updFilesList != null && updFilesList.length > 0) {
// Salesforceに接続する
SalesforceUtil sfHandle = new SalesforceUtil(prop);
sfHandle.connnectSFDC();
SaveResult[] saveRsList = sfHandle.getHandle().create(updFilesList);
for (SaveResult rs: saveRsList) {
System.out.println(“————-” + rs.getSuccess());
com.sforce.soap.enterprise.Error[] errs = rs.getErrors();
for (com.sforce.soap.enterprise.Error err: errs) {
System.out.print(err.getMessage());
}
}
}
}

}

———————————————–
SalesforceのApex側直接の作成

String img = 'data:image/jpeg;base64,' + 'xxxxbase64文字列';
Sobjectxxx item1 = new Sobjectxxx ();
item1.Name = xxxxxxxxxxxxx;
item1.TextareaFieldxxx = '<img src="' + img + '" />';
insert item1;

—————————-java tool ——————–

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;

public class ImageBase64 {
public static void main(String[] args) throws IOException {
ImageBase64 ImageBase64 = new ImageBase64();
ImageBase64.encodeBase64();
}

private void encodeBase64() throws IOException {
File file = new File(“/Users/elegant/Workspaces/Sample/src/rtaImage.jpg”);
InputStream inputStream = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(inputStream);
String base64 = new String(Base64.encodeBase64(IOUtils.toByteArray(bis)));

System.out.println(base64);

}
}