Пример #1
0
        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));
                }
        }
Пример #2
0
        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);
        }