タスク用CodeXスクリプト

タスク用CodeXスクリプト

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

CodeX Scripts は Zoho プロジェクトで使用できる詳細な条件ロジックスクリプトで、特定のルールや検証を強制するために利用します。ユーザーは、タスクをいつ・どのような条件で作成、編集、またはステータス変更できるかを制御できます。これにより、コンプライアンスの順守とプロセスの一貫性が向上します。

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

利用シナリオ:

サブタスクを 1 階層以上作成できないように制限する

サブタスクの下にさらにサブタスクを作成できないように制限し、サブタスクは 1 階層までに抑えたシンプルで管理しやすいタスク階層を維持します。
コード:
  1. function main() {
  2. if(現在。データ。parent_task !== 現在。データ。root_task) {
  3. throw 新規 ScriptError('1 階層を超えるサブタスクの作成は無効です');
  4. }
  5. }

ステータスが「保留中」のプロジェクトでタスク作成を無効にする

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

 ステータス更新後の手動での日付変更を制限する

レイアウトの初期ステータスと異なるステータスの場合、開始日、終了日、または期間を編集できないように制限します。
コード:
  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('開始日と終了日の変更は、初期ステータスでのみ許可されています');
  16. }
  17. }
  18.  

未完了のサブタスクがある場合はタスクを完了にできないよう制限する

未完了のサブタスクが存在する場合、親タスクのステータスを「完了」に変更できないように制限します。これにより、すべてのサブタスクが完了するまで、親タスクを完了としてマークできないようにします。
コード:
  1.  
  2. function main() {
  3.  
  4. console。log(現在。affectedFields。toString());
  5.  
  6. //base 条件 handling
  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. //no subtasks present for 現在 タスク
  32. if (!タスク || タスク。length == 0) {
  33. console。log('いいえ subtasks 既存 for 現在 タスク');
  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('タスク cannot be 完了済み since it contains 開く subtask(s)');
  47. }
  48. }
  49. }
  50.  
  51.  
  52. }

前提タスクが未完了の場合にステータス変更を制限する

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

  2. console。log(現在。affectedFields。toString());
  3.     
  4. //base 条件 handling
  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. //no dependency present in 前へ タスク
  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('開く predecessor タスク 既存, please 閉じる them to 続ける');
  25. }
  26. }

  27. }

 サブタスクの作成を制限する

サブタスクの作成を制限し、一定のタスク構造を維持します。
コード:
  1. function main() {
  2. let タスク = 現在。データ;
  3. let startDate = タスク。start_date;
  4. if(タスク。parent_task || タスク。root_task) {
  5. Logger。info('Subtask creation is 無効');
  6. throw 新規 ScriptError('Subtask creation is 無効'));
  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. //チェックボックスタイプ項目のブール値
  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.