OneDrive: Create Folder
Create a folder in the specified folder on OneDrive.
2020-03-31 (C) Questetra, Inc. (MIT License)
Configs
  • C1: OAuth2 Setting Name *
  • C2: Parent Folder ID (Root Folder if blank)
  • C3: Folder Name to create * #{EL}
  • C4: String type data Item that will save Folder ID
  • C5: String type data Item that will save Folder URL
Script
// OAuth2 config sample at [OAuth 2.0 Setting]
// - Authorization Endpoint URL: https://login.microsoftonline.com/common/oauth2/v2.0/authorize
// - Token Endpoint URL: https://login.microsoftonline.com/common/oauth2/v2.0/token
// - Scope: https://graph.microsoft.com/Files.ReadWrite offline_access
// - Consumer Key: (Get by Microsoft Azure Active Directory)
// - Consumer Secret: (Get by Microsoft Azure Active Directory)

main();

function main(){
  //// == 工程コンフィグの参照 / Config Retrieving ==
  const oauth2 = configs.get( "OAuth2" );
  const idDataDef = configs.getObject("folderId");
  const urlDataDef = configs.getObject("folderUrl");
  //// == ワークフローデータの参照 / Data Retrieving ==
  const parentFolderId = parentFolderIdDecision();
  const folderName = folderNameDecision();
  
  //// == 演算 / Calculating ==
  let createdFolderData = ["",""]; //0:ID,1:URL
  const token = httpClient.getOAuth2Token( oauth2 );

  create(token,parentFolderId,folderName,createdFolderData);
  //// == ワークフローデータへの代入 / Data Updating ==
  setData(idDataDef,createdFolderData[0]);
  setData(urlDataDef,createdFolderData[1]);
}

/**
  * 親フォルダのIDをconfigから読み出して出力する。空の場合は"root"とする。
  * @return {String}  フォルダの ID
  */
function parentFolderIdDecision(){
  let folderId = "";
  const folderIdDef = configs.getObject("parentFolderId");
  if(folderIdDef === null){
    folderId = configs.get( "parentFolderId");
  }else{
    folderId = engine.findData(folderIdDef);
  }
  if(folderId === "" || folderId === null){
    //when parent folder id isn't set, set "root"
    folderId = "root";
  }
  return folderId;
}

/**
  * 作成するフォルダの名前を config から読み出して出力する。空の場合はエラーとする。
  * @return {String}  フォルダの ID
  */
function folderNameDecision(){
  let folderName = "";
  const folderNameDef = configs.getObject("folderName");
  if(folderNameDef === null){
    folderName = configs.get( "folderName");
  }else{
    folderName = engine.findData(folderNameDef);
  }
  if(folderName === "" || folderName === null){
    throw "Folder Name is empty";
  }
  return folderName;
}

/**
  * フォルダを作成する。
  * @param {String} token  OAuth2 トークン
  * @param {String} parentFolderId  親フォルダの ID
  * @param {String} folderName  作成するフォルダの名前
  * @param {Array<String>} createdFolderData  アップロードしたファイルの情報を格納する配列
  */
function create(token,parentFolderId,folderName,createdFolderData){
  const url = "https://graph.microsoft.com/v1.0/me/drive/items/" + parentFolderId + "/children";
  const body = {
    "name": folderName,
    "folder":{},
    "@microsoft.graph.conflictBehavior": "fail"
    //重複時の振る舞いを決めること
  }
  let response = httpClient.begin()
    .bearer(token)
    .body(JSON.stringify(body), "application/json; charset=UTF-8")
    .post(url);
  //when error thrown
  const responseJson = response.getResponseAsString();
  const status = response.getStatusCode();
  if (status >= 300) {
    throw `failed to create: ${folderName} \n status: ${status} \n ${responseJson}`;
  }
  engine.log("---POST request---");
  engine.log(`status: ${status}`);
  engine.log(responseJson);
  const json = JSON.parse(responseJson);

  createdFolderData[0] = json.id;
  createdFolderData[1] = json.webUrl;
}

/**
  * アップロードしたデータのIDとURLをデータ項目に出力する。
  * @param {ProcessDataDefinitionView} dataDef  データ項目の ProcessDataDefinitionView
  * @param {String} createdFolderData  アップロードしたファイルの情報が格納されている文字列
  */
function setData(dataDef,createdFolderData){
  if(dataDef !==  null){
    engine.setData(dataDef,createdFolderData);
  }
}

Download

Capture

%d bloggers like this: