• Dev 長尾拓磨
  • NEWBIE
  • 0 Points
  • Member since 2016

  • Chatter
    Feed
  • 0
    Best Answers
  • 1
    Likes Received
  • 0
    Likes Given
  • 8
    Questions
  • 8
    Replies
目標は、インストール後に自動でインポートスクリプトを動かすこと、
無理ならユーザーが自分で実行できる難易度で、マスタデータをインポートさせるスクリプトを動かすことです。

状況としまして、
パッケージをインストールした後にインストールスクリプトを使用して
静的リソースのCSVからデータをインポートしたい、と思ったのですが
エラーが起きてしまいできませんでした。(原因はエラーログなどを取得できず不明です。)

なので、インストール後に表示させるVisualforceページからマスタデータインポートを行うコントローラアクションを、
futureメソッドで実装して実行しようとしたところ、CPUタイムアウトでテスト段階で失敗する始末でした。

なんとかできないでしょうか・・・。
配布するアプリケーションを作成しているのですが、
アプリ中でエラーが発生すると、ヘッダーフッターの表示を消していたページから急にSalesforceのエラーページに飛んでしまい、ユーザーが困惑するような動作となっており、困っています。

そこで、エラーページを下記いずれかの方法でカスタマイズしたいと思います。

・Visualforceページを作成し、エラー時の遷移先をこれに指定する
・デフォルトのエラーページをカスタマイズする

調べてみても方法が見つけられず、知っている方がいましたら教えていただきたいです。
よろしくお願いします。
管理パッケージをテスト環境にインストールした際に、項目レベルセキュリティチェックのメソッドにて、
項目名を取得できなくなってしまいました。
        ​Schema.DescribeSObjectResult result = new CustomObject__c().getSObjectType().getDescribe();
        Map<String, Schema.SObjectField> fieldMap = result.fields.getMap();
        Boolean isCreate = fieldMap.get('FieldName').getDescribe().isCreateable();

オブジェクトの設定画面などを見ると、各カスタム項目やカスタムオブジェクトに
「インストール済みパッケージ名」として名前空間プレフィックスが表示されているので、
項目として持っていると判断したのですが、どう取得すれば良いのかわかりません。
 
        //理想
        XXXXX namespace = [select namespacePrefix from XXXXX ];
        ​Schema.DescribeSObjectResult result = new CustomObject__c().getSObjectType().getDescribe();
        Map<String, Schema.SObjectField> fieldMap = result.fields.getMap();
        Boolean isCreate = fieldMap.get(namespace + 'FieldName').getDescribe().isCreateable();

知っている方がいましたら教えていただけると助かります。
よろしくお願いします。
AppExchangeに載せるアプリケーションについてなのですが、
ある程度コーディングが完了した段階でパッケージ化を行ったのですが、
その際に設定が必要だった名前空間プレフィックスによって、
Visualforceページ、カスタムオブジェクト、カスタム項目の全てが参照不能になってしまいました。

これから、参照名に名前空間プレフィックスの追加作業を行うにあたって、
一般的な、名前空間プレフィックスを含めたAPI参照名の取得方法を知りたいです。

例えば、現在、Apexクラス内のページ遷移箇所は下記のコーディングをしております。
PageReferebce pageRef = new PageReferebce ('/apex/PageName');
return pageRef;

ここで、名前空間プレフィックスが入るとすると、べた打ちすると下記のようになりますが、これがスタンダードでしょうか。
PageReferebce pageRef = new PageReferebce ('/apex/[名前空間プレフィクス]__PageName');
return pageRef;

他、影響範囲を完全には把握できていないのですが、SOQL問い合わせの際なども必要になる場合は、そちらも書き方を教えていただけないでしょうか。
よろしくお願いします。

-----

ここからは本題と少しそれるのですが、開発に当たってSFDCの技術営業の方(?)の手引きで3つの組織を作成し、進めてきました。
・開発組織
・パッケージ組織
・テスト組織

アプリケーションを公開するにあたっては、
1.開発組織でコードを作成し、リソースをパッケージ組織にデプロイする
2.パッケージ組織で管理パッケージを作成する
3.管理パッケージをテスト環境でインストールしてテストを行う

というように組み合わせて開発するのがスタンダードだとのことだったのですが、
この場合、開発組織の段階で名前空間プレフィックスを設定すると、パッケージ組織では同じ名前空間プレフィックスは設定できないので、
つまり、開発組織では名前空間プレフィックスを設定しない状態で、
コードには名前空間プレフィックスを付加したAPI参照名で開発しなければいけないことになります。これではコンパイルも通りません。

どの時点で名前空間プレフィクスを設定して開発すべきだったのでしょうか。
もしご存知の方がいらしたら教えていただけると助かります。

よろしくお願いいたします。
 
コミュニティではなく、組織のログアウト機能を実装したいと思っています。
しかし、調べたところで実装方法は見つからず、ログインページに飛ばせという記述のみ見つけました。

ログアウト機能は本当に実装できないのでしょうか。
また、できない場合はログインページに飛ばそうと思いますが、
組織のドメインが変わっても問題なく機能するリンクの記述方法はありますか?(URLFORなど)

よろしくお願いします。
アプリケーションをパッケージ化するにあたって、パッケージ組織を作成し、リソースの移行をし始めたのですが、
うまくいかず、0からやり直したいと考えたのですが、組織の初期化方法または組織の削除がわかりません。
おそらくないのでしょう、と判断しました。

そこで初期化ができない場合は自分でデータを消していこうかと思ったのですが、
Apexクラス、Visualforceページなどのリソースは一括削除の方法がわかりません。
なるべく早くすべてのデータを消す方法はないでしょうか。
The supplier guest user can use the mail template,
When sending a mail to a specific user,
I'm planning to insert the target user's item in the merge item,
The data of the site guest user is inserted.
For example, if you write {! User.Name} in a mail template, "Site Guest User" comes in here.

I will write a concrete situation.
On the self-registration screen of the community, enter and register e-mail.
<Apex: inputField value = "{! RegistUser.Email}" />

Apex side
List <User> userQuery = [select Id from User where Email =: registUser.Email LIMIT 1];
If (userQuery! = Null && userQuery .size ()> 0) {
          //send e-mail
          SendMail (userQuery [0] .Id);
} Else {
          //registration process
}


/ *** Mail transmission processing *** /
Public void sendMail (Id userId) {
        
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage ();
        
        Mail.setTargetObjectId (userId);
        Mail.setSenderDisplayName ('Sender');
        Mail.setUseSignature (false);
        Mail.saveAsActivity = false;

        EmailTemplate template = [select Id from EmailTemplate where DeveloperName = 'Mail_SupplierUserRegist' LIMIT 1];
        Mail.setTemplateID (template.Id);
        
        // Send here
        Messaging.sendEmail (new Messaging.SingleEmailMessage [] {mail});
          
}

Roughly, it is such a process.
I'd like to embed the name of the destination user by putting {! User.Name} in the body of the template.
However, this is the event that the site guest user name comes in here.


Therefore, I can not determine the cause, but I would like to have a professor if you know someone.
Thank you.
サプライヤゲストユーザーがメールテンプレートを使用して、
特定のユーザー宛てにメールを送った時、
差し込み項目には対象ユーザーの項目を差し込む予定なのですが、
サイトゲストユーザーのデータが差し込まれてしまいます。
例えば、メールテンプレートに{!User.Name}と書いておくと、ここには「サイトゲストユーザー」が入ってきてしまいます。

具体的な状況を書きます。
コミュニティのセルフ登録画面にて、Emailを入力させ登録します。
<apex:inputField value="{!registUser.Email}"  />

Apex側で
List<User> userQuery = [select Id from User where Email = :registUser.Email LIMIT 1];
if(userQuery != null && userQuery .size() >0){
          //メール送信
          sendMail(userQuery [0].Id);
}else{
          //登録処理
}


/***メール送信処理***/
public void sendMail(Id userId){
        
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
        
        mail.setTargetObjectId(userId);
        mail.setSenderDisplayName('Sender');
        mail.setUseSignature(false);
        mail.saveAsActivity = false;

        EmailTemplate template = [select Id from EmailTemplate where DeveloperName = 'Mail_SupplierUserRegist' LIMIT 1];
        mail.setTemplateID(template.Id);
        
        // ここで送る
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
          
}

大雑把ですが、このような処理です。
テンプレートの本文に{! User.Name }を入れて、送信先ユーザーの名前を埋め込みたいと思っています。
しかし、ここにサイトゲストユーザーという名前が入ってしまうという事象です。


そこで、この原因が判別できないのですが、知っている方がいましたらご教授いただきたいと思います。
よろしくお願いします。

 
管理パッケージをテスト環境にインストールした際に、項目レベルセキュリティチェックのメソッドにて、
項目名を取得できなくなってしまいました。
        ​Schema.DescribeSObjectResult result = new CustomObject__c().getSObjectType().getDescribe();
        Map<String, Schema.SObjectField> fieldMap = result.fields.getMap();
        Boolean isCreate = fieldMap.get('FieldName').getDescribe().isCreateable();

オブジェクトの設定画面などを見ると、各カスタム項目やカスタムオブジェクトに
「インストール済みパッケージ名」として名前空間プレフィックスが表示されているので、
項目として持っていると判断したのですが、どう取得すれば良いのかわかりません。
 
        //理想
        XXXXX namespace = [select namespacePrefix from XXXXX ];
        ​Schema.DescribeSObjectResult result = new CustomObject__c().getSObjectType().getDescribe();
        Map<String, Schema.SObjectField> fieldMap = result.fields.getMap();
        Boolean isCreate = fieldMap.get(namespace + 'FieldName').getDescribe().isCreateable();

知っている方がいましたら教えていただけると助かります。
よろしくお願いします。
目標は、インストール後に自動でインポートスクリプトを動かすこと、
無理ならユーザーが自分で実行できる難易度で、マスタデータをインポートさせるスクリプトを動かすことです。

状況としまして、
パッケージをインストールした後にインストールスクリプトを使用して
静的リソースのCSVからデータをインポートしたい、と思ったのですが
エラーが起きてしまいできませんでした。(原因はエラーログなどを取得できず不明です。)

なので、インストール後に表示させるVisualforceページからマスタデータインポートを行うコントローラアクションを、
futureメソッドで実装して実行しようとしたところ、CPUタイムアウトでテスト段階で失敗する始末でした。

なんとかできないでしょうか・・・。
配布するアプリケーションを作成しているのですが、
アプリ中でエラーが発生すると、ヘッダーフッターの表示を消していたページから急にSalesforceのエラーページに飛んでしまい、ユーザーが困惑するような動作となっており、困っています。

そこで、エラーページを下記いずれかの方法でカスタマイズしたいと思います。

・Visualforceページを作成し、エラー時の遷移先をこれに指定する
・デフォルトのエラーページをカスタマイズする

調べてみても方法が見つけられず、知っている方がいましたら教えていただきたいです。
よろしくお願いします。
AppExchangeに載せるアプリケーションについてなのですが、
ある程度コーディングが完了した段階でパッケージ化を行ったのですが、
その際に設定が必要だった名前空間プレフィックスによって、
Visualforceページ、カスタムオブジェクト、カスタム項目の全てが参照不能になってしまいました。

これから、参照名に名前空間プレフィックスの追加作業を行うにあたって、
一般的な、名前空間プレフィックスを含めたAPI参照名の取得方法を知りたいです。

例えば、現在、Apexクラス内のページ遷移箇所は下記のコーディングをしております。
PageReferebce pageRef = new PageReferebce ('/apex/PageName');
return pageRef;

ここで、名前空間プレフィックスが入るとすると、べた打ちすると下記のようになりますが、これがスタンダードでしょうか。
PageReferebce pageRef = new PageReferebce ('/apex/[名前空間プレフィクス]__PageName');
return pageRef;

他、影響範囲を完全には把握できていないのですが、SOQL問い合わせの際なども必要になる場合は、そちらも書き方を教えていただけないでしょうか。
よろしくお願いします。

-----

ここからは本題と少しそれるのですが、開発に当たってSFDCの技術営業の方(?)の手引きで3つの組織を作成し、進めてきました。
・開発組織
・パッケージ組織
・テスト組織

アプリケーションを公開するにあたっては、
1.開発組織でコードを作成し、リソースをパッケージ組織にデプロイする
2.パッケージ組織で管理パッケージを作成する
3.管理パッケージをテスト環境でインストールしてテストを行う

というように組み合わせて開発するのがスタンダードだとのことだったのですが、
この場合、開発組織の段階で名前空間プレフィックスを設定すると、パッケージ組織では同じ名前空間プレフィックスは設定できないので、
つまり、開発組織では名前空間プレフィックスを設定しない状態で、
コードには名前空間プレフィックスを付加したAPI参照名で開発しなければいけないことになります。これではコンパイルも通りません。

どの時点で名前空間プレフィクスを設定して開発すべきだったのでしょうか。
もしご存知の方がいらしたら教えていただけると助かります。

よろしくお願いいたします。
 
コミュニティではなく、組織のログアウト機能を実装したいと思っています。
しかし、調べたところで実装方法は見つからず、ログインページに飛ばせという記述のみ見つけました。

ログアウト機能は本当に実装できないのでしょうか。
また、できない場合はログインページに飛ばそうと思いますが、
組織のドメインが変わっても問題なく機能するリンクの記述方法はありますか?(URLFORなど)

よろしくお願いします。
アプリケーションをパッケージ化するにあたって、パッケージ組織を作成し、リソースの移行をし始めたのですが、
うまくいかず、0からやり直したいと考えたのですが、組織の初期化方法または組織の削除がわかりません。
おそらくないのでしょう、と判断しました。

そこで初期化ができない場合は自分でデータを消していこうかと思ったのですが、
Apexクラス、Visualforceページなどのリソースは一括削除の方法がわかりません。
なるべく早くすべてのデータを消す方法はないでしょうか。
サプライヤゲストユーザーがメールテンプレートを使用して、
特定のユーザー宛てにメールを送った時、
差し込み項目には対象ユーザーの項目を差し込む予定なのですが、
サイトゲストユーザーのデータが差し込まれてしまいます。
例えば、メールテンプレートに{!User.Name}と書いておくと、ここには「サイトゲストユーザー」が入ってきてしまいます。

具体的な状況を書きます。
コミュニティのセルフ登録画面にて、Emailを入力させ登録します。
<apex:inputField value="{!registUser.Email}"  />

Apex側で
List<User> userQuery = [select Id from User where Email = :registUser.Email LIMIT 1];
if(userQuery != null && userQuery .size() >0){
          //メール送信
          sendMail(userQuery [0].Id);
}else{
          //登録処理
}


/***メール送信処理***/
public void sendMail(Id userId){
        
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
        
        mail.setTargetObjectId(userId);
        mail.setSenderDisplayName('Sender');
        mail.setUseSignature(false);
        mail.saveAsActivity = false;

        EmailTemplate template = [select Id from EmailTemplate where DeveloperName = 'Mail_SupplierUserRegist' LIMIT 1];
        mail.setTemplateID(template.Id);
        
        // ここで送る
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
          
}

大雑把ですが、このような処理です。
テンプレートの本文に{! User.Name }を入れて、送信先ユーザーの名前を埋め込みたいと思っています。
しかし、ここにサイトゲストユーザーという名前が入ってしまうという事象です。


そこで、この原因が判別できないのですが、知っている方がいましたらご教授いただきたいと思います。
よろしくお願いします。