crmprogrammer38の日記

主にDWHやSalesforceのプログラムメモです。

【Salesforce】コマンドラインのメタデータのエクスポートツールのAPIバージョンをあげました(apiver40.0)

Summer'17(apiver40.0)のエクスポートツールはこちらです。 api39.0のものや、使い方は前回の記事を参照ください。 crmprogrammer38.hatenablog.com

【Java】wscでSalesforce APIを使用する

まずはサンプルコード ConnectorConfig connectorConfig = new ConnectorConfig(); String soapEndpoint = "https://login.salesforce.com/services/Soap/u/39.0"; connectorConfig.setAuthEndpoint(soapEndpoint); connectorConfig.setManualLogin(true); c…

【Java】apache cxfでSalesforce APIを使用する

まずはサンプルコード URL wsdlurl = Soap.class.getClassLoader().getResource("/partner.wsdl"); Soap soapBinding = new SforceService(wsdlurl).getSoap(); BindingProvider bp = (BindingProvider)soapBinding; bp.getRequestContext().put(BindingProv…

【Java】wsimportでSalesforce APIを使用する

まずはサンプルコード Soap soapBinding = new SforceService().getSoap(); WSBindingProvider provider = (WSBindingProvider)soapBinding; Map<String, Object> reqContext = provider.getRequestContext(); reqContext.put(WSBindingProvider.ENDPOINT_ADDRESS_PROPERTY, </string,>…

【Java】axis2でSalesforce APIを使用する

まずはサンプルコード String url = "https://login.salesforce.com/services/Soap/u/39.0"; SforceServiceStub soapBinding = new SforceServiceStub(url); Options options = soapBinding._getServiceClient().getOptions(); options.setProperty(HTTPCons…

【Java】axis1.4でSalesforce APIを使用する

まずはサンプルコード SoapBindingStub soapBinding = (SoapBindingStub)new SforceServiceLocator().getSoap(); soapBinding._setProperty(org.apache.axis.transport.http.HTTPConstants.MC_ACCEPT_GZIP , "true"); soapBinding._setProperty(org.apache.a…

【Java】色々なJavaライブラリでSalesforceAPIを使う

SOAP APIのJavaクライアントには、色々なライブラリがあります。それぞれのJavaライブラリでSalesforce APIを使ってみた結果をまとめてみます。 サマリ Java ライブラリ SOAP API Metadata API xsd:intにバインドされる型 データバインディングの性能 Axis1.…

【Salesforce】apex:outputText で 日付/時間型はGMTで表示される

outputTextでは、日付/時間型の項目がGMTで表示される仕様ではまりました。 時間まで出力していれば、ずれてるのは比較的気づくのですが日付までしか表示していなかったため発見に時間がかかりました。。 [日付がずれる書き方] <APEX:OUTPUTTEXT value="{0, date, yyyy/MM/dd}"> <APEX:PARAM value="{!items.datetimefield }"></APEX:PARAM></APEX:OUTPUTTEXT> [日付がずれない書き方] <APEX:OUTPUTTEXT value="{0, date, yyyy/MM/dd}"> …</apex:outputtext>

【Salesforce】 JavaScript FileReaderとsforce.connectionを使って添付ファイルを登録する。

現場写真を保存したり、処理で必要となる書類をPDFで保存したりなどSalesforceにファイルを保存することは多いと思います。 写真はプレビューで確認してから登録したいなど、ファイルを登録する際に便利なのがJavaScriptのFileReaderだと思いますが、FileRea…

【Salesforce】キューをデータローダで作成する。

キューをデータローダで作成したい キューもかなりの数になると画面から設定で作成するのは大変ですし、ミスも増えてくると思います。そこでデータローダでキューを作成する手順の紹介です。 [キューに関連するデータモデル] オブジェクトとキューの登録画面…

【Salesforce】編集ボタンを上書きしたら、参照画面でインライン編集ができなくなることの対策

Visualforceで編集ボタンを上書きしたら、参照画面でインライン編集できなくなるんですね。 [編集ボタン上書き前の参照画面] [編集ボタン上書き後の参照画面] インライン編集できないと不便なので、参照ボタンも次のVisualforceで上書きしてインライン編集が…

【Salesforce】Decimal.round()とDecimal.setScale()は、RoundingModeを指定しないとHALF_EVENです

1円の単位で金額がおかしくなる現象が発生 Decimalのroundは引数を指定しないと、HALF_EVENでした。 RoundingMode.HALF_UPを引数で指定しないと四捨五入になりませんでした。 横着してはいけないですね。。 以下RoundingMode別のround後の値です。 値 Roudin…

【Salesforce】Id.getSobjectType() を使ってオブジェクトを特定する。

親オブジェクトがどれかを判断したいときがある 添付ファイル(Attachment)の 参照先 ID(ParentId) ToDo(Task)の 関連先 ID(WhatId)行動(Event)の 関連先 ID(WhatId) など複数の参照先オブジェクトを指定できる項目があります。 トリガ処理などで、特定のオブ…

【Salesforce】1度のSOQLで選択リストの値(表示ラベル)とAPI 参照名を取得する。

toLabelで表示ラベルを取得する 例えば次のような選択リスト項目「PickTest__c」があります。 1) 項目をselectした場合 選択リスト項目は、オブジェクトには、API 参照名がセットされていて、Apexコードと実行結果は次の通りです。 [Apex] List<Sample__c> rows = [Sele</sample__c>…

【Salesforce】 Excel VBAからSalesforce API呼び出しと、TLS1.0無効化の件

SalesforceとはTLS1.0では通信できない 脆弱性のため、TLS1.0は無効となり、ブラウザの設定変更、APIを使ったアプリケーションの対応が必要となりました。 バージョンアップで対応できるものはいいのですが、VBAは対応が難しいなと思っています。ExcelからSa…

【Salesforce】カスタムボタンで、WebServiceの戻り値をMsxml2.XMLHTTPでsendする際にはまったこと

カスタムボタンで、Msxml2.XMLHTTPを使って別のシステムと接続する際にはまったことのメモになります。 やりたかったことは、 1.カスタムボタンで、文字列を戻すカスタムWebServiceをコール。 2.戻り値で取得した文字列を、Msxml2.XMLHTTPのsendで別シス…

【Salesforce】コマンドラインのメタデータのエクスポートツールを作りました。(apiver39.0)

メタデータを使うシーンは多い 1.開発時のバックアップ 2.デプロイ用のモジュール 3.モジュールリリース後の確認 上記のような場面で何かと必要となるメタデータですが、「Force.com IDE」や「Force.com Migration Tool」のメタデータダウンロード機能…

【Salesforce】Java8のバージョンを上げたらSalesforceIDEで通信エラーが発生した件

Salesforceへproxy host, proxy port, prox yuser, proxy passwordを指定して接続しています。Java8のバージョンを上げたら次の接続エラーが出たので回避策のメモです。 [接続エラー内容]Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 authe…

【Salesforce】ガバナ制限対策 static変数を使ってSOQLの回数を減らそう

Salesforceでは、1つのApex トランザクションでのSOQLの回数制限があります。 Salesforceのstatic変数は、スコープがトランザクションであることを利用してSOQLの発行回数を次の方法で少なくできます。 1.設定情報のオブジェクトへのSOQLを一度で済ます。…

【Salesforce】apexのstatic変数と、javaのstatic変数の違いでとまどったこと

私はjavaのプログラムを書くことが多いのですが、javaのstatic変数とapexのstatic変数の違いにとまどいました。 javaのstatic変数は、Classで保持する変数で、例えばWebアプリケーションであれば、そのWebアプリケーションの中で1つの値を保持できて、複数…

【Salesforce】メモ & 添付ファイルの非公開のチェックボックスは本人に限定する場合に便利

メモ & 添付ファイルには、非公開のチェックがあります。 この非公開にチェックを入れた後には、プロファイル>システム管理者権限の ・すべてのデータの参照 ・すべてのデータの編集 の権限を持つ人は参照できますが、それを除くと、本人以外は見えなくなり…

【Salesforce】ページレイアウトの関連リストのレコードに条件をつける。

Salesforceの標準のページレイアウトの関連リストは、参照可能なレコード全て表示されますが、条件に該当するレコードだけ表示したい時があります。 例えば、その顧客の仕掛中の商談だけ表示する、または、現在対応中のケースだけ表示するなどがあると思いま…

【Salesforce】PDFで日本語で折り返しを行う

SalesforceのPDF出力で日本語を表示すると折り返しがされなくて、レイアウトが崩れてしまう現象があります。 結論としては、日本語の文字と文字の間にhtmlタグの<wbr/>を入れることで対処できます。 次がhtmlタグの<wbr/>を入れる前と入れた後での表示の違いになります。</wbr/></wbr/>…

【Salesforce】項目IDの一覧を取得する。(初期値をセットする時に使う用)

エンティティ定義(EntityDefinition)の子オブジェクトに、項目定義(FieldDefinition )があります。項目定義(FieldDefinition )をselectすると、編集画面で初期値をセットする時に使う項目IDが取得できます。 Select EntityDefinitionId ,DurableId ,Qualifie…

【Salesforce】オブジェクトのキープレフィックス(KeyPrefix:IDの頭3桁)の一覧を取得する方法

Salesforceの開発をしているとオブジェクトを特定する3文字のKeyPrefixが必要な時があります。自分のよく使う方法を書こうと思います。 1.オブジェクト情報の格納しているオブジェクトをselectする。 オブジェクト情報は、エンティティ定義(EntityDefiniti…

【Excel】セルの値を数式で比較する時に、=(比較) と exact関数の違いではまったこと

私はプログラマーなので、プログラムの処理結果を期待値と比較する作業をかなりの頻度で行います。 そういう作業ではExcelのセルとセルの値を比較するのですが、 =( セル1 = セル2 ) での比較と、 = exact( セル1 , セル2 ) の比較で挙動が違いはまりました…

【Excel】VBAのround関数ではまったこと

まとまった計算をするのにVBAは便利なので、ちょっとした時に書きます。 ですが、がっつりVBAで開発すること自体は少ないので細かなところではまりました。 はまったのは round 関数 数式のround関数はround_half_upなのですが、 VBAのround関数はround_half…

【TERADATA】BIツールではViewで定義しよう

まずTERADATAでは、次のようにViewを定義します。 REPLACE VIEW SampleView ( field1 ,field2 ,field3) asLOCKING TABLE SampleTable FOR ACCESSselect field1 ,field2 ,field3from SampleTable; 上の赤の太字の記載は、テーブルがロックされててもデータを…

【DWH】データモデル(9.1から8にとらわれすぎない。)

DWH

この記事は、前回書いたデータモデリングの9つのことのラストです。 crmprogrammer38.hatenablog.com 思うことを書いてきましたが、データモデルのシンプルでわかりやすいガイドラインとしてスタースキーマモデルがあると思います。 1つ1つ場合分けをして…

【DWH】データモデル(8.ナチュラルキーを基本とし、サロゲートキーはピンポイントで使う。)

DWH

この記事は、前回書いたデータモデリングの9つのことの8つ目です。 crmprogrammer38.hatenablog.com DWHでは、サロゲートキーを使う場合があると思います。 個人的にサロゲートキーをポイントを絞ったほうがいいように感じています。 というのは以下のよう…

【DWH】データモデリング(7.先週との比較値、先月との比較値、前年との比較値などは、BIツールの機能を利用する。(機能がないならデータマートを作ろう))

DWH

この記事は、前回書いたデータモデリングの9つのことの7つ目です。 crmprogrammer38.hatenablog.com ハイエンドのBIツールは、複数のファクトの検索結果をBIツール側で結合する機能を持っています。 その機能を利用すると、データマートをたくさん用意する…

【DWH】データモデリング (6.ファクトは極限まで小さくする。)

DWH

この記事は、前回書いたデータモデリングの9つのことの6つ目です。 crmprogrammer38.hatenablog.com ファクトテーブルは、DWHでは一番件数が多くなるテーブルなので、1レコードで数バイトの違いが、最終的に数ギガバイトの違いになって現れてきます。 なの…

【DWH】データモデリング (5.ディメンションを大きくし過ぎない。)

DWH

この記事は、前回書いたデータモデリングの9つのことの5つ目です。 crmprogrammer38.hatenablog.com この辺りからは、ゆるくモデリングしようよという内容になっています。 ディメンションと結合するのはファクトだけで、ディメンションからさらにディメン…

【DWH】データモデリング (4.結合するキーは極力サイズを小さくする。)

DWH

この記事は、前回書いたデータモデリングの9つのことの4つ目です。 crmprogrammer38.hatenablog.com 件数が多ければ多いほど結合の処理時間がかかってきます。 なので、物理的に問題がないなら結合するキー項目のサイズを極力小さくします。 具体的には、 …

【DWH】データモデリング (3.ヘッダと明細の構成のファクトは1つのファクトに結合する。)

DWH

この記事は、前回書いたデータモデリングの9つのことの3つ目です。 crmprogrammer38.hatenablog.com ヘッダテーブルと明細テーブルの構成でトランザクションを構成する場合は多いと思います。 そういう時は、ヘッダテーブルと明細テーブルを結合して1つの…

【DWH】データモデリング (2.ディメンションとファクトは、内部結合にする。)

DWH

この記事は、前回書いたデータモデリングの9つのことの2つ目です。 crmprogrammer38.hatenablog.com 安定した性能にするなら内部結合です! DWHだと、ファクトの件数が多くて、ディメンションの項目に指定された検索条件を元に、一番最適なファクトの絞…

【DWH】データモデリング (1.ディメンションとファクトは、物理的に1:Nで結合する。)

DWH

この記事は、前回書いたデータモデリングの9つのことの1つ目です。 crmprogrammer38.hatenablog.com まず、物理的に1:Nで結合するという点について以下を示しています。 ・ディメンションとファクトで結合する際に、ディメンション側の結合キーはユニー…

【DWH】スタースキーマをベースにあらためて考えてみたデータモデリングの9つのこと

DWH

DWHのデータモデルでとても有名な"スタースキーマ"。 でも、アプライアンスDBを導入したんだからきちんと正規化した方が後々使いやすいといった意見もあったりします。 私は、スタースキーマはとてもシンプルでわかりやすく、そして結合が少なくて使いやすい…

【DWH】BI/DWHのプロジェクトの作業で思うこと

DWH

私の経験として、BI/DWHのプロジェクトは他の業務パッケージのプロジェクトに比べて難しくて失敗しやすいなーと考えています。 明確に、なぜ失敗しやすいのかといった分析結果があるのかもしれませんが、個人的に思うことをつらつらと書いていこうと思います…

【雑記】DWHのアプライアンスDBについて思うこと

TERADATAについての記事を書いてきましたが、他のDWHのアプライアンスDBはどうなんだろうなと思いました。 ただ、調べると、Oracle exadataとTERADATA以外は情報が少ないので、この2つの争いになってるように思います。 TERADATAからOracle exadataに移行し…

【TERADATA】TERADATAにデータを入れるツールを作ったよ(ACCESSのデータをTERADATAにロードできます)

開発中に手持ちのExcelデータをTERADATAに入れたいことは多々あります。 ちょっとした件数(10万件程度)を入れるのに便利なツールの紹介です。 通常TERADATAに入れるやり方は、 1.CSVファイルにして、FASTLOADや、MULTILOADのスクリプトを書いてデータを…

【TERADATA】Aggregate Join Indexでさらに検索を早くする

Join Indexはクエリーリライト用にあらかじめ結合、集計しておく仕組み TERADTAに、Join Indexという機能がある。 これはOracleのMaterialized Viewをクエリーリライトに特化したような機能で、あらかじめ結合や集計をした結果を保持する。 もちろん、元のテ…

【TERADATA】 他のテーブルの値で更新するUPDATE文

UPDATEの文法って、DB毎に癖があって覚えられないのでメモ。 UPDATE [更新するテーブル] FROM [更新元テーブル]SET [更新するカラム] = [更新元テーブル].[更新元カラム]WHERE [更新するテーブル].[結合カラム] = [更新元テーブル].[結合カラム]; TERADATAで…

【TERADATA】 大きいテーブル同士を結合する時に結合条件のカラムがそれぞれPrimary Indexだと結合が最速になります

TERADATAは、データを分散している TERADATAは、データを分散させて管理していて、Primary Indexに指定したカラムを元に分散させている。分散された1つはAMPと呼ばれ、1つのDBに複数AMPがある状態となります。(詳細は企業のサイトにあると思います) デー…

【TERADATA】 TERADATAの拡張SQL構文のQUALIFY句は、他のDBでも使えるといいなと思う

TERADATAは分析関数の値でさらに抽出できる TERADATA拡張のQUALIFY句がある。 QUALIFY句を使って、分析関数の値でさらに条件をかけることができる。 select productcode , ammount, rank() over(order by ammount desc)from samplequalify rank() over(order…

【TERADATA】SQLで改行やタブをコードで指定する

文字コードで改行やタブを指定したい Oracleのchr関数のようなものを探していましたが、関数はなく次のように書けることがわかりました。 --改行コード select 'AAA' || '0A'XC || 'BBB' --Tab select 'AAA' || '09'XC || 'BBB' 独特だなー。

【TERADATA】 テーブルの結合や、文字の連結処理では文字コードが揃ってないと遅くなる

文字同士で処理する際に、文字コードが揃っていることを確認しよう 以前、TERADATAではカラム単位に文字コードが指定できるということを書きました。 crmprogrammer38.hatenablog.com カラムをLATINで定義できれば、UNICODEの半分のサイズとなるので、 ・デ…

【TERADATA】 JDBCのFASTLOADモードを使おう

TERADATAのJDBCドライバにはFASTLOADモードが用意されています。 TERADATA12頃から、JDBCでFASTLOADモードが追加されました。 crmprogrammer38.hatenablog.com 前回TERADATAにJDBCを使ってデータをいれるときは、addBatchを使ってまとめて登録した方が早いと…

【TERADATA】 1件ずつinsertは性能が著しく落ちるよ

TERADATAは、大量データを処理するようになっている TERADATAへのデータロードは、ファイルからであれば、FASTLOADやMULTILOADなどを使います。 ETLツールで他のデータベースからデータを取得して、TERADATAに入れる処理を作成することも多いと思います。 ET…

【TERADATA】 WindowsOSで、JDBC接続では、hostsファイルに複数Nodeを定義する

TERADTAのJDBCで複数ノードを指定する ODBC接続では、ODBCの設定で複数ノードを指定しますが、JDBC接続ではhostsファイルに指定します。 [hostsファイルへ追記] ノードのIPアドレス ホスト名 JDBCの接続名+cop+連番 10.50.50.101 tera1 teracop1 10.50.50.10…