Skip to content

Commit 1724575

Browse files
authored
Merging pull request #17879
* wip * new components * updates
1 parent 17dd6a4 commit 1724575

File tree

22 files changed

+953
-261
lines changed

22 files changed

+953
-261
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import salesforce from "../../salesforce_rest_api.app.mjs";
2+
3+
export default {
4+
key: "salesforce_rest_api-get-case",
5+
name: "Get Case",
6+
description: "Retrieves a case by its ID. [See the documentation](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_get_field_values.htm)",
7+
version: "0.0.1",
8+
type: "action",
9+
props: {
10+
salesforce,
11+
caseId: {
12+
propDefinition: [
13+
salesforce,
14+
"recordId",
15+
() => ({
16+
objType: "Case",
17+
}),
18+
],
19+
label: "Case ID",
20+
description: "The case ID to retrieve",
21+
},
22+
},
23+
async run({ $ }) {
24+
const fields = (await this.salesforce.getFieldsForObjectType("Case")).map(({ name }) => name);
25+
26+
let query = `SELECT ${fields.join(", ")} FROM Case WHERE Id = '${this.caseId}'`;
27+
28+
const { records } = await this.salesforce.query({
29+
$,
30+
query,
31+
});
32+
33+
$.export("$summary", `Successfully retrieved case with ID ${this.caseId}`);
34+
return records[0];
35+
},
36+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import salesforce from "../../salesforce_rest_api.app.mjs";
2+
3+
export default {
4+
key: "salesforce_rest_api-get-user",
5+
name: "Get User",
6+
description: "Retrieves a user by their ID. [See the documentation](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_get_field_values.htm)",
7+
version: "0.0.1",
8+
type: "action",
9+
props: {
10+
salesforce,
11+
userId: {
12+
propDefinition: [
13+
salesforce,
14+
"recordId",
15+
() => ({
16+
objType: "User",
17+
}),
18+
],
19+
},
20+
},
21+
async run({ $ }) {
22+
const fields = (await this.salesforce.getFieldsForObjectType("User")).map(({ name }) => name);
23+
24+
let query = `SELECT ${fields.join(", ")} FROM User WHERE Id = '${this.userId}'`;
25+
26+
const { records } = await this.salesforce.query({
27+
$,
28+
query,
29+
});
30+
31+
$.export("$summary", `Sucessfully retrieved user with ID ${this.userId}`);
32+
return records[0];
33+
},
34+
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import salesforce from "../../salesforce_rest_api.app.mjs";
2+
3+
export default {
4+
key: "salesforce_rest_api-list-case-comments",
5+
name: "List Case Comments",
6+
description: "Lists all comments for a case. [See the documentation](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_get_field_values.htm)",
7+
version: "0.0.1",
8+
type: "action",
9+
props: {
10+
salesforce,
11+
caseId: {
12+
propDefinition: [
13+
salesforce,
14+
"recordId",
15+
() => ({
16+
objType: "Case",
17+
}),
18+
],
19+
},
20+
},
21+
async run({ $ }) {
22+
const fields = (await this.salesforce.getFieldsForObjectType("CaseComment")).map(({ name }) => name);
23+
let query = `SELECT ${fields.join(", ")} FROM CaseComment WHERE ParentId = '${this.caseId}'`;
24+
25+
const { records } = await this.salesforce.query({
26+
$,
27+
query,
28+
});
29+
$.export("$summary", `Sucessfully retrieved ${records.length} comments for case with ID ${this.caseId}`);
30+
return records;
31+
},
32+
};
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import salesforce from "../../salesforce_rest_api.app.mjs";
2+
3+
export default {
4+
key: "salesforce_rest_api-list-email-messages",
5+
name: "List Email Messages",
6+
description: "Lists all email messages for a case. [See the documentation](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_get_field_values.htm)",
7+
version: "0.0.1",
8+
type: "action",
9+
props: {
10+
salesforce,
11+
caseId: {
12+
propDefinition: [
13+
salesforce,
14+
"recordId",
15+
() => ({
16+
objType: "Case",
17+
}),
18+
],
19+
label: "Case ID",
20+
description: "The ID of the case to retrieve email messages for",
21+
optional: true,
22+
},
23+
},
24+
async run({ $ }) {
25+
const fields = (await this.salesforce.getFieldsForObjectType("EmailMessage")).map(({ name }) => name);
26+
let query = `SELECT ${fields.join(", ")} FROM EmailMessage`;
27+
if (this.caseId) {
28+
query += ` WHERE RelatedToId = '${this.caseId}'`;
29+
}
30+
31+
const { records } = await this.salesforce.query({
32+
$,
33+
query,
34+
});
35+
$.export("$summary", `Sucessfully retrieved ${records.length} email messages for case with ID ${this.caseId}`);
36+
return records;
37+
},
38+
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import salesforce from "../../salesforce_rest_api.app.mjs";
2+
3+
export default {
4+
key: "salesforce_rest_api-list-email-templates",
5+
name: "List Email Templates",
6+
description: "Lists all email templates. [See the documentation](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_emailtemplate.htm)",
7+
version: "0.0.1",
8+
type: "action",
9+
props: {
10+
salesforce,
11+
},
12+
async run({ $ }) {
13+
const fields = (await this.salesforce.getFieldsForObjectType("EmailTemplate")).map(({ name }) => name);
14+
const query = `SELECT ${fields.join(", ")} FROM EmailTemplate`;
15+
16+
const { records } = await this.salesforce.query({
17+
$,
18+
query,
19+
});
20+
$.export("$summary", `Sucessfully retrieved ${records.length} email templates`);
21+
return records;
22+
},
23+
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import salesforce from "../../salesforce_rest_api.app.mjs";
2+
3+
export default {
4+
key: "salesforce_rest_api-list-knowledge-articles",
5+
name: "List Knowledge Articles",
6+
description: "Lists all knowledge articles. [See the documentation](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_knowledgearticle.htm)",
7+
version: "0.0.1",
8+
type: "action",
9+
props: {
10+
salesforce,
11+
},
12+
async run({ $ }) {
13+
const fields = (await this.salesforce.getFieldsForObjectType("KnowledgeArticle")).map(({ name }) => name);
14+
const query = `SELECT ${fields.join(", ")} FROM KnowledgeArticle`;
15+
16+
const { records } = await this.salesforce.query({
17+
$,
18+
query,
19+
});
20+
$.export("$summary", `Sucessfully retrieved ${records.length} knowledge articles`);
21+
return records;
22+
},
23+
};
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import salesforce from "../../salesforce_rest_api.app.mjs";
2+
3+
export default {
4+
key: "salesforce_rest_api-send-email",
5+
name: "Send Email",
6+
description: "Sends an email. [See the documentation](https://developer.salesforce.com/docs/atlas.en-us.api_action.meta/api_action/actions_obj_email_simple.htm)",
7+
version: "0.0.1",
8+
type: "action",
9+
props: {
10+
salesforce,
11+
emailAddress: {
12+
type: "string",
13+
label: "Email Address",
14+
description: "The email address to send the email to",
15+
},
16+
emailSubject: {
17+
type: "string",
18+
label: "Subject",
19+
description: "The subject of the email",
20+
},
21+
emailBody: {
22+
type: "string",
23+
label: "Body",
24+
description: "The body of the email",
25+
},
26+
logEmailOnSend: {
27+
type: "boolean",
28+
label: "Log Email on Send",
29+
description: "Indicates whether to log the email on the specified records’ activity time lines",
30+
optional: true,
31+
},
32+
},
33+
methods: {
34+
sendEmail(opts = {}) {
35+
return this.salesforce._makeRequest({
36+
url: `${this.salesforce._baseApiVersionUrl()}/actions/standard/emailSimple`,
37+
method: "POST",
38+
...opts,
39+
});
40+
},
41+
},
42+
async run({ $ }) {
43+
const response = await this.sendEmail({
44+
$,
45+
data: {
46+
inputs: [
47+
{
48+
emailAddresses: this.emailAddress,
49+
emailSubject: this.emailSubject,
50+
emailBody: this.emailBody,
51+
senderType: "CurrentUser",
52+
logEmailOnSend: this.logEmailOnSend,
53+
},
54+
],
55+
},
56+
});
57+
$.export("$summary", `Email sent to ${this.emailAddress}`);
58+
return response;
59+
},
60+
};
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import {
2+
convertFieldsToProps, getAdditionalFields,
3+
} from "../../common/props-utils.mjs";
4+
import salesforce from "../../salesforce_rest_api.app.mjs";
5+
import { additionalFields } from "../common/base-create-update.mjs";
6+
7+
export default {
8+
key: "salesforce_rest_api-update-email-template",
9+
name: "Update Email Template",
10+
description: "Updates an email template. [See the documentation](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_update_fields.htm)",
11+
version: "0.0.1",
12+
type: "action",
13+
props: {
14+
salesforce,
15+
recordId: {
16+
propDefinition: [
17+
salesforce,
18+
"recordId",
19+
() => ({
20+
objType: "EmailTemplate",
21+
}),
22+
],
23+
description: "The email template to update.",
24+
},
25+
fieldsToUpdate: {
26+
propDefinition: [
27+
salesforce,
28+
"fieldsToUpdate",
29+
() => ({
30+
objType: "EmailTemplate",
31+
}),
32+
],
33+
reloadProps: true,
34+
},
35+
},
36+
methods: {
37+
getAdditionalFields,
38+
convertFieldsToProps,
39+
},
40+
async additionalProps() {
41+
const { fieldsToUpdate } = this;
42+
const fields = await this.salesforce.getFieldsForObjectType("EmailTemplate");
43+
44+
const selectedFields = fields.filter(({ name }) => fieldsToUpdate.includes(name));
45+
const selectedFieldProps = this.convertFieldsToProps(selectedFields);
46+
47+
return {
48+
docsInfo: {
49+
type: "alert",
50+
alertType: "info",
51+
content: "[See the documentation](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_emailtemplate.htm) for information on all available fields.",
52+
},
53+
...selectedFieldProps,
54+
additionalFields,
55+
};
56+
},
57+
async run({ $ }) {
58+
/* eslint-disable no-unused-vars */
59+
const {
60+
salesforce,
61+
recordId,
62+
fieldsToUpdate,
63+
getAdditionalFields: getData,
64+
convertFieldsToProps,
65+
docsInfo,
66+
additionalFields,
67+
...data
68+
} = this;
69+
/* eslint-enable no-unused-vars */
70+
const response = await this.salesforce.updateRecord("EmailTemplate", {
71+
$,
72+
id: recordId,
73+
data: {
74+
...data,
75+
...getData(),
76+
},
77+
});
78+
$.export("$summary", `Successfully updated Email Template record (ID: ${recordId})`);
79+
return response;
80+
},
81+
};

components/salesforce_rest_api/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@pipedream/salesforce_rest_api",
3-
"version": "1.6.1",
3+
"version": "1.7.0",
44
"description": "Pipedream Salesforce (REST API) Components",
55
"main": "salesforce_rest_api.app.mjs",
66
"keywords": [
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import common from "../common/common-updated-record.mjs";
2+
import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform";
3+
4+
export default {
5+
...common,
6+
type: "source",
7+
name: "Case Updated (Instant, of Selectable Type)",
8+
key: "salesforce_rest_api-case-updated-instant",
9+
description: "Emit new event when a case is updated. [See the documentation](https://sforce.co/3yPSJZy)",
10+
version: "0.0.1",
11+
props: {
12+
salesforce: common.props.salesforce,
13+
db: "$.service.db",
14+
http: {
15+
type: "$.interface.http",
16+
customResponse: true,
17+
},
18+
timer: {
19+
type: "$.interface.timer",
20+
description: "The timer is only used as a fallback if instant event delivery (webhook) is not available.",
21+
default: {
22+
intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL,
23+
},
24+
},
25+
fieldsToObtain: {
26+
propDefinition: [
27+
common.props.salesforce,
28+
"fieldsToObtain",
29+
() => ({
30+
objType: "Case",
31+
}),
32+
],
33+
optional: true,
34+
description: "Select the field(s) to be retrieved for the records. Only applicable if the source is running on a timer. If running on a webhook, or if not specified, all fields will be retrieved.",
35+
},
36+
},
37+
methods: {
38+
...common.methods,
39+
getObjectType() {
40+
return "Case";
41+
},
42+
},
43+
};

0 commit comments

Comments
 (0)