
Microsoft 365 OneDrive for Business: 共有リンク作成
Microsoft 365 OneDrive for Business: Create Sharing Link
この工程は、OneDrive 内の指定ファイル / フォルダにアクセスできる URL を作成し、リンクを知っているすべての人が閲覧できるようにします。
Basic Configs
- 工程名
- メモ
Configs for this Auto Step
- conf_OAuth2
- C1: OAuth2 設定 *
- conf_DriveItemUrl
- C2: 共有するファイル / フォルダの URL *
- conf_SharingLink
- C3: 共有リンクを保存するデータ項目 *
- conf_SharingLinkId
- C4: 共有リンクの ID を保存するデータ項目
Notes
- Microsoft 365 の OneDrive for Business で使用できる自動工程です
- 個人用の OneDrive では使用できません
- ファイルやフォルダの URL は、OneDrive でファイルやフォルダの詳細ウィンドウ(右上の情報アイコン)から「その他の詳細」へ進み、「パス」の隣のアイコンから取得します

- 組織や SharePoint サイトの共有設定で、外部共有が許可されていない場合、共有リンクを作成できません
- 共有設定の確認方法については、Microsoft 365 のドキュメントを参照してください
- 共有ライブラリ内のファイルやフォルダが対象の場合、SharePoint サイトの管理ページで、サイトレベルの共有設定も確認してください
Capture

See Also
Script (click to open)
- 次のスクリプトが記述されている XML ファイルをダウンロードできます
- onedrive-file-link-create.xml (C) Questetra, Inc. (MIT License)
- Professional のワークフロー基盤では、ファイル内容を改変しオリジナルのアドオン自動工程として活用できます
// OAuth2 config sample at [OAuth 2.0 Setting]
// - Authorization Endpoint URL: https://login.microsoftonline.com/{your-tenant-id}/oauth2/v2.0/authorize
// - Token Endpoint URL: https://login.microsoftonline.com/{your-tenant-id}/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/';
function main() {
//// == 工程コンフィグの参照 / Config Retrieving ==
const oauth2 = configs.getObject('conf_OAuth2');
const driveItemUrl = retrieveDriveItemUrl();
const sharingLinkDef = configs.getObject('conf_SharingLink');
const sharingLinkIdDef = configs.getObject('conf_SharingLinkId');
//// == 演算 / Calculating ==
const driveItemInfo = getDriveItemInfoByUrl(oauth2, driveItemUrl);
const {sharingLink, id} = createLink(oauth2, driveItemInfo);
//// == ワークフローデータへの代入 / Data Updating ==
engine.setData(sharingLinkDef, sharingLink);
if (sharingLinkIdDef !== null) {
engine.setData(sharingLinkIdDef, id);
}
}
/**
* config からファイル / フォルダ URL の値を読み出す
* URL が設定されていない場合はエラー
* @returns {String} fileUrl ファイル URL
*/
function retrieveDriveItemUrl() {
const driveItemUrlDef = configs.getObject('conf_DriveItemUrl');
let driveItemUrl = '';
if (driveItemUrlDef === null) {
driveItemUrl = configs.get('conf_DriveItemUrl');
} else {
driveItemUrl = engine.findData(driveItemUrlDef);
}
if (driveItemUrl === null || driveItemUrl === '') {
throw 'File / Folder URL is blank.';
}
return driveItemUrl;
}
/**
* OneDrive のファイル / フォルダのメタデータを取得し、JSONオブジェクトを返す
* APIの仕様: https://docs.microsoft.com/ja-jp/onedrive/developer/rest-api/api/shares_get?view=odsp-graph-online
* @param {AuthSettingWrapper} oauth2 OAuth2 設定情報
* @param {String} sharingUrl ファイル / フォルダの共有 URL
* @returns {Object} ファイル / フォルダ情報 {driveId, id}
*/
function getDriveItemInfoByUrl(oauth2, sharingUrl) {
// encoding sharing URL
const encodedSharingUrl = encodeSharingUrl(sharingUrl);
// preparing for API Request
const response = httpClient.begin()
.authSetting(oauth2)
.queryParam('select', 'id,parentReference')
.get(`${GRAPH_URI}shares/${encodedSharingUrl}/driveItem`);
const status = response.getStatusCode();
const responseStr = response.getResponseAsString();
if (status !== 200) {
engine.log(responseStr);
throw `Failed to get drive item. status: ${status}`;
}
const {
id,
parentReference: {
driveId
}
} = JSON.parse(responseStr);
return {driveId, id};
}
/**
* 共有URLを unpadded base64url 形式にエンコードする
* @param {String} sharingUrl 共有URL
* @returns {String} encodedSharingUrl エンコードされた共有URL
*/
function encodeSharingUrl(sharingUrl) {
let encodedSharingUrl = base64.encodeToUrlSafeString(sharingUrl);
while (encodedSharingUrl.slice(-1) === '=') {
encodedSharingUrl = encodedSharingUrl.slice(0, -1);
}
return `u!${encodedSharingUrl}`;
}
/**
* OneDrive のファイル / フォルダに共有リンクを作成する
* @param {AuthSettingWrapper} oauth2 OAuth2 設定情報
* @param {Object} driveItemInfo ファイル / フォルダ情報 {driveId, id}
* @param {String} driveItemInfo.driveId ドライブ ID
* @param {String} driveItemInfo.id ファイル / フォルダ ID
* @returns {Object} result
* @returns {String} result.id 共有リンクの ID
* @returns {String} result.sharingLink 共有リンク
*/
function createLink(oauth2, {driveId, id}) {
const requestBodyObj = {
type: 'view',
scope: 'anonymous'
};
const response = httpClient.begin()
.authSetting(oauth2)
.body(JSON.stringify(requestBodyObj), 'application/json')
.post(`${GRAPH_URI}drives/${driveId}/items/${id}/createLink`);
const status = response.getStatusCode();
const responseStr = response.getResponseAsString();
// 200: OK (returns the existing link), 201: Created
if (status !== 200 && status !== 201) {
engine.log(responseStr);
throw `Failed to create sharing link. status: ${status}`;
}
const responseJson = JSON.parse(responseStr);
// id と url を返す
return {
id: responseJson.id,
sharingLink: responseJson.link.webUrl
};
}