プログラマ38の日記

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

Java: int から byte と byte から int の変換

急に忘れてしまうので、備忘メモ

 

intからbyteは、キャストする。

    int intval1 = 255;
    
    byte byteval1 = (byte)intval1;

 

byteからintは、ビット演算または、Byte.toUnsignedInt を使う

    byte byteval2 = -1;
    
    int intval2 = byteval2 & 0xFF;
    
    int intval3 = Byte.toUnsignedInt(byteval2);

 

Javaのファイル操作で read の結果が int で そのintの値をbyteで扱いたいときにいちいち調べたりしてしまいます。。 そろそろファイル操作のreadの結果をbyteで返すメソッド追加されないかなー。 なんで int で返ってくるんだろ。。

Salesforce/Excel: アプリケーションのタブを一覧表示するマクロを作成しました

どのタブをどのアプリケーションで使っているか一覧で欲しいなと思い、アプリケーションのタブを一覧表示するマクロを作成しました。

ダウンロードはこちらからです。

 

 機能は、アプリケーション毎のタブを一覧にします。

 

アプリケーションのタブを一覧表示

マクロの操作感は次の通りです。(以前から作成しているマクロと同じです)

Salesforceの接続情報を指定
②通信設定を指定
③アプリケーションタブ取得ボタンをクリック後アプリケーション毎のタブを取得

 

f:id:crmprogrammer38:20180814231726p:plain

 

表示項目は、次です

[アプリケーション]

  • Name:物理名
  • Label:表示ラベル
  • navType:ナビゲーション種別
  • utilityBar:UI種別
  • utilityBar:ユーティリティバー名
  • description:説明 

[タブ] 

  • Name:物理名
  • Label:表示ラベル

 

フィルタを使う想定で、1つのアプリケーションに複数のタブがある場合はそれぞれのIタブにアプリケーションの情報をつけています。

工夫した点は、アプリケーションの属性とタブの表示ラベルは、オブジェクトのAppDefinitionとTabDefinitionの情報も使っています。

というのもメタデータAPIのreadMeadataを使っているのですが、それだけでは表示ラベルが取得できないものがあったからになります。

 

最後に

 

SalesforceAPI操作を目的にVBAを大分書くことができました。今回のVBAでは連想配列や通常の配列などを使ってみました。(今さら感がとても強いですが) 

そもそもVBAのfunctionでは戻り値は、関数名に代入する書き方をします。(まだ慣れないです。一生慣れることはなさそうです。。)

functionの戻り値でオブジェクトを戻す際には、関数名の代入にもsetが必要というところで結構はまりました。エラーの箇所の特定も大分難しいと思いました。

 

Excel VBAは、Pythonが使えるようになるなどの情報もありますので期待して待とうと思います。

 

雑記: はてなのHTML編集ではまったこと( の文字)

色々なソースコードを記載してきましたが、自分の記載したソースコードをコピーして使おうとして気がつきました。
html編集で「 」にすると文字コードで「C2A0」という文字で表示されるんですね。。


わざわざ半角スペースを「 」に変換して貼り付けていたのが仇となりました。
今までのせてきたものは全部直そうと思います。
良い機会だから<code></code>ではさむようにしとこ。

150程度しか記事はないけど意外と大変です。。

Salesforce/Excel: プロファイルIPアドレスの制限を一覧表示するマクロを作成しました

各プロファイルにどのIPアドレスの制限がかかっているか一覧で欲しいなと思い、プロファイルのIPアドレスの制限を一覧表示するマクロを作成しました。

ダウンロードはこちらからです。

 

 機能は、プロファイルに対してのIPアドレスの制限を一覧にします。

 

プロファイルIPアドレスの制限の一覧を表示

マクロの操作感は次の通りです。(以前から作成しているマクロと同じです)

Salesforceの接続情報を指定
②通信設定を指定
③プロファイルIPアドレス制限取得ボタンをクリック後IPアドレス制限を取得

f:id:crmprogrammer38:20180801093952p:plain

 

表示項目は、プロファイル名(メタデータのfullName)、カスタムかどうか、ユーザライセンスと、IPアドレス制限情報になります。

 

フィルタを使う想定で、1つのプロファイルに複数のIPアドレスの制限がある場合は、それぞれのIPアドレスの制限にプロファイルの名前をつけています。

 

最後に

プロファイルの名前は、メタデータのfullNameです。例えば「システム管理者」は「Admin」と表現されますのでご注意ください。

 

セキュアにSalesforceを使いたい場合はIPアドレスの制限がとても有効です。設定を間違ったり、SandboxからプロファイルをリリースしたりなどでIPアドレスの制限がおかしくなってないかチェックするのに使えるかなーと思っています。

 

後、動すと結構時間がかかります。

プロファイルのメタデータをreadMetadataで取得すると項目レベルセキュリティなどその他のプロファイルの属性も取得しており、通信の量が多くなっていることが原因の一つだと思います。

 

メタデータのretrieveならプロファイル単独で取得すれば項目レベルセキュリティなと他の情報は取得しないのですが、readMetadataはプロファイルの設定は全て取得する設計のようです。

IPアドレスの制限だけ使うには、情報量が多いですが、うまく作ればプロファイルの様々な設定をEXCELで表示することも可能です。

 

CSV: Excelで開く際に、ゼロサプレスや日付変換を回避する

CSVファイルは、大体Excelに関連付けがされていてダブルクリックするとExcelで開きます。
Excelで中身を確認できるのはとても便利ですが、次のようになってしまい使いづらいことがあります。
CSVの文字は「0001」なのに、Excelでは「1」となる
CSVの文字は「2000-01」なのに、Excelでは日付の「2000/1/1」となる

この現象は数式扱いにすると回避できます。


テキストが変換されてしまうCSVの中身

"0001","2000-01"

Excelで開いた場合の表示

f:id:crmprogrammer38:20180711102325p:plain
ゼロサプレスされるのと、勝手に日付変換されてしまいます。


テキストを数式扱いにしたCSVの中身

="0001",="2000-01"

Excelで開いた場合の表示

f:id:crmprogrammer38:20180711102436p:plain

セルは数式の値でcsvの文字列がそのまま表示されます。

 

気をつけること

ただし、数式扱いにしなければ正しく表示される値でも、数式扱いにすると表示がおかしくなる場合があります。

おかしくなるのは、文字列中にカンマ(,)や改行( )がはいる場合です。


通常のCSV

"000,000,000","AAAAA
BBBBB"

Excel表示

f:id:crmprogrammer38:20180711102214p:plain
正しく表示されます

 

数式に変更

="000,000,000",="AAAAA
BBBBB"

Excel表示

f:id:crmprogrammer38:20180711102123p:plain
表示が崩れてしまいます。


この現象を回避するため、テキスト内のカンマと改行も数式で表現しておく必要があります

="000" & char(44) & "000" & char(44) & "000",="AAAAA" & char(10) & "BBBBB"

 ※カンマはchar(44) で、改行はchar(10)で表現しています。

Excel表示

f:id:crmprogrammer38:20180711102106p:plain

最後に

テキストを数式扱いしたCSVは連携用途で扱えません、Excelでの表示用途に限定したやり方になります。

業務ユーザにCSVを配布した際にゼロサプレスされては困る、勝手に日付変換されたら困る項目に限定して数式扱いにするのがいいのかなと思います。

Salesforce: レイアウト項目一覧の取得Excelマクロでミニページレイアウトの表示を追加しました

レイアウトの一覧とレイアウト項目 を取得するExcelマクロを以前作成しました。

レイアウト項目は、詳細項目と関連リストを対象としていたのですが、ミニページレイアウトの項目の追加しました。

 

ダウンロードはこちら からになります。

 

次のようにレイアウト項目でミニページレイアウト項目とミニページレイアウトの関連リストを表示を追加しました。

 

f:id:crmprogrammer38:20180620195657p:plainf:id:crmprogrammer38:20180620195747p:plain

 

[前回作成時の記事]

crmprogrammer38.hatenablog.com

 

最後に

ページレイアウトを設定する時に、ミニページレイアウトの設定はあまり深く考えないで項目を置いておくことが多いです。

そして、レコードタイプの追加にあわせてレイアウトを増やしていくと、見直し作業が意外と手間な時があります。

そんな時に使えるかなーと思います。

といっても、メタデータAPI名を一覧で表示しているだけで、ラベルの表示はしてなくてあまり使いやすくはないですけどね。

Salesforce: Lightningレコードページの割り当てをリリースする

結論として、Lightningレコードページの割り当てをリリースするには、「オブジェクト」「Lightning アプリケーション」をリリースする必要があります。

 

メタデータでLightningレコードページの割り当てがどこに記載されているかを確認したところ、オブジェクトとLightning アプリケーション(メタデータのCustomApplication)に情報が記載されていました。

 

メタデータの詳細

まず、Lightningレコードページの割り当ては次の内容です。

f:id:crmprogrammer38:20180616223338p:plain

  • 組織のデフォルト
  • アプリケーションのデフォルト
  • アプリケーション、レコードタイプ、プロファイル

表示の優先度は下からなので、「アプリケーション、レコードタイプ、プロファイル」を指定していれば、組織のデフォルトより優先されて表示されます。

 

上記の内容はメタデータ上では次のようになっています。

 

組織のデフォルト(メタデータ:オブジェクト)
    <actionOverrides>
        <actionName>View</actionName>
        <comment>Action override created by Lightning App Builder during activation.</comment>
        <content>LightningレコードページのAPI</content>
        <formFactor>Large</formFactor>
        <skipRecordTypeSelect>false</skipRecordTypeSelect>
        <type>Flexipage</type>
    </actionOverrides>

 

アプリケーションのデフォルト(メタデータ:アプリケーション)
    <actionOverrides>
        <actionName>View</actionName>
        <comment>Action override created by Lightning App Builder during activation.</comment>
        <content>LightningレコードページのAPI</content>
        <formFactor>Large</formFactor>
        <skipRecordTypeSelect>false</skipRecordTypeSelect>
        <type>Flexipage</type>
        <pageOrSobjectType>オブジェクトのAPI</pageOrSobjectType>
    </actionOverrides>

 

 アプリケーション、レコードタイプ、プロファイル(メタデータ:アプリケーション)
    <profileActionOverrides>
        <actionName>View</actionName>
        <content>LightningレコードページのAPI</content>
        <formFactor>Large</formFactor>
        <pageOrSobjectType>オブジェクトのAPI</pageOrSobjectType>
        <recordType>オブジェクトのAPI.レコードタイプのAPI</recordType>
        <type>Flexipage</type>
        <profile>プロファイル名</profile>
    </profileActionOverrides>

 

最後に

今までのプロファイル・レコードタイプ別のレイアウト割り当てで、ページの項目の表示を変更した後に、さらに、アプリケーション・レコードタイプ・プロファイルでLighningレコードページで表示の使い分けができて便利です。

が、リリース時の確認も本当に大変だなーと思いました。(アプリケーションをリリースしないとなると手動になってしまいますし)