• west
  • NEWBIE
  • 0 Points
  • Member since 2010

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 5
    Replies

ご質問があります。ご存知の方がいらっしゃいましたら、ご回答お願いします。

 

カスタムオブジェクトを配布するときにデモデータを同梱して配布したいと考えておりますが、

開発環境でパッケージ化して試みたところ、カスタムオブジェクトは問題なく配布できたのですが、

同梱していたデモデータは、配布されていませんでした。

 

カスタムオブジェクトの配布と同梱してのデモデータの配布は、やはり無理なのでしょうか?

それとも、開発環境のためでしょうか?

 

また、別の方法で配布できる等ご存知の方がいらっしゃいましたら、宜しくお願いします。

  • November 04, 2010
  • Like
  • 0

もしご存知の方がいらっしゃれば、ご教授お願い致します。

 

現在、以下の PDF を参考に salesforce のワークフローの勉強をしています。

 

http://developerforcejp.s3.amazonaws.com/books/workbook/Workbook_JP.pdf

 

この資料通りにワークフローを作成し、salesforceが用意してくれる画面からの
申請、承認まで確認できました。

 

ただ、実際にやりたいことは、自分で作成した画面 (Apex側) からの申請、承認で、

この資料にはそこまで書かれていませんでしたので、以下を参考にして自分で作ってみました。

 

http://blog.flect.co.jp/salesforce/2010/09/apex-d1a3.html

http://success.salesforce.co.jp/DeveloperForce/DeveloperGuide/Apex_language_reference_JP_v18_Beta.pdf

 

ワークフロー自体は、資料 Workbook_JP.pdf の「チュートリアル 4: ワークフローと承認プロセスの使用」

で作成したワークフローを使いまわしたのですが、申請は正常に動作したのですが、承認で以下のエラー

が発生してしまいます。

 

System.DmlException: Process failed. First exception on row 0; first error: INVALID_OPERATION, Illegal transition type: []
Class.registDataController.approve: line 72, column 49 External entry point

 

ロジックもほとんど参考サイトのままで、きちんと承認できるユーザでログインして承認しているのですが・・・

( WorkitemId は、とりあえず申請時の戻り値から取得したものを固定でセットしています )

 

試しに、Apexで申請した承認プロセスを、salesforceが用意してくれる画面から承認すると

正常に承認できます。

 

ソースは以下のとおりです。

( approve メソッドが承認時のロジックです )

 

お分かりになる方は、何卒ご教授をお願い致します。

 

 

 

 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

  ソース

 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

 

public class registDataController{
    public String workItemId { get; set; }

    public String message { get; set; }

    public PageReference save() {
       
        Invoice_Statement__c[] obj;
       
        String invoiceNumber = 'INV-0008';
       
        obj = [SELECT Id,Name,Description__c,Status__c FROM Invoice_Statement__c WHERE Name = :invoiceNumber];
       
        // オブジェクトIDの設定
        String objectId = obj[0].id;
       
        // プロセスの作成
        Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
       
        // 申請するオブジェクトの設定
        psr.setObjectId(objectId);
       
        // 次の承認者の設定(自動割当の場合はnull)
        psr.setNextApproverIds(new Id[] {UserInfo.getUserId()});
       
        // プロセス実行
        Approval.ProcessResult submitResult = Approval.process(psr);
       
        // 成功 or 失敗の確認
        System.assert(submitResult.isSuccess());
       
        // 状態の確認
        // Pending:未承認、Approved:承認済み、
        // Rejected:却下、 Removed:取消済み
        System.assertEquals('Pending', submitResult.getInstanceStatus());
       
        // 承認申請により作成された
        // ProcessInstanceWorkitemオブジェクトのIDを取得
        // (承認申請すると、ProcessInstanceWorkitemオブジェクトに
        // レコードが作成される)
        List<Id> newWorkItemIds = submitResult.getNewWorkitemIds();
       
        workItemId = newWorkItemIds.get(0);
       
        message = '申請!! '
                + '  ObjectId : '+ objectId;
       
        return null;
    }

    public PageReference approve() {
       
        // プロセスの作成
        Approval.ProcessWorkitemRequest pwr = new Approval.ProcessWorkitemRequest();
       
        // 承認するProcessInstanceWorkitemオブジェクトのIDの設定
        pwr.setWorkitemId('04iA00000005DqM');
       
        // 次の承認者の設定
        // (自動割当や最終承認の場合はnull)
        //pwr.setNextApproverIds(new Id[] {UserInfo.getUserId()});
       
        // アクションの設定
        // Approval:承認、Reject:却下、
        // Removed:削除<システム管理者のみ>
        pwr.setAction('Approval');
       
        // コメントの設定
        pwr.setComments('123');
       
        // プロセス実行
        Approval.ProcessResult workitemResult = Approval.process(pwr);
        System.assert(workitemResult.isSuccess());
        System.assertEquals('Approved', workitemResult.getInstanceStatus());
       
        message = '承認!!'
                + '  WorkItemId : ' + workItemId;
       
        return null;
    }
   
}

 

  • November 03, 2010
  • Like
  • 0

:smileysad:

 

レポートでタイトルのような事が出来るのでしょうか。

 

例えば、以下のようなデータがあったとします。

 

取引先  購入商品  金額  日付

A商事  卵     100   2010/10/10

A商事  石ころ   300   2010/10/10

A商事  アメ    100   2010/10/10

A商事  アメ    100   2010/10/12

B商事  卵     100   2010/10/10

B商事  アメ    100   2010/10/10

C商事  牛乳    200   2010/10/10

A商事  卵     100   2010/10/14

A商事  石ころ   300   2010/10/15

 

これを稼働取引先の数として計算して3という結果をレポートで出したいとしたら、

どう実現できるのでしょうか。

SQLだったらCOUNT(DISTINCT 顧客名)って一発なんですが、

どうやってSalesforceで実現するか、悩んでしまいます。

 

なんかレポートの結果をSOQLで実装できる方法があればなぁと思ってしまうのですが・・・

 

よろしくお願いします。

 

  • October 23, 2010
  • Like
  • 0

ガバナ制限にひっかからないよう、updateをする際はリストを利用して一括でデータの更新を行っています。

 

 

CustomObjectA[] la = new CustomObjectA[]{};
CustomObjectA[] a = [select Id, Hour from CustomObjectA];
for(Integer i=0; a.size()>i; i++){
    a.Hour = a.Hour + 1;
    la.add(a);
}
update la;

 

この時、例えばデータの変更履歴を残す目的で同じIDのデータを変更したい場合、「IDが重複していてUPDATEできない」旨のエラーメッセージが表示され、UPDATEできなくなります。

このようなパターンの時は、一括更新できないのでしょうか。また、どのようにすれば同じIDのデータをUPDATEすることが

できるのでしょうか。

画面からの更新の場合はありえないパターンかもしれませんが、データローダなどを使用する場合はあり得ると思います。

 

sihmeieos