プログラマ38の日記

主にプログラムメモです。

Salesforce: Shift_JISのテキストファイルを作成して添付ファイルに登録する

SalesforceのApexプログラムの中で、Shift_JISのCSVファイルを作成したい時があります。 Salesforceの文字列とバイナリは、StringとBlobを使います。BlobからStringとその逆の変換の関数は用意されていますが、その際のエンコーディングはUTF-8となります。 …

Java: UnixでJavaプログラムを動かした時にはまった思い出

プログラマになって間もない頃、単純なOracleへのデータ連携用プログラムを担当しました。処理はShift_JISのCSVファイルをいくつか値を変換してOracleにロードするものだったので、通常は、1.Oracleへワークテーブルを用意し、2.「sqlldr」でデータを投…

DWH/SQL: データマートの作り方メモ

DWHで使い勝手を向上するため、粒度の異なる複数のファクトを加工して1つのデータマートを作成する時があります。 例えば、次のようなデータマートを作成します。 インプットデータ 商品別、年月別の見込みデータがある。 商品別、年月日別で実績データがあ…

Salesforce: SOQLやビューでよく使う日付の検索条件文字列

ビューやSOQLでは、当日を起点にして何日前や何日後といった条件を指定したい時があります。 たくさんある中でよく使う書き方のメモです。 ビューでの日付の検索条件文字列 Salesforceのリンクはこちらです。 日付の検索条件リテラル コメント 過去n日間 演…

Salesforce/SQL: 検索条件でのnullの扱いの違いについて

Salesforceではデータの取得でSOQLを使います。一般的なRDBのSQLと似ていますが、結合処理や、検索の指定がSQLと異なります。 検索条件でのnullの指定と検索結果について、SOQLとSQLの違いがあるのでメモです。 次のデータをサンプルとしてSOQLとSQLで検索結…

Salesforce: 最終更新日(LastModifiedDate)とSystem Modstamp(SystemModstamp)の違い

最終更新日(LastModifiedDate)とSystem Modstamp(SystemModstamp)は、今まで特に意識もせず、同じタイムスタンプが入っているなーぐらいの認識でした。 ですが、「レコードの作成時に監査項目を設定」を有効化して、最終更新日(LastModifiedDate)に直接タイ…

Salesforce: Communityの共有セットでのデータ共有で気をつけること

Communityで、Customer Communityというライセンスの時に気をつけることのメモです。(Customer Community Plus、Partner Communityは関係ありません) 共有ルールは使えず、共有セットを使う 1に伴い、Sharingのオブジェクトは使えない 1に伴い、共有セットの…

Java: interfaceやabstract classが理解できた時の思い出

最初のプログラム言語はJavaでした。インスタンスやクラス、インターフェースや抽象クラス、キャストなど色々な横文字が大量に出てきて何が何やらわからず、苦労した思い出があります。 ある時なんとなくJavaが理解できた時の思い出です。 インスタンスとは …

Salesforce: 重複ルールで作成・編集を許可している時の、標準画面以外からのデータの登録について

Salesforceで、重複ルールという機能があります。(前はなかったのですが、とても欲しかった機能でした。実装されてちょっと嬉しかったです) 重複ルールの設定次第では、重複レコードが他にあった際に警告を出しつつそのまま保存ができます。 この設定にし…

Excel: セルの表をtableタグで出力するマクロをバージョンアップしました

以前、Excelの表をhtmlのtableタグに変換するマクロを作成しました。 crmprogrammer38.hatenablog.com 使っていくうちにやっぱりこうしたほうがいいかなとか考えていき、次のように改良しました。 マクロの中でセルの値をValueで取得していた箇所をTextで取…

Salesforce: APIの「renderEmailTemplate」「renderStoredEmailTemplate」を使ってみた

前回SalesforceのAPIについて書きました。使ったことのないメソッドが増えているなーと思い、まず「renderEmailTemplate」「renderStoredEmailTemplate」を使ってみました。 「renderEmailTemplate」 String endpoint = "https://login.salesforce.com/servi…

Salesforce: APIで用意されている機能について

SalesforceにはいくつかのAPIが用意されています。こういうことをやりたいときにこれを使えばいいというのがわかるようにまとめてみました。Rest API、Bulk APIは外していて、SOAP APIに限定しました。(APIVer40の時に書いています) メソッド 処理内容 どのA…

SQL: Window関数を理解できた時の思い出2

SQL

前の続きです。 crmprogrammer38.hatenablog.com Window関数では、Windowの中で並び替えをした順番に各行で計算する仕組みがあります。累計の計算を例にします。(BIツールで、ランニングサムの名称がついていたりします) 以下の年別累計の項目は、年毎のWi…

SQL: Window関数を理解できた時の思い出

SQL

はじめて扱ったデータベースは、Oracle8で、その時はWindow関数自体がなく、検索条件と結合条件が入り混じるSQLを書いていました。 その後Oracle9になって、SQLも変化していましたが、Window関数とは距離を置いていました。あまり使う必要性を感じなかったの…

SQL: よくやってしまう間違い(割り算や型変換)

SQL

気を抜くとすぐ忘れてしまうのでメモ。(メモしたから忘れないわけではないですが) 書き方の例でnullif関数を使っていますが、適宜データベースで用意されている関数に置き換えが必要です。 SQLの割り算では分母が0の時はnullに変換する 0除算エラーの対策…

Salesforce: 直接XMLでSalesforce APIを操作する

WebServiceのSOAPメッセージのデバッグについて書きました。 crmprogrammer38.hatenablog.com これを行うことで、SOAPメッセージが拾えるので、xmlをpostして、xmlで結果が返ってくるというシンプルな処理でSOAP APIを行うことができます。wsdlクライアント…

Java: JavaのWebServiceライブラリのクライアントプログラムでSOAPメッセージをデバッグする

前に、いくつかのJavaライブラリでSalesforceのSOAP APIを扱うという内容を書きました。 crmprogrammer38.hatenablog.com さらに追記で、上記のJavaライブラリでSOAPメッセージをデバッグするやり方になります。 Axis1.4 log4j.propertiesで指定します。なの…

Java: 「Apache Velocity」と「StringTemplate」の性能を比べてみる

前回StringTemplateの記事を書きましたが、Apache Velocityと性能を比べてみました。 Apache Velocityではまったこと テンプレートの書き方を忘れていて、テンプレートで変数のプロパティを指定する場合getterが必要でした。。 例えば、Apache Velocityのテ…

Java: 「StringTemplate」ライブラリを使ってみました

Javaで、「StringTemplate」のライブラリを使ってみました。 はじめに Javaのテンプレートエンジンは、Apache Velocityを代表として色々なものがあると思います。VelocityはVTLが使いやすいのですが様々な理由でVelocity以外が使いたいときもあると思います…

Salesforce: Apex開発で最初の頃にやってしまった間違い

Java開発の後、Salesforceの開発を始めたのですが、当初色々間違いや勘違いがありました。思い出すことがあったので書いてみます。 booleanの変数の扱い Javaですとboolean変数は true/false のプリミティブ型で、Booleanと書くとオブジェクトとなりますが、…

SQL: 縦横変換で気をつけていること

SQL

SQLで縦持ちから横持ちへ変換、横持ちから縦持ちの変換を行うことは多いと思います。 横持ちから縦持ちへの変換は、union all を使うことで実現ができ、union allはどのデータベースでも使えるので困ることは特にありません。 ですが、縦持ちから横持ちへの…

Salesforce: ナレッジを一括で公開する

Salesforceのナレッジをまとめて登録し、そのまま公開したい場合があります。 その際のやり方は次のようになります。 ナレッジをまとめて登録する データローダをはじめとするAPIで登録が可能です。 上記の、ナレッジの記事タイプの詳細で表示されているAPI…

Salesforce: SOQLの検索条件で、半角全角の区別ではまったこと

SOQLで検索条件は、半角全角の区別ではまりました。何ではまったかというと、検索条件で指定したのは半角なのに、検索結果に全角も含まれていたからです。 はまった経緯は次です。 半角の"x01"と全角の"x01"は分けてコード登録を行います。 Apex処理内で…

Salesforce: パーセント項目をApexで普通に掛け算すると100倍になる

Salesforceのパーセント項目の使い方を間違って値が100倍になってました。 間違った理由は、数値項目とパーセント項目を単純に掛け算したからで、正しい使い方は、数値項目とパーセント項目を掛け算した後、100で割る必要があります。 例えば、「24%」 とい…

Excel: 複数のExcelファイルのセルに値をまとめてセットするマクロを作りました

同じフォーマットのExcelファイルが複数あって、同じ場所のセルにまとめて更新したい時があります。 例えば、DBのテーブル定義書をテーブル単位にファイルを分けていて、各テーブルのラベルや物理名を特定のセルに入れる場合などがあると思います。 そんな時…

Salesforce: 自動採番項目をupsertの外部ID(externalIdField)として使う

Salesforceで自動採番項目を外部IDにできるようになりました。 Apex内でupsertのキーとして使用できるようになりましたが、DataLoaderをGUIで使う時はupsertの外部IDとして選ぶことができません。 Help | Training | Salesforceの記載には、 データローダは …

雑記: Java開発ではまった思い出(JDBCやlog4J)

久しぶりにJavaを使うことがありました。 だいぶ前に、JavaのWeb開発をしていてその時にはまったことをふと思い出しました。 WebLogicのDataSourceのConnectionをcloseしておらずエラー インスタンスを起動してしばらくすると、DBのConnectionが取得できずエ…

Salesforce: 文字化けの制御で注意したいこと

他のシステムとの整合をとるため、Salesforceで入力できる文字を制限をかけたり、変換したい場合があります。 次のような要件があると思います。 Shift_JISで定義されていない文字をエラーとしたい Shift_JISで定義されていない文字は、全角四角"□"に変換し…

Excel: テンプレートテキスト内の変数を展開してテキスト出力するマクロを作りました

あるテキストの中身を、一部書き換えて別のテキストを作りたい時があります。 例えば、Salesforceでロールや、公開グループ、キューなどを作成する場合に、ファイルの名前とファイル内の一部を変更すればデプロイで新規作成ができます。 ※ロールや公開グルー…

Salesforce: Apexで共有オブジェクト(・・Share)にロールを指定する

Salesforceで特定のユーザにデータを参照・編集させる設定は、共有設定を使うか、Apexで共有オブジェクトを操作するかになります。 共有オブジェクトに特定のユーザのロールを指定したい時があります。 例えば、代表者(User)を入力すると、その代表者は「参…