タスク用CodeXスクリプト

タスク用CodeXスクリプト

お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

Zoho ProjectsのCodeXスクリプトは、特定のルールや検証を適用するための高度な条件ロジックスクリプトです。ユーザーは、タスクを作成、編集、またはステータス遷移できるタイミングと方法を制御できます。これにより、コンプライアンスの向上とプロセスの整合性確保につながります。

Info
CodeXスクリプトは、CN、JP、AEを除くすべてのデータセンターでサポートされています。
ただし、これらのデータセンターでポータルにCodeXスクリプトを有効化するには、
support@zohoprojects.com までお問い合わせください。

使用例:

サブタスクの多階層作成の制限

タスク階層をシンプルで管理しやすい状態に保つため、サブタスクの下にさらにサブタスクを作成できないようにし、サブタスクは1階層のみ許可します。
コード:
  1. function main() {
  2. if(現在。データ。parent_task !== 現在。データ。root_task) {
  3. throw 新規 ScriptError('無効にする subtasks creation with その他 than 1 level');
  4. }
  5. }

オンホールドステータスのプロジェクトでのタスク作成の無効化

関連付けられているプロジェクトが保留に設定されている場合、タスクの作成を制限します。
コード:
  1. function main() {
  2. const projectId = 現在。データ。projectId;
  3. const moduleItr = client。getModules();
  4. let タブ
  5. console。log('started');
  6. for (let mod of moduleItr) {
  7. console。log(`${mod}`);
  8. if (mod。名前 === 'プロジェクト') {
  9. タブ = mod;
  10. }
  11. }
  12. if (!タブ) {
  13. 返品する;
  14. }
  15. let projectDtl = client。getRecordById(タブ。id, projectId);
  16. let statusDtl = client。getStatusDetails(タブ。id, projectDtl。layoutId, projectDtl。ステータス。id);
  17. console。log(statusDtl)
  18. if (statusDtl。名前 === 'zp。projstatus。onhold') {
  19. throw 新規 ScriptError('タスク Creation 無効 for オン Hold プロジェクト');
  20. }
  21. }

 ステータス更新後の手動の日付変更の制限

ステータスがレイアウトのデフォルト値と一致しない場合、開始日、終了日、または期間の編集を制限します。
コード:
  1. function main() {
  2.  
  3. //base 条件 #1
  4. if (!現在。affectedFields。start_date
  5. && !現在。affectedFields。end_date
  6. && !現在。affectedFields。duration_value
  7. && !現在。affectedFields。duration_unit) {
  8. 返品する;
  9. }
  10.  
  11. const statusDtl = client。getStatusDetails(現在。タブ。id, 現在。データ。layoutId, 現在。データ。ステータス);
  12. console。log(`${statusDtl}`);
  13.     
  14. if (!statusDtl。isLayoutDefault) {
  15. throw 新規 ScriptError('開始する 日付 and End 日付 変更する are only allowed in 初期設定 ステータス');
  16. }
  17. }
  18.  

未完了のサブタスクがある場合のタスク完了の制限

未完了のサブタスクが存在する場合、親タスクのステータスを完了に変更できないように制限します。これにより、すべてのサブタスクが完了するまで、親タスクを完了としてマークできません。
コード:
  1.  
  2. function main() {
  3.  
  4. console。log(現在。affectedFields。toString());
  5.  
  6. //基本条件の処理
  7. if (!現在。affectedFields?.ステータス) {
  8. 返品する;
  9. }
  10.  
  11. const url = `https://projects.zoho.com/restapi/portal/${current.org.zohoOrgId}/projects/${current.record.projectId}/tasks/${current.record.id}/subtasks/`;
  12. let hasMore = 真;
  13. const range = 200;
  14. let index = 1;
  15. console。log(url);
  16.  
  17. while (hasMore) {
  18. let request = 新規 HttpRequest();
  19. request。url(url);
  20. request。connection('zprojects');
  21. request。params({ index, range });
  22.  
  23. const response = request。実行する();
  24.  
  25. console。log(response。asText());
  26. /**
  27. * @種類 {[]}
  28. */
  29. const タスク = response。asJson()?.statusMessage?.responseText?.タスク;
  30.  
  31. //現在のタスクにサブタスクが存在しない場合
  32. if (!タスク || タスク。length == 0) {
  33. console。log('現在のタスクにサブタスクは存在しません');
  34. 返品する;
  35. }
  36.  
  37. hasMore = タスク。length == range;
  38. index += range;
  39.  
  40. console。log(タスク);
  41. console。log(タスク。length);
  42.  
  43. for (let タスク of タスク) {
  44. console。log(task.completed);
  45. if (!task.completed) {
  46. throw 新規 ScriptError('未完了のサブタスクが含まれているため、タスクを完了にできません');
  47. }
  48. }
  49. }
  50.  
  51.  
  52. }

先行タスクが未完了の場合のステータス変更の制限

依存関係のロジックを維持するため、先行タスクのいずれかが未完了の場合はステータスの更新を制限します。これにより、後続タスクは先行タスクが完了してからのみ進められます。
コード:
  1. function main() {

  2. console。log(現在。affectedFields。toString());
  3.     
  4. //基本条件の処理
  5. if(!現在。affectedFields?.ステータス) {
  6. 返品する;
  7. }

  8. const url = `https://projects.zoho.com/restapi/portal/${current.org.zohoOrgId}/projects/${current.record.projectId}/tasks/${current.record.id}/`;
  9. console。log(url);
  10.     
  11. let request = 新規 HttpRequest();
  12. request。url(url);
  13. request。connection('zprojects');

  14. const response = request。実行する();
  15. const taskDependencyDtl = response。asJson()?.statusMessage?.responseText?.タスク[0]?.dependency;

  16. //先行タスクに依存関係が存在しない場合
  17. if(!taskDependencyDtl || !taskDependencyDtl?.predecessor) {
  18. 返品する;
  19. }

  20. console。log(taskDependencyDtl);

  21. for(let predecessorId of taskDependencyDtl。predecessor) {
  22. console。log(predecessorId);
  23. if(!taskDependencyDtl。dependencyDetails[predecessorId]?.IS_COMPLETED) {
  24. throw 新規 ScriptError('未完了の先行タスクが存在します。続行するには完了してください');
  25. }
  26. }

  27. }

 サブタスク作成の制限

定額タスクの構造を維持するため、サブタスクの作成を制限します。
コード:
  1. function main() {
  2. let タスク = 現在。データ;
  3. let startDate = タスク。start_date;
  4. if(タスク。parent_task || タスク。root_task) {
  5. Logger。info('サブタスクの作成は無効です');
  6. throw 新規 ScriptError('サブタスクの作成は無効です'));
  7. }
  8. }
  9.  

条件に基づくタスク期間とステータスの更新

特定のカスタム項目と現在のステータスに基づいて、タスクの期間とステータスを更新します。
例として、このスクリプトは特定の条件を満たした場合に、タスクの期間とステータスを更新します。
  1. タスクの現在のステータスが「オンHold」の場合、ステータスを特定のID(例:「進行中」)に自動的に変更します。
  2. 複数選択のカスタム項目で特定の値が選択されている場合、期間を30日に設定します。
  3. タスクの請求タイプと影響を受けた項目も確認してログに記録します。
コード:
  1. function main() {
  2. let タスク = 現在。データ;
  3. const statusDetails = client。getStatusDetails(タスク。moduleId, タスク。layoutId, タスク。ステータス);
  4. if(statusDetails。名前 === 'オン Hold') {
  5. タスク。ステータス = '5000000000362';
  6. client。保存(タスク);
  7. }
  8. console。log(JSON。stringify(statusDetails));
  9.     if(タスク。weightage。includes('中') {//複数選択項目に特定の設定が含まれているかを確認
  10. console。log('ステータスを進行中に設定');
  11. タスク。duration_unit = TaskDurationUnit。日;
  12. タスク。duration_value = 30;
  13. }
  14. }

アーカイブ済みプロジェクトでの編集制限

プロジェクトがアーカイブ済みの場合は、タスクへの更新をすべて制限し、該当プロジェクト配下でタスクを編集できないようにします。
コード:
  1. function main() {
  2. let タスク = 現在。データ;
  3. let projectId = タスク。projectId;
  4. const moduleItr = client。getModules(0, 10);
  5. let moduleId;
  6. console。log(JSON。stringify(現在。affectedFields));
  7. while(moduleItr。hasNext()) {
  8. let moduleObj = moduleItr。次();
  9. if(moduleObj。名前 == 'プロジェクト') {
  10. moduleId = moduleObj。id;
  11. }
  12. }
  13. let プロジェクト = client。getRecordById(moduleId, projectId);
  14. if(プロジェクト。_status == 'アーカイブ済み') {
  15. throw 新規 ScriptError('アーカイブ済みプロジェクトでは編集できません');
  16. }
  17. }

過去の開始日の制限

選択した開始日が過去の場合はエラーを返し、スケジュールの正確性を維持します。
コード:
  1. function main() {
  2. let タスク = 現在。データ;
  3. let 日付 = 日付。now();
  4. for(let キー of Object。keys(現在)) {
  5. console。log(キー);
  6. }
  7. const startDate = 新規 日付(タスク。start_date)
  8. if(日付 > startDate) {
  9. console。log('開始日が過去日付です');
  10. throw 新規 ScriptError('開始日は過去の日付に更新できません');
  11. }
  12. }

条件に基づくタスク編集の制限

チェックボックス項目が有効な場合、意図しない変更を防ぐため、チェックボックス自体の変更を除きタスクへの更新をすべて制限します。
コード:
  1. function main() {
  2.  
  3. const affectedFields = 現在。affectedFields;
  4. const タスク = 現在。データ;
  5.  
  6. if(affectedFields && typeof affectedFields['checkbox_cf'] != 'undefined') {
  7. 返品する; //チェックボックス自体が更新された場合は何もしない
  8. }
  9.  
  10. //チェックボックス種類の項目のboolean値
  11. if(タスク。checkbox_cf) {
  12. throw 新規 ScriptError('チェックボックスが有効のため、タスクはロックされています。 ')
  13. }
  14. }
  15.  
プロジェクト設定でCodeXをどのように動作させたいか、アイデアはありますか?想定しているユースケースを以下のコメントに投稿してください。

関連記事

    Zoho CRM 管理者向けトレーニング

    「導入したばかりで基本操作や設定に不安がある」、「短期間で集中的に運用開始できる状態にしたい」、「運用を開始しているが再度学び直したい」 といった課題を抱えられているユーザーさまに向けた少人数制のオンライントレーニングです。

    日々の営業活動を効率的に管理し、導入効果を高めるための方法を学びましょう。

    Zoho CRM Training



              Zoho Campaigns Resources

                Zoho WorkDrive Resources




                  • Desk Community Learning Series


                  • Digest


                  • Functions


                  • Meetups


                  • Kbase


                  • Resources


                  • Glossary


                  • Desk Marketplace


                  • MVP Corner


                  • Word of the Day


                  • Ask the Experts









                                  Resources

                                  Videos

                                  Watch comprehensive videos on features and other important topics that will help you master Zoho CRM.



                                  eBooks

                                  Download free eBooks and access a range of topics to get deeper insight on successfully using Zoho CRM.



                                  Webinars

                                  Sign up for our webinars and learn the Zoho CRM basics, from customization to sales force automation and more.



                                  CRM Tips

                                  Make the most of Zoho CRM with these useful tips.