Skip to content

プロジェクトを立ち上げ、WBSを作成する

概要

プロジェクトを作成する際には、以下の処理を実行する必要があります。

  • プロジェクトの作成
  • メンバーの登録
  • WBSの作成

年度や期の切り替わりなど、多数のプロジェクトを同時期に開始する場面において、上記処理を一つずつ実施するには非常に手間がかかります。この場面でも、Web APIを活用すれば簡単にプロジェクトを作成し、すぐに運用を開始できます。

利用場面

  • 新規でプロジェクトを立ち上げる
  • プロジェクトに複数のメンバをまとめて追加する

使用するAPI

以下のAPIを使用します。

  • プロジェクトの追加
  • ワークアイテムの追加
  • ワークアイテムの更新

サンプルスクリプト

//======================================================================
//  プロジェクトを新規に作成する
//======================================================================
//======================================================================
//  外部ファイル(ライブラリ、他ファイル)のインクルード
//======================================================================

const https = require('https'); // HTTPS通信を利用する場合に設定する
const http = require('http'); // HTTP通信を利用する場合に設定する
const axios = require('axios');
const fs = require('fs');

//======================================================================
//  共通部の定義
//======================================================================

// APIを呼び出すURLを設定する
const baseURLString = 'http://yourserver/TimeTrackerNX/api';

//======================================================================
//  メイン処理
//======================================================================
main();

async function main(){

    // 引数チェック    
    if (process.argv.length < 3){
        return 'enter username and password'; 
    }

    const userName = process.argv[2];
    var pass;
    var authString; //ブロック内スコープから外に出すためvarで宣言(固定値)

    // 引数でパスワードが未入力の場合は空白とみなす
    if (process.argv.length > 3){
        pass = process.argv[3];
    } else {
        pass = '';        
    }

    // 認証情報を取得する
    var sendUrl = baseURLString + '/auth/token';

    try{
        const { data } = await axios.post(
            sendUrl,
            {
                loginName : userName,
                password : pass
            },
/*
        // https通信時に使用する
        httpsAgent  : new https.Agent({
            rejectUnauthorized: false
                    })
*/    
        );
        authString = 'Bearer ' + data.token;

    } catch (err) {
        console.log(err);
    }

    // 以降のAPI通信で利用する送信ヘッダを作成する
    const request = axios.create({
        baseURL     : baseURLString,
        headers     :{
                        'Authorization'   : authString
                    },
/*
        // https通信時に使用する
        httpsAgent  : new https.Agent({
            rejectUnauthorized: false
                    })
*/    
                });

    // 新規プロジェクトの作成

    var sendUrl = '/project/projects';
    var projectId;

    // プロジェクト作成 (リクエストに1つ分のプロジェクト情報を設定して送信)
    try {
        const { data } = await request.post(
            sendUrl,
            {
                name                : 'サンプルプロジェクト1',
                manager             : '岡本 直哉',
                code                : 'SAMPLE-001',
                plannedStartDate    : '2019-04-01',
                plannedFinishDate   : '2020-03-31'
            }
        );

        // 戻り値のプロジェクトIDを取得(この後のWBSの追加に利用)
        projectId = data.id;
    } catch (e) {
        console.log(e);
    }

    // 新規作成したプロジェクトのルートワークアイテム(WBSの追加先)を取得する。
    sendUrl = '/project/projects/' + projectId;
    var workItemRootId;
    try {
        const { data } = await request.get(
            sendUrl,
            {
                params:{}
            }
        );
        workItemRootId = data[0].workItemRootFolderId;
    } catch (e) {
        console.log(e);
    }

    // コピー元になるワークアイテム(例えば標準WBS)の情報を設定する
    var wbsProject_projectId = 1; // コピー元のプロジェクトID
    var wbsProject_workItemId = '3,7,11,15,26'; // コピー元のワークアイテムID

    // ワークアイテムの追加(リクエストに複製するワークアイテムの情報を設定して送信)
    sendUrl = '/workItem/workItems/'+ workItemRootId +'/subItems/duplicate';
    try {
        const { data } = await request.post(
            sendUrl,
            {
                fromProjectId           : wbsProject_projectId,
                fromItemIds             : wbsProject_workItemId
            }
        );
    } catch (e) {
        console.log(e);
    }

    // プロジェクトにメンバーを追加する
    sendUrl = '/project/projects/' + projectId;

    // JSON形式のデータ(例:後述のaddMember.json)を入力とする
    const filepath = './addMember.json';

    var addMemberData = JSON.parse(fs.readFileSync(filepath, {encoding: "utf-8"}));

    // プロジェクトメンバーの追加(リクエストに追加するユーザーの情報を設定して送信)
    try {
        const { data } = await request.put(
            sendUrl,
            {
                memberChange:{
                    adds : addMemberData
                }
            }
        );
    } catch (e) {
        console.log(e);
    } 
}

入力情報

上記のサンプルスクリプトで使用するプロジェクトメンバー追加用のアカウント情報ファイルを以下のリンク先から参照できます。