
Microsoft 365 OneDrive for Business: フォルダ作成 (Microsoft 365 OneDrive for Business: Create Folder)
この工程は、OneDrive の指定フォルダ内にフォルダを作成します。
Configs:共通設定
- 工程名
- メモ
Configs
- C1: OAuth2 設定 *
- C2: 作成するフォルダの親フォルダの URL (空白の場合、ルートフォルダ)
- C3: 作成するフォルダの名称 *#{EL}
- C4: フォルダ URL を保存するデータ項目
Notes
- Microsoft 365 の OneDrive for Business で使用できる自動工程です。個人用の OneDrive では使用できません。
- ファイルやフォルダの URL は、OneDrive でファイルやフォルダの詳細ウィンドウ(右上のiのアイコン)から「その他の詳細」へ進み、「パス」の隣のアイコンから取得します。(上部メニューの「共有」や「リンクのコピー」から取得した URL も使用できます)
- フォルダ名が競合(コンフリクト)する場合は、エラーとなります。
Capture

See also
Script (click to open)
- 下記のスクリプトを記述した XML ファイルをダウンロードできます
- onedrive-folder-create.xml (C) Questetra, Inc. (MIT License)
- Professional をご利用であればファイルの内容を改変することでオリジナルのアドオンとして活用できます
// 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.All offline_access
// - Consumer Key: (Get by Microsoft Azure Active Directory)
// - Consumer Secret: (Get by Microsoft Azure Active Directory)
const GRAPH_URI = "https://graph.microsoft.com/v1.0/";
main();
function main(){
//// == 工程コンフィグの参照 / Config Retrieving ==
const oauth2 = configs.get("conf_OAuth2");
const parentFolderUrl = retrieveParentFolderUrl();
const folderName = retrieveFolderName();
const urlDataDef = configs.getObject("conf_folderUrl");
//// == 演算 / Calculating ==
const parentFolderInfo = getFolderInfoByUrl( parentFolderUrl, oauth2 );
const createdFolderUrl = createFolder( parentFolderInfo, folderName, oauth2 );
//// == ワークフローデータへの代入 / Data Updating ==
setData( urlDataDef, createdFolderUrl );
}
/**
* configから値を読み出し、必要に応じて値チェックを行った後、値を返す
* @return {String} configの値
*/
function retrieveParentFolderUrl() {
const folderUrlDef = configs.getObject( "conf_parentFolderUrl" );
let folderUrl = configs.get( "conf_parentFolderUrl" );
if ( folderUrlDef !== null ) {
folderUrl = engine.findData( folderUrlDef );
}
return folderUrl;
}
function retrieveFolderName() {
const folderName = configs.get( "conf_folderName" );
if ( folderName === "" || folderName === null ) {
throw `Folder name is empty.`;
}
return folderName;
}
/**
* フォルダのURLからフォルダ情報(ドライブIDとフォルダID)を取得し、
* オブジェクトで返す(URLが空の場合はドライブIDをme/drive、フォルダIDをrootにする)
* @param {String} folderUrl フォルダのURL
* @param {String} oauth2 OAuth2 設定名
* @return {Object} folderInfo フォルダ情報 {driveId, folderId}
*/
function getFolderInfoByUrl( folderUrl, oauth2 ) {
let folderInfo = {driveId: "me/drive", folderId: "root"};
if ( folderUrl !== "" && folderUrl !== null ) {
// 分割代入
const {
id,
parentReference: {
driveId
}
} = getObjBySharingUrl( folderUrl, oauth2 );
folderInfo = {driveId: `drives/${driveId}`, folderId: id};
}
return folderInfo;
}
/**
* OneDriveのドライブアイテム(ファイル、フォルダ)のメタデータを取得し、JSONオブジェクトを返す
* APIの仕様:https://docs.microsoft.com/ja-jp/onedrive/developer/rest-api/api/shares_get?view=odsp-graph-online
* @param {String} sharingUrl ファイルの共有URL
* @param {String} oauth2 OAuth2 設定名
* @return {Object} responseObj ドライブアイテムのメタデータのJSONオブジェクト
*/
function getObjBySharingUrl( sharingUrl, oauth2 ) {
if (sharingUrl === "" || sharingUrl === null) {
throw `Sharing URL is empty.`;
}
// encoding sharing URL
const encodedSharingUrl = encodeSharingUrl(sharingUrl);
// API Request
const response = httpClient.begin() // HttpRequestWrapper
.authSetting(oauth2)
.get( `${GRAPH_URI}shares/${encodedSharingUrl}/driveItem` ); // HttpResponseWrapper
const httpStatus = response.getStatusCode();
const responseStr = response.getResponseAsString();
if (httpStatus >= 300) {
engine.log(`---GET request--- ${httpStatus}\n${responseStr}\n`);
throw `Failed to get drive item. status: ${httpStatus}`;
}
return JSON.parse( responseStr );
}
/**
* 共有URLをunpadded base64url 形式にエンコードする
* @param {String} sharingUrl 共有URL
* @return {String} encodedSharingUrl エンコードされた共有URL
*/
function encodeSharingUrl( sharingUrl ) {
let encodedSharingUrl = base64.encodeToUrlSafeString( sharingUrl );
while ( encodedSharingUrl.slice(-1) === '=' ) {
encodedSharingUrl = encodedSharingUrl.slice(0,-1);
}
return `u!${encodedSharingUrl}`;
}
/**
* フォルダを作成する
* @param {String,String} driveId,folderId 親フォルダのドライブID、フォルダID
* @param {String} folderName 作成するフォルダの名前
* @param {String} oauth2 OAuth2 設定名
* @return {String} 作成したフォルダの URL
*/
function createFolder( {
driveId,
folderId
}, folderName, oauth2 ){
const url = `${GRAPH_URI}${driveId}/items/${folderId}/children`;
const body = {
"name": folderName,
"folder":{},
"@microsoft.graph.conflictBehavior": "fail" // 重複時はエラーになるように
}
const response = httpClient.begin()
.authSetting(oauth2)
.body(JSON.stringify(body), "application/json; charset=UTF-8")
.post(url);
//when error thrown
const responseStr = response.getResponseAsString();
const status = response.getStatusCode();
if (status >= 300) {
engine.log(`---POST request--- ${status}\n${responseStr}\n`);
throw `Failed to create: ${folderName}. status: ${status}`;
}
const json = JSON.parse(responseStr);
return json.webUrl;
}
/**
* データ項目に出力する
* @param {ProcessDataDefinitionView} dataDef データ項目の ProcessDataDefinitionView
* @param {String} dataString 出力する文字列
*/
function setData( dataDef, dataString ){
if(dataDef !== null){
engine.setData( dataDef, dataString );
}
}