Projects向けCodeXスクリプト

Projects向けCodeXスクリプト

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

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

Info

ユースケース。

新しいプロジェクトの作成

所有者、日付、予算、カスタム項目が入力された新しいプロジェクトを作成します。
コード:
  1. function main() {
  2. try {
  3. const layoutId = current.record.layoutId;
  4. const moduleId = current.record.moduleId;
  5. const layout = client.getLayoutById(layoutId, moduleId);
  6. const newProject = new Record(layout);
  7. newProject.name = 'Explore Zoho ';
  8. const projectOwnerId = variables.projectowner.value;
  9. const user1 = variables.user1.value; // user1のZPUIDはvariablesに保存されています
  10. const user2 = variables.user2.value; // user2のZPUIDはvariablesに保存されています
  11. const addedProject = client.save(newProject);
  12. addedProject.name = 'Explore Zoho Projects';
  13. addedProject.description =
  14. 'Explore Zoho Projects features and functionalities';
  15. addedProject.owner = projectOwnerId;
  16. addedProject.status = '242942000000027095'; // レイアウトに基づくステータスID。こちらでは、242942000000040005は「In Progress」ステータスに対応します
  17. addedProject.start_date = '2025-12-08';
  18. addedProject.end_date = '2025-12-25';
  19. addedProject.project_group = '242942000000025001'; // プロジェクトグループID
  20. addedProject.completed_time = '2025-12-31T00:00:00+05:30'; // 完了時刻はISOの日付時刻形式で指定する必要があります
  21. addedProject.currency = 'INR'; // 通貨コード
  22. addedProject.budget_type = '1'; // 予算の種類
  23. addedProject.hourly_budget = '5.000';
  24. addedProject.hourly_budget_threshold = '3.000';
  25. addedProject.cost_budget = '5600';
  26. addedProject.cost_budget_threshold = '5000';
  27. addedProject.revenue_budget = '4000';
  28. addedProject.billing_method = '1'; // 請求方法。参照:IDEのBillingMethod列挙型。
  29. addedProject.rate_per_hour = '800';
  30. addedProject.cost_per_hour = '600';
  31. addedProject.single_line_text = 'Sample Single Line Text';
  32. addedProject.pick_list = 'Option 1'; // レイアウトの選択リストの選択肢に基づく値
  33. addedProject.multi_line_text =
  34. 'Lorem sunt Duis dolor laborum \n eu magna incididunt ipsum qui sit pariatur \n aute officia nisi irure nostrud sit commodo esse';
  35. addedProject.multi_select_field = ['Option 1', 'Option 2', 'Option 3']; // レイアウトの複数選択の選択肢に基づく値
  36. addedProject.user_pick_list_all_users = user1;
  37. addedProject.user_pick_list_select_roles = '242942000000082031'; // 組織の役割に基づく役割ID
  38. addedProject.user_pick_list_selected_users = user2;
  39. addedProject.multi_user_picklist_all_users = [user1, user2];
  40. addedProject.multi_user_picklist_selected_roles = [
  41. '242942000000082031',
  42. '242942000000082001',
  43. ];
  44. addedProject.multi_user_picklist_selected_users = [user1, user2];
  45. addedProject.date_field = '2025-12-08'; // ISO日付形式の日付項目の値
  46. addedProject.checkbox_field = 'true';
  47. addedProject.currency_field = '4300';
  48. addedProject.percentage_field = '25'; // %記号を除いたパーセンテージ値
  49. addedProject.decimal_field = '130.24';
  50. addedProject.number_field = '430020';
  51. addedProject.email_field = 'vishal@yahoo.com';
  52. addedProject.phone_field = '1234567890';
  53. addedProject.url_field = 'https://zlyker.com/';
  54. client.save(addedProject);
  55. } catch (err) {
  56. console.log(err);
  57. throw new ScriptError(err);
  58. }
  59. }

新しいエンティティの作成

任意のタブに、名前項目のみを設定した空のデータを作成します。デバッグや検証に使用できます。
コード:
  1. function main() {
  2. try {
  3. let layout = client.getLayoutById(current.record.layoutId, current.record.moduleId);
  4. let record = new Record(layout);
  5. record.name = 'created project from script'
  6. client.save(record);
  7. } catch (err) {
  8. throw new ScriptError(err);
  9. }
  10. }

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

関連付けられているプロジェクトがアーカイブされている場合に、タスクの編集を制限します。
コード:
  1. function main() {
  2. let task = current.record;
  3. let projectId = task.projectId;
  4. const moduleItr = client.getModules(0, 10);
  5.   
  6. let moduleId;
  7. console.log(JSON.stringify(current.affectedFields));
  8. while (moduleItr.hasNext()) {
  9. let moduleObj = moduleItr.next();
  10. if (moduleObj.name == 'Projects') {
  11. moduleId = moduleObj.id;
  12. }
  13. }
  14. let project = client.getRecordById(moduleId, projectId);
  15. if (project.project_type == 'archived') {
  16. throw new ScriptError('Edits are disabled for archived projects');
  17. }
  18. }
プロジェクト構成でCodeXをどのように活用したいか、アイデアがありますか?以下のコメント欄でユースケースをお聞かせください!

関連記事
ヘルプに戻る
タスク用CodeXスクリプト