From 55e29815338b5698a3f442a438ba492809a39579 Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Tue, 28 Oct 2025 12:44:31 -0400 Subject: [PATCH 1/2] new sources --- .../microsoft_dynamics_365_sales.app.mjs | 20 +++++++ .../microsoft_dynamics_365_sales/package.json | 2 +- .../account-ownership-changed.mjs | 55 ++++++++++++++++++ .../account-status-changed.mjs | 55 ++++++++++++++++++ .../contact-added-to-account.mjs | 56 +++++++++++++++++++ .../new-account-activity.mjs | 45 +++++++++++++++ .../new-account-created.mjs | 34 +++++++++++ .../opportunity-contact-changed.mjs | 2 +- 8 files changed, 267 insertions(+), 2 deletions(-) create mode 100644 components/microsoft_dynamics_365_sales/sources/account-ownership-changed/account-ownership-changed.mjs create mode 100644 components/microsoft_dynamics_365_sales/sources/account-status-changed/account-status-changed.mjs create mode 100644 components/microsoft_dynamics_365_sales/sources/contact-added-to-account/contact-added-to-account.mjs create mode 100644 components/microsoft_dynamics_365_sales/sources/new-account-activity/new-account-activity.mjs create mode 100644 components/microsoft_dynamics_365_sales/sources/new-account-created/new-account-created.mjs diff --git a/components/microsoft_dynamics_365_sales/microsoft_dynamics_365_sales.app.mjs b/components/microsoft_dynamics_365_sales/microsoft_dynamics_365_sales.app.mjs index f4304364cceb7..911141e340ce0 100644 --- a/components/microsoft_dynamics_365_sales/microsoft_dynamics_365_sales.app.mjs +++ b/components/microsoft_dynamics_365_sales/microsoft_dynamics_365_sales.app.mjs @@ -54,6 +54,20 @@ export default { }; }, }, + accountId: { + type: "string", + label: "Account ID", + description: "Identifier of an account", + async options() { + const { value } = await this.listAccounts(); + return value?.map(({ + accountid: value, name: label, + }) => ({ + value, + label, + })) || []; + }, + }, }, methods: { _baseUrl() { @@ -119,6 +133,12 @@ export default { ...opts, }); }, + listAccounts(opts = {}) { + return this._makeRequest({ + path: "/accounts", + ...opts, + }); + }, getEntity({ entityId, ...opts }) { diff --git a/components/microsoft_dynamics_365_sales/package.json b/components/microsoft_dynamics_365_sales/package.json index af72dab32bebf..da36ff6ecad13 100644 --- a/components/microsoft_dynamics_365_sales/package.json +++ b/components/microsoft_dynamics_365_sales/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/microsoft_dynamics_365_sales", - "version": "0.3.0", + "version": "0.4.0", "description": "Pipedream Microsoft Dynamics 365 Sales Components", "main": "microsoft_dynamics_365_sales.app.mjs", "keywords": [ diff --git a/components/microsoft_dynamics_365_sales/sources/account-ownership-changed/account-ownership-changed.mjs b/components/microsoft_dynamics_365_sales/sources/account-ownership-changed/account-ownership-changed.mjs new file mode 100644 index 0000000000000..b5e8bf0d8b9bf --- /dev/null +++ b/components/microsoft_dynamics_365_sales/sources/account-ownership-changed/account-ownership-changed.mjs @@ -0,0 +1,55 @@ +import common from "../common/common.mjs"; + +export default { + ...common, + key: "microsoft_dynamics_365_sales-account-ownership-changed", + name: "Account Ownership Changed", + description: "Emit new event when the ownership of an account changes.", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + _getOwnershipIds() { + return this.db.get("ownershipIds") || {}; + }, + _setOwnershipIds(ownershipIds) { + this.db.set("ownershipIds", ownershipIds); + }, + getResourceFn() { + return this.microsoftDynamics365Sales.listAccounts; + }, + getArgs() { + return { + params: { + "$orderby": "modifiedon desc", + }, + }; + }, + getTsField() { + return "modifiedon"; + }, + getRelevantResults(results) { + const ownershipIds = this._getOwnershipIds(); + const relevantResults = []; + for (const result of results) { + if (ownershipIds[result.accountid] !== result._ownerid_value) { + if (ownershipIds[result.accountid]) { + relevantResults.push(result); + } + ownershipIds[result.accountid] = result._ownerid_value; + } + } + this._setOwnershipIds(ownershipIds); + return relevantResults; + }, + generateMeta(account) { + const ts = Date.parse(account.modifiedon); + return { + id: `${account.accountid}${ts}`, + summary: `Account Ownership Changed: ${account.name}`, + ts, + }; + }, + }, +}; diff --git a/components/microsoft_dynamics_365_sales/sources/account-status-changed/account-status-changed.mjs b/components/microsoft_dynamics_365_sales/sources/account-status-changed/account-status-changed.mjs new file mode 100644 index 0000000000000..02c6431fc8370 --- /dev/null +++ b/components/microsoft_dynamics_365_sales/sources/account-status-changed/account-status-changed.mjs @@ -0,0 +1,55 @@ +import common from "../common/common.mjs"; + +export default { + ...common, + key: "microsoft_dynamics_365_sales-account-status-changed", + name: "Account Status Changed", + description: "Emit new event when an account is activated or deactivated.", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + _getStatuses() { + return this.db.get("statuses") || {}; + }, + _setStatuses(statuses) { + this.db.set("statuses", statuses); + }, + getResourceFn() { + return this.microsoftDynamics365Sales.listAccounts; + }, + getArgs() { + return { + params: { + "$orderby": "modifiedon desc", + }, + }; + }, + getTsField() { + return "modifiedon"; + }, + getRelevantResults(results) { + const statuses = this._getStatuses(); + const relevantResults = []; + for (const result of results) { + if (statuses[result.accountid] !== result.statuscode) { + if (statuses[result.accountid]) { + relevantResults.push(result); + } + statuses[result.accountid] = result.statuscode; + } + } + this._setStatuses(statuses); + return relevantResults; + }, + generateMeta(account) { + const ts = Date.parse(account.modifiedon); + return { + id: `${account.accountid}${ts}`, + summary: `Account Status Changed: ${account.name}`, + ts, + }; + }, + }, +}; diff --git a/components/microsoft_dynamics_365_sales/sources/contact-added-to-account/contact-added-to-account.mjs b/components/microsoft_dynamics_365_sales/sources/contact-added-to-account/contact-added-to-account.mjs new file mode 100644 index 0000000000000..b80e5de074915 --- /dev/null +++ b/components/microsoft_dynamics_365_sales/sources/contact-added-to-account/contact-added-to-account.mjs @@ -0,0 +1,56 @@ +import common from "../common/common.mjs"; + +export default { + ...common, + key: "microsoft_dynamics_365_sales-contact-added-to-account", + name: "Contact Added to Account", + description: "Emit new event when a contact is added to an account.", + version: "0.0.1", + type: "source", + dedupe: "unique", + props: { + ...common.props, + accountId: { + propDefinition: [ + common.props.microsoftDynamics365Sales, + "accountId", + ], + }, + }, + methods: { + ...common.methods, + getResourceFn() { + return this.microsoftDynamics365Sales.listAccounts; + }, + getArgs() { + return { + params: { + "$filter": `accountid eq ${this.accountId}`, + "$expand": "contact_customer_accounts", + }, + }; + }, + getTsField() { + return "modifiedon"; + }, + getRelevantResults(results) { + const relevantResults = []; + const account = results[0]; + account.contact_customer_accounts.forEach((contact) => { + relevantResults.push({ + ...contact, + addedToAccountOn: account.modifiedon, + }); + }); + return relevantResults; + }, + generateMeta(contact) { + const ts = Date.parse(contact.addedToAccountOn); + return { + id: `${contact.contactid}${ts}`, + summary: `Contact Added to Account: ${contact.fullname}`, + ts, + }; + }, + }, +}; diff --git a/components/microsoft_dynamics_365_sales/sources/new-account-activity/new-account-activity.mjs b/components/microsoft_dynamics_365_sales/sources/new-account-activity/new-account-activity.mjs new file mode 100644 index 0000000000000..c27e3bc2c832d --- /dev/null +++ b/components/microsoft_dynamics_365_sales/sources/new-account-activity/new-account-activity.mjs @@ -0,0 +1,45 @@ +import common from "../common/common.mjs"; + +export default { + ...common, + key: "microsoft_dynamics_365_sales-new-account-activity", + name: "New Account Activity", + description: "Emit new event when a new task or activity is created for an account.", + version: "0.0.1", + type: "source", + dedupe: "unique", + props: { + ...common.props, + accountId: { + propDefinition: [ + common.props.microsoftDynamics365Sales, + "accountId", + ], + }, + }, + methods: { + ...common.methods, + getResourceFn() { + return this.microsoftDynamics365Sales.listActivityPointers; + }, + getArgs() { + return { + params: { + "$orderby": "createdon desc", + "$filter": `_regardingobjectid_value eq ${this.accountId}`, + }, + }; + }, + getTsField() { + return "createdon"; + }, + generateMeta(activity) { + const ts = Date.parse(activity.createdon); + return { + id: `${activity.accountid}${ts}`, + summary: `New Account Activity: ${activity.subject}`, + ts, + }; + }, + }, +}; diff --git a/components/microsoft_dynamics_365_sales/sources/new-account-created/new-account-created.mjs b/components/microsoft_dynamics_365_sales/sources/new-account-created/new-account-created.mjs new file mode 100644 index 0000000000000..1b5b3b2c1c3a2 --- /dev/null +++ b/components/microsoft_dynamics_365_sales/sources/new-account-created/new-account-created.mjs @@ -0,0 +1,34 @@ +import common from "../common/common.mjs"; + +export default { + ...common, + key: "microsoft_dynamics_365_sales-new-account-created", + name: "New Account Created", + description: "Emit new event when a new account is created.", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + getResourceFn() { + return this.microsoftDynamics365Sales.listAccounts; + }, + getArgs() { + return { + params: { + "$orderby": "createdon desc", + }, + }; + }, + getTsField() { + return "createdon"; + }, + generateMeta(account) { + return { + id: account.accountid, + summary: `New Account: ${account.name}`, + ts: Date.parse(account.createdon), + }; + }, + }, +}; diff --git a/components/microsoft_dynamics_365_sales/sources/opportunity-contact-changed/opportunity-contact-changed.mjs b/components/microsoft_dynamics_365_sales/sources/opportunity-contact-changed/opportunity-contact-changed.mjs index 69da5588832e3..546d7a09cb7e6 100644 --- a/components/microsoft_dynamics_365_sales/sources/opportunity-contact-changed/opportunity-contact-changed.mjs +++ b/components/microsoft_dynamics_365_sales/sources/opportunity-contact-changed/opportunity-contact-changed.mjs @@ -5,7 +5,7 @@ export default { key: "microsoft_dynamics_365_sales-opportunity-contact-changed", name: "Opportunity Contact Changed", description: "Emit new event when an opportunity's contact is changed.", - version: "0.0.{{ts}}", + version: "0.0.2", type: "source", dedupe: "unique", methods: { From d7041d32d315c5d5ae533aea42d83658ce692acc Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Tue, 28 Oct 2025 12:47:35 -0400 Subject: [PATCH 2/2] versions --- .../actions/create-custom-entity/create-custom-entity.mjs | 2 +- .../actions/find-contact/find-contact.mjs | 2 +- .../new-opportunity-activity/new-opportunity-activity.mjs | 2 +- .../sources/new-opportunity-created/new-opportunity-created.mjs | 2 +- .../opportunity-close-date-updated.mjs | 2 +- .../opportunity-close-probability-updated.mjs | 2 +- .../opportunity-estimated-value-updated.mjs | 2 +- .../opportunity-marked-won-or-lost.mjs | 2 +- .../opportunity-ownership-changed.mjs | 2 +- .../sources/opportunity-reopened/opportunity-reopened.mjs | 2 +- .../opportunity-stage-updated/opportunity-stage-updated.mjs | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/components/microsoft_dynamics_365_sales/actions/create-custom-entity/create-custom-entity.mjs b/components/microsoft_dynamics_365_sales/actions/create-custom-entity/create-custom-entity.mjs index d62ff997a5435..3fbdcf2fd7933 100644 --- a/components/microsoft_dynamics_365_sales/actions/create-custom-entity/create-custom-entity.mjs +++ b/components/microsoft_dynamics_365_sales/actions/create-custom-entity/create-custom-entity.mjs @@ -6,7 +6,7 @@ export default { key: "microsoft_dynamics_365_sales-create-custom-entity", name: "Create Custom Entity", description: "Create a custom entity. [See the documentation](https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/create-update-entity-definitions-using-web-api)", - version: "0.0.5", + version: "0.0.6", annotations: { destructiveHint: true, openWorldHint: true, diff --git a/components/microsoft_dynamics_365_sales/actions/find-contact/find-contact.mjs b/components/microsoft_dynamics_365_sales/actions/find-contact/find-contact.mjs index c5868b0f1ccf0..78f33f016bb00 100644 --- a/components/microsoft_dynamics_365_sales/actions/find-contact/find-contact.mjs +++ b/components/microsoft_dynamics_365_sales/actions/find-contact/find-contact.mjs @@ -4,7 +4,7 @@ export default { key: "microsoft_dynamics_365_sales-find-contact", name: "Find Contact", description: "Search for a contact by id, name, or using a custom filter. [See the documentation](https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/query/overview)", - version: "0.0.5", + version: "0.0.6", annotations: { destructiveHint: false, openWorldHint: true, diff --git a/components/microsoft_dynamics_365_sales/sources/new-opportunity-activity/new-opportunity-activity.mjs b/components/microsoft_dynamics_365_sales/sources/new-opportunity-activity/new-opportunity-activity.mjs index 9c8df9e873bcc..ac3d93a9f6867 100644 --- a/components/microsoft_dynamics_365_sales/sources/new-opportunity-activity/new-opportunity-activity.mjs +++ b/components/microsoft_dynamics_365_sales/sources/new-opportunity-activity/new-opportunity-activity.mjs @@ -5,7 +5,7 @@ export default { key: "microsoft_dynamics_365_sales-new-opportunity-activity", name: "New Opportunity Activity", description: "Emit new event when a new task or activity is created for an opportunity.", - version: "0.0.1", + version: "0.0.2", type: "source", dedupe: "unique", props: { diff --git a/components/microsoft_dynamics_365_sales/sources/new-opportunity-created/new-opportunity-created.mjs b/components/microsoft_dynamics_365_sales/sources/new-opportunity-created/new-opportunity-created.mjs index a71b741095631..568472e48b355 100644 --- a/components/microsoft_dynamics_365_sales/sources/new-opportunity-created/new-opportunity-created.mjs +++ b/components/microsoft_dynamics_365_sales/sources/new-opportunity-created/new-opportunity-created.mjs @@ -5,7 +5,7 @@ export default { key: "microsoft_dynamics_365_sales-new-opportunity-created", name: "New Opportunity Created", description: "Emit new event when a new opportunity is created.", - version: "0.0.2", + version: "0.0.3", type: "source", dedupe: "unique", hooks: { diff --git a/components/microsoft_dynamics_365_sales/sources/opportunity-close-date-updated/opportunity-close-date-updated.mjs b/components/microsoft_dynamics_365_sales/sources/opportunity-close-date-updated/opportunity-close-date-updated.mjs index cf80e2909fa43..53617c6173a3c 100644 --- a/components/microsoft_dynamics_365_sales/sources/opportunity-close-date-updated/opportunity-close-date-updated.mjs +++ b/components/microsoft_dynamics_365_sales/sources/opportunity-close-date-updated/opportunity-close-date-updated.mjs @@ -5,7 +5,7 @@ export default { key: "microsoft_dynamics_365_sales-opportunity-close-date-updated", name: "Opportunity Close Date Updated", description: "Emit new event when the estimated close date of an opportunity is updated.", - version: "0.0.2", + version: "0.0.3", type: "source", dedupe: "unique", methods: { diff --git a/components/microsoft_dynamics_365_sales/sources/opportunity-close-probability-updated/opportunity-close-probability-updated.mjs b/components/microsoft_dynamics_365_sales/sources/opportunity-close-probability-updated/opportunity-close-probability-updated.mjs index 1ef61bc1b6399..6602fce6350ec 100644 --- a/components/microsoft_dynamics_365_sales/sources/opportunity-close-probability-updated/opportunity-close-probability-updated.mjs +++ b/components/microsoft_dynamics_365_sales/sources/opportunity-close-probability-updated/opportunity-close-probability-updated.mjs @@ -5,7 +5,7 @@ export default { key: "microsoft_dynamics_365_sales-opportunity-close-probability-updated", name: "Opportunity Close Probability Updated", description: "Emit new event when the close probability of an opportunity is updated.", - version: "0.0.2", + version: "0.0.3", type: "source", dedupe: "unique", methods: { diff --git a/components/microsoft_dynamics_365_sales/sources/opportunity-estimated-value-updated/opportunity-estimated-value-updated.mjs b/components/microsoft_dynamics_365_sales/sources/opportunity-estimated-value-updated/opportunity-estimated-value-updated.mjs index 3809d8a34b328..2a09f2347cbb4 100644 --- a/components/microsoft_dynamics_365_sales/sources/opportunity-estimated-value-updated/opportunity-estimated-value-updated.mjs +++ b/components/microsoft_dynamics_365_sales/sources/opportunity-estimated-value-updated/opportunity-estimated-value-updated.mjs @@ -5,7 +5,7 @@ export default { key: "microsoft_dynamics_365_sales-opportunity-estimated-value-updated", name: "Opportunity Estimated Value Updated", description: "Emit new event when the estimated value of an opportunity is updated.", - version: "0.0.2", + version: "0.0.3", type: "source", dedupe: "unique", methods: { diff --git a/components/microsoft_dynamics_365_sales/sources/opportunity-marked-won-or-lost/opportunity-marked-won-or-lost.mjs b/components/microsoft_dynamics_365_sales/sources/opportunity-marked-won-or-lost/opportunity-marked-won-or-lost.mjs index d6f4da2cfb9e4..25a2b8163fab3 100644 --- a/components/microsoft_dynamics_365_sales/sources/opportunity-marked-won-or-lost/opportunity-marked-won-or-lost.mjs +++ b/components/microsoft_dynamics_365_sales/sources/opportunity-marked-won-or-lost/opportunity-marked-won-or-lost.mjs @@ -5,7 +5,7 @@ export default { key: "microsoft_dynamics_365_sales-opportunity-marked-won-or-lost", name: "Opportunity Marked Won or Lost", description: "Emit new event when an opportunity is marked as won or lost.", - version: "0.0.1", + version: "0.0.2", type: "source", dedupe: "unique", props: { diff --git a/components/microsoft_dynamics_365_sales/sources/opportunity-ownership-changed/opportunity-ownership-changed.mjs b/components/microsoft_dynamics_365_sales/sources/opportunity-ownership-changed/opportunity-ownership-changed.mjs index e94eb9509faf0..1b4405cbb54c4 100644 --- a/components/microsoft_dynamics_365_sales/sources/opportunity-ownership-changed/opportunity-ownership-changed.mjs +++ b/components/microsoft_dynamics_365_sales/sources/opportunity-ownership-changed/opportunity-ownership-changed.mjs @@ -5,7 +5,7 @@ export default { key: "microsoft_dynamics_365_sales-opportunity-ownership-changed", name: "Opportunity Ownership Changed", description: "Emit new event when the ownership of an opportunity changes.", - version: "0.0.1", + version: "0.0.2", type: "source", dedupe: "unique", methods: { diff --git a/components/microsoft_dynamics_365_sales/sources/opportunity-reopened/opportunity-reopened.mjs b/components/microsoft_dynamics_365_sales/sources/opportunity-reopened/opportunity-reopened.mjs index acd69f3c03eea..ab7fde51d890e 100644 --- a/components/microsoft_dynamics_365_sales/sources/opportunity-reopened/opportunity-reopened.mjs +++ b/components/microsoft_dynamics_365_sales/sources/opportunity-reopened/opportunity-reopened.mjs @@ -5,7 +5,7 @@ export default { key: "microsoft_dynamics_365_sales-opportunity-reopened", name: "Opportunity Reopened", description: "Emit new event when an opportunity is reopened.", - version: "0.0.1", + version: "0.0.2", type: "source", dedupe: "unique", methods: { diff --git a/components/microsoft_dynamics_365_sales/sources/opportunity-stage-updated/opportunity-stage-updated.mjs b/components/microsoft_dynamics_365_sales/sources/opportunity-stage-updated/opportunity-stage-updated.mjs index b5ba41892d0b7..ead72d7c25db8 100644 --- a/components/microsoft_dynamics_365_sales/sources/opportunity-stage-updated/opportunity-stage-updated.mjs +++ b/components/microsoft_dynamics_365_sales/sources/opportunity-stage-updated/opportunity-stage-updated.mjs @@ -5,7 +5,7 @@ export default { key: "microsoft_dynamics_365_sales-opportunity-stage-updated", name: "Opportunity Stage Updated", description: "Emit new event when the stage of an opportunity is updated.", - version: "0.0.2", + version: "0.0.3", type: "source", dedupe: "unique", methods: {