Adsenseコード

2017-10-27

Salesforceエラーメッセージ集 Apexテスト実行、変更セットリリースエラー等

Salesforce の Apex の実行時のエラーを
書き溜めていきたいと思います。


◆ Apex保存時のエラー

■ Invalid type: CustomObject__Share

オブジェクトに対応する共有設定のオブジェクトを参照したときに、そんなものはない!って言われたときは、下記を確認します。

1.主従関係の項目があるオブジェクトではないか
2.共有設定が更新可能になっていないか

初歩的ではありますが、私は2で少しはまってしまいました・・・。

■ Method does not exist or incorrect signature: void startTest() from the type test

下記のように書き換えたらエラーが解消しました・・・。
バージョンアップの仕様変更かな?

Test.startTest();
...
Test.stopTest();

       ↓↓↓

System.test.startTest();
...
System.test.stopTest();


◆ System.DmlException

■ System.LimitException: DML currently not allowed

■ MISSING_ARGUMENT, Id not specified in an update call: []


以下のようなメッセージが表示されるエラーです。

Update failed. First exception on row 0; first error: MISSING_ARGUMENT, Id not specified in an update call: []


発生条件:
まだ Insert されていないレコードの List を Update した時に発生します。


解決策:
Insert してから Update しましょう。



■ FIELD_INTEGRITY_EXCEPTION, メールアドレスが無効です


以下のようなメッセージが表示されるエラーです。

Insert failed. First exception on row 0; first error: FIELD_INTEGRITY_EXCEPTION, メールアドレスが無効です: ドメイン ... のアドレスを指定してください: [Email]


発生条件:
 組織で指定したドメインに基いたEmailアドレスが設定されないユーザを insert しようとしたときに表示されました。


解決策:
 組織で指定されたドメイン(上記エラー分の「...」の部分)を設定したユーザで insert する。



◆ System.QueryException


■ List has no rows for assignment to SObject


発生条件:
 リスト型ではないsObjectに複数になるクエリ実行結果を
 セットしたときやクエリの実行結果が0件だったときなどに発生する。


参考
https://developer.salesforce.com/forums/?id=906F00000005JdHIAU



◆System.SObjectException


■Invalid field (項目API名) for (オブジェクトAPI名)


発生条件:
 Account.get( 'TestField__c' );
 などオブジェクトに存在しない項目を参照しようとしたときに発生します。
 それ以外には、下記のケースもあるようです。
  http://blog.livedoor.jp/volvic_beer/archives/52118741.html

■Field is not writeable: 主従項目API名


発生条件:
 主従項目で親の変更が禁止されていて、親の変更を実行しようとした時

解決策:
 主従項目の設定で、親レコードの変更を許可をする設定をします。




◆System.EmailException


■endEmail failed. First exception on row 0;

first error: NO_MASS_MAIL_PERMISSION, Single email is not enabled for
your organization or profile.: []

以下のようなメッセージが表示されるエラーです。

System.EmailException: SendEmail failed. First exception on row 0;
first error: NO_MASS_MAIL_PERMISSION, Single email is not enabled for
your organization or profile.: []
Stack Trace: ...

発生条件:
 組織のメールの送信権限で引っかかると発生します。

解決策:
 組織のメールの送信権限をすべてのユーザに設定します。

参考:
 http://blog.livedoor.jp/volvic_beer/archives/52596281.html



◆System.UnexpectedException


■No more than one executeBatch can be called from within a test method.  Please make sure the iterable returned from your start method matches the batch size, resulting in one executeBatch invocation.


テスト実行時に表示されるエラーです。テスト実行時はバッチは1バッチのみ実行が許可されています。

例えば、下記は2バッチ実行されますが、こういった処理はテスト実行ではNGとなります。

<SampleBatchTest>
insert new List<Account>{
    new Account( Name = 1 )
    , new Account( Name = 2 )
};
Database.executeBatch( new SampleBatch(), 1 );

<SampleBatch>
public Database.QueryLocator start(Database.BatchableContext bc) {
return Database.getQueryLocator( [
SELECT
Id
from
Account
] );
}

参考
http://www30304u.sakura.ne.jp/blog/?p=1104


◆リリース時のエラーメッセージ


■field integrity exception: unknown (required must not be specified)


発生条件:
1.外部IDを設定した項目で発生します。
2.Apexで使っている項目で、テキスト項目のデータ型を自動採番に変更しようとするときに発生します。

解決策:
1.一時的に外部ID項目を解除します。
2.Apexの該当箇所を全てコメントアウト&テストコードが通るソースを用意してリリースした上で、反映したいソースをリリースします。
(API名の違う別の項目にすることができればそれが楽ですが、数式、レイアウト、関連リストの設定項目、リストビュー、レポートなど、影響範囲の確認と修正が必要になります)

参考:
 https://web.plus-idea.net/2012/12/salesforce-deploy-field-integrity-exception/

■IF_Stasusは存在しないか、アクションViewの有効な上書きではありません。


発生条件:
 恐らくオブジェクトで設定しているLightningページもしくわVFが、リリース先の環境に存在しないと発生します。

解決策:
 Lightningページを変更セットのコンポーネントに含めるか、Lightningページの割り当てを解除します。

Cannot set sharingModel to ControlledByParent on a CustomObject without a MasterDetail relationship field


発生条件:
 変更セットにカスタムオブジェクトコンポーネントが含まれている場合に発生します。
変更セットに含まれているカスタムオブジェクトの中に、主従関係の子オブジェクトが含まれており、かつその子オブジェクトから親へのリレーションを定義する参照項目が、同じ変更セット内に含んでいないとこのエラーが発生します。

解決策:
 主従関係の子オブジェクトの項目で、親を参照している項目を変更セットに追加します。

参考:
 https://help.salesforce.com/articleView?id=000199646&language=ja&type=1


■Component [force:relatedListSingleContainer] attribute [relatedListApiName]: Could not find related list [MST_KY_YK_Account__r] for entity [Account]


発生条件:
 Lightningレコードページにて子オブジェクトの関連リストを表示するように設定し、かつその子オブジェクトから親へのリレーション項目で、組織間で子リレーション名が異なる場合に発生する。

解決策:
 子リレーション名を修正するか、リレーション項目を変更セットに含めてください。


◆外部連携ツールエラー



■AsyncApiException  exceptionCode='ExceededQuota'exceptionMessage='ApiBatchItems Limit exceeded.'


発生条件:
 外部の連携ツールで24時間以内に1万バッチ以上Salesforce組織に送信すると発生

解決策:
 制限内になるまで待つ。またはSOAP API を使って送信する

参考:
 https://developer.salesforce.com/docs/atlas.ja-jp.212.0.api_asynch.meta/api_asynch/asynch_api_concepts_limits.htm
 https://developer.salesforce.com/forums/?id=906F0000000Ai1QIAS
 https://success.salesforce.com/answers?id=9063A000000DnViQAK

◆デバッグログの容量を超えたとき


■デバッグログを削除して下さい(エラーメッセージ忘れました・・・)


発生条件:
 デバッグログが250MB以上たまると発生します

解決策:
 設定画面のデバッグログの「すべてを削除」ボタンを押してもエラーが解消されない場合、開発者コンソールでクエリを叩き、デバッグログを「Delete Row」で削除します

 以下のクエリで抽出可能です

 SELECT Id FROM ApexLog

参考:
 http://www.subnetwork.jp/blog/?p=1110


2017-10-26

【MySQL】テーブルのストレージエンジンを設定する方法




■以下のエラーが発生


<エラーメッセージ>
「Error Code: 1253. COLLATION 'utf8_unicode_ci' is not valid for CHARACTER SET 'binary'」
<ファンクションの定義>
CREATE DEFINER=`root`@`%` FUNCTION `SUMPlanMM`(projectCode VARCHAR(7) CHARACTER SET utf8, memberName VARCHAR(150) CHARACTER SET utf8, date date) RETURNS double
BEGIN
    DECLARE w DOUBLE DEFAULT 0.0;
    DECLARE c CURSOR FOR SELECT SUM(p.WORKLOAD) FROM aries.ANLY_MemberPlanWorkLoad__c p
        WHERE p.PROJECTCODE__C = @projectCode COLLATE utf8_unicode_ci
        AND p.NAME__C = @memberName COLLATE utf8_unicode_ci
        AND p.RESULTYM__C > @date;
    OPEN c;
    FETCH c INTO w;
RETURN w;
END




■以下を実行


CREATE TABLE `YoteiKosu__c` (
  `ID` char(18) COLLATE utf8_unicode_ci NOT NULL,
  `ISDELETED` tinyint(4) DEFAULT NULL,
  `NAME` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `CREATEDDATE` datetime DEFAULT NULL,
  `CREATEDBYID` char(18) COLLATE utf8_unicode_ci DEFAULT NULL,
  `LASTMODIFIEDDATE` datetime DEFAULT NULL,
  `LASTMODIFIEDBYID` char(18) COLLATE utf8_unicode_ci DEFAULT NULL,
  `SYSTEMMODSTAMP` datetime DEFAULT NULL,
  `LASTACTIVITYDATE` datetime DEFAULT NULL,
  `KAIHATUANKEN__C` char(18) COLLATE utf8_unicode_ci DEFAULT NULL,
  `RESULTYM__C` date DEFAULT NULL,
  `KADOYOTEIKOSU__C` double(8,2) DEFAULT NULL,
  `YOJITSU__C` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `PARTNERMEMBER__C` char(18) COLLATE utf8_unicode_ci DEFAULT NULL,
  `KADOZANTIME__C` int(11) DEFAULT NULL,
  `KADOCOST__C` decimal(18,1) DEFAULT NULL,
  `KADOYOTEI__C` double(8,2) DEFAULT NULL,
  `KEY1__C` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `YOUINSEI__C` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `MEMO__C` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `YOTEIKOSU__C` double(8,2) DEFAULT NULL,
  `JISSEKIKOSU__C` double(8,2) DEFAULT NULL,
  `COMPLETEDATE__C` date DEFAULT NULL,
  `GENKA__C` decimal(18,1) DEFAULT NULL,
  `ANKEN_YOJITSU__C` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ANKEN_TANTOU__C` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `TANTOU_ANKEN__C` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `PRJCODE__C` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ENGINEERIDAPP__C` char(18) COLLATE utf8_unicode_ci DEFAULT NULL,
  `YOTEIESTIMATEDCOST__C` decimal(18,1) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;




■解決の候補


グローバルとセッションで値がずれてる?
http://atsuizo.hatenadiary.jp/entry/2016/08/23/095537







【Salesforce】SOQLの中級者向け使いこなし集

■標準オブジェクトの「子リレーション名」を調べたい


例えば、Event(行動)のサブクエリとして
EventRelation (招集された側の行動)をとってくるSOQL文を書きたいが、 EventRelation の relationshipName (子リレーション名)がわからない時の方法です。



開発者コンソールを開き、上のメニューから
Debug > Open Execute Anonymous Window を開き、
以下を記入して実行する。

Schema.DescribeSObjectResult R = Event.SObjectType.getDescribe();
List<Schema.ChildRelationship> C = R.getChildRelationships();
for(Schema.ChildRelationship cr: C) {
system.debug('@@' + Cr); 
}



表示されたログで「Debug Only」のチェックをオンにし、
デバッグのみを表示します。



以下が出てきます。
getChildSObject=AcceptedEventRelation;
の部分が、Event の子オブジェクトに設定されているオブジェクト名です。

[5]|DEBUG|@@(
Schema.ChildRelationship[getChildSObject=AcceptedEventRelation;  ・・・
Schema.ChildRelationship[getChildSObject=ActivityExtension;  ・・・
Schema.ChildRelationship[getChildSObject=AttachedContentDocument;  ・・・



この中から、
getChildSObject=EventRelation
となっている場所を探すと、以下になります。

14:28:22:012 USER_DEBUG [4]|DEBUG|@@
Schema.ChildRelationship[
getChildSObject=EventRelation;
getField=EventId;
getJunctionIdListNames=();
getRelationshipName=EventRelations;
isCascadeDelete=true;
isDeprecatedAndHidden=false;
isRestrictedDelete=false;
]



このうち、
getRelationshipName=EventRelations;
が、子リレーション名なので、
EventRelations ということがわかります。



Account (取引先)の子の Contact ()の
子リレーション名 Contacts と同様の法則に基づいていますね




参考
ChildRelationship クラス
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_class_Schema_ChildRelationship.htm#!
relationshipName (リレーション名)について
https://developer.salesforce.com/docs/atlas.ja-jp.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_relationships_understanding.htm?search_text=relationshipName






2017-10-25

【Salesforce】活動、行動オブジェクト関連

■Apexでリソースカレンダーの名前を取得したい


以下に参考ページをまとめます
ここではできないという結論が出ている・・・
http://deferloader.blog.uhuru.co.jp/?p=2061
https://developer.salesforce.com/forums?id=906F00000008jcqIAA
https://developer.salesforce.com/forums?id=906F00000008ujFIAQ


一番最後の画像の選択リストのリソース名はどうやって取得しているんだろう・・・
http://soact2.blog.fc2.com/blog-entry-17.html


これは確かリソース名を表示してたようなきがする
http://blog.livedoor.jp/minoaw/archives/2030537.html




■関連するオブジェクトのAPI名


EventRelation 招待元の行動と招待先のユーザを
 紐付けるためのオブジェクト
APP_CALENDAR 公開リソース
DeclinedEventRelation 招集を未回答にしているユーザ
AcceptedEventRelation 招集を参加にしているユーザ
UndecidedEventRelation 招集を不参加にしているユーザ




■SalesforceId のプレフィックスの一覧(公式)


https://help.salesforce.com/articleView?id=000005995&language=ja&type=1








2017-10-23

【ApexTrigger】トリガ処理で標準画面にエラーメッセージを表示させる処理を入れる

トリガの対象のレコードに対してエラーメッセージを付加することで、
beforeトリガとafterトリガの間で実行されるDML操作をせず、
エラーメッセージを表示させる方法です。


beforeTrigger のロジックの中で
Trigger.new の一部のレコードに以下の処理をします。


Map<Id, sObject > newMap = Trigger.new;
sObject record = newMap.values();
sr.addError( '表示するエラーメッセージ' );



■ApexPages 名前空間に addMessage(message) する方法

以下の方法で ApexPages 名前空間にメッセージを付加させても
うまくはいかないようです。


下記の方法は、Visualforce のコントローラとして Apex を
記述した場合に使える方法です。


大体の挙動は以下を参照してください。


ApexPages.addMessage( new ApexPages.Message(ApexPages.Severity.CONFIRM,'概要メッセージです' ,'詳細メッセージです' ) );
ApexPages.addMessage( new ApexPages.Message(ApexPages.Severity.ERROR,'概要メッセージです' ,'詳細メッセージです' ) );
ApexPages.addMessage( new ApexPages.Message(ApexPages.Severity.FATAL,'概要メッセージです' ,'詳細メッセージです' ) );
ApexPages.addMessage( new ApexPages.Message(ApexPages.Severity.INFO,'概要メッセージです' ,'詳細メッセージです' ) );
ApexPages.addMessage( new ApexPages.Message(ApexPages.Severity.WARNING,'概要メッセージです' ,'詳細メッセージです' ) );



参考
sObject クラス
https://developer.salesforce.com/docs/atlas.ja-jp.208.0.apexcode.meta/apexcode/apex_methods_system_sobject.htm#apex_System_SObject_addError

ApexPages クラス
https://developer.salesforce.com/docs/atlas.ja-jp.200.0.apexcode.meta/apexcode/apex_methods_system_apexpages.htm?search_text=ApexPages





【Apex】テストクラスで期待されるテスト内容

■以下のテストがされるの期待されています

・単一操作

・一括操作

・ポジティブ動作

・ネガティブ動作

・制限ユーザ



参考
https://developer.salesforce.com/docs/atlas.ja-jp.200.0.apexcode.meta/apexcode/apex_testing_what.htm?search_text=%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8





プログラミングで伸び悩んだ時の処方箋

■階層手法

以下の階層からなる
・クライアント層
  クライアントアプリやブラウザなど
・プレゼンテーション層
  HTML
・ビジネス層
  計算やデータの加工など
・インテグレーション層
  アダプタ
・リソース層
  DBやレガシーシステム、ERPなど



参考
https://www.samuraiz.co.jp/adobeproduct/jrun/docs/jr4/docs/html/Programmers_Guide/designpatterns2.html



■3階層システム 3階層アーキテクチャ

http://e-words.jp/w/3%E9%9A%8E%E5%B1%A4%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0.html



■うまくクラス名をつけるための参考情報 レイヤから考える

https://qiita.com/KeithYokoma/items/ee21fec6a3ebb5d1e9a8






2017-10-20

UML関連

■書けるようにしておくべきUML

アクティビティ図
 処理フローや業務の流れなどを表現する
クラス図
シーケンス図
 クラス図だけではわかりづらい場合に書く
状態遷移図
 組込では必要になる
ロバストネス図
 IFなど


コードレビューをしてもらう際には、
事前にクラス図を書いておくと良い



■アクティビティ図(フローチャート)について
スイムレーンにロールをかく
大事なこと1: ロールの決め方 → 全体の良しあしが決まる
大事なこと2: 箱の粒度を揃える
左上に開始、右下に終了
開始、終了、フォーク、マージはお客さんに提出時に消してしまう
データベースはデータフロー図に書くこと



参考






2017-10-18

覚えておきたい mac OS の定番操作

メモになります・・・

Finder関連


ショートカット
cmd + o ファイルを開く
cmd + ↑ フォルダの上の階層に移動する
cmd + ↓ 選択しているフォルダを開く

URLリンクのファイルを作成する


URLのテキストを選択した状態でFinderにドラッグ&ドロップすると「.webloc」が作成されます。
このファイルを実行すると、設定したURLのページに移動できます。

参考
http://mattintosh.blog.so-net.ne.jp/57174166


キャプチャのショートカット、クリップボードにキャプチャをコピーする方法


画面キャプチャーのショートカットまとめ [Win/Mac]


D&D でファイルをコピーする


mac OS ではファイルを D&D (ドラッグ・アンド・ドロップ)すると
ファイルは移動されますが、

option キーを押しながら D&D することで

ファイルのコピーを行ってくれます。


ファイルのパス名を取得


 macOS の finder からファイルのパスをクリップボードにコピーする方法です。


パスをえたいファイルを右クリックし、
option キーを押します


ファイルをコピーする選択肢の部分が
パス名のコピーになるので、そこをクリックします。


参考ページより


「6. デスクトップを複数作成し、どのデスクトップにアプリを開くかを指定して振り分ける」
なんかは知っておきたいですね。


参考
http://lovemac.jp/blog/1342/



ターミナルからウィンドウの大きさを指定して変更する





参考
https://dev.classmethod.jp/smartphone/iphone/mac-app-resize/






2017-10-17

【Salesforce】リリース方法のいろいろ

■手作業
 変更セット
 Force.com IDE
  Deploy to Server


■ウェブアプリ
 Workbench


■クライアントアプリ
 MavensMate


■Antベース
 Froce.com 移行ツール


■コマンドライン
 Salesforce DX CLI


参考
http://appirio.co.jp/blog-category/tech-blog/force-com%E7%A7%BB%E8%A1%8C%E3%83%84%E3%83%BC%E3%83%AB%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9Fsalesforce%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4/






【Salesforce】参照関係のあるレコードを復元したら、どこまで参照は保持されるか

■親子関係にあるレコードを delete, undelete した時、
どのような挙動になるのかを改めて調査しました




■参照先が削除された場合は項目の値をクリア に設定している場合

子オブジェクトに親オブジェクトの参照項目を作成し、参照項目の
「参照レコードが削除された場合の対処方法」の選択を
「この項目の値をクリアします。 この項目を必須にした場合、
このオプションは選択できません。」を選んだ場合の挙動です



以下の操作をします
1.親レコードを作成
2.子レコードを、親レコードを参照するように作成
3.親レコードを削除
4.削除した親レコードを復元



以下の結果になります
3.この時、子レコードの親への参照先項目は、
 Salesforce標準のレコード画面では空白になりました
 またSOQLでクエリを投げて、レコードの参照先SalesforceIDを確認すると、
 参照先SalesforceIDも空白になっていました


4.子レコードの親への参照先項目は復元されていました


※ 3と4の間で、子レコードの親への参照先を別に設定、
 保存をすると、4の復元実行後も間で設定した値は保持されていました
 ごみ箱削除中に新たに値を設定すると
 そちらが優先されるということですね


※ ごみ箱削除中の子レコードの親への参照先項目は空の状態ですが、
 インライン編集で空の状態で再保存しても、4の操作でちゃんと
 リレーションは復元されました。
 


■子から参照されている場合は削除できない に設定している場合

子オブジェクトの参照項目の設定で
「参照関係に含まれる参照レコードは削除できません。」
を設定している場合の挙動です



以下の操作をします
1.子が親を参照するような、親子レコードを作成
2.子レコードを削除
3.親レコードを削除
4.削除した親レコードを復元



以下の結果になります
2.この操作終了後のごみ箱には、子レコードがあり、
 これを復元すると親子関係も保持されます

 
3.この操作終了後のごみ箱には、親レコードのみが
 あり(子レコードは消える)、これを復元すると
 親レコードのみ復元されます
 子レコードは復元もできなくなりました


※ 開発者コンソールでSOQLでクエリを投げると、
 2の操作以後は検索結果に表示されませんでした






2017-10-13

【Salesforce】行動のいろいろ


共有


ロールや公開グループを使った共有ルールは作れません

http://www30304u.sakura.ne.jp/blog/?p=2922
http://divecafe.hateblo.jp/entry/2012/08/24/%E6%B4%BB%E5%8B%95%E3%80%81%E8%A1%8C%E5%8B%95%E3%80%81%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E3%81%A7%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%EF%BC%915%E3%81%AE%E3%81%93%E3%81%A8



代わりに共有設定から「親レコードに連動」を設定して、
関連先のオブジェクトのアクセス権限に連動して共有することはできます



ユーザを追加した場合


ユーザを追加した場合は、Event オブジェクトに
IsChild フラグが true になった状態で
招集したユーザの数だけ Event オブジェクトが作成されます。



参考
https://developer.salesforce.com/docs/atlas.ja-jp.api.meta/api/sforce_api_objects_event.htm



リソースを追加した場合


リソースを追加した数だけ EventRelation レコードが
作成されます



Shared Activities


これを有効にすると、リソースが被って行動を登録しても
登録できるようになります


この場合はリソースが紐付けられた行動を削除して復元しても、
リソースの紐付けも復元されます


他、この状態はトリガ、ワークフロー、データ入力規則を
サポートしなくなります


通常は Shared Activities が有効ではないと思われますが、
反対に Shared Activities が無効の場合、
この場合は親の行動レコードを削除して復元しても、
行動に紐付けられたリソース情報は復元されません
行動を削除したときに、行動に設定されたリソースは削除されます


招集したユーザに関してはどちらの設定にかかわらず、
行動を削除して復元をすると招集ユーザの情報も復元されます



参考
https://developer.salesforce.com/docs/atlas.ja-jp.200.0.object_reference.meta/object_reference/sforce_api_objects_eventattendee.htm?search_text=%E8%A1%8C%E5%8B%95

【Salesforce】データローダを使用して手動で共有ルールを作成する方法

Account__Share オブジェクトに
個別の共有ルールに関するレコードがあるので、
これを操作することにより可能



参考
https://help.salesforce.com/articleView?id=000005614&language=ja&type=1



【Salesforce】よくあるトラブルシューティング集

Lightning アプリケーションビルダーで Chatterコンポーネントが表示されない

Chatterのフィード追跡で「フィード追跡の有効化」をオンにすると Chatterコンポーネントが表示されます。





■レコードの「共有」ボタンが表示されない

オブジェクトの共有設定が「非公開」になっているか確認
https://developer.salesforce.com/forums/?id=906F00000009B59IAE



■サイトゲストユーザのデバッグログがとれない

ブラウザにクッキーを仕込んであげる




【Salesforce】キューについて

■作成したキューごとに、対象のオブジェクトを選択することができる
 ・オブジェクトを選択する部分で目的のオブジェクトが
  表示されないと、そのオブジェクトにはキューを
  利用することができない
 ・特に、 Event (行動)の OwnerId (任命先)に設定して、
  カレンダーの予定を誰でも編集できるようにする
  といったことはできません

2017-10-12

【WordPress】インストール時にデータベース接続確立エラーの解決方法

■前提

MAMP 4.2 WordPress 4.7.5 ■MAMPでバーチャルホストを設定している MAMP でバーチャルホストを設定し、ドキュメントルート直下に WordPress ファイルをコピーしてインストールしている場合になります。 ホストにブラウザで接続し、 データベースの設定を送信した直後に 「データベース接続確立エラー」が 表示されてしまった場合についてです WordPress をインストール時に 「データベース接続確立エラー」と表示されてしまうときは、 「データベースのホスト名」が正しくない可能性があります。 バーチャルホストを設定している場合、 MAMPの設定で MySQL のポート番号を確認し、 8889であれば、 「データベースのホスト名」は、下記の設定をします 127.0.0.1:8889 参考 https://www.netassist.ne.jp/blog/?p=1277

【Salesforce】数式項目でできることを挙げてみた


Salesforce において重要なポイントと言っても過言ではない数式について、基本的なことからこんなこともできるのか というものまでメモしてみました。

Salesforce の数式は、基本的に Excel の関数と似ているので、Salesforceの数式で情報が不足する場合は、Excelの関数のソリューションとして検索するといい情報が得られるかもしれません。



◆テキスト関連


■文字をべた書きしたい


""で囲います
"テキスト"



■文字列を結合したい


"&"で結合します
"テキスト"&"テキスト"



■日付項目などのデータ型変数をテキスト表示したい


TEXT( 項目のAPI名など )



■指定の文字を抽出


左から指定文字数のテキストを返します
LEFT( 対象文字, 抽出文字数 )

右から指定文字数のテキストを返します
RIGHT( 対象文字, 抽出文字数 )


■リンクを表示したい


HYPERLINK( リンク先URL , ラベル )
これを使うことで、任意のラベルのハイパーリンクを表示することができます


URLをべた書きでも、リンクとして表示させることもできます。



■画像を表示させたい


IMAGE( image_url, alternate_text[, height][, width] )

, height  , width  は省略可能です
alternate_text は画像が表示できないときに表示するテキストです。




◆日付及び時間関連


日付項目から年、月、日を数値で取得したい


以下はいずれも日付型から数値型へデータ型が変換されます

YEAR(date)
MONTH(date)
DAY(date)



年月を出力


上記の例では昇順にすると10月、8月、9月となるので下記のようにするといいです。

LEFT( TEXT( date ), 7 )



2 つの日付が同月かどうかを確認する


AND(
  MONTH( date_1 ) == MONTH( date_2 ),
  YEAR( date_1 ) == YEAR( date_2 )
)




2 つの日付間の日数を確認する



TODAY() - 30 > date



◆数値関連


■足す項目全てが空(0ではなく)の場合は、空で表示したい


戻り値が数値型の数式項目で空を出力したい場合、nullを返すことで空にできます。
ここで注意しなければいけないのが、以下の場合、Salesforceの数式では空で返ってきます。

  A__c + B__c
= "" + 1
→ ""で出力される

これを避けるには、BLANKVALUE関数を使います。

  BLANKVALUE(A__c, 0) + BLANKVALUE(B__c, 0)
= "" + 1
→ 1で出力される

以上から、最初の要件を満たす数式は次のようになります。

IF( LEN( TEXT(A__c)&TEXT(B__c) )=0 , null, BLANKVALUE(A__c, 0) + BLANKVALUE(B__c, 0) )


参考
日付および日付/時間型のデータの扱い方
日付型数式の高度なサンプル集




参考
https://help.salesforce.com/articleView?id=customize_functions.htm&type=0






2017-10-11

【Salesforce】選択リスト値のデフォルト設定はいつ有効なのか

■前提

Salesforce Winter'18



■調査内容

Salesforce の選択リスト値にある
「マスタリストのデフォルト値に設定する」
のオプションは、どんなときに有効なのか調査しました。


具体的には、
デフォルト値が設定してある選択リスト項目を
Apexトリガの beforeInsert, beforeUpdate の処理で
null や空文字を指定してを実行すると、
デフォルト値の設定で上書きされないか、です



■結果

以下の場合でデフォルト選択設定が適用されるかを確認する
※ ×:適用されなかった

beforeInsert で
・nullをセットした場合 ×
・空文字をセットした場合 ×


値がセットされていなくて、beforeUupdate で
・操作なし ×
・null をセットした場合 ×
・空文字をセットした場合 ×


既に値がセットされていて、beforeUpdate で
・操作なし ×
・null をセットした場合 ×
・空文字をセットした場合 ×



冷静に考えると「操作なし」の検証は、
操作していないものが update する度に
デフォルト値になってしまう仕様は現実的ではないので
調べるまでもなかったですね



■insert での操作なしについて

・レコード詳細画面に項目を配置している場合
→ デフォルト値がセットされた状態で表示されます

  そこで選択リストを改めて選択すれば、
  もちろん選択した値が登録されます



・レコード詳細画面に項目を表示していない場合
→ そのままデフォルト値が登録されます



■結論

「マスタリストのデフォルト値に設定する」は
GUI, Apex 等で積極的に値の選択がなかった場合にのみ
有効になる設定



■不具合情報

選択リスト値セットを使用した
選択リスト項目のデフォルト値が動作しない


といった現象が、Winter'18にバージョンアップ以降に発生しているようです


デフォルト値をセットした選択リスト値セットを
レコードタイプを使用したオブジェクトと
レコードタイプを使用しないオブジェクトの
両方に用いると、設定したデフォルト値が動作しないようです


参考
https://success.salesforce.com/issues_view?id=a1p3A000000mCYTQA2



■10月12日追記
本日パッチがあてられたそうです
https://success.salesforce.com/issues_releases_view?release=210009001






2017-10-04

MAMP のローカルホストに WordPress をインストールする

◆前提
下記で MAMP を使ってバーチャルホストを設定している前提で進めます
http://shige-mon.blogspot.jp/2017/09/macmamp.html



◆手順
■WordPress をダウンロード
WordPress をダウンロードし、解凍しておきます



■ WordPress のファイルセットを移動
バーチャルホストのフォルダは以下のような状態とします

$ tree -L 1 /Applications/MAMP/htdocs
/Applications/MAMP/htdocs
├── host8001
├── host8002
└── host8003


解凍した WordPress の index.php 
がある階層のファイル全てを、
バーチャルホストのフォルダ (host8001) に移動します



※バーチャルホストを設定しない場合は、
htdocs直下に移動すればよいです



■データベースの作成
下記を表示し、左側の「New」を押します
http://localhost:8888/phpMyAdmin/


「データベースを作成する」の下に下記を入力して、「作成」を押します
データベース名: wp



■ WordPress インストールページを開く
サーバを起動し、下記にアクセスします
http://127.0.0.1:8001/


データベース設定のページが表示されますので、以下のように設定します

データベース名wp
ユーザ名root
パスワードroot
データベースのホスト名127.0.0.1:8889
テーブル接頭辞wp_
「インストール実行」 を押します 参考 Mac上のMAMPでローカルにバーチャルホストを設定する方法 http://shige-mon.blogspot.jp/2017/09/macmamp.html

【WordPress】インストールでデータベース接続確立エラー

■前提
MAMP 4.2
WordPress 4.7.5



MAMP でバーチャルホストを設定し、ドキュメントルート直下に
WordPress ファイルをコピーしてインストールしています。



ホストにブラウザで接続し、
データベースの設定を送信した直後に
「データベース接続確立エラー」が
表示されてしまった場合についてです



WordPress をインストール時に
「データベース接続確立エラー」と表示されてしまうときは、
「データベースのホスト名」が正しくない可能性があります。



バーチャルホストを設定している場合、
MAMPの設定で MySQL のポート番号を確認し、
8889であれば、

「データベースのホスト名」は、下記の設定をします
127.0.0.1:8889



参考
https://www.netassist.ne.jp/blog/?p=1277






2017-10-03

mac OS のグループ、ユーザの作成の周辺コマンド集

Super ユーザに切替
$ su

ユーザ hoo に切替
$ su hoo

グループ名とプライマリグループIDの一覧を表示
$ sudo dscl . -list /Groups PrimaryGroupID

ユーザ名とプライマリグループIDの一覧を表示
$ sudo dscl . -list /Users PrimaryGroupID

ユーザ名と UID の一覧を表示
$ sudo dscl . -list /Users UniqueID

ユーザのIDを確認する
$ id foo

users というグループの詳細を参照する
$ sudo dscl . -read /Groups/users

foo というアカウント名のユーザの詳細を参照する
$ sudo dscl . -read /Users/foo

グループの作成 or gidの変更
$ sudo dscl . -create /Groups/users gid 601

ユーザの作成
$ sudo dscl . -create /Users/foo

ユーザのフルネームを設定 or 変更
$ sudo dscl . -create /Users/foo RealName foo



参考
http://shige-mon.blogspot.jp/2017/09/parallels-desktop-uid-0-parallels.html
http://shige-mon.blogspot.jp/2017/10/mac-oscui.html






mac OS のログインパスワードを強制的に変更する

■シングルユーザモードの起動

起動時に下記を押しておく cmd + S

■起動後の操作

下記を入力し、 Super ユーザの権限状態にします /sbin/fsck -fy /sbin/mount -uw / ユーザを一覧表示 ls /Users launchctl load /System/Library/LaunchDaemons/com.apple.opendirectoryd.plist (Snow Leopard以前の場合) launchctl load /System/Library/LaunchDaemons/com.apple.DirectoryServices.plist ログインパスワードの設定 dscl . -passwd /Users/username newpassword 再起動 reboot 参考 http://blog.livedoor.jp/ag_plusplus/archives/67958160.html https://www.lifehacker.jp/2012/10/121019break_into_mac.html

【mac OS】CUIでユーザを作成する

■作成するユーザ

以下の設定のユーザを作成します
アカウント名foo
フルネーム (RealName)foo
アカウント (UID)foo (601)
グループusers (601)
ホームディレクトリ/Users/foo
ログインシェル/bin/bash

■ユーザの作成

$ sudo dscl . -create /Groups/users gid 601 $ sudo dscl . -create /Users/foo $ sudo dscl . -create /Users/foo RealName foo $ sudo dscl . -create /Users/foo UniqueID 601 $ sudo dscl . -create /Users/foo PrimaryGroupID 601 $ sudo dscl . -create /Users/foo NFSHomeDirectory /Users/foo $ sudo dscl . -create /Users/foo UserShell /bin/bash $ sudo passwd foo

■作成グループの確認

作成したグループを確認します $ sudo dscl . -read /Groups/users AppleMetaNodeLocation: /Local/Default GeneratedUID: 05416EC7-AD6E-47AB-A7D1-7752821BF5CE PrimaryGroupID: 601 RecordName: users RecordType: dsRecTypeStandard:Groups

■作成ユーザの確認 ・・・①

下記では、設定したホームディレクトリ、グループ、フルネーム、 アカウント名、アカウント (UID)、ログインシェルが確認できます $ sudo dscl . -read /Users/foo AppleMetaNodeLocation: /Local/Default AuthenticationAuthority: ;ShadowHash; ;Kerberosv5;;foo@LKDC:SHA1.E5FB873ECB88A3928DE07A18294D98A61EB3BFEE;LKDC:SHA1.E5FB873ECB88A3928DE07A18294D98A61EB3BFEE; GeneratedUID: BD01036A-109A-4005-8932-D2358643061F NFSHomeDirectory: /Users/foo Password: ******** PrimaryGroupID: 601 RealName: foo RecordName: foo RecordType: dsRecTypeStandard:Users UniqueID: 601 UserShell: /bin/bash

■ユーザのIDを確認する

$ id foo uid=601(foo) gid=601(users) groups=601(users)

■作成したユーザの属性変更

作成した時と同様のコマンドで、 上書きするイメージで設定すれば変更されます フルネーム (RealName) の変更 $ sudo dscl . -create /Users/foo RealName hoge

■ユーザ情報の別の確認方法

Linux のグループとユーザの関係について理解を深めるために、 以下の方法でユーザの情報を確認してみてください ユーザデータベース情報の更新、追加用コマンド $ chpass mac OS に登録したユーザの一覧を表示します $ dscl Entering interactive mode... (type "help" for commands) > cd Local/Default/Users /Local/Default/Users > ls ユーザ情報の確認 上記①と同じ結果が得られます /Local/Default/Users > cd (user) /Local/Default/Users/user > read ※ 以下でも情報を確認できます > cd /Contact/Users /Contact/Users > ls 参考 macのユーザ情報管理はOpenDirectoryだった http://fanblogs.jp/macyarounanoka/archive/137/0

■visudo について

Linuxとは異なるので、下記のコマンドでは 権限がないと怒られてしまいます $ visudo visudo: /etc/sudoers: Permission denied この場合は以下のようにするとよいです user$ su Password: sh-3.2# visudo visudo: /etc/sudoers.tmp unchanged 参考 http://l-w-i.net/t/macosx/dscl_002.txt https://qiita.com/matsubo/items/50a2530e6d6f9ac0645e https://suin.io/473 Macで管理者権限がなくなってしまった時の対処方法 http://underwoodmac.cocolog-nifty.com/blog/2010/08/mac-95c7.html GUI でログインシェルを確認、変更する方法 https://rcmdnk.com/blog/2015/05/25/computer-mac-bash-zsh/ Linuxにおけるグループとユーザについて https://begi.net/read/base/07.html

2017-10-02

bash & sh と source コマンドの違い

■前提

予め下記の sh ファイルをホームディレクトリに作成しておきます ~/goApp.sh ``` #!/bin/bash cd /Applications echo "Applicationディレクトリに移動" ``` ※「~」はホームディレクトリを表しています

■検証

bash と sh コマンドで、 sh ファイルを実行した場合は、 以下のようになります。 ~ user$ sh goApp.sh Applicationディレクトリに移動 ~ user$ source コマンドで、 sh ファイルを実行した場合は、 以下のようになります。 ~ user$ source goApp.sh Applicationディレクトリに移動 Applications user$ つまり、 bash コマンドや sh コマンドでは、 sh ファイル内で実行されるディレクトリ移動は、 shファイル内の処理のみで有効( sh ファイルの処理が終わるとなくなる) 一方 source コマンドでは、 sh ファイルを呼び出している 環境上の実行スクリプトとして実行されているため、 sh ファイルの処理が終わっても、 行った処理の効果が継続します