public async Task <FreshdeskTicket <TCustomFieldObject> > CreateAsync <TCustomFieldObject>(FreshdeskTicket <TCustomFieldObject> ticket) where TCustomFieldObject : class { var requestJson = JsonConvert.SerializeObject(ticket, _serializationSettings); var requestUri = $"{_apiBaseUri}/tickets"; using (var requestContent = new StringContent(requestJson, Encoding.UTF8, "application/json")) using (var response = await _httpClient.PostAsync(requestUri, requestContent).ConfigureAwait(false)) { return(await GetResponseAsync <FreshdeskTicket <TCustomFieldObject> >(response).ConfigureAwait(false)); } }
public Entity CreateTicket(FreshdeskTicket ticket) { Entity ticketEntity = new Entity("incident"); //requesterId => customerid try { string[] columns = { "contactid" }; ConditionExpression ce = new ConditionExpression("isw_freshdeskid", ConditionOperator.Equal, ticket.RequesterId.ToString()); FilterExpression fe = new FilterExpression(); fe.AddCondition(ce); var ec = CrmServiceFactory.RetrieveEntities("contact", columns, fe, 1); if (ec.Entities.Count > 0) { ticketEntity.Attributes["customerid"] = new EntityReference(ec.Entities[0].LogicalName, ec.Entities[0].Id); } else { var r = _crmRepository.CreateContact(ticket.RequesterId); if (r != null) { ticketEntity.Attributes["customerid"] = new EntityReference("contact", r.Value); } else { return(null); } } } catch (Exception) { return(null); } //responder => ownerid try { string[] columns = { "systemuserid" }; ConditionExpression ce = new ConditionExpression("isw_freshdeskid", ConditionOperator.Equal, ticket.ResponderId.ToString()); FilterExpression fe = new FilterExpression(); fe.AddCondition(ce); var ec = CrmServiceFactory.RetrieveEntities("systemuser", columns, fe, 1); if (ec.Entities.Count > 0) { ticketEntity.Attributes["ownerid"] = new EntityReference(ec.Entities[0].LogicalName, ec.Entities[0].Id); ticketEntity.Attributes["isw_resolvedby"] = new EntityReference(ec.Entities[0].LogicalName, ec.Entities[0].Id); } } catch (Exception) {} if (!string.IsNullOrEmpty(ticket.Type)) { try { string[] columns = { "isw_issueid" }; ConditionExpression ce = new ConditionExpression("isw_name", ConditionOperator.Equal, ticket.Type); FilterExpression fe = new FilterExpression(); fe.AddCondition(ce); var ec = CrmServiceFactory.RetrieveEntities("isw_issue", columns, fe, 1); if (ec.Entities.Count > 0) { ticketEntity.Attributes["isw_issue"] = new EntityReference(ec.Entities[0].LogicalName, ec.Entities[0].Id); } } catch (Exception) { } } if (!string.IsNullOrEmpty(ticket.CustomFields.CfIssueSubCategory)) { try { string[] columns = { "isw_issuesubcategoryid" }; ConditionExpression ce = new ConditionExpression("isw_name", ConditionOperator.Equal, ticket.CustomFields.CfIssueSubCategory); FilterExpression fe = new FilterExpression(); fe.AddCondition(ce); var ec = CrmServiceFactory.RetrieveEntities("isw_issuesubcategory", columns, fe, 1); if (ec.Entities.Count > 0) { ticketEntity.Attributes["isw_issuesubcategory"] = new EntityReference(ec.Entities[0].LogicalName, ec.Entities[0].Id); } } catch (Exception) { } } if (!string.IsNullOrEmpty(ticket.CustomFields.CfIssueCategory)) { try { string[] columns = { "isw_issuecategoryid" }; ConditionExpression ce = new ConditionExpression("isw_name", ConditionOperator.Equal, ticket.CustomFields.CfIssueCategory); FilterExpression fe = new FilterExpression(); fe.AddCondition(ce); var ec = CrmServiceFactory.RetrieveEntities("isw_issuecategory", columns, fe, 1); if (ec.Entities.Count > 0) { ticketEntity.Attributes["isw_issuecategory"] = new EntityReference(ec.Entities[0].LogicalName, ec.Entities[0].Id); } } catch (Exception) { } } try { ticketEntity["prioritycode"] = new OptionSetValue(TicketPriority[ticket.Priority]); } catch (Exception) {} try { ticketEntity["caseorigincode"] = new OptionSetValue(TicketSource[ticket.Source]); } catch (Exception) { } if (!string.IsNullOrEmpty(ticket.Type)) { ticketEntity["title"] = ticket.Type; } ticketEntity["isw_freshdeskid"] = ticket.Id.ToString(); if (!string.IsNullOrEmpty(ticket.DescriptionText)) { ticketEntity["description"] = ticket.Subject; } if (ticket.Stats.FirstRespondedAt != null) { ticketEntity["isw_firstresponseforautocreatedcases"] = ticket.Stats.FirstRespondedAt.Value.DateTime; } if (ticket.Stats.FirstRespondedAt != null) { ticketEntity["isw_firstresponseforautocreatedcases"] = ticket.Stats.FirstRespondedAt.Value.DateTime; } if (ticket.Stats.ResolvedAt != null) { ticketEntity["isw_actualresolvedate"] = ticket.Stats.ResolvedAt.Value.DateTime; } if (ticket.Stats.ReopenedAt != null) { ticketEntity["isw_reactivateddate"] = ticket.Stats.ReopenedAt.Value.DateTime; } return(ticketEntity); }