@blickwerk/n8n-nodes-microsoft-planner 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -106,8 +106,8 @@ Configure the Microsoft Planner OAuth2 API credentials in n8n:
|
|
|
106
106
|
### Creating a Task
|
|
107
107
|
|
|
108
108
|
To create a task:
|
|
109
|
-
1.
|
|
110
|
-
2. Select a **Bucket** from the dropdown (loads
|
|
109
|
+
1. Enter the **Plan ID** (you can find this in Microsoft Planner URL or via Graph Explorer)
|
|
110
|
+
2. Select a **Bucket** from the dropdown (loads automatically based on the Plan ID)
|
|
111
111
|
3. Enter the **Title** of the task
|
|
112
112
|
|
|
113
113
|
Optional fields:
|
|
@@ -146,14 +146,28 @@ To update a task:
|
|
|
146
146
|
- Percent Complete
|
|
147
147
|
- Move to different bucket
|
|
148
148
|
|
|
149
|
-
### How
|
|
149
|
+
### How to Find Plan IDs
|
|
150
150
|
|
|
151
|
-
|
|
152
|
-
- **Plans**: Loaded from your account when you open the Plan dropdown
|
|
153
|
-
- **Buckets**: Dynamically loaded based on the selected Plan
|
|
154
|
-
- **Tasks**: Loaded from the selected Plan or Bucket
|
|
151
|
+
You can find your Plan ID in several ways:
|
|
155
152
|
|
|
156
|
-
|
|
153
|
+
1. **From Planner URL**: Open Microsoft Planner in browser, the URL contains the Plan ID:
|
|
154
|
+
```
|
|
155
|
+
https://tasks.office.com/.../ planId=YOUR_PLAN_ID_HERE /...
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
2. **Via Microsoft Graph Explorer**:
|
|
159
|
+
- Go to https://developer.microsoft.com/graph/graph-explorer
|
|
160
|
+
- Sign in
|
|
161
|
+
- Run: `GET /me/planner/plans`
|
|
162
|
+
- Copy the `id` field from the plan you want
|
|
163
|
+
|
|
164
|
+
### Dynamic Dropdowns
|
|
165
|
+
|
|
166
|
+
Once you enter a Plan ID:
|
|
167
|
+
- **Buckets**: Automatically load for that plan
|
|
168
|
+
- **Tasks**: Load based on selected Plan/Bucket
|
|
169
|
+
|
|
170
|
+
You can also manually enter Bucket IDs and Task IDs if needed.
|
|
157
171
|
|
|
158
172
|
## Compatibility
|
|
159
173
|
|
|
@@ -167,6 +181,19 @@ Tested with n8n version 1.0.0 and above.
|
|
|
167
181
|
|
|
168
182
|
## Version History
|
|
169
183
|
|
|
184
|
+
### 1.2.2
|
|
185
|
+
- Removed Plan dropdown (Plans cannot be loaded via API)
|
|
186
|
+
- Plan ID is now manual input only
|
|
187
|
+
- Buckets and Tasks still have dynamic dropdowns
|
|
188
|
+
- Simplified and more reliable plan selection
|
|
189
|
+
|
|
190
|
+
### 1.2.1
|
|
191
|
+
- Fixed Plans not loading (improved API endpoint to fetch from groups)
|
|
192
|
+
- Allow manual ID input in all dropdown fields
|
|
193
|
+
- You can now choose from dropdown OR paste IDs manually
|
|
194
|
+
- Added placeholders and better descriptions for all ID fields
|
|
195
|
+
- Improved error handling for plans loading
|
|
196
|
+
|
|
170
197
|
### 1.2.0
|
|
171
198
|
- **Major UX Improvement**: Added dynamic dropdowns for Plans, Buckets, and Tasks
|
|
172
199
|
- No more manual ID lookup - select from dropdown menus
|
|
@@ -3,7 +3,6 @@ export declare class MicrosoftPlanner implements INodeType {
|
|
|
3
3
|
description: INodeTypeDescription;
|
|
4
4
|
methods: {
|
|
5
5
|
loadOptions: {
|
|
6
|
-
getPlans(this: ILoadOptionsFunctions): Promise<any>;
|
|
7
6
|
getBuckets(this: ILoadOptionsFunctions): Promise<any>;
|
|
8
7
|
getTasks(this: ILoadOptionsFunctions): Promise<any>;
|
|
9
8
|
};
|
|
@@ -45,13 +45,6 @@ class MicrosoftPlanner {
|
|
|
45
45
|
};
|
|
46
46
|
this.methods = {
|
|
47
47
|
loadOptions: {
|
|
48
|
-
async getPlans() {
|
|
49
|
-
const plans = await GenericFunctions_1.microsoftApiRequestAllItems.call(this, 'value', 'GET', '/me/planner/plans');
|
|
50
|
-
return plans.map((plan) => ({
|
|
51
|
-
name: plan.title,
|
|
52
|
-
value: plan.id,
|
|
53
|
-
}));
|
|
54
|
-
},
|
|
55
48
|
async getBuckets() {
|
|
56
49
|
const planId = this.getNodeParameter('planId', 0);
|
|
57
50
|
if (!planId) {
|
|
@@ -52,12 +52,9 @@ exports.taskFields = [
|
|
|
52
52
|
// task:create
|
|
53
53
|
// ----------------------------------
|
|
54
54
|
{
|
|
55
|
-
displayName: 'Plan',
|
|
55
|
+
displayName: 'Plan ID',
|
|
56
56
|
name: 'planId',
|
|
57
|
-
type: '
|
|
58
|
-
typeOptions: {
|
|
59
|
-
loadOptionsMethod: 'getPlans',
|
|
60
|
-
},
|
|
57
|
+
type: 'string',
|
|
61
58
|
required: true,
|
|
62
59
|
displayOptions: {
|
|
63
60
|
show: {
|
|
@@ -66,12 +63,13 @@ exports.taskFields = [
|
|
|
66
63
|
},
|
|
67
64
|
},
|
|
68
65
|
default: '',
|
|
69
|
-
description: 'The plan to which the task belongs',
|
|
66
|
+
description: 'The ID of the plan to which the task belongs',
|
|
67
|
+
placeholder: 'Enter Plan ID',
|
|
70
68
|
},
|
|
71
69
|
{
|
|
72
70
|
displayName: 'Bucket',
|
|
73
71
|
name: 'bucketId',
|
|
74
|
-
type: '
|
|
72
|
+
type: 'string',
|
|
75
73
|
typeOptions: {
|
|
76
74
|
loadOptionsMethod: 'getBuckets',
|
|
77
75
|
},
|
|
@@ -83,7 +81,8 @@ exports.taskFields = [
|
|
|
83
81
|
},
|
|
84
82
|
},
|
|
85
83
|
default: '',
|
|
86
|
-
description: 'The bucket to which the task belongs',
|
|
84
|
+
description: 'The bucket to which the task belongs. Choose from the dropdown or enter a Bucket ID manually.',
|
|
85
|
+
placeholder: 'Select from dropdown or paste Bucket ID',
|
|
87
86
|
},
|
|
88
87
|
{
|
|
89
88
|
displayName: 'Title',
|
|
@@ -184,7 +183,7 @@ exports.taskFields = [
|
|
|
184
183
|
{
|
|
185
184
|
displayName: 'Task',
|
|
186
185
|
name: 'taskId',
|
|
187
|
-
type: '
|
|
186
|
+
type: 'string',
|
|
188
187
|
typeOptions: {
|
|
189
188
|
loadOptionsMethod: 'getTasks',
|
|
190
189
|
},
|
|
@@ -196,7 +195,8 @@ exports.taskFields = [
|
|
|
196
195
|
},
|
|
197
196
|
},
|
|
198
197
|
default: '',
|
|
199
|
-
description: 'The task to operate on',
|
|
198
|
+
description: 'The task to operate on. Choose from the dropdown or enter a Task ID manually.',
|
|
199
|
+
placeholder: 'Select from dropdown or paste Task ID',
|
|
200
200
|
},
|
|
201
201
|
{
|
|
202
202
|
displayName: 'Additional Fields',
|
|
@@ -268,24 +268,23 @@ exports.taskFields = [
|
|
|
268
268
|
},
|
|
269
269
|
options: [
|
|
270
270
|
{
|
|
271
|
-
displayName: 'Plan',
|
|
271
|
+
displayName: 'Plan ID',
|
|
272
272
|
name: 'planId',
|
|
273
|
-
type: '
|
|
274
|
-
typeOptions: {
|
|
275
|
-
loadOptionsMethod: 'getPlans',
|
|
276
|
-
},
|
|
273
|
+
type: 'string',
|
|
277
274
|
default: '',
|
|
278
|
-
description: 'Filter tasks by
|
|
275
|
+
description: 'Filter tasks by Plan ID',
|
|
276
|
+
placeholder: 'Enter Plan ID',
|
|
279
277
|
},
|
|
280
278
|
{
|
|
281
279
|
displayName: 'Bucket',
|
|
282
280
|
name: 'bucketId',
|
|
283
|
-
type: '
|
|
281
|
+
type: 'string',
|
|
284
282
|
typeOptions: {
|
|
285
283
|
loadOptionsMethod: 'getBuckets',
|
|
286
284
|
},
|
|
287
285
|
default: '',
|
|
288
|
-
description: 'Filter tasks by bucket',
|
|
286
|
+
description: 'Filter tasks by bucket. Choose from the dropdown or enter a Bucket ID manually.',
|
|
287
|
+
placeholder: 'Select from dropdown or paste Bucket ID',
|
|
289
288
|
},
|
|
290
289
|
],
|
|
291
290
|
},
|