@blickwerk/n8n-nodes-microsoft-planner 1.1.0 → 1.1.1
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
|
@@ -14,7 +14,7 @@ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes
|
|
|
14
14
|
|
|
15
15
|
1. Go to **Settings > Community Nodes** in your n8n instance
|
|
16
16
|
2. Select **Install**
|
|
17
|
-
3. Enter
|
|
17
|
+
3. Enter `@blickwerk/n8n-nodes-microsoft-planner` in **Enter npm package name**
|
|
18
18
|
4. Agree to the [risks](https://docs.n8n.io/integrations/community-nodes/risks/) of using community nodes
|
|
19
19
|
5. Select **Install**
|
|
20
20
|
|
|
@@ -22,10 +22,10 @@ After installing the node, you can use it like any other node in your workflows.
|
|
|
22
22
|
|
|
23
23
|
### Manual Installation
|
|
24
24
|
|
|
25
|
-
To install manually
|
|
25
|
+
To install manually:
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
npm install n8n-nodes-microsoft-planner
|
|
28
|
+
npm install @blickwerk/n8n-nodes-microsoft-planner
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
## Prerequisites
|
|
@@ -36,6 +36,7 @@ You need to have:
|
|
|
36
36
|
- Azure AD App Registration with the following API permissions:
|
|
37
37
|
- `Tasks.ReadWrite` - Read and write tasks
|
|
38
38
|
- `Group.ReadWrite.All` - Read and write all groups (required for Planner)
|
|
39
|
+
- `User.Read.All` - Read all users (required for user assignment by email)
|
|
39
40
|
|
|
40
41
|
## Setting up Azure AD App
|
|
41
42
|
|
|
@@ -54,10 +55,13 @@ You need to have:
|
|
|
54
55
|
3. Select **Microsoft Graph**
|
|
55
56
|
4. Select **Delegated permissions**
|
|
56
57
|
5. Add the following permissions:
|
|
57
|
-
- `Tasks.ReadWrite`
|
|
58
|
-
- `Group.ReadWrite.All`
|
|
58
|
+
- `Tasks.ReadWrite` - Read and write tasks
|
|
59
|
+
- `Group.ReadWrite.All` - Read and write all groups (required for Planner)
|
|
60
|
+
- `User.Read.All` - Read all users' basic profiles (required for user assignment)
|
|
59
61
|
6. Click **Grant admin consent**
|
|
60
62
|
|
|
63
|
+
**Note**: The `User.Read.All` permission is required if you want to assign tasks to users by email address.
|
|
64
|
+
|
|
61
65
|
### Create Client Secret
|
|
62
66
|
|
|
63
67
|
1. Go to **Certificates & secrets**
|
|
@@ -100,11 +104,16 @@ To create a task, you need:
|
|
|
100
104
|
- **Title**: The task title
|
|
101
105
|
|
|
102
106
|
Optional fields:
|
|
103
|
-
- Description
|
|
104
|
-
- Priority
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
-
|
|
107
|
+
- **Description**: Detailed task description
|
|
108
|
+
- **Priority**: Select from dropdown
|
|
109
|
+
- Urgent (highest priority)
|
|
110
|
+
- Important
|
|
111
|
+
- Medium (default)
|
|
112
|
+
- Low
|
|
113
|
+
- **Assigned To**: Comma-separated list of user emails (e.g., `user1@domain.com, user2@domain.com`)
|
|
114
|
+
- **Due Date Time**: When the task should be completed
|
|
115
|
+
- **Start Date Time**: When work on the task should begin
|
|
116
|
+
- **Percent Complete**: Task completion percentage (0-100)
|
|
108
117
|
|
|
109
118
|
### Getting Tasks
|
|
110
119
|
|
|
@@ -115,7 +124,15 @@ You can retrieve tasks by:
|
|
|
115
124
|
|
|
116
125
|
### Updating a Task
|
|
117
126
|
|
|
118
|
-
To update a task, provide the Task ID and the fields you want to update.
|
|
127
|
+
To update a task, provide the Task ID and the fields you want to update. You can update:
|
|
128
|
+
- Title
|
|
129
|
+
- Description
|
|
130
|
+
- Priority (via dropdown)
|
|
131
|
+
- Assigned users (via email list)
|
|
132
|
+
- Due Date Time
|
|
133
|
+
- Start Date Time
|
|
134
|
+
- Percent Complete
|
|
135
|
+
- Move to different bucket
|
|
119
136
|
|
|
120
137
|
### Finding Plan and Bucket IDs
|
|
121
138
|
|
|
@@ -139,10 +156,20 @@ Tested with n8n version 1.0.0 and above.
|
|
|
139
156
|
|
|
140
157
|
## Version History
|
|
141
158
|
|
|
159
|
+
### 1.1.0
|
|
160
|
+
- Added priority dropdown (Urgent, Important, Medium, Low) instead of number input
|
|
161
|
+
- Added user assignment functionality (assign tasks by email)
|
|
162
|
+
- Improved user experience with better field descriptions
|
|
163
|
+
|
|
164
|
+
### 1.0.1
|
|
165
|
+
- Fixed DateTime format handling (automatic conversion to ISO 8601)
|
|
166
|
+
- Improved error handling for invalid date formats
|
|
167
|
+
|
|
142
168
|
### 1.0.0
|
|
143
169
|
- Initial release
|
|
144
170
|
- Support for creating and retrieving Planner tasks
|
|
145
171
|
- OAuth2 authentication
|
|
172
|
+
- CRUD operations (Create, Read, Update, Delete)
|
|
146
173
|
|
|
147
174
|
## License
|
|
148
175
|
|
|
@@ -68,11 +68,13 @@ class MicrosoftPlanner {
|
|
|
68
68
|
if (additionalFields.priority !== undefined) {
|
|
69
69
|
body.priority = additionalFields.priority;
|
|
70
70
|
}
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
const formattedDueDateTime = (0, GenericFunctions_1.formatDateTime)(additionalFields.dueDateTime);
|
|
72
|
+
if (formattedDueDateTime) {
|
|
73
|
+
body.dueDateTime = formattedDueDateTime;
|
|
73
74
|
}
|
|
74
|
-
|
|
75
|
-
|
|
75
|
+
const formattedStartDateTime = (0, GenericFunctions_1.formatDateTime)(additionalFields.startDateTime);
|
|
76
|
+
if (formattedStartDateTime) {
|
|
77
|
+
body.startDateTime = formattedStartDateTime;
|
|
76
78
|
}
|
|
77
79
|
if (additionalFields.percentComplete !== undefined) {
|
|
78
80
|
body.percentComplete = additionalFields.percentComplete;
|
|
@@ -86,10 +88,16 @@ class MicrosoftPlanner {
|
|
|
86
88
|
if (userId) {
|
|
87
89
|
userIds.push(userId);
|
|
88
90
|
}
|
|
91
|
+
else {
|
|
92
|
+
console.warn(`Could not find user ID for email: ${email}`);
|
|
93
|
+
}
|
|
89
94
|
}
|
|
90
95
|
if (userIds.length > 0) {
|
|
91
96
|
body.assignments = (0, GenericFunctions_1.createAssignmentsObject)(userIds);
|
|
92
97
|
}
|
|
98
|
+
else if (emails.length > 0) {
|
|
99
|
+
console.warn('No valid user IDs found for assignment. Check if User.Read.All permission is granted.');
|
|
100
|
+
}
|
|
93
101
|
}
|
|
94
102
|
const responseData = await GenericFunctions_1.microsoftApiRequest.call(this, 'POST', '/planner/tasks', body);
|
|
95
103
|
// Add description if provided
|
|
@@ -162,11 +170,13 @@ class MicrosoftPlanner {
|
|
|
162
170
|
if (updateFields.priority !== undefined) {
|
|
163
171
|
body.priority = updateFields.priority;
|
|
164
172
|
}
|
|
165
|
-
|
|
166
|
-
|
|
173
|
+
const formattedDueDateTime = (0, GenericFunctions_1.formatDateTime)(updateFields.dueDateTime);
|
|
174
|
+
if (formattedDueDateTime) {
|
|
175
|
+
body.dueDateTime = formattedDueDateTime;
|
|
167
176
|
}
|
|
168
|
-
|
|
169
|
-
|
|
177
|
+
const formattedStartDateTime = (0, GenericFunctions_1.formatDateTime)(updateFields.startDateTime);
|
|
178
|
+
if (formattedStartDateTime) {
|
|
179
|
+
body.startDateTime = formattedStartDateTime;
|
|
170
180
|
}
|
|
171
181
|
if (updateFields.percentComplete !== undefined) {
|
|
172
182
|
body.percentComplete = updateFields.percentComplete;
|
|
@@ -183,10 +193,16 @@ class MicrosoftPlanner {
|
|
|
183
193
|
if (userId) {
|
|
184
194
|
userIds.push(userId);
|
|
185
195
|
}
|
|
196
|
+
else {
|
|
197
|
+
console.warn(`Could not find user ID for email: ${email}`);
|
|
198
|
+
}
|
|
186
199
|
}
|
|
187
200
|
if (userIds.length > 0) {
|
|
188
201
|
body.assignments = (0, GenericFunctions_1.createAssignmentsObject)(userIds);
|
|
189
202
|
}
|
|
203
|
+
else if (emails.length > 0) {
|
|
204
|
+
console.warn('No valid user IDs found for assignment. Check if User.Read.All permission is granted.');
|
|
205
|
+
}
|
|
190
206
|
}
|
|
191
207
|
const responseData = await GenericFunctions_1.microsoftApiRequest.call(this, 'PATCH', `/planner/tasks/${taskId}`, body, {}, undefined, {
|
|
192
208
|
'If-Match': eTag,
|