Omitir navegación
Ampliar
CPM /プロセスデザイナーのベストプラクティスとガイドライン
ID de respuesta 11944   |   Revisado 17/08/2021

CPM / Process Designerを使用してカスタマイズを開発する場合は、どのようなベストプラクティスとガイドラインに従う必要がありますか?

環境:

プロセスデザイナ、カスタムプロセス(CPM)
すべての製品バージョン

解決策:

「ベストプラクティス:オブジェクトイベントハンドラスクリプトのテスト」に関する製品ドキュメントを表示するには、こちら をクリックしてください。 製品機能のドキュメントに記載されている情報に加えて、以下の情報が役立つ場合もあります。

次のベストプラクティスとガイドラインは、オブジェクトイベントハンドラスクリプトを作成およびテストするときに理解することが重要です:

  • カスタマイズのトラブルシューティングに必要な詳細をログに記録します。 適用関数の上部に、処理中のオブジェクトを識別するログエントリが必要です。 例外の詳細、およびトラブルシューティングに必要な詳細もログに記録する必要があります。 CPMのカスタマイズには、CPMロギング製品機能を使用することがいくつかの理由で有利です。詳しくはこちらをご参照ください。  Answer ID 9897: Adding custom logging to your CPHP customizations (英語)
     
  • try / catchステートメントを使用して、予想されるエラーと発生する可能性のあるエラーを処理します。 スクリプトは、一般的なPHPとConnect for PHPの例外タイプをキャッチし、アクセス可能な場所にエラーを記録する必要があります。詳細については、「CPMカスタマイズのためのPHPトライ/キャッチ」のセクションを参照してください。
     Answer ID 9640: Connect for PHP Best Practices and Gotchas (英語)
     
  • プロセスデザイナで[抑制できる]チェックボックスをオンにし、スクリプトの-> [保存]にSuppressExternalEventsを含めることを検討してください。 これらの手順が実行されない場合、スクリプトは無限ループに再び入る可能性があります。 プロセス・デザイナ内から「CanSuppress」チェックボックスを指定することと、影響を受けるCPMの目的に適用できる「Suppress」定数をsaveメソッドに渡すことの両方を必ず指定してください。 詳細はこちら:Answer ID 7890: Enabling API suppression in Connect for PHP Customizations (英語)
     
  • カスタムプロセススクリプトで使用されるカスタムオブジェクトまたはカスタムフィールドを変更する場合、そのような変更をデプロイする前に、スクリプトをプロセスデザイナ内の構成済みオブジェクトからマッピング解除し、スクリプトをマッピングされていないものとして再デプロイする必要があります。 カスタムオブジェクト/フィールドのデプロイが完了したら、スクリプトを再マップし、変更を再デプロイして、そのような変更を完了する必要があります。
     
  • プロダクションでの問題を回避するには、プロダクションサイトに実装する前に、カスタムプロセスを開発し、テストサイトまたはプロダクションサイトのクローンでテストする必要があります。
  • PHPのexit関数はCPMコードでは使用しないでください。 むしろ、PHPのreturnステートメントを使用して関数を終了し、CPMを正常に完了することができます。
  • CPMカスタマイズ内でクラスをインポート/エイリアスするときは、RightNow \ CPM名前空間をエスケープすることが重要です。 これは通常、カスタムコードでPHPの「use」ステートメントを使用してクラスを識別するときに先頭のスラッシュを含めることによって行われます(たとえば、「use \ My \ Classname;」)。 同様に、コードがCPMカスタマイズで任意のタイプの例外をキャッチすると予想される場合は、PHP例外タイプ(「\ Exception」など)を識別するときに先頭にスラッシュを使用することが重要です。
     
  • register_shutdown_functionの使用などのPHPシャットダウンコールバック関数は、CPMのカスタマイズでは許可/サポートされていません。
     
  • PHPのexit関数はCPMコードでは使用しないでください。むしろ、returnステートメントを使用して関数を終了し、CPMを正常に完了させることができます。
     
  • すべてのCPHPコードで使用されるAPIバージョンは一致する必要があり、これはCPMカスタマイズで使用されるすべての外部スクリプトに当てはまります。詳しくはこちら: Answer ID 8655: Custom Processes must have matching version information between the annotation and included Connect library
  • PHP curlを使用する非同期CPMスクリプトで、curlタイムアウトがCPMカスタムプロセススクリプトの最大ランタイム(157秒)よりも小さい値に設定されていることを確認してください。 CPMを介した外部呼び出しは、キューの処理でキューの遅延を引き起こす可能性があるため、5秒以下の値を強くお勧めします。 一度に実行される非同期CPMプロセスは最大3つであり、それらのいずれかが統合呼び出しからの応答を待機している場合、キューが処理できる速度が低下します。 155秒の値は、使用する必要がある最大値です。 次に例を示します:

    curl_setopt($curl, CURLOPT_TIMEOUT, 5);

    詳細はこちら:
    Answer ID 11903:  Coding for PHP curl call timeouts and re-tries in CPM customiizations(英語)

  • 非同期CPMを処理するユーティリティには、プロセスで実行された以前のCPMからすでにPHPcurlがロードされている場合があります。 このため、コードの失敗を防ぐために、ライブラリをロードする前に次のチェックが実行されていることを確認する必要があります:

    if(!extension_loaded('curl')) { load_curl(); }

    詳細はこちら: Answer ID 10789: Use of load_curl() function in multiple scripts(英語)

 

デプロイ前にオブジェクトイベントハンドラスクリプトをテストするときは、次の点に注意してください。

  • テストハーネスコードは、スクリプトのcomments/"flower basket"セクションで定義されたアクションごとに実行されます。
 
 

詳細はこちらをご参照ください: Answer ID 5169: Technical Documentation and Sample Code

Answer ID 6604:  There are two types of execution for Object Event Handlers

Answer ID 11934:  Alternatives to using CPM customizations for event-driven functionality that needs to happen immediately

Lenguajes disponibles para esta Respuesta:

Notificarme
La página se refrescará al enviar. Las entradas pendientes se perderán.