Skip to content

Commit 3b2e656

Browse files
committed
PR updates
1 parent 9c3429a commit 3b2e656

File tree

5 files changed

+58
-59
lines changed

5 files changed

+58
-59
lines changed

azure-pipeline - Crm.ActiveCampaign.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
trigger:
2-
- v10/feature/activecampaign-integration
2+
- main-v10
33

44
pool:
55
vmImage: 'windows-latest'

src/Umbraco.Forms.Integrations.Crm.ActiveCampaign/ActiveCampaignComposer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public void Compose(IUmbracoBuilder builder)
2323
.AddHttpClient(Constants.HttpClient, client =>
2424
{
2525
client.BaseAddress = new Uri(
26-
$"{builder.Config.GetSection(Constants.SettingsPath)[nameof(ActiveCampaignSettings.BaseUrl)]}/api/3");
26+
$"{builder.Config.GetSection(Constants.SettingsPath)[nameof(ActiveCampaignSettings.BaseUrl)]}/api/3/");
2727
client.DefaultRequestHeaders
2828
.Add("Api-Token", builder.Config.GetSection(Constants.SettingsPath)[nameof(ActiveCampaignSettings.ApiKey)]);
2929
});

src/Umbraco.Forms.Integrations.Crm.ActiveCampaign/ActiveCampaignContactsWorkflow.cs

Lines changed: 48 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.Extensions.Options;
1+
using Microsoft.Extensions.Logging;
2+
using Microsoft.Extensions.Options;
23

34
using System.Text.Json;
45

@@ -19,6 +20,8 @@ public class ActiveCampaignContactsWorkflow : WorkflowType
1920

2021
private readonly IContactService _contactService;
2122

23+
private readonly ILogger<ActiveCampaignContactsWorkflow> _logger;
24+
2225
[Core.Attributes.Setting("Account",
2326
Description = "Please select an account",
2427
View = "~/App_Plugins/UmbracoForms.Integrations/Crm/ActiveCampaign/accountpicker.html")]
@@ -34,7 +37,9 @@ public class ActiveCampaignContactsWorkflow : WorkflowType
3437
View = "~/App_Plugins/UmbracoForms.Integrations/Crm/ActiveCampaign/customfield-mapper.html")]
3538
public string CustomFieldMappings { get; set; }
3639

37-
public ActiveCampaignContactsWorkflow(IOptions<ActiveCampaignSettings> options, IAccountService accountService, IContactService contactService)
40+
public ActiveCampaignContactsWorkflow(IOptions<ActiveCampaignSettings> options,
41+
IAccountService accountService, IContactService contactService,
42+
ILogger<ActiveCampaignContactsWorkflow> logger)
3843
{
3944
Id = new Guid(Constants.WorkflowId);
4045
Name = "ActiveCampaign Contacts Workflow";
@@ -46,45 +51,63 @@ public ActiveCampaignContactsWorkflow(IOptions<ActiveCampaignSettings> options,
4651
_accountService = accountService;
4752

4853
_contactService = contactService;
54+
55+
_logger = logger;
4956
}
5057

5158
public override WorkflowExecutionStatus Execute(WorkflowExecutionContext context)
5259
{
53-
var mappings = JsonSerializer.Deserialize<List<ContactMappingDto>>(ContactMappings);
60+
try
61+
{
62+
var mappings = JsonSerializer.Deserialize<List<ContactMappingDto>>(ContactMappings);
5463

55-
var email = context.Record.RecordFields[Guid.Parse(mappings.First(p => p.ContactField == "email").FormField.Id)]
56-
.ValuesAsString();
64+
var email = context.Record.RecordFields[Guid.Parse(mappings.First(p => p.ContactField == "email").FormField.Id)]
65+
.ValuesAsString();
5766

58-
// Check if contact exists.
59-
var contacts = _contactService.Get(email).Result;
67+
// Check if contact exists.
68+
var contacts = _contactService.Get(email).ConfigureAwait(false).GetAwaiter().GetResult();
6069

61-
var requestDto = new ContactDetailDto { Contact = Build(context.Record) };
70+
var requestDto = new ContactDetailDto { Contact = Build(context.Record) };
6271

63-
if (contacts.Contacts.Count > 0) requestDto.Contact.Id = contacts.Contacts.First().Id;
72+
if (contacts.Contacts.Count > 0) requestDto.Contact.Id = contacts.Contacts.First().Id;
6473

65-
// Set contact custom fields.
66-
if(!string.IsNullOrEmpty(CustomFieldMappings))
67-
{
68-
var customFieldMappings = JsonSerializer.Deserialize<List<CustomFieldMappingDto>>(CustomFieldMappings);
74+
// Set contact custom fields.
75+
if (!string.IsNullOrEmpty(CustomFieldMappings))
76+
{
77+
var customFieldMappings = JsonSerializer.Deserialize<List<CustomFieldMappingDto>>(CustomFieldMappings);
78+
79+
requestDto.Contact.FieldValues = customFieldMappings.Select(p => new CustomFieldValueDto
80+
{
81+
Field = p.CustomField.Id,
82+
Value = context.Record.RecordFields[Guid.Parse(p.FormField.Id)].ValuesAsString()
83+
}).ToList();
84+
}
6985

70-
requestDto.Contact.FieldValues = customFieldMappings.Select(p => new CustomFieldValueDto
86+
var contactId = _contactService.CreateOrUpdate(requestDto, contacts.Contacts.Count > 0)
87+
.ConfigureAwait(false).GetAwaiter().GetResult();
88+
89+
if (string.IsNullOrEmpty(contactId))
7190
{
72-
Field = p.CustomField.Id,
73-
Value = context.Record.RecordFields[Guid.Parse(p.FormField.Id)].ValuesAsString()
74-
}).ToList();
75-
}
91+
_logger.LogError($"Failed to create/update contact: {email}");
7692

77-
var contactId = _contactService.CreateOrUpdate(requestDto, contacts.Contacts.Count > 0).Result;
93+
return WorkflowExecutionStatus.Failed;
94+
}
7895

79-
if (string.IsNullOrEmpty(contactId)) return WorkflowExecutionStatus.Failed;
96+
// Associate contact with account if last one is specified.
97+
if (!string.IsNullOrEmpty(Account))
98+
{
99+
var associationResponse = _accountService.CreateAssociation(int.Parse(Account), int.Parse(contactId))
100+
.ConfigureAwait(false).GetAwaiter().GetResult();
101+
}
80102

81-
// Associate contact with account if last one is specified.
82-
if(!string.IsNullOrEmpty(Account))
83-
{
84-
var associationResponse = _accountService.CreateAssociation(int.Parse(Account), int.Parse(contactId)).Result;
103+
return WorkflowExecutionStatus.Completed;
85104
}
105+
catch(Exception ex)
106+
{
107+
_logger.LogError(ex, ex.Message);
86108

87-
return WorkflowExecutionStatus.Completed;
109+
return WorkflowExecutionStatus.Failed;
110+
}
88111
}
89112

90113
public override List<Exception> ValidateSettings()

src/Umbraco.Forms.Integrations.Crm.ActiveCampaign/Services/AccountService.cs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,7 @@ public async Task<AccountCollectionResponseDto> Get()
1717
{
1818
var client = _httpClientFactory.CreateClient(Constants.HttpClient);
1919

20-
var response = await client.SendAsync(
21-
new HttpRequestMessage
22-
{
23-
Method = HttpMethod.Get,
24-
RequestUri = new Uri($"{client.BaseAddress}/accounts")
25-
});
20+
var response = await client.GetAsync("accounts");
2621

2722
var content = await response.Content.ReadAsStringAsync();
2823

@@ -42,13 +37,7 @@ public async Task<AccountContactRequestDto> CreateAssociation(int accountId, int
4237
}
4338
};
4439

45-
var response = await client.SendAsync(
46-
new HttpRequestMessage
47-
{
48-
Method = HttpMethod.Post,
49-
RequestUri = new Uri($"{client.BaseAddress}/accountContacts"),
50-
Content = new StringContent(JsonSerializer.Serialize(accountContact))
51-
});
40+
var response = await client.PostAsync("accountContacts", new StringContent(JsonSerializer.Serialize(accountContact)));
5241

5342
var content = await response.Content.ReadAsStringAsync();
5443

src/Umbraco.Forms.Integrations.Crm.ActiveCampaign/Services/ContactService.cs

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,11 @@ public async Task<string> CreateOrUpdate(ContactDetailDto contactRequestDto, boo
1818
{
1919
var client = _httpClientFactory.CreateClient(Constants.HttpClient);
2020

21-
var request = new HttpRequestMessage
22-
{
23-
Method = update ? HttpMethod.Put : HttpMethod.Post,
24-
RequestUri = new Uri($"{client.BaseAddress}/{(update ? "/contacts" + contactRequestDto.Contact.Id : "/contacts")}"),
25-
Content = new StringContent(JsonSerializer.Serialize(contactRequestDto))
26-
};
21+
var requestContent = new StringContent(JsonSerializer.Serialize(contactRequestDto));
2722

28-
var response = await client.SendAsync(request);
23+
var response = update
24+
? await client.PutAsync($"contacts/{contactRequestDto.Contact.Id}", requestContent)
25+
: await client.PostAsync("contacts", requestContent);
2926

3027
if(response.IsSuccessStatusCode)
3128
{
@@ -41,12 +38,7 @@ public async Task<ContactCollectionResponseDto> Get(string email)
4138
{
4239
var client = _httpClientFactory.CreateClient(Constants.HttpClient);
4340

44-
var response = await client.SendAsync(
45-
new HttpRequestMessage
46-
{
47-
Method = HttpMethod.Get,
48-
RequestUri = new Uri($"{client.BaseAddress}/contacts?email={email}")
49-
});
41+
var response = await client.GetAsync($"contacts?email={email}");
5042

5143
var content = await response.Content.ReadAsStringAsync();
5244

@@ -57,12 +49,7 @@ public async Task<CustomFieldCollectionResponseDto> GetCustomFields()
5749
{
5850
var client = _httpClientFactory.CreateClient(Constants.HttpClient);
5951

60-
var response = await client.SendAsync(
61-
new HttpRequestMessage
62-
{
63-
Method = HttpMethod.Get,
64-
RequestUri = new Uri($"{client.BaseAddress}/fields")
65-
});
52+
var response = await client.GetAsync("fields");
6653

6754
var content = await response.Content.ReadAsStringAsync();
6855

0 commit comments

Comments
 (0)