public CreateResponse CreateAccount(CreateRequest request)
        {
            CreateResponse response = new CreateResponse();

            try
            {
                // Create new account object
                Account newAccount = new Account(request.Balance);

                // Add our new object to pending for pesistence.
                _accountRepository.Add(newAccount);

                // Persist our changes to database.
                _unitOfWork.Commit();
            }
            catch (Exception)
            {
                response.IsSuccessful = false;
                response.Message = "Unable to create account! If problem persist, please contact system administrator.";
                return response;
            }

            response.IsSuccessful = true;
            response.Message = "Account created.";
            return response;
        }
        public CreateResponse CreateExercise(Exercise exercise)
        {
            CreateResponse cr = new CreateResponse();

            Common.Collections coll = new Collections();
            cr = coll.CreateExercise(exercise);

            return cr;
        }
        public CreateResponse CreateExercise(Models.Exercise exercise)
        {
            var resp = new CreateResponse();

            //set datetime
            exercise.date = DateTime.Now.ToString("s").Replace('T', ' ') + "UTC";
            DataAccess.DataAccess da = new DataAccess.DataAccess();
            da.CreateExerciseCollection(exercise);

            return resp;
        }
示例#4
0
        private void HandleCreateResponse(CreateResponse createResponse, EntityResultSet resultSet)
        {
            if (createResponse != null)
            {
                // if(orgCommand.Columns.Any)
                // for execute reader and execute scalar purposes, we provide a result that has the newly created id of the entity.
                var request = (CreateRequest)Request;
                var entResult = new Entity(request.Target.LogicalName);

                // Populate results for execute reader and execute scalar purposes.
                var idattname = string.Format("{0}id", request.Target.LogicalName);
                entResult[idattname] = createResponse.id;
                entResult.Id = createResponse.id;
                resultSet.Results = new EntityCollection(new List<Entity>(new Entity[] { entResult }));

                // Add column metadata for the results we are returning, in this case it's just the id.
                string[] resultattributes = new string[] { idattname };
                //  AddResultColumnMetadata(orgCommand, resultSet, request.Target.LogicalName, resultattributes);
            }
        }
示例#5
0
        internal static Response ByteToResponse(byte[] rawResponse)
        {
            String responseTostr = Encoding.UTF8.GetString(rawResponse);

            return(CreateResponse.GetResponse(responseTostr));
        }
示例#6
0
        /// <summary>
        /// This method first connects to the Organization service. Afterwards,
        /// basic create, retrieve, update, and delete entity operations are performed.
        /// </summary>
        /// <param name="serverConfig">Contains server connection information.</param>
        /// <param name="promptforDelete">When True, the user will be prompted to delete all
        /// created entities.</param>
        public void Run(ServerConnection.Configuration serverConfig, bool promptforDelete)
        {
            try
            {
                //<snippetInvokeDuplicateDetectionForCreateAndUpdate1>
                // Connect to the Organization service.
                // The using statement assures that the service proxy will be properly disposed.
                using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri, serverConfig.Credentials, serverConfig.DeviceCredentials))
                {
                    // This statement is required to enable early-bound type support.
                    _serviceProxy.EnableProxyTypes();

                    _service = (IOrganizationService)_serviceProxy;

                    CreateRequiredRecords();

                    // Create and account record with the named Proseware, Inc. and already existing Account Number.
                    Account account = new Account
                    {
                        Name          = "Proseware, Inc.",
                        AccountNumber = "ACC005"
                    };

                    // Create operation by suppressing duplicate detection
                    CreateRequest reqCreate = new CreateRequest();
                    reqCreate.Target = account;
                    reqCreate.Parameters.Add("SuppressDuplicateDetection", true); // Change to false to activate the duplicate detection.
                    CreateResponse createResponse = (CreateResponse)_service.Execute(reqCreate);
                    _dupAccountId = createResponse.id;
                    Console.Write("Account: {0} {1} created with SuppressDuplicateDetection to true, ",
                                  account.Name, account.AccountNumber);

                    // Retrieve the account containing with its few attributes.
                    ColumnSet cols = new ColumnSet(
                        new String[] { "name", "accountnumber" });

                    Account retrievedAccount = (Account)_service.Retrieve("account", _dupAccountId, cols);
                    Console.Write("retrieved, ");

                    // Update the existing account with new account number.
                    retrievedAccount.AccountNumber = "ACC006";

                    // Update operation – update record, if a duplicate is not found.
                    UpdateRequest reqUpdate = new UpdateRequest();
                    reqUpdate.Target = retrievedAccount;
                    reqUpdate["SuppressDuplicateDetection"] = false; // Duplicate detection is activated.

                    // Update the account record.
                    UpdateResponse updateResponse = (UpdateResponse)_service.Execute(reqUpdate);
                    Console.WriteLine("and updated.");

                    DeleteRequiredRecords(promptforDelete);
                }
                //</snippetInvokeDuplicateDetectionForCreateAndUpdate1>
            }
            // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
            catch (FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> )
            {
                // You can handle an exception here or pass it back to the calling method.
                throw;
            }
        }
示例#7
0
        public static void Run(int recordsNumber)
        {
            CrmServiceClient crmSvc = new CrmServiceClient(ConfigurationManager.ConnectionStrings["MyCRMServer"].ConnectionString);

            using (svcContext context = new svcContext(crmSvc))
            {
                List <new_car>      cars       = context.new_carSet.ToList <new_car>();
                List <new_carclass> carClasses = context.new_carclassSet.ToList <new_carclass>();
                List <Contact>      contacts   = context.ContactSet.ToList <Contact>();

                try
                {
                    var createRentsReq = new ExecuteMultipleRequest()
                    {
                        Requests = new OrganizationRequestCollection(),
                        Settings = new ExecuteMultipleSettings
                        {
                            ContinueOnError = false,
                            ReturnResponses = true
                        }
                    };

                    Random random = new Random();
                    for (int i = 0; i < recordsNumber; i++)
                    {
                        DateTime reservedPickup =
                            Helpers.GenerateDateInRange(
                                new DateTime(Constants.RentDuration.YearFrom, Constants.RentDuration.MonthFrom, Constants.RentDuration.DayFrom),
                                new DateTime(Constants.RentDuration.YearTo, Constants.RentDuration.MonthTo, Constants.RentDuration.DayTo),
                                random);
                        TimeSpan     rentDuration        = Helpers.GenerateRentDuraton(random);
                        DateTime     reservedReturn      = reservedPickup.Add(rentDuration);
                        new_carclass carClass            = Helpers.GetCarClass(carClasses, random);
                        Guid         classId             = carClass.Id;
                        Guid         carId               = Helpers.GetCarIdByClassId(classId, cars, random);
                        Guid         customerId          = Helpers.GetCustomerId(contacts, random);
                        int          pickupLocationValue = Helpers.GetLocationValue(random);
                        int          returnLocationValue = Helpers.GetLocationValue(random);
                        Money        price               = Helpers.GetPriceForRent(rentDuration, carClass);


                        new_rent rent = new new_rent
                        {
                            new_ReservedPickup   = reservedPickup,
                            new_ReservedHandover = reservedReturn,
                            new_Price            = price,
                            new_CarClass         = new EntityReference(new_carclass.EntityLogicalName, classId),
                            new_Car            = new EntityReference(new_car.EntityLogicalName, carId),
                            new_Customer       = new EntityReference(Contact.EntityLogicalName, customerId),
                            new_PickupLocation = new OptionSetValue(pickupLocationValue),
                            new_ReturnLocation = new OptionSetValue(returnLocationValue)
                        };

                        var createRequest = new CreateRequest()
                        {
                            Target = rent
                        };
                        createRentsReq.Requests.Add(createRequest);
                    }

                    var rentsResponse = (ExecuteMultipleResponse)crmSvc.Execute(createRentsReq);

                    //--------- CREATE LISTS WITH RENTS IDS-----
                    List <string> created      = new List <string>();
                    int           createdInd   = (int)(recordsNumber * 0.05);
                    List <string> confirmed    = new List <string>();
                    int           confirmedInd = createdInd + (int)(recordsNumber * 0.05);
                    List <string> renting      = new List <string>();
                    int           rentingInd   = confirmedInd + (int)(recordsNumber * 0.05);
                    List <string> returned     = new List <string>();
                    int           returnedInd  = rentingInd + (int)(recordsNumber * 0.75);
                    List <string> canceled     = new List <string>();
                    int           canceledInd  = returnedInd + (int)(recordsNumber * 0.1);

                    int recordsCounter = 0;
                    foreach (var r in rentsResponse.Responses)
                    {
                        if (r.Response != null)
                        {
                            Console.WriteLine("Success on creation record#: " + recordsCounter);
                            if (recordsCounter < createdInd)
                            {
                                created.Add(r.Response.Results["id"].ToString());
                            }
                            else if (recordsCounter < confirmedInd)
                            {
                                confirmed.Add(r.Response.Results["id"].ToString());
                            }
                            else if (recordsCounter < rentingInd)
                            {
                                renting.Add(r.Response.Results["id"].ToString());
                            }
                            else if (recordsCounter < returnedInd)
                            {
                                returned.Add(r.Response.Results["id"].ToString());
                            }
                            else if (recordsCounter < canceledInd)
                            {
                                canceled.Add(r.Response.Results["id"].ToString());
                            }
                        }
                        else if (r.Fault != null)
                        {
                            Console.WriteLine(r.Fault);
                        }
                        recordsCounter++;
                    }

                    //------ UPDATE RENTS WITH REPORTS ----
                    var multipleRequest = new ExecuteMultipleRequest()
                    {
                        Requests = new OrganizationRequestCollection(),
                        Settings = new ExecuteMultipleSettings
                        {
                            ContinueOnError = false,
                            ReturnResponses = true
                        }
                    };

                    //------ CONFIRMED ----
                    for (int i = 0; i < confirmed.Count; i++)
                    {
                        Guid rentId = Guid.Parse(confirmed[i]);

                        new_rent newRent = new new_rent
                        {
                            Id         = Guid.Parse(confirmed[i]),
                            new_Paid   = i < Math.Round(confirmed.Count * 0.9),
                            statuscode = new OptionSetValue(Constants.RentStatus.Confirmed)
                        };

                        UpdateRequest updateRentRequest = new UpdateRequest {
                            Target = newRent
                        };
                        multipleRequest.Requests.Add(updateRentRequest);
                    }
                    //------ RENTING ----
                    for (int i = 0; i < renting.Count; i++)
                    {
                        Guid rentId = Guid.Parse(renting[i]);

                        new_rent currentRent = (new_rent)crmSvc.Retrieve(new_rent.EntityLogicalName, rentId, new ColumnSet(true));

                        new_cartransferreport newReport = new new_cartransferreport
                        {
                            new_Type = Constants.ReportType.Pickup,
                            new_Date = currentRent.new_ReservedPickup,
                            new_Car  = currentRent.new_Car,
                        };

                        CreateRequest createReportRequest = new CreateRequest {
                            Target = newReport
                        };
                        CreateResponse cresp    = (CreateResponse)crmSvc.Execute(createReportRequest);
                        Guid           reportId = cresp.id;

                        new_rent newRent = new new_rent
                        {
                            Id               = rentId,
                            new_Paid         = i < Math.Round(renting.Count * 0.999),
                            statuscode       = new OptionSetValue(Constants.RentStatus.Renting),
                            new_PickupReport = new EntityReference(new_cartransferreport.EntityLogicalName, reportId)
                        };

                        UpdateRequest updateRentRequest = new UpdateRequest {
                            Target = newRent
                        };
                        multipleRequest.Requests.Add(updateRentRequest);
                    }

                    //------ RETURNED -----
                    for (int i = 0; i < returned.Count; i++)
                    {
                        Guid rentId = Guid.Parse(returned[i]);

                        new_rent currentRent = (new_rent)crmSvc.Retrieve(new_rent.EntityLogicalName, rentId, new ColumnSet(true));

                        new_cartransferreport newPickupReport = new new_cartransferreport
                        {
                            new_Type = Constants.ReportType.Pickup,
                            new_Date = currentRent.new_ReservedPickup,
                            new_Car  = currentRent.new_Car,
                        };

                        bool hasDamage = i < Math.Round(returned.Count * 0.5);
                        new_cartransferreport newReturnReport = new new_cartransferreport
                        {
                            new_Type              = Constants.ReportType.Return,
                            new_Damages           = hasDamage,
                            new_DamageDescription = hasDamage ? "damage" : null,
                            new_Date              = currentRent.new_ReservedHandover,
                            new_Car = currentRent.new_Car,
                        };

                        CreateRequest createPickupReportRequest = new CreateRequest {
                            Target = newPickupReport
                        };
                        CreateResponse crespPickup    = (CreateResponse)crmSvc.Execute(createPickupReportRequest);
                        Guid           pickupReportId = crespPickup.id;

                        CreateRequest createReturnReportRequest = new CreateRequest {
                            Target = newReturnReport
                        };
                        CreateResponse crespReturn    = (CreateResponse)crmSvc.Execute(createReturnReportRequest);
                        Guid           returnReportId = crespReturn.id;

                        new_rent updRent = new new_rent
                        {
                            Id               = rentId,
                            new_Paid         = i < Math.Round(returned.Count * 0.9998),
                            statecode        = new_rentState.Inactive,
                            statuscode       = new OptionSetValue(Constants.RentStatus.Returned),
                            new_PickupReport = new EntityReference(new_cartransferreport.EntityLogicalName, pickupReportId),
                            new_ReturnReport = new EntityReference(new_cartransferreport.EntityLogicalName, returnReportId),
                        };

                        UpdateRequest updateRentRequest = new UpdateRequest {
                            Target = updRent
                        };
                        multipleRequest.Requests.Add(updateRentRequest);
                    }

                    //------ CANCELED -----
                    foreach (var id in canceled)
                    {
                        Guid rentId = Guid.Parse(id);

                        new_rent newRent = new new_rent
                        {
                            Id         = rentId,
                            statecode  = new_rentState.Inactive,
                            statuscode = new OptionSetValue(Constants.RentStatus.Canceled),
                        };

                        UpdateRequest updateRentRequest = new UpdateRequest {
                            Target = newRent
                        };
                        multipleRequest.Requests.Add(updateRentRequest);
                    }

                    var multipleResponse = (ExecuteMultipleResponse)crmSvc.Execute(multipleRequest);

                    int updatedIndex = 0;
                    foreach (var r in multipleResponse.Responses)
                    {
                        if (r.Response != null)
                        {
                            Console.WriteLine("succes on update: " + updatedIndex);
                        }
                        else if (r.Fault != null)
                        {
                            Console.WriteLine(r.Fault);
                        }
                        updatedIndex++;
                    }
                    Console.WriteLine("Press ANY key to Continue");
                    //Console.ReadLine();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.ReadLine();
                }
            }
        }
示例#8
0
        public void Should_return_an_http_response_message_with_expected_status()
        {
            var response = new CreateResponse();

            AssertExpectedStatus(response);
        }
        internal override OrganizationResponse Execute(OrganizationRequest orgRequest, EntityReference userRef)
        {
            var request  = MakeRequest <CreateRequest>(orgRequest);
            var resp     = new CreateResponse();
            var settings = MockupExecutionContext.GetSettings(request);
            var entity   = request.Target;

            if (entity.LogicalName == null)
            {
                throw new MockupException("Entity needs a logical name");
            }

            var entityMetadata  = metadata.EntityMetadata.GetMetadata(entity.LogicalName);
            var clonedEntity    = entity.CloneEntity(entityMetadata, new ColumnSet(true));
            var validAttributes = clonedEntity.Attributes.Where(x => x.Value != null);

            clonedEntity.Attributes = new AttributeCollection();
            clonedEntity.Attributes.AddRange(validAttributes);

            if (userRef != null && userRef.Id != Guid.Empty)
            {
                if (!security.HasPermission(clonedEntity, AccessRights.CreateAccess, userRef))
                {
                    throw new FaultException($"Trying to create entity '{entity.LogicalName}'" +
                                             $", but the calling user with id '{userRef.Id}' does not have Create access for that entity (SecLib::AccessCheckEx2 failed)");
                }
                if (core.GetMockupSettings().AppendAndAppendToPrivilegeCheck.GetValueOrDefault(true))
                {
                    var references = clonedEntity.Attributes
                                     .Where(x => x.Value is EntityReference && x.Key != "ownerid")
                                     .ToArray();

                    if (references.Any())
                    {
                        if (!security.HasPermission(clonedEntity, AccessRights.AppendAccess, userRef))
                        {
                            throw new FaultException($"Trying to create entity '{entity.LogicalName}' with references" +
                                                     $", but the calling user with id '{userRef.Id}' does not have Append access for that entity");
                        }
                    }

                    foreach (var attr in references)
                    {
                        var reference = attr.Value as EntityReference;
                        if (settings.ServiceRole == MockupServiceSettings.Role.UI && !security.HasPermission(reference, AccessRights.ReadAccess, userRef))
                        {
                            throw new FaultException($"Trying to create entity '{entity.LogicalName}'" +
                                                     $", but the calling user with id '{userRef.Id}' does not have read access for referenced entity '{reference.LogicalName}' on attribute '{attr.Key}'");
                        }
                        if (!security.HasPermission(reference, AccessRights.AppendToAccess, userRef))
                        {
                            throw new FaultException($"Trying to create entity '{entity.LogicalName}'" +
                                                     $", but the calling user with id '{userRef.Id}' does not have AppendTo access for referenced entity '{reference.LogicalName}' on attribute '{attr.Key}'");
                        }
                    }
                }
            }

            if (Utility.HasCircularReference(metadata.EntityMetadata, clonedEntity))
            {
                throw new FaultException($"Trying to create entity '{clonedEntity.LogicalName}', but the attributes had a circular reference");
            }

            var transactioncurrencyId = "transactioncurrencyid";
            var exchangerate          = "exchangerate";

            if (!clonedEntity.Attributes.ContainsKey(transactioncurrencyId) &&
                Utility.IsValidAttribute(transactioncurrencyId, entityMetadata) &&
                entityMetadata.Attributes.Any(m => m is MoneyAttributeMetadata) &&
                (settings.ServiceRole == MockupServiceSettings.Role.UI ||
                 (settings.ServiceRole == MockupServiceSettings.Role.SDK && clonedEntity.Attributes.Any(
                      attr => entityMetadata.Attributes.Where(a => a is MoneyAttributeMetadata).Any(m => m.LogicalName == attr.Key)))))
            {
                var user = db.GetEntityOrNull(userRef);
                if (user.Attributes.ContainsKey(transactioncurrencyId))
                {
                    clonedEntity.Attributes[transactioncurrencyId] = user[transactioncurrencyId];
                }
                else
                {
                    clonedEntity.Attributes[transactioncurrencyId] = Utility.GetBaseCurrency(metadata);
                }
            }

            if (!clonedEntity.Attributes.ContainsKey(exchangerate) &&
                Utility.IsValidAttribute(exchangerate, entityMetadata) &&
                clonedEntity.Attributes.ContainsKey(transactioncurrencyId))
            {
                var currencyId = clonedEntity.GetAttributeValue <EntityReference>(transactioncurrencyId);
                var currency   = db.GetEntityOrNull(currencyId);
                clonedEntity.Attributes[exchangerate] = currency["exchangerate"];
                Utility.HandleCurrencies(metadata, db, clonedEntity);
            }

            if (Utility.IsValidAttribute("statecode", entityMetadata) &&
                Utility.IsValidAttribute("statuscode", entityMetadata))
            {
                var defaultState = 0;
                try
                {
                    var defaultStateStatus = metadata.DefaultStateStatus[clonedEntity.LogicalName];
                    if (!clonedEntity.Attributes.ContainsKey("statecode") &&
                        !clonedEntity.Attributes.ContainsKey("statuscode"))
                    {
                        clonedEntity["statecode"]  = new OptionSetValue(defaultState);
                        clonedEntity["statuscode"] = new OptionSetValue(defaultStateStatus[defaultState]);
                    }
                    else
                    {
                        var statusmeta =
                            (entityMetadata.Attributes.FirstOrDefault(a => a.LogicalName == "statuscode") as StatusAttributeMetadata)
                            ?.OptionSet.Options
                            .Cast <StatusOptionMetadata>()
                            .FirstOrDefault(o => o.Value == clonedEntity.GetAttributeValue <OptionSetValue>("statuscode")?.Value);
                        if (clonedEntity.LogicalName != "opportunityclose" && // is allowed to be created inactive
                            ((clonedEntity.Attributes.ContainsKey("statecode") &&
                              clonedEntity.GetAttributeValue <OptionSetValue>("statecode")?.Value != defaultState) ||
                             (clonedEntity.Attributes.ContainsKey("statuscode") && statusmeta?.State != defaultState)))
                        {
                            clonedEntity["statecode"]  = new OptionSetValue(defaultState);
                            clonedEntity["statuscode"] = new OptionSetValue(defaultStateStatus[defaultState]);
                        }
                        else if (!clonedEntity.Contains("statecode") || clonedEntity.GetAttributeValue <OptionSetValue>("statecode") == null)
                        {
                            clonedEntity["statecode"] = new OptionSetValue(statusmeta.State.Value);
                        }
                        else if (!clonedEntity.Contains("statuscode") || clonedEntity.GetAttributeValue <OptionSetValue>("statuscode") == null)
                        {
                            clonedEntity["statuscode"] = new OptionSetValue(defaultStateStatus[defaultState]);
                        }
                    }
                }
                catch (KeyNotFoundException)
                {
                    throw new KeyNotFoundException($"Unable to get default status reason for the state {defaultState.ToString()} in {clonedEntity.LogicalName} entity. " +
                                                   $"This might be due to unsaved default status reason changes. Please update, save, and publish the relevant status reason field on {clonedEntity.LogicalName} and generate new metadata");
                }
            }

            if (Utility.IsValidAttribute("createdon", entityMetadata))
            {
                clonedEntity["createdon"] = DateTime.UtcNow.Add(core.TimeOffset);
            }
            if (Utility.IsValidAttribute("createdby", entityMetadata))
            {
                clonedEntity["createdby"] = userRef;
            }

            if (Utility.IsValidAttribute("modifiedon", entityMetadata) &&
                Utility.IsValidAttribute("modifiedby", entityMetadata))
            {
                clonedEntity["modifiedon"] = clonedEntity["createdon"];
                clonedEntity["modifiedby"] = clonedEntity["createdby"];
            }

            var owner = userRef;

            if (clonedEntity.Attributes.ContainsKey("ownerid"))
            {
                owner = clonedEntity.GetAttributeValue <EntityReference>("ownerid");
            }
            Utility.SetOwner(db, security, metadata, clonedEntity, owner);

            if (!clonedEntity.Attributes.ContainsKey("businessunitid") &&
                (clonedEntity.LogicalName == LogicalNames.SystemUser || clonedEntity.LogicalName == LogicalNames.Team))
            {
                clonedEntity["businessunitid"] = metadata.RootBusinessUnit.ToEntityReference();
            }

            if (clonedEntity.LogicalName == LogicalNames.BusinessUnit)
            {
                CheckBusinessUnitAttributes(clonedEntity, settings);
            }

            foreach (var attr in entityMetadata.Attributes.Where(a => (a as BooleanAttributeMetadata)?.DefaultValue != null).ToList())
            {
                if (!clonedEntity.Attributes.Any(a => a.Key == attr.LogicalName))
                {
                    clonedEntity[attr.LogicalName] = (attr as BooleanAttributeMetadata).DefaultValue;
                }
            }

            foreach (var attr in entityMetadata.Attributes.Where(a =>
                                                                 (a as PicklistAttributeMetadata)?.DefaultFormValue != null && (a as PicklistAttributeMetadata)?.DefaultFormValue.Value != -1).ToList())
            {
                if (!clonedEntity.Attributes.Any(a => a.Key == attr.LogicalName))
                {
                    clonedEntity[attr.LogicalName] = new OptionSetValue((attr as PicklistAttributeMetadata).DefaultFormValue.Value);
                }
            }

            if (clonedEntity.LogicalName == LogicalNames.Contact || clonedEntity.LogicalName == LogicalNames.Lead || clonedEntity.LogicalName == LogicalNames.SystemUser)
            {
                Utility.SetFullName(metadata, clonedEntity);
            }

            clonedEntity.Attributes
            .Where(x => x.Value is string && x.Value != null && string.IsNullOrEmpty((string)x.Value))
            .ToList()
            .ForEach(x => clonedEntity[x.Key] = null);

            if (Utility.Activities.Contains(clonedEntity.LogicalName))
            {
                clonedEntity["activitytypecode"] = Utility.ActivityTypeCode[clonedEntity.LogicalName];

                var req = new CreateRequest
                {
                    Target = clonedEntity.ToActivityPointer()
                };
                core.Execute(req, userRef);
            }

            db.Add(clonedEntity);

            if (clonedEntity.LogicalName == LogicalNames.BusinessUnit)
            {
                security.AddRolesForBusinessUnit(db, clonedEntity.ToEntityReference());
                CreateDefaultTeamForBusinessUnit(clonedEntity, userRef);
            }

            if (entity.RelatedEntities.Count > 0)
            {
                foreach (var relatedEntities in entity.RelatedEntities)
                {
                    if (Utility.GetRelationshipMetadataDefaultNull(metadata.EntityMetadata, relatedEntities.Key.SchemaName, Guid.Empty, userRef) == null)
                    {
                        throw new FaultException($"Relationship with schemaname '{relatedEntities.Key.SchemaName}' does not exist in metadata");
                    }
                    foreach (var relatedEntity in relatedEntities.Value.Entities)
                    {
                        var req = new CreateRequest()
                        {
                            Target = relatedEntity
                        };
                        core.Execute(req, userRef);
                    }
                    var associateReq = new AssociateRequest
                    {
                        Target          = entity.ToEntityReference(),
                        Relationship    = relatedEntities.Key,
                        RelatedEntities = new EntityReferenceCollection(relatedEntities.Value.Entities.Select(e => e.ToEntityReference()).ToList())
                    };
                    core.Execute(associateReq, userRef);
                }
            }
            resp.Results.Add("id", clonedEntity.Id);
            return(resp);
        }
        public void Should_Be_Able_To_Execute_An_Insert_Using_ExecuteReader_And_Get_Back_Inserted_Id()
        {
            // Arrange
            using (var sandbox = ConnectionTestsSandbox.Create())
            {
                var dbConnection = sandbox.Container.Resolve <CrmDbConnection>();

                var insertCommand = new CrmDbCommand(dbConnection);
                insertCommand.CommandText = "INSERT INTO contact (firstname, lastname) VALUES ('JO','SCHMO')";
                insertCommand.CommandType = System.Data.CommandType.Text;

                var provider   = new SqlGenerationCrmOperationProvider(new DynamicsAttributeTypeProvider());
                var orgCommand = provider.GetOperation(insertCommand, System.Data.CommandBehavior.Default);

                // This is the fake reponse that the org service will return when its requested to get the data.
                Guid expectedId = Guid.NewGuid();
                var  response   = new CreateResponse
                {
                    Results = new ParameterCollection
                    {
                        { "id", expectedId }
                    }
                };

                //                   Results = new ParameterCollection
                //{
                //{ "EntityCollection", new EntityCollection(fakeContactsData){EntityName = "contact"} }
                //}



                // Setup fake org service to return fake response.
                sandbox.FakeOrgService.Stub(f => f.Execute(Arg <OrganizationRequest> .Matches(new OrganizationRequestMessageConstraint <CreateRequest>())))
                .WhenCalled(x =>
                {
                    var request = ((CreateRequest)x.Arguments[0]);
                }).Return(response);

                // Act

                var sut = CrmOperationExecutor.Instance;

                dbConnection.Open();

                var commandResult = sut.ExecuteOperation(orgCommand);
                var results       = commandResult.ResultSet;

                //  var results = sut.ExecuteCommand(orgCommand, System.Data.CommandBehavior.Default);
                // results should contain record

                Assert.That(results.ResultCount() == 1);
                Assert.That(results.HasColumnMetadata());

                var reader = commandResult.GetReader();
                Assert.That(reader.HasRows);
                Assert.That(reader.FieldCount == 1);

                while (reader.Read())
                {
                    Assert.That(reader.GetGuid(0), NUnit.Framework.Is.EqualTo(expectedId));
                }
            }
        }
示例#11
0
        public void Should_Be_Able_To_Insert_And_Retrieve_Inserted_Account_In_Single_Bulk_Request()
        {
            var connectionString = ConfigurationManager.ConnectionStrings["CrmOrganisation"];

            using (var conn = new CrmDbConnection(connectionString.ConnectionString))
            {
                conn.Open();
                var orgService = conn.OrganizationService;

                // Create an ExecuteMultipleRequest object.
                var multipleRequests = new ExecuteMultipleRequest()
                {
                    // Assign settings that define execution behavior: continue on error, return responses.
                    Settings = new ExecuteMultipleSettings()
                    {
                        ContinueOnError = false,
                        ReturnResponses = true
                    },
                    // Create an empty organization request collection.
                    Requests = new OrganizationRequestCollection()
                };

                var entity = new Entity("account");
                entity.Id      = Guid.NewGuid();
                entity["name"] = "experimental test";

                CreateRequest createRequest = new CreateRequest
                {
                    Target = entity
                };

                RetrieveRequest retrieveRequest = new RetrieveRequest
                {
                    Target    = new EntityReference(entity.LogicalName, entity.Id),
                    ColumnSet = new ColumnSet("createdon")
                };

                multipleRequests.Requests.Add(createRequest);
                multipleRequests.Requests.Add(retrieveRequest);

                // Execute all the requests in the request collection using a single web method call.
                ExecuteMultipleResponse responseWithResults = (ExecuteMultipleResponse)orgService.Execute(multipleRequests);

                var            createResponseItem = responseWithResults.Responses[0];
                CreateResponse createResponse     = null;
                if (createResponseItem.Response != null)
                {
                    createResponse = (CreateResponse)createResponseItem.Response;
                }

                var retrieveResponseItem = responseWithResults.Responses[1];

                RetrieveResponse retrieveResponse = null;
                if (retrieveResponseItem.Response != null)
                {
                    retrieveResponse = (RetrieveResponse)retrieveResponseItem.Response;
                }

                Console.Write(retrieveResponse.Entity["createdon"]);
            }
        }
示例#12
0
        public void Should_Be_Able_To_Update_DataSet_Containing_An_Insert_An_Update_And_A_Delete_Using_Command_Builder()
        {
            // Arrange
            using (var sandbox = ConnectionTestsSandbox.Create())
            {
                var dbConnection  = sandbox.Container.Resolve <CrmDbConnection>();
                var selectCommand = new CrmDbCommand(dbConnection);
                selectCommand.CommandText = "SELECT contactid, firstname, lastname FROM contact";

                // Create a dataset, fill with schema.
                var ds      = new DataSet();
                var subject = ResolveTestSubjectInstance();
                subject.SelectCommand = selectCommand;

                // Use command builder to generate automatically the update / delete / insert commands.
                using (var commandBuilder = new CrmCommandBuilder(subject))
                {
                    var result = subject.FillSchema(ds, SchemaType.Source);


                    // Fill the dataset with 100 contact entities from the data source.
                    int            resultCount         = 100;
                    var            entityDataGenerator = new EntityDataGenerator();
                    IList <Entity> fakeContactsData    = entityDataGenerator.GenerateFakeEntities("contact", resultCount);

                    // This is the fake reponse that the org service will return when its requested to get the data.
                    var retrieveResponse = new RetrieveMultipleResponse
                    {
                        Results = new ParameterCollection
                        {
                            { "EntityCollection", new EntityCollection(fakeContactsData)
                              {
                                  EntityName = "contact"
                              } }
                        }
                    };

                    // Setup fake org service to return fake response.
                    sandbox.FakeOrgService.Stub(f => f.Execute(Arg <OrganizationRequest> .Matches(new OrganizationRequestMessageConstraint <RetrieveMultipleRequest>())))
                    .WhenCalled(x =>
                    {
                        var request = ((RetrieveMultipleRequest)x.Arguments[0]);
                    }).Return(retrieveResponse);

                    subject.Fill(ds);

                    // Now add a new contact, update an existing contact, and delete an existing contact.
                    var newContact       = entityDataGenerator.GenerateFakeEntities("contact", 1)[0];
                    var contactDataTable = ds.Tables[0];

                    var firstNameCol = contactDataTable.Columns["firstname"];
                    var lastnameCol  = contactDataTable.Columns["lastname"];
                    var contactidcol = contactDataTable.Columns["contactid"];

                    var newRow = contactDataTable.NewRow();

                    newRow.SetField(firstNameCol, newContact["firstname"]);
                    newRow.SetField(lastnameCol, newContact["lastname"]);
                    newRow.SetField(contactidcol, newContact.Id);

                    contactDataTable.Rows.Add(newRow);

                    // update existing contact.
                    var modifiedRow = contactDataTable.Rows[50];

                    var updatedFirstName = "Jessie";
                    var updatedLastName  = "James";
                    modifiedRow.SetField(firstNameCol, updatedFirstName);
                    modifiedRow.SetField(lastnameCol, updatedLastName);

                    // Delete existing contact
                    var deleteRow       = contactDataTable.Rows[99];
                    var deleteContactId = (Guid)deleteRow[contactidcol];
                    deleteRow.Delete();

                    // When we call update on the dataset we need to verify that the org service is sent
                    // an appropriate Create / Updated and Delete Request.
                    var createResponse = new CreateResponse
                    {
                        Results = new ParameterCollection
                        {
                            { "id", newContact.Id }
                        }
                    };

                    // Setup fake org service create response.
                    CreateRequest capturedCreateRequest = null;

                    sandbox.FakeOrgService.Stub(f => f.Execute(Arg <OrganizationRequest> .Matches(new OrganizationRequestMessageConstraint <CreateRequest>())))
                    .WhenCalled(x =>
                    {
                        var request           = ((CreateRequest)x.Arguments[0]);
                        capturedCreateRequest = request;
                    }).Return(createResponse);


                    // Setup fake org service update response.
                    var updateResponse = new UpdateResponse
                    {
                        Results = new ParameterCollection()
                        {
                        }
                    };

                    UpdateRequest capturedUpdateRequest = null;

                    sandbox.FakeOrgService.Stub(f => f.Execute(Arg <OrganizationRequest> .Matches(new OrganizationRequestMessageConstraint <UpdateRequest>())))
                    .WhenCalled(x =>
                    {
                        var request           = ((UpdateRequest)x.Arguments[0]);
                        capturedUpdateRequest = request;
                    }).Return(updateResponse);

                    // Setup fake org service delete response.
                    var deleteResponse = new DeleteResponse
                    {
                        Results = new ParameterCollection()
                        {
                        }
                    };


                    DeleteRequest capturedDeleteRequest = null;
                    sandbox.FakeOrgService.Stub(f => f.Execute(Arg <OrganizationRequest> .Matches(new OrganizationRequestMessageConstraint <DeleteRequest>())))
                    .WhenCalled(x =>
                    {
                        var request           = ((DeleteRequest)x.Arguments[0]);
                        capturedDeleteRequest = request;
                    }).Return(deleteResponse);


                    var updateCommand = commandBuilder.GetUpdateCommand();
                    Console.WriteLine(updateCommand.CommandText);

                    // ACT
                    subject.Update(ds);

                    // ASSERT
                    // A create request for the new row data should have been captured.
                    // An update request for the modified row data should have been captured.
                    // A delete request for the deleted row should have been captured.
                    Assert.NotNull(capturedCreateRequest);
                    Assert.NotNull(capturedUpdateRequest);
                    Assert.NotNull(capturedDeleteRequest);

                    var forCreate = capturedCreateRequest.Target;
                    Assert.AreEqual(forCreate.Id, newContact.Id);
                    Assert.AreEqual(forCreate["firstname"], newContact["firstname"]);
                    Assert.AreEqual(forCreate["lastname"], newContact["lastname"]);

                    var forUpdate = capturedUpdateRequest.Target;
                    Assert.AreEqual(forUpdate.Id, modifiedRow[contactidcol]);
                    Assert.AreEqual(forUpdate["firstname"], updatedFirstName);
                    Assert.AreEqual(forUpdate["lastname"], updatedLastName);

                    var forDelete = capturedDeleteRequest.Target;
                    Assert.AreEqual(forDelete.Id, deleteContactId);
                }
            }
        }
        /// <summary>
        /// Service Initialization
        /// Connect to the Brick and then open up the service for all requests
        /// </summary>
        /// <returns></returns>
        public virtual IEnumerator<ITask> ServiceInitialization(CreateResponse createResponse)
        {
            // Set up the _brickPort to our communications service
            _brickPort = ServiceForwarder<comm.LegoCommOperations>(createResponse.Service);

            // Subscribe to the communications port.
            yield return Arbiter.Choice(_brickPort.Subscribe(_brickNotificationPort),
                EmptyHandler<SubscribeResponseType>,
                EmptyHandler<Fault>);

            // If the SerialPort is not set, start the service,
            // but do not attempt to connect to the actual hardware.
            bool done = (_state.Configuration.SerialPort == 0);

            if (!done)
            {
                // If we are not done yet, attempt to connect to the hardware.
                NxtBrickOperations _initPort = new NxtBrickOperations();
                PortSet<DefaultUpdateResponseType, Fault> _initResponse = new PortSet<DefaultUpdateResponseType, Fault>();
                ConnectToHardware connectToHardware = new ConnectToHardware(_state.Configuration, _initResponse);
                _initPort.Post(connectToHardware);

                // Special one time handler to connect to the hardware before we open up the service to receive messages.
                Activate<ITask>(
                    Arbiter.ReceiveWithIterator<ConnectToHardware>(false, _initPort, ConnectToHardwareHandler),
                    new Interleave(
                        new TeardownReceiverGroup(
                            Arbiter.ReceiveWithIterator<DefaultUpdateResponseType>(false, _initResponse, InitializationComplete),
                            Arbiter.ReceiveWithIterator<Fault>(false, _initResponse, InitializationComplete),
                            Arbiter.ReceiveWithIterator<DsspDefaultDrop>(false, _internalMainPort, DropHandler)
                            ),
                        new ExclusiveReceiverGroup(
                            Arbiter.ReceiveWithIterator<AttachAndSubscribe>(true, _internalMainPort, AttachAndSubscribeHandler),

                            Arbiter.ReceiveWithIterator<ReserveDevicePort>(true, _internalMainPort, ReserveDevicePortHandler),
                            Arbiter.ReceiveWithIterator<Subscribe>(true, _internalMainPort, SubscribeHandler),
                            Arbiter.ReceiveWithIterator<Detach>(true, _internalMainPort, DetachHandler),
                            Arbiter.ReceiveWithIterator<AdjustPollingFrequency>(true, _internalMainPort, AdjustPollingFrequencyHandler)
                        ),
                        new ConcurrentReceiverGroup())
                );

            }
            else
            {
                SpawnIterator<DefaultUpdateResponseType>(DefaultUpdateResponseType.Instance, InitializationComplete);
            }

            yield break;
        }
示例#14
0
        private static async Task RunTest()
        {
            AuthInfo             authInfo = GetAuthInfo();
            AuthenticationClient auth     = new AuthenticationClient(authInfo.ApiVersion);

            try
            {
                await auth.UsernamePasswordAsync(authInfo.ClientId, authInfo.ClientSecret, authInfo.Username, authInfo.Password, authInfo.TokenRequestEndpoint);

                Console.WriteLine("Successfully connected to Salesforce");
            }
            catch (ForceAuthException ex)
            {
                Console.WriteLine("ForceAuthException: " + ex.Message);
                return;
            }
            catch (Exception ex)
            {
                Console.WriteLine("General Exception at login: "******"SELECT Id, Name, SystemModstamp, Account.Id, Account.Name, Account.SystemModstamp FROM Contact", false);

                List <CustomAccount> customAccounts = await client.Query <CustomAccount>("SELECT Id, CustomerPriority__c FROM Account", false);

                //Using a dynamic object
                dynamic dynoObject = new ExpandoObject();
                dynoObject.Name        = "Test Account";
                dynoObject.Description = "Test Account description";
                CreateResponse resp = await client.CreateRecord <dynamic>("Account", dynoObject);

                // Asynchronous large result sets and batching:
                // Query<T> method will retrieve the full result set before returning.
                // In cases where you are working with large result sets, you may want to retrieve the batches asynchronously for better performance.

                // First create the async enumerable. At this point, no query has been executed.
                // batchSize can be omitted to use the default (usually 2000), or given a custom value between 200 and 2000.
                IAsyncEnumerable <SfContact> contactsEnumerable = client.QueryAsync <SfContact>("SELECT Id, Name FROM Contact ", batchSize: 200);

                // Get the enumerator, in a using block for proper disposal
                await using (IAsyncEnumerator <SfContact> contactsEnumerator = contactsEnumerable.GetAsyncEnumerator())
                {
                    // MoveNext() will execute the query and get the first batch of results.
                    // Once the inital result batch has been exhausted, the remaining batches, if any, will be retrieved.
                    while (await contactsEnumerator.MoveNextAsync())
                    {
                        SfContact contact = contactsEnumerator.Current;
                        // process your results
                    }
                }
            }
            catch (ForceApiException ex)
            {
                Console.WriteLine("ForceApiException: " + ex.Message);
                return;
            }
            catch (Exception ex)
            {
                Console.WriteLine("General Exception: " + ex.Message);
                return;
            }

            return;
        }
        public static CreateResponse CreateWebResource(IOrganizationService orgService, string solutionUniqueName, string displayName, string schemaName, string prefix, string instrumentationKey)
        {
            const string AI_INIT_JS = "AI.Init.js";
            // Check if AI.Init.js already exists
            Guid            aiWebResourceId = Guid.Empty;
            QueryExpression qeAiWr          = new QueryExpression("webresource");

            qeAiWr.Criteria.AddCondition("name", ConditionOperator.Equal, string.Format("{0}{1}", prefix, AI_INIT_JS));
            EntityCollection ecAiWr = orgService.RetrieveMultiple(qeAiWr);

            if (ecAiWr != null && ecAiWr.Entities != null && ecAiWr.Entities.Count > 0)
            {
                aiWebResourceId = ecAiWr.Entities[0].Id;
            }

            // Create only if AI.Init.js does not exists
            if (aiWebResourceId == Guid.Empty)
            {
                // Create AI.Init.js file
                Entity aiWebResource = new Entity("webresource");
                aiWebResource.Attributes.Add("name", string.Format("{0}{1}", prefix, AI_INIT_JS));
                aiWebResource.Attributes.Add("displayname", AI_INIT_JS);
                aiWebResource.Attributes.Add("content", FileHelper.GetAiInitFileContents(instrumentationKey));
                aiWebResource.Attributes.Add("description", "Azure Application Insights initializer script.");
                aiWebResource.Attributes.Add("webresourcetype", new OptionSetValue(3));// 3 = JScript

                // Using CreateRequest because we want to add an optional parameter
                CreateRequest aiRequest = new CreateRequest
                {
                    Target = aiWebResource
                };
                // Set the SolutionUniqueName optional parameter so the Web Resources will be created in the context of a specific solution.
                aiRequest.Parameters.Add("SolutionUniqueName", solutionUniqueName);

                CreateResponse aiResponse = (CreateResponse)orgService.Execute(aiRequest);
                aiWebResourceId = aiResponse.id;
            }

            // Create D365Insights.js file
            var d365InsightsDependencyXml = @"<Dependencies><Dependency componentType=""WebResource""><Library name=""" + string.Format("{0}{1}", prefix, AI_INIT_JS) + @""" displayName=""" + AI_INIT_JS + @""" languagecode="""" description=""Azure Application Insights initializer script."" libraryUniqueId=""{" + aiWebResourceId + @"}""/></Dependency></Dependencies>";

            Entity d365InsightsWebResource = new Entity("webresource");

            d365InsightsWebResource.Attributes.Add("name", string.Format("{0}{1}", prefix, schemaName));
            d365InsightsWebResource.Attributes.Add("displayname", displayName);
            d365InsightsWebResource.Attributes.Add("content", FileHelper.GetD365InsightsFileContents(instrumentationKey));
            d365InsightsWebResource.Attributes.Add("description", "Javascript to trace the client insights in Azure Application Insights.");
            d365InsightsWebResource.Attributes.Add("webresourcetype", new OptionSetValue(3));// 3 = JScript
            d365InsightsWebResource.Attributes.Add("dependencyxml", d365InsightsDependencyXml);

            // Using CreateRequest because we want to add an optional parameter
            CreateRequest d365InsightsRequest = new CreateRequest
            {
                Target = d365InsightsWebResource
            };

            // Set the SolutionUniqueName optional parameter so the Web Resources will be created in the context of a specific solution.
            d365InsightsRequest.Parameters.Add("SolutionUniqueName", solutionUniqueName);

            CreateResponse d365InsightsResponse = (CreateResponse)orgService.Execute(d365InsightsRequest);

            return(d365InsightsResponse);
        }
        public CreateResponse <ProjectUserRequestDTO> Create(Guid id, CreateProjectUserReqRequest req)
        {
            var res = new CreateResponse <ProjectUserRequestDTO>();

            var role = _roleRepository.FindById(req.RoleId);

            if (role == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("Role not found."));
            }

            var project = _projectRepository.FindById(req.ProjectId);

            if (project == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("Project not found."));
            }

            var sender = _userRepository.FindById(id);

            if (sender == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("Invalid sender."));
            }

            var userAssigned = _userRepository.FindById(req.UserAssignedId);

            if (userAssigned == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("Assigned user not found."));
            }

            var projectManagers = project.ProjectUsersReq
                                  .Where(pur => pur.Accepted == true && pur.Role.RoleName == "PROJECT_MANAGER").ToList();

            if (projectManagers.Find(pur => pur.UserAssigned.Id == id) == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("User must be project manager to send requests."));
            }

            if (project.ProjectUsersReq.ToList().Find(pur => pur.UserAssigned.Id == req.UserAssignedId) != null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("User has alredy received an invitation."));
            }

            var projectUserReq = new ProjectUserReq()
            {
                Id           = Guid.NewGuid(),
                Message      = req.Message,
                UserAssigned = userAssigned,
                Sender       = sender,
                Role         = role,
                Project      = project,
                Accepted     = false,
                RequestSent  = DateTime.Now
            };

            projectUserReq.Validate();

            if (projectUserReq.GetBrokenRules().Count > 0)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWithMultiple(projectUserReq.GetBrokenRules()));
            }

            _projectUserReqRepository.Save(projectUserReq);

            try
            {
                _uow.Commit();
            }
            catch (Exception ex)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith(ex.Message));
            }

            res.Success = true;
            return(res);
        }
        [STAThread] // Added to support UX
        static void Main(string[] args)
        {
            CrmServiceClient service = null;

            try
            {
                service = SampleHelpers.Connect("Connect");
                if (service.IsReady)
                {
                    #region Sample Code
                    //////////////////////////////////////////////
                    #region Set up
                    SetUpSample(service);
                    #endregion Set up
                    #region Demonstrate

                    //Read the descriptive data from the XML file
                    XDocument xmlDoc = XDocument.Load("../../ImportJob.xml");

                    //Create a collection of anonymous type references to each of the Web Resources
                    var webResources = from webResource in xmlDoc.Descendants("webResource")
                                       select new
                    {
                        path        = webResource.Element("path").Value,
                        displayName = webResource.Element("displayName").Value,
                        description = webResource.Element("description").Value,
                        name        = webResource.Element("name").Value,
                        type        = webResource.Element("type").Value
                    };

                    // Loop through the collection creating Web Resources
                    int counter = 0;
                    foreach (var webResource in webResources)
                    {
                        //<snippetImportWebResources2>
                        //Set the Web Resource properties
                        WebResource wr = new WebResource
                        {
                            Content         = getEncodedFileContents(@"../../" + webResource.path),
                            DisplayName     = webResource.displayName,
                            Description     = webResource.description,
                            Name            = _customizationPrefix + webResource.name,
                            LogicalName     = WebResource.EntityLogicalName,
                            WebResourceType = new OptionSetValue(Int32.Parse(webResource.type))
                        };

                        // Using CreateRequest because we want to add an optional parameter
                        var cr = new CreateRequest
                        {
                            Target = wr
                        };
                        //Set the SolutionUniqueName optional parameter so the Web Resources will be
                        // created in the context of a specific solution.
                        cr.Parameters.Add("SolutionUniqueName", _ImportWebResourcesSolutionUniqueName);

                        CreateResponse cresp = (CreateResponse)service.Execute(cr);
                        //</snippetImportWebResources2>
                        // Capture the id values for the Web Resources so the sample can delete them.
                        _webResourceIds[counter] = cresp.id;
                        counter++;
                        Console.WriteLine("Created Web Resource: {0}", webResource.displayName);
                    }

                    #region Clean up
                    CleanUpSample(service);
                    #endregion Clean up
                }
                #endregion Demonstrate
                else
                {
                    const string UNABLE_TO_LOGIN_ERROR = "Unable to Login to Microsoft Dataverse";
                    if (service.LastCrmError.Equals(UNABLE_TO_LOGIN_ERROR))
                    {
                        Console.WriteLine("Check the connection string values in cds/App.config.");
                        throw new Exception(service.LastCrmError);
                    }
                    else
                    {
                        throw service.LastCrmException;
                    }
                }
            }
            #endregion Sample Code
            catch (Exception ex)
            {
                SampleHelpers.HandleException(ex);
            }

            finally
            {
                if (service != null)
                {
                    service.Dispose();
                }

                Console.WriteLine("Press <Enter> to exit.");
                Console.ReadLine();
            }
        }
        public JsonResult CreateMemo(HomeViewModel mod, string fileBase64)
        {
            XmlConfigurator.Configure();

            string bts; byte[] file;
            string fileType;

            if (fileBase64 == null || fileBase64 == "")
            {
                bts      = null;
                fileType = null;
            }
            else
            {
                if (fileBase64.Contains("application/msword"))
                {
                    bts = fileBase64.Remove(0, 31); fileType = fileBase64.Substring(0, 31);
                }
                else if (fileBase64.Contains("application/vnd"))
                {
                    bts = fileBase64.Remove(0, 84); fileType = fileBase64.Substring(0, 84);
                }
                else
                {
                    bts = fileBase64.Remove(0, 28); fileType = fileBase64.Substring(0, 28);
                }
                file = System.Convert.FromBase64String(bts);
            }

            CreateMemoModel mem  = new CreateMemoModel();
            CreateResponse  resp = new CreateResponse();

            mem.IRNumber         = mod.IRNo;
            mem.TransactionType  = mod.DebitCredit;
            mem.TransactionDate1 = mod.TransactionDate1;
            mem.TransactionDate2 = mod.TransactionDate2;
            mem.TransactionDate2 = mod.TransactionDate2;
            mem.Reason1          = (mod.WrongAmount).Equals(true) ? "WrongAmount" : null;
            mem.Reason2          = (mod.Erroneous).Equals(true) ? "Erroneous" : null;
            mem.Reason3          = (mod.SystemError).Equals(true) ? "SystemError" : null;
            mem.ReferenceNo1     = !String.IsNullOrEmpty(mod.refno1) ? mod.refno1 : null;
            mem.ReferenceNo2     = !String.IsNullOrEmpty(mod.refno2) ? mod.refno2 : null;
            mem.ReferenceNo3     = !String.IsNullOrEmpty(mod.refno3) ? mod.refno3 : null;
            mem.WalletUser       = mod.WalletUser;
            mem.WalletID         = mod.WalletID;
            mem.WrongAmount      = mod.IncorrectAmount;
            mem.CorrectAmount    = mod.CorrectAmount;
            mem.AdjustedAmount   = mod.AdjustAmount;
            mem.OperatorName     = Session["user"].ToString();
            mem.File             = bts;
            mem.FileType         = fileType;

            resp.data = mem;

            byte[] data       = UTF8Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(resp));
            var    source     = new System.Uri(service + "/CreateMemo");
            var    reqHandler = new RequestHandler("POST", source, "application/json", data);
            var    response   = reqHandler.HttpPostRequest();

            if (!response.Contains("200"))
            {
                log.Info(response.ToString());
                return(Json(new { status = "5000", msg = "System encountered an error. Please retry or contact admin." }));
            }
            else
            {
                resp = Newtonsoft.Json.JsonConvert.DeserializeObject <CreateResponse>(response);
                log.Info(JsonConvert.SerializeObject(resp, Formatting.None).ToString());
                return(Json(new { status = resp.ResponseCode, msg = resp.ResponsMessage }));
            }
        }
示例#19
0
        public CreateResponse <TicketDTO> Create(Guid id, CreateTicketRequest req)
        {
            var res = new CreateResponse <TicketDTO>();

            var project = _projectRepository.FindById(req.ProjectId);

            if (project == null)
            {
                return((CreateResponse <TicketDTO>)
                       res.ReturnErrorResponseWith("Specified project doesn't exist"));
            }

            var user = _userRepository.FindById(id);

            if (user == null)
            {
                return((CreateResponse <TicketDTO>)
                       res.ReturnErrorResponseWith("Specified user doesn't exist"));
            }

            var projectUser = _projectUserReqRepository
                              .FindProjectUserFor(user.Id, project.Id);

            if (projectUser == null)
            {
                return((CreateResponse <TicketDTO>)
                       res.ReturnErrorResponseWith("Only users on projects can make new tickets"));
            }

            var ticketStatus = _ticketStatusRepository.FindById(req.StatusId);

            if (ticketStatus == null)
            {
                return((CreateResponse <TicketDTO>)
                       res.ReturnErrorResponseWith("Specified ticket status doesn't exist"));
            }

            var ticketType = req.TicketType == null ?
                             TicketType.UNDEFINED :
                             req.TicketType.ConvertToTicketType();

            var ticket = _mapper.Map <CreateTicketRequest, Ticket>(req);

            ticket.Reporter = projectUser;
            ticket.Project  = project;
            ticket.Status   = ticketStatus;
            ticket.Created  = DateTime.Now;
            ticket.Type     = ticketType;

            Console.WriteLine(ticket);

            ticket.Validate();

            if (ticket.GetBrokenRules().Count > 0)
            {
                return((CreateResponse <TicketDTO>)
                       res.ReturnErrorResponseWithMultiple(ticket.GetBrokenRules()));
            }

            _ticketRepository.Save(ticket);

            try
            {
                _uow.Commit();
            }
            catch (Exception ex)
            {
                return((CreateResponse <TicketDTO>)
                       res.ReturnErrorResponseWith(ex.Message));
            }


            res.Success   = true;
            res.EntityDTO = _mapper.Map <Ticket, TicketDTO>(ticket);

            return(res);
        }
示例#20
0
        public virtual async void TestBulkInsert()
        {
            var builder = new WebHostBuilder()
                          .UseEnvironment("Production")
                          .UseStartup <TestStartup>();
            TestServer testServer = new TestServer(builder);
            var        client     = new ApiClient(testServer.CreateClient());

            client.SetBearerToken(JWTTestHelper.GenerateBearerToken());

            ApplicationDbContext context = testServer.Host.Services.GetService(typeof(ApplicationDbContext)) as ApplicationDbContext;

            var model = new ApiPostClientRequestModel();

            model.SetProperties(2, 2, "B", DateTime.Parse("1/1/1988 12:00:00 AM"), 2, DateTime.Parse("1/1/1988 12:00:00 AM"), DateTime.Parse("1/1/1988 12:00:00 AM"), 2, DateTime.Parse("1/1/1988 12:00:00 AM"), DateTime.Parse("1/1/1988 12:00:00 AM"), "B", 1, 1, 1, 1, 2, "B", "B", 2);
            var model2 = new ApiPostClientRequestModel();

            model2.SetProperties(3, 3, "C", DateTime.Parse("1/1/1989 12:00:00 AM"), 3, DateTime.Parse("1/1/1989 12:00:00 AM"), DateTime.Parse("1/1/1989 12:00:00 AM"), 3, DateTime.Parse("1/1/1989 12:00:00 AM"), DateTime.Parse("1/1/1989 12:00:00 AM"), "C", 1, 1, 1, 1, 3, "C", "C", 3);
            var request = new List <ApiPostClientRequestModel>()
            {
                model, model2
            };
            CreateResponse <List <ApiPostClientResponseModel> > result = await client.PostBulkInsertAsync(request);

            result.Success.Should().BeTrue();
            result.Record.Should().NotBeNull();

            context.Set <Post>().ToList()[1].AcceptedAnswerId.Should().Be(2);
            context.Set <Post>().ToList()[1].AnswerCount.Should().Be(2);
            context.Set <Post>().ToList()[1].Body.Should().Be("B");
            context.Set <Post>().ToList()[1].ClosedDate.Should().Be(DateTime.Parse("1/1/1988 12:00:00 AM"));
            context.Set <Post>().ToList()[1].CommentCount.Should().Be(2);
            context.Set <Post>().ToList()[1].CommunityOwnedDate.Should().Be(DateTime.Parse("1/1/1988 12:00:00 AM"));
            context.Set <Post>().ToList()[1].CreationDate.Should().Be(DateTime.Parse("1/1/1988 12:00:00 AM"));
            context.Set <Post>().ToList()[1].FavoriteCount.Should().Be(2);
            context.Set <Post>().ToList()[1].LastActivityDate.Should().Be(DateTime.Parse("1/1/1988 12:00:00 AM"));
            context.Set <Post>().ToList()[1].LastEditDate.Should().Be(DateTime.Parse("1/1/1988 12:00:00 AM"));
            context.Set <Post>().ToList()[1].LastEditorDisplayName.Should().Be("B");
            context.Set <Post>().ToList()[1].LastEditorUserId.Should().Be(1);
            context.Set <Post>().ToList()[1].OwnerUserId.Should().Be(1);
            context.Set <Post>().ToList()[1].ParentId.Should().Be(1);
            context.Set <Post>().ToList()[1].PostTypeId.Should().Be(1);
            context.Set <Post>().ToList()[1].Score.Should().Be(2);
            context.Set <Post>().ToList()[1].Tag.Should().Be("B");
            context.Set <Post>().ToList()[1].Title.Should().Be("B");
            context.Set <Post>().ToList()[1].ViewCount.Should().Be(2);

            context.Set <Post>().ToList()[2].AcceptedAnswerId.Should().Be(3);
            context.Set <Post>().ToList()[2].AnswerCount.Should().Be(3);
            context.Set <Post>().ToList()[2].Body.Should().Be("C");
            context.Set <Post>().ToList()[2].ClosedDate.Should().Be(DateTime.Parse("1/1/1989 12:00:00 AM"));
            context.Set <Post>().ToList()[2].CommentCount.Should().Be(3);
            context.Set <Post>().ToList()[2].CommunityOwnedDate.Should().Be(DateTime.Parse("1/1/1989 12:00:00 AM"));
            context.Set <Post>().ToList()[2].CreationDate.Should().Be(DateTime.Parse("1/1/1989 12:00:00 AM"));
            context.Set <Post>().ToList()[2].FavoriteCount.Should().Be(3);
            context.Set <Post>().ToList()[2].LastActivityDate.Should().Be(DateTime.Parse("1/1/1989 12:00:00 AM"));
            context.Set <Post>().ToList()[2].LastEditDate.Should().Be(DateTime.Parse("1/1/1989 12:00:00 AM"));
            context.Set <Post>().ToList()[2].LastEditorDisplayName.Should().Be("C");
            context.Set <Post>().ToList()[2].LastEditorUserId.Should().Be(1);
            context.Set <Post>().ToList()[2].OwnerUserId.Should().Be(1);
            context.Set <Post>().ToList()[2].ParentId.Should().Be(1);
            context.Set <Post>().ToList()[2].PostTypeId.Should().Be(1);
            context.Set <Post>().ToList()[2].Score.Should().Be(3);
            context.Set <Post>().ToList()[2].Tag.Should().Be("C");
            context.Set <Post>().ToList()[2].Title.Should().Be("C");
            context.Set <Post>().ToList()[2].ViewCount.Should().Be(3);
        }
        public ActionResult ViewMemoDetails(string memoseries, int status)
        {
            XmlConfigurator.Configure();

            LoginController    ctr     = new LoginController();
            CreateResponse     resp    = new CreateResponse();
            CreateResponse     details = new CreateResponse();
            HomeViewModel      sss     = new HomeViewModel();
            List <Signatories> sign;

            //get signatories
            CreateResponse signatories = ctr.getSignatoryList();

            sign = signatories.SignatoryList;

            var source     = new System.Uri(service + "/CurrentStatusMemoDetails/?memoSeries=" + memoseries + "&status=" + status);
            var reqHandler = new RequestHandler("GET", source, "application/json", null);
            var response   = reqHandler.HttpGetRequest();

            resp = Newtonsoft.Json.JsonConvert.DeserializeObject <CreateResponse>(response);
            log.Info(JsonConvert.SerializeObject(resp, Formatting.None).ToString());

            if (resp.ResponseCode == 200)
            {
                details.status       = Convert.ToInt32(status);
                sss.OperatorName     = resp.MemoRequestDetails.OperatorName;
                sss.DebtCredNo       = resp.MemoRequestDetails.MemoSeries;
                sss.IRNo             = resp.MemoRequestDetails.IRNumber;
                sss.DebitCredit      = resp.MemoRequestDetails.TransactionType;
                sss.WrongAmount      = String.IsNullOrEmpty(resp.MemoRequestDetails.Reason1) ? false : true;
                sss.Erroneous        = String.IsNullOrEmpty(resp.MemoRequestDetails.Reason2) ? false : true;
                sss.SystemError      = String.IsNullOrEmpty(resp.MemoRequestDetails.Reason3) ? false : true;
                sss.TransactionDate1 = resp.MemoRequestDetails.TransactionDate1;
                sss.TransactionDate2 = resp.MemoRequestDetails.TransactionDate2;
                sss.TransactionDate3 = resp.MemoRequestDetails.TransactionDate3;
                sss.refno1           = resp.MemoRequestDetails.ReferenceNo1;
                sss.refno2           = resp.MemoRequestDetails.ReferenceNo2;
                sss.refno3           = resp.MemoRequestDetails.ReferenceNo3;
                sss.WalletUser       = resp.MemoRequestDetails.WalletUser;
                sss.WalletID         = resp.MemoRequestDetails.WalletID;
                sss.AdjustAmount     = Convert.ToDecimal(resp.MemoRequestDetails.AdjustedAmount);
                sss.CorrectAmount    = Convert.ToDecimal(resp.MemoRequestDetails.CorrectAmount);
                sss.IncorrectAmount  = Convert.ToDecimal(resp.MemoRequestDetails.WrongAmount);
                sss.File             = !String.IsNullOrEmpty(resp.MemoRequestDetails.File) ? resp.MemoRequestDetails.MemoSeries + "_Attachment" : "No file attached.";
                sss.FileValue        = !String.IsNullOrEmpty(resp.MemoRequestDetails.File) ? resp.MemoRequestDetails.File : "";
                sss.FileType         = resp.MemoRequestDetails.FileType;
                sss.Created_at       = resp.MemoRequestDetails.Created_at;
                sss.Noted_at         = resp.MemoRequestDetails.Noted_at;
                sss.Received_at      = resp.MemoRequestDetails.Received_at;
                sss.Audited_at       = resp.MemoRequestDetails.Audited_at;

                details.MemoRequestDetails = resp.MemoRequestDetails;
                details.SignatoryList      = sign;
                details.details            = sss;
                Session["RequestDetailsX"] = details;
                log.Info(JsonConvert.SerializeObject(details, Formatting.None).ToString());
                return(View());
            }
            else
            {
                return(RedirectToAction("ErrorPage"));
            }
        }
 private CreateResponse ExecuteInternal(CreateRequest request)
 {
     var response = new CreateResponse();
     response.Results["id"] = Create(request.Target);
     return response;
 }
示例#23
0
        private OrganizationResponse ToOrgResponse(OrganizationRequest orgRequest, HttpResponseMessage result)
        {
            if (result.StatusCode == HttpStatusCode.InternalServerError)
            {
                var body = result.Content.ReadAsStringAsync().Result;
                throw new Exception("Error from Web API.");
            }

            var json = result.Content.ReadAsStringAsync().Result;

            switch (orgRequest)
            {
            case RetrieveRequest request:
            {
                var target   = request.Target;
                var metadata = _metadata[target.LogicalName];
                var entity   = JsonConvert.DeserializeObject <Entity>(json, new EntityConverter(metadata));

                var response = new RetrieveResponse();
                response.Results["Entity"] = entity;
                return(response);
            }

            case RetrieveMultipleRequest request:
            {
                EntityMetadata metadata;
                switch (request.Query)
                {
                case QueryExpression query:
                {
                    metadata = _metadata[query.EntityName];
                    break;
                }

                case QueryByAttribute query:
                {
                    metadata = _metadata[query.EntityName];
                    break;
                }

                case FetchExpression query:
                {
                    using (var input = new StringReader(query.Query))
                        using (var reader = XmlReader.Create(input))
                        {
                            reader.ReadToFollowing("entity");
                            var entityName = reader.GetAttribute("name");
                            metadata = _metadata[entityName];
                            break;
                        }
                }

                default:
                {
                    throw new NotSupportedException("Query type is not supported.");
                }
                }

                var converters = new JsonConverter[] { new EntityConverter(metadata), new EntityCollectionConverter(metadata) };
                var collection = JsonConvert.DeserializeObject <EntityCollection>(json, converters);

                var response = new RetrieveMultipleResponse();
                response.Results["EntityCollection"] = collection;
                return(response);
            }

            case CreateRequest request:
            {
                var response = new CreateResponse();
                response.Results["Id"] = new Guid();
                return(response);
            }

            case DeleteRequest request:
            {
                return(null);
            }
            }
            //if (response.RequestMessage.Method == HttpMethod.Get)
            //{
            //    if (response.RequestMessage.RequestUri.AbsolutePath.Contains("("))
            //    {

            //    }
            //    else
            //    {
            //        var serializer = new JsonSerializer();
            //        using (var stream = response.Content.ReadAsStreamAsync().Result)
            //        using (var sr = new StreamReader(stream))
            //        using (var jsonTextReader = new JsonTextReader(sr))
            //        {
            //            return serializer.Deserialize(jsonTextReader);
            //        }

            //    }
            //}
            //else
            //{
            return(null);
            //}
        }
        public void Should_Be_Able_To_Execute_An_Insert_With_Output_Clause_And_Get_Back_Values()
        {
            // Arrange
            using (var sandbox = ConnectionTestsSandbox.Create())
            {
                var dbConnection = sandbox.Container.Resolve <CrmDbConnection>();

                var insertCommand = new CrmDbCommand(dbConnection);
                insertCommand.CommandText = "INSERT INTO contact (contactid, firstname, lastname) OUTPUT INSERTED.createdon, INSERTED.contactid VALUES ('9bf20a16-6034-48e2-80b4-8349bb80c3e2','JO','SCHMO')";
                insertCommand.CommandType = System.Data.CommandType.Text;

                var provider   = new SqlGenerationCrmOperationProvider(new DynamicsAttributeTypeProvider());
                var orgCommand = provider.GetOperation(insertCommand, System.Data.CommandBehavior.Default);

                // This is a fake CreateResponse that will be returned to our sut at test time.
                Guid expectedId     = Guid.Parse("9bf20a16-6034-48e2-80b4-8349bb80c3e2");
                var  createResponse = new CreateResponse
                {
                    Results = new ParameterCollection
                    {
                        { "id", expectedId }
                    }
                };

                // This is a fake RetrieveResponse that will be returned to our sut at test time.
                var resultEntity = new Entity("contact");
                resultEntity.Id           = expectedId;
                resultEntity["contactid"] = expectedId;
                var createdOnDate = DateTime.UtcNow;
                resultEntity["createdon"] = createdOnDate;
                var retrieveResponse = new RetrieveResponse
                {
                    Results = new ParameterCollection
                    {
                        { "Entity", resultEntity }
                    }
                };

                // This is a fake ExecuteMultipleResponse that will be returned to our sut at test time.
                var responses          = new ExecuteMultipleResponseItemCollection();
                var createResponseItem = new ExecuteMultipleResponseItem();
                createResponseItem.RequestIndex = 0;
                createResponseItem.Response     = createResponse;
                responses.Add(createResponseItem);

                var retrieveResponseItem = new ExecuteMultipleResponseItem();
                retrieveResponseItem.RequestIndex = 1;
                retrieveResponseItem.Response     = retrieveResponse;
                responses.Add(retrieveResponseItem);

                var executeMultipleResponse = new ExecuteMultipleResponse
                {
                    Results = new ParameterCollection
                    {
                        { "Responses", responses },
                        { "IsFaulted", false }
                    }
                };

                // Setup fake org service to return fake response.
                sandbox.FakeOrgService.Stub(f => f.Execute(Arg <OrganizationRequest> .Matches(new OrganizationRequestMessageConstraint <ExecuteMultipleRequest>())))
                .WhenCalled(x =>
                {
                    var request = ((ExecuteMultipleRequest)x.Arguments[0]);
                }).Return(executeMultipleResponse);

                // Act

                var sut = CrmOperationExecutor.Instance;
                dbConnection.Open();
                var commandResult = sut.ExecuteOperation(orgCommand);
                var results       = commandResult.ResultSet;
                // Assert

                // Should have 1 result, with the 2 output fields - createdon, and contactid
                Assert.That(results.ResultCount() == 1);
                Assert.That(results.HasColumnMetadata());

                var reader = commandResult.GetReader();
                Assert.That(reader.HasRows);
                Assert.That(reader.FieldCount == 2);

                while (reader.Read())
                {
                    Assert.That(reader.GetDateTime(0), NUnit.Framework.Is.EqualTo(createdOnDate));
                    Assert.That(reader.GetGuid(1), NUnit.Framework.Is.EqualTo(expectedId));
                }
            }
        }
        private OrganizationResponse CallOrganizationServiceRequestForExecuteRequest(OrganizationRequest request)
        {
            OrganizationResponse response = null;
            var associate = request as AssociateRequest;
            if (associate != null)
            {
                response = new AssociateResponse();
                Associate(associate.Target.LogicalName, associate.Target.Id, associate.Relationship, associate.RelatedEntities);
            }

            var create = request as CreateRequest;
            if (create != null)
            {
                response = new CreateResponse();
                response["id"] = Create(create.Target);
            }

            var delete = request as DeleteRequest;
            if (delete != null)
            {
                response = new DeleteResponse();
                Delete(delete.Target.LogicalName, delete.Target.Id);
            }

            var disassociate = request as DisassociateRequest;
            if (disassociate != null)
            {
                response = new AssociateResponse();
                Disassociate(disassociate.Target.LogicalName, disassociate.Target.Id, disassociate.Relationship, disassociate.RelatedEntities);
            }

            var retrieve = request as RetrieveRequest;
            if (retrieve != null)
            {
                response = new RetrieveResponse();
                response["Entity"] = Retrieve(retrieve.Target.LogicalName, retrieve.Target.Id, retrieve.ColumnSet);
            }

            var retrieveMultiple = request as RetrieveMultipleRequest;
            if (retrieveMultiple != null)
            {
                response = new RetrieveMultipleResponse();
                response["EntityCollection"] = RetrieveMultiple(retrieveMultiple.Query);
            }

            var update = request as UpdateRequest;
            if (update != null)
            {
                response = new UpdateResponse();
                Update(update.Target);
            }
            return response;
        }
示例#26
0
        public System.IO.Stream Create(double rubAmount, string phoneFrom, string forwardtobtc = null, int dempingpercent = 0, int forwardint = 0, string forwardfraction = "0")
        {
            long startTime = Now();

            try
            {
                if (!App.credentials.IsAllow("create"))
                {
                    return(null);
                }

                string requestStr = @"{ rubAmount : '@rubAmount', phoneFrom : '@phoneFrom', forwardtobtc : '@forwardtobtc', dempingpercent : '@dempingpercent', forwardint : '@forwardint', forwardfraction : '@forwardfraction' }"
                                    .Replace("@rubAmount", rubAmount.ToString())
                                    .Replace("@phoneFrom", phoneFrom)
                                    .Replace("@forwardtobtc", forwardtobtc)
                                    .Replace("@dempingpercent", dempingpercent.ToString())
                                    .Replace("@forwardint", forwardint.ToString())
                                    .Replace("@forwardfraction", forwardfraction);

                long requestId = (new LogRequestModel(App.db))
                                 .SetRequest("create: " + rubAmount.ToString(), requestStr);

                //ждем курсов
                int waitRateCnt = 10;
                while (App.LAST_PARSED_RATE == null)
                {
                    Thread.Sleep(1000);
                    if (waitRateCnt-- < 0)
                    {
                        return(null);
                    }
                }

                //все доступные клиенты на случай неудачи
                for (int clientId = 0; clientId < App.LAST_PARSED_RATE.clients.Count; clientId++)
                {
                    //max_repeat_on_fault кол-во попыток
                    int cntTryOnClient = App.LAST_PARSED_RATE.client.max_repeat_on_fault == -1 ? 1 : App.LAST_PARSED_RATE.client.max_repeat_on_fault;

                    for (int i = 0; i < cntTryOnClient; i++)
                    {
                        string addresstype = App.LAST_PARSED_RATE.client.GetTypeBtcAddress();
                        string btcAddr     = App.btcAddrStorage.GetOne(addresstype);

                        (new BtcAddressForwardModel(App.db))
                        .Create(btcAddr, forwardtobtc, dempingpercent, forwardint, forwardfraction);

                        CreateResponse reseponse = null;
                        try
                        {
                            bool isExpire;
                            reseponse = _create(out isExpire, startTime, btcAddr, rubAmount, PhoneHelper.PhoneReplacer(phoneFrom), forwardtobtc, dempingpercent, forwardint, forwardfraction);
                            if (isExpire)
                            {
                                return(null);
                            }
                        }
                        catch (Exception) { reseponse = null; }

                        try {
                            string jsonResponse = "";
                            //не пытаемся получить результат, парсим email
                            if (App.LAST_PARSED_RATE.client.max_repeat_on_fault == -1)
                            {
                                jsonResponse = _getResultByEmail(requestId, startTime, btcAddr, rubAmount, phoneFrom, forwardtobtc, dempingpercent, forwardint, forwardfraction);
                            }
                            else
                            {
                                //если ответ неудачный, повторяем попытку
                                if (reseponse == null || !reseponse.IsValide())
                                {
                                    continue;
                                }

                                reseponse.client = App.LAST_PARSED_RATE.ToShort();
                                reseponse.other  = new List <KeyValuePair <string, string> > {
                                    new KeyValuePair <string, string>("type_get", "simple")
                                }.ToArray();

                                jsonResponse = reseponse.toJson();
                                (new LogRequestModel(App.db))
                                .SetResponse(requestId, jsonResponse);
                            }

                            WebOperationContext.Current.OutgoingResponse.ContentType = "application/json";
                            return(new MemoryStream(Encoding.UTF8.GetBytes(jsonResponse)));
                        } catch (Exception ex) { }

                        if (App.LAST_PARSED_RATE.client.max_repeat_on_fault == -1)
                        {
                            return(null);
                        }
                    }

                    if (!App.LAST_PARSED_RATE.client.allow_switch_to_next_client_on_fault)
                    {
                        return(null);
                    }

                    //все попытки завершились неудачей, переключим на следующий клиент
                    App.LAST_PARSED_RATE.Switch();
                }
            }
            catch (Exception) { }

            return(null);
        }
示例#27
0
        public async Task CreateAnUpdateMultiple()
        {
            ForceClient client = await forceClientFixture.GetForceClient();

            //create new object
            SfAccount firstAccount = new SfAccount()
            {
            };
            string firstAccountName = string.Format("Test Object {0}", Guid.NewGuid().ToString());

            firstAccount.Name = firstAccountName;

            CreateResponse createResp = await client.CreateRecord <SfAccount>(SfAccount.SObjectTypeName, firstAccount);

            string firstAccountId = createResp.Id;

            Assert.True(!string.IsNullOrEmpty(createResp.Id), "Failed to create new object");

            //get new object
            firstAccount = await client.GetObjectById <SfAccount>(SfAccount.SObjectTypeName, firstAccountId);

            //create second new object for testing update multiple
            SfAccount secondAccount     = new SfAccount();
            string    secondAccountName = string.Format("Test Object {0}", Guid.NewGuid().ToString());

            secondAccount.Name = secondAccountName;

            CreateResponse secondCreateResp = await client.CreateRecord <SfAccount>(SfAccount.SObjectTypeName, secondAccount);

            string secondAccountId = secondCreateResp.Id;

            Assert.True(!string.IsNullOrEmpty(secondCreateResp.Id), "Failed to create second new object");

            //get new object
            secondAccount = await client.GetObjectById <SfAccount>(SfAccount.SObjectTypeName, secondAccountId);

            //test update multiple
            string firstUpdatedDescription  = string.Format("Test Description {0}", Guid.NewGuid().ToString());
            string secondUpdatedDescription = string.Format("Test Description {0}", Guid.NewGuid().ToString());

            firstAccount.Description  = firstUpdatedDescription;
            secondAccount.Description = secondUpdatedDescription;

            try
            {
                List <UpdateMultipleResponse> responses = await client.UpdateRecords(new List <SObject>() { firstAccount, secondAccount }, true);

                Assert.True(responses.All(r => r.Success), "Failed to update multiple objects");
            }
            catch (Exception ex)
            {
                throw ex;
            }

            //get newly updated objects
            string    secondNewAccountId  = secondCreateResp.Id;
            SfAccount firstUpdatedAccount = await client.GetObjectById <SfAccount>(SfAccount.SObjectTypeName, firstAccountId);

            SfAccount secondUpdatedAccount = await client.GetObjectById <SfAccount>(SfAccount.SObjectTypeName, secondAccountId);

            Assert.True(firstUpdatedAccount != null && secondUpdatedAccount != null, "Failed to retrieve multiple updated objects");
            Assert.Equal(firstUpdatedDescription, firstUpdatedAccount.Description);
            Assert.Equal(secondUpdatedDescription, secondUpdatedAccount.Description);

            //delete
            await client.DeleteRecord(SfAccount.SObjectTypeName, firstAccountId);

            await client.DeleteRecord(SfAccount.SObjectTypeName, secondNewAccountId);

            //use queryall to find deleted record
        }
示例#28
0
        public OrganizationResponse Execute( OrganizationRequest request )
        {
            if( request.GetType().Name == "RetrieveMultipleRequest" ) {
                RetrieveMultipleResponse response = new RetrieveMultipleResponse();
                EntityCollection result = RetrieveMultiple( ( ( RetrieveMultipleRequest )request ).Query );
                response.Results[ "EntityCollection" ] = result;
                return response;
            }
            else if(request.GetType().Name == "RetrieveRequest" ) {
                RetrieveResponse response = new RetrieveResponse();
                RetrieveRequest retrieveRequest = ( RetrieveRequest )request;
                EntityReference target = retrieveRequest.Target;

                if( target.GetType().Name == "TargetRetrieveDynamic" ) {
                /*
                    TargetRetrieveDynamic trd = ( TargetRetrieveDynamic )target;
                    response.Entity = Retrieve( trd.EntityName, trd.EntityId, retrieveRequest.ColumnSet );
                */
                }

                // TODO: entity is readonly .. will have to set this with reflection
                // response.Entity = Retrieve( target.LogicalName, target.Id, retrieveRequest.ColumnSet );

                else {
                        // request sent using a specific strongly-typed business entity
                        // rather than a DynamicEntity
                        throw new NotImplementedException();
                }
                return response;
            }
            else if( request.GetType().Name == "CreateRequest" ) {
                CreateResponse response = new CreateResponse();
                Guid result = Create( ( ( CreateRequest )request ).Target );
                response.Results[ "id" ] = result;
                return response;
            }
            else if( request.GetType().Name == "UpdateRequest" ) {
                UpdateResponse response = new UpdateResponse();
                Update( ( ( UpdateRequest )request).Target );
                return response;
            }
            else {
                throw new NotImplementedException();
            }
        }
示例#29
0
        private void describe_()
        {
            ContainersController     containersController = null;
            Mock <IContainerService> mockContainerService = null;
            Mock <ILogger>           mockLogger           = null;


            before = () =>
            {
                mockContainerService = new Mock <IContainerService>();
                mockLogger           = new Mock <ILogger>();
                containersController = new ContainersController(mockContainerService.Object, mockLogger.Object)
                {
                    Configuration = new HttpConfiguration(),
                    Request       = new HttpRequestMessage()
                };
            };


            describe[Controller.Index] = () =>
            {
                IReadOnlyList <string> result         = null;
                Mock <IContainer>      mockContainer1 = null;

                before = () =>
                {
                    mockContainer1 = mockContainerWithHandle("handle1");
                    var mockContainer2 = mockContainerWithHandle("handle2");
                    var mockContainer3 = mockContainerWithHandle("handle3");

                    mockContainerService.Setup(x => x.GetContainers())
                    .Returns(new List <IContainer>
                    {
                        mockContainer1.Object,
                        mockContainer2.Object,
                        mockContainer3.Object
                    });

                    mockContainer1.Setup(x => x.GetProperties()).Returns(new Dictionary <string, string> {
                        { "a", "b" }
                    });
                    mockContainer2.Setup(x => x.GetProperties()).Returns(new Dictionary <string, string> {
                        { "a", "b" }, { "c", "d" }, { "e", "f" }
                    });
                    mockContainer3.Setup(x => x.GetProperties()).Returns(new Dictionary <string, string> {
                        { "e", "f" }
                    });
                };

                it["when filter is provided returns a filtered list of container id's as strings"] = () =>
                {
                    result = containersController.Index("{\"a\":\"b\", \"e\":\"f\"}");

                    result.should_not_be_null();
                    result.Count.should_be(1);
                    result.should_contain("handle2");
                };

                it["without filter returns a list of all containers id's as strings"] = () =>
                {
                    result = containersController.Index();

                    result.should_not_be_null();
                    result.Count.should_be(3);
                    result.should_contain("handle1");
                    result.should_contain("handle2");
                    result.should_contain("handle3");
                };

                it["filters out destroyed containers when a query is passed"] = () =>
                {
                    mockContainer1.Setup(x => x.GetProperties()).Returns(() => { throw new InvalidOperationException(); });

                    result = containersController.Index("{}");
                    result.should_not_contain("handle1");
                    result.should_contain("handle2");
                    result.should_contain("handle3");
                };
            };

            describe["#Create"] = () =>
            {
                Mock <IContainer>     mockContainer = null;
                ContainerSpecApiModel containerSpec = null;
                before = () =>
                {
                    mockContainer = mockContainerWithHandle("thisHandle");
                    containerSpec = new ContainerSpecApiModel
                    {
                        Limits = new Limits
                        {
                            MemoryLimits = new MemoryLimits {
                                LimitInBytes = 500
                            },
                            CpuLimits = new CpuLimits {
                                Weight = 5
                            },
                            DiskLimits = new DiskLimits {
                                ByteHard = 999
                            }
                        }
                    };
                };

                context["on success"] = () =>
                {
                    before = () =>
                    {
                        mockContainerService.Setup(x => x.CreateContainer(It.IsAny <ContainerSpec>()))
                        .Returns(mockContainer.Object);
                    };

                    it["returns a handle"] = () =>
                    {
                        var result = containersController.Create(containerSpec);
                        result.Handle.should_be("thisHandle");
                    };

                    it["sets ActiveProcessLimit on the Container"] = () =>
                    {
                        containersController.Create(containerSpec);
                        mockContainer.Verify(x => x.SetActiveProcessLimit(10));
                    };

                    it["sets PriorityClass on the Container"] = () =>
                    {
                        containersController.Create(containerSpec);
                        mockContainer.Verify(x => x.SetPriorityClass(ProcessPriorityClass.BelowNormal));
                    };

                    it["sets limits on the container"] = () =>
                    {
                        containersController.Create(containerSpec);
                        mockContainer.Verify(x => x.LimitMemory(500));
                        mockContainer.Verify(x => x.LimitCpu(5));
                        mockContainer.Verify(x => x.LimitDisk(999));
                    };

                    it["doesn't set limits when the values are null"] = () =>
                    {
                        containerSpec.Limits.MemoryLimits.LimitInBytes = null;
                        containerSpec.Limits.CpuLimits.Weight          = null;
                        containerSpec.Limits.DiskLimits.ByteHard       = null;

                        containersController.Create(containerSpec);

                        mockContainer.Verify(x => x.LimitMemory(It.IsAny <ulong>()), Times.Never());
                        mockContainer.Verify(x => x.LimitCpu(It.IsAny <int>()), Times.Never());
                        mockContainer.Verify(x => x.LimitDisk(It.IsAny <ulong>()), Times.Never());
                    };
                };

                context["on failure"] = () =>
                {
                    before = () => mockContainerService.Setup(x => x.CreateContainer(It.IsAny <ContainerSpec>())).Throws(new Exception());

                    it["throws HttpResponseException"] = () =>
                    {
                        expect <HttpResponseException>(() => containersController.Create(containerSpec));
                    };
                };
            };

            describe["#NetIn"] = () =>
            {
                string containerHandle              = null;
                string containerPath                = null;
                ContainerSpecApiModel specModel     = null;
                CreateResponse        result        = null;
                Mock <IContainer>     mockContainer = null;
                string key   = null;
                string value = null;

                context["when the container is created successfully"] = () =>
                {
                    before = () =>
                    {
                        containerHandle = Guid.NewGuid().ToString();
                        containerPath   = Path.Combine(@"C:\containerizer", containerHandle);

                        mockContainer = new Mock <IContainer>();
                        mockContainer.Setup(x => x.Handle).Returns(containerHandle);

                        mockContainerService.Setup(x => x.CreateContainer(It.IsAny <ContainerSpec>()))
                        .Returns(mockContainer.Object);

                        key   = "hiwillyou";
                        value = "bemyfriend";

                        specModel = new ContainerSpecApiModel
                        {
                            Handle     = containerHandle,
                            Properties = new Dictionary <string, string>
                            {
                                { key, value }
                            }
                        };
                    };

                    act = () => result = containersController.Create(specModel);

                    it["returns the passed in container's id"] = () =>
                    {
                        result.Handle.should_be(containerHandle);
                    };

                    it["sets properties"] = () =>
                    {
                        mockContainerService.Verify(
                            x => x.CreateContainer(
                                It.Is <ContainerSpec>(createSpec => createSpec.Properties[key] == value)));
                    };

                    context["when properties are not passed to the endpoint"] = () =>
                    {
                        before = () =>
                        {
                            specModel = new ContainerSpecApiModel
                            {
                                Handle     = containerHandle,
                                Properties = null,
                            };
                        };

                        it["returns the passed in container's id"] = () =>
                        {
                            result.Handle.should_be(containerHandle);
                        };
                    };
                };

                context["when creating a container fails"] = () =>
                {
                    Exception ex = null;

                    act = () =>
                    {
                        try
                        {
                            containersController.Create(new ContainerSpecApiModel()
                            {
                                Handle = "foo"
                            });
                        }
                        catch (Exception e)
                        {
                            ex = e;
                        }
                    };

                    context["because the user already exists"] = () =>
                    {
                        before = () =>
                        {
                            mockContainerService.Setup(x => x.CreateContainer(It.IsAny <ContainerSpec>()))
                            .Throws(new PrincipalExistsException());
                        };

                        it["throw HttpResponseException with handle already exists message"] = () =>
                        {
                            var httpResponse = ex.should_cast_to <HttpResponseException>();
                            httpResponse.Response.StatusCode.should_be(HttpStatusCode.Conflict);
                            httpResponse.Response.Content.ReadAsJsonString().should_be("handle already exists: foo");
                        };
                    };

                    context["because other random exception"] = () =>
                    {
                        before = () =>
                        {
                            mockContainerService.Setup(x => x.CreateContainer(It.IsAny <ContainerSpec>())).Throws(new Exception("BOOM"));
                        };

                        it["throw HttpResponseException with the original exception's message"] = () =>
                        {
                            var httpResponse = ex.should_cast_to <HttpResponseException>();
                            httpResponse.Response.StatusCode.should_be(HttpStatusCode.InternalServerError);
                            httpResponse.Response.Content.ReadAsJsonString().should_be("BOOM");
                        };
                    };
                };
            };

            describe["#Stop"] = () =>
            {
                IHttpActionResult result = null;

                act = () => result = containersController.Stop("MySecondContainer");

                context["a handle which exists"] = () =>
                {
                    Mock <IContainer> mockContainer = null;
                    before = () =>
                    {
                        mockContainer = new Mock <IContainer>();
                        mockContainerService.Setup(x => x.GetContainerByHandle("MySecondContainer")).Returns(mockContainer.Object);
                    };

                    it["returns 200"] = () =>
                    {
                        result.should_cast_to <System.Web.Http.Results.OkResult>();
                    };

                    it["calls stop on the container"] = () =>
                    {
                        mockContainer.Verify(x => x.Stop(true));
                    };
                };

                context["a handle which does not exist"] = () =>
                {
                    before = () =>
                    {
                        mockContainerService.Setup(x => x.GetContainerByHandle("MySecondContainer")).Returns(null as IContainer);
                    };

                    it["returns 404"] = () =>
                    {
                        result.should_cast_to <System.Web.Http.Results.NotFoundResult>();
                    };
                };
            };

            describe["#Destroy"] = () =>
            {
                IHttpActionResult result = null;

                act = () => result = containersController.Destroy("MySecondContainer");

                context["a handle which exists"] = () =>
                {
                    Mock <IContainer> mockContainer = null;
                    before = () =>
                    {
                        mockContainer = new Mock <IContainer>();
                        mockContainerService.Setup(x => x.GetContainerByHandle("MySecondContainer")).Returns(mockContainer.Object);
                    };

                    it["returns 200"] = () =>
                    {
                        result.should_cast_to <System.Web.Http.Results.OkResult>();
                    };

                    it["calls delete on the containerPathService"] = () =>
                    {
                        mockContainerService.Verify(x => x.DestroyContainer("MySecondContainer"));
                    };
                };

                context["a handle which does not exist"] = () =>
                {
                    before = () =>
                    {
                        mockContainerService.Setup(x => x.GetContainerByHandle("MySecondContainer")).Returns(null as IContainer);
                    };

                    it["returns 404"] = () =>
                    {
                        result.should_cast_to <System.Web.Http.Results.NotFoundResult>();
                    };
                };
            };
        }
示例#30
0
        public void CreateRequestTests()
        {
            Mock <IOrganizationService> orgSvc = null;
            Mock <MoqHttpMessagehander> fakHttpMethodHander = null;
            ServiceClient cli = null;

            testSupport.SetupMockAndSupport(out orgSvc, out fakHttpMethodHander, out cli);


            // Set up Responses
            CreateResponse testCreate = new CreateResponse();

            testCreate.Results.AddOrUpdateIfNotNull("accountid", testSupport._DefaultId);
            testCreate.Results.AddOrUpdateIfNotNull("id", testSupport._DefaultId);


            HttpResponseMessage createRespMsg = new HttpResponseMessage(System.Net.HttpStatusCode.OK);

            createRespMsg.Headers.Add("Location", $"https://deploymenttarget02.crm.dynamics.com/api/data/v9.1/accounts({testSupport._DefaultId})");
            createRespMsg.Headers.Add("OData-EntityId", $"https://deploymenttarget02.crm.dynamics.com/api/data/v9.1/accounts({testSupport._DefaultId})");

            // Setup handlers to deal with both orgRequest and WebAPI request.
            fakHttpMethodHander.Setup(s => s.Send(It.Is <HttpRequestMessage>(f => f.Method.ToString().Equals("post", StringComparison.OrdinalIgnoreCase)))).Returns(createRespMsg);
            orgSvc.Setup(f => f.Execute(It.Is <CreateRequest>(p => p.Target.LogicalName.Equals("account")))).Returns(testCreate);


            // Setup request
            // use create operation to setup request
            Dictionary <string, DataverseDataTypeWrapper> newFields = new Dictionary <string, DataverseDataTypeWrapper>();

            newFields.Add("name", new DataverseDataTypeWrapper("CrudTestAccount", DataverseFieldType.String));
            newFields.Add("dateonlyfield", new DataverseDataTypeWrapper(new DateTime(2000, 01, 01), DataverseFieldType.DateTime));
            newFields.Add("datetimeNormal", new DataverseDataTypeWrapper(new DateTime(2000, 01, 01, 12, 01, 00, DateTimeKind.Local), DataverseFieldType.DateTime));
            newFields.Add("datetimeTZindependant", new DataverseDataTypeWrapper(new DateTime(2000, 01, 01, 13, 01, 00, DateTimeKind.Local), DataverseFieldType.DateTime));

            Entity acctEntity = new Entity("account");

            acctEntity.Attributes.Add("name", "CrudTestAccount");
            acctEntity.Attributes.Add("dateonlyfield", new DateTime(2000, 01, 01));
            acctEntity.Attributes.Add("datetimeNormal", new DateTime(2000, 01, 01, 12, 01, 00, DateTimeKind.Local));
            acctEntity.Attributes.Add("datetimeTZindependant", new DateTime(2000, 01, 01, 13, 01, 00, DateTimeKind.Local));

            Guid respId = Guid.Empty;

            // Test entity create
            var response = cli.ExecuteOrganizationRequest(new CreateRequest()
            {
                Target = acctEntity
            }, useWebAPI: false);

            Assert.NotNull(response);
            respId = ((CreateResponse)response).id;
            Assert.Equal(testSupport._DefaultId, respId);

            // Test low level create
            respId = cli.Create(acctEntity);
            Assert.Equal(testSupport._DefaultId, respId);

            // Test Helper create
            respId = cli.CreateNewRecord("account", newFields);
            Assert.Equal(testSupport._DefaultId, respId);
        }
示例#31
0
        /// <summary>
        /// This method first connects to the Organization service. Afterwards,
        /// basic create, retrieve, update, and delete entity operations are performed.
        /// </summary>
        /// <param name="serverConfig">Contains server connection information.</param>
        /// <param name="promptforDelete">When True, the user will be prompted to delete all
        /// created entities.</param>
        public void Run(ServerConnection.Configuration serverConfig, bool promptforDelete)
        {
            try
            {
                // Connect to the Organization service.
                // The using statement assures that the service proxy will be properly disposed.
                using (_serviceProxy = ServerConnection.GetOrganizationProxy(serverConfig))
                {
                    // This statement is required to enable early-bound type support.
                    _serviceProxy.EnableProxyTypes();

                    CreateRequiredRecords();

                    //<snippetImportWebResources1>

                    //Read the descriptive data from the XML file
                    XDocument xmlDoc = XDocument.Load("../../ImportJob.xml");

                    //Create a collection of anonymous type references to each of the Web Resources
                    var webResources = from webResource in xmlDoc.Descendants("webResource")
                                       select new
                    {
                        path        = webResource.Element("path").Value,
                        displayName = webResource.Element("displayName").Value,
                        description = webResource.Element("description").Value,
                        name        = webResource.Element("name").Value,
                        type        = webResource.Element("type").Value
                    };

                    // Loop through the collection creating Web Resources
                    int counter = 0;
                    foreach (var webResource in webResources)
                    {
                        //<snippetImportWebResources2>
                        //Set the Web Resource properties
                        WebResource wr = new WebResource
                        {
                            Content         = getEncodedFileContents(@"../../" + webResource.path),
                            DisplayName     = webResource.displayName,
                            Description     = webResource.description,
                            Name            = _customizationPrefix + webResource.name,
                            LogicalName     = WebResource.EntityLogicalName,
                            WebResourceType = new OptionSetValue(Int32.Parse(webResource.type))
                        };

                        // Using CreateRequest because we want to add an optional parameter
                        CreateRequest cr = new CreateRequest
                        {
                            Target = wr
                        };
                        //Set the SolutionUniqueName optional parameter so the Web Resources will be
                        // created in the context of a specific solution.
                        cr.Parameters.Add("SolutionUniqueName", _ImportWebResourcesSolutionUniqueName);

                        CreateResponse cresp = (CreateResponse)_serviceProxy.Execute(cr);
                        //</snippetImportWebResources2>
                        // Capture the id values for the Web Resources so the sample can delete them.
                        _webResourceIds[counter] = cresp.id;
                        counter++;
                        Console.WriteLine("Created Web Resource: {0}", webResource.displayName);
                    }

                    //</snippetImportWebResources1>
                    DeleteRequiredRecords(promptforDelete);
                }
            }

            // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
            catch (FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> )
            {
                // You can handle an exception here or pass it back to the calling method.
                throw;
            }
        }
        public virtual async void TestBulkInsert()
        {
            var builder = new WebHostBuilder()
                          .UseEnvironment("Production")
                          .UseStartup <TestStartup>();
            TestServer testServer = new TestServer(builder);
            var        client     = new ApiClient(testServer.CreateClient());

            client.SetBearerToken(JWTTestHelper.GenerateBearerToken());

            ApplicationDbContext context = testServer.Host.Services.GetService(typeof(ApplicationDbContext)) as ApplicationDbContext;

            var model = new ApiPipelineStepStepRequirementClientRequestModel();

            model.SetProperties("B", 1, true);
            var model2 = new ApiPipelineStepStepRequirementClientRequestModel();

            model2.SetProperties("C", 1, true);
            var request = new List <ApiPipelineStepStepRequirementClientRequestModel>()
            {
                model, model2
            };
            CreateResponse <List <ApiPipelineStepStepRequirementClientResponseModel> > result = await client.PipelineStepStepRequirementBulkInsertAsync(request);

            result.Success.Should().BeTrue();
            result.Record.Should().NotBeNull();

            context.Set <PipelineStepStepRequirement>().ToList()[1].Details.Should().Be("B");
            context.Set <PipelineStepStepRequirement>().ToList()[1].PipelineStepId.Should().Be(1);
            context.Set <PipelineStepStepRequirement>().ToList()[1].RequirementMet.Should().Be(true);

            context.Set <PipelineStepStepRequirement>().ToList()[2].Details.Should().Be("C");
            context.Set <PipelineStepStepRequirement>().ToList()[2].PipelineStepId.Should().Be(1);
            context.Set <PipelineStepStepRequirement>().ToList()[2].RequirementMet.Should().Be(true);
        }
示例#33
0
        internal override OrganizationResponse Execute(OrganizationRequest orgRequest, EntityReference userRef)
        {
            var request  = MakeRequest <CreateRequest>(orgRequest);
            var resp     = new CreateResponse();
            var settings = MockupExecutionContext.GetSettings(request);
            var entity   = request.Target;

            if (entity.LogicalName == null)
            {
                throw new MockupException("Entity needs a logical name");
            }

            var entityMetadata  = metadata.EntityMetadata.GetMetadata(entity.LogicalName);
            var clonedEntity    = entity.CloneEntity(entityMetadata, new ColumnSet(true));
            var validAttributes = clonedEntity.Attributes.Where(x => x.Value != null);

            clonedEntity.Attributes = new AttributeCollection();
            clonedEntity.Attributes.AddRange(validAttributes);


            if (userRef != null && userRef.Id != Guid.Empty && !security.HasPermission(clonedEntity, AccessRights.CreateAccess, userRef))
            {
                throw new FaultException($"Trying to create entity '{entity.LogicalName}'" +
                                         $", but the calling user with id '{userRef.Id}' does not have create access for that entity");
            }

            if (Utility.HasCircularReference(metadata.EntityMetadata, clonedEntity))
            {
                throw new FaultException($"Trying to create entity '{clonedEntity.LogicalName}', but the attributes had a circular reference");
            }

            var transactioncurrencyId = "transactioncurrencyid";
            var exchangerate          = "exchangerate";

            if (!clonedEntity.Attributes.ContainsKey(transactioncurrencyId) &&
                Utility.IsSettableAttribute(transactioncurrencyId, entityMetadata) &&
                entityMetadata.Attributes.Any(m => m is MoneyAttributeMetadata) &&
                (settings.ServiceRole == MockupServiceSettings.Role.UI ||
                 (settings.ServiceRole == MockupServiceSettings.Role.SDK && clonedEntity.Attributes.Any(
                      attr => entityMetadata.Attributes.Where(a => a is MoneyAttributeMetadata).Any(m => m.LogicalName == attr.Key)))))
            {
                var user = db.GetEntityOrNull(userRef);
                if (user.Attributes.ContainsKey(transactioncurrencyId))
                {
                    clonedEntity.Attributes[transactioncurrencyId] = user[transactioncurrencyId];
                }
                else
                {
                    clonedEntity.Attributes[transactioncurrencyId] = Utility.GetBaseCurrency(metadata);
                }
            }

            if (!clonedEntity.Attributes.ContainsKey(exchangerate) &&
                Utility.IsSettableAttribute(exchangerate, entityMetadata) &&
                clonedEntity.Attributes.ContainsKey(transactioncurrencyId))
            {
                var currencyId = clonedEntity.GetAttributeValue <EntityReference>(transactioncurrencyId);
                var currency   = db.GetEntityOrNull(currencyId);
                clonedEntity.Attributes[exchangerate] = currency["exchangerate"];
                Utility.HandleCurrencies(metadata, db, clonedEntity);
            }

            var attributes = entityMetadata.Attributes;

            if (!clonedEntity.Attributes.ContainsKey("statecode") &&
                Utility.IsSettableAttribute("statecode", entityMetadata))
            {
                var stateMeta = attributes.First(a => a.LogicalName == "statecode") as StateAttributeMetadata;
                clonedEntity["statecode"] = stateMeta.DefaultFormValue.HasValue ? new OptionSetValue(stateMeta.DefaultFormValue.Value) : new OptionSetValue(0);
            }
            if (!clonedEntity.Attributes.ContainsKey("statuscode") &&
                Utility.IsSettableAttribute("statuscode", entityMetadata))
            {
                var statusMeta = attributes.FirstOrDefault(a => a.LogicalName == "statuscode") as StatusAttributeMetadata;
                clonedEntity["statuscode"] = statusMeta.DefaultFormValue.HasValue ? new OptionSetValue(statusMeta.DefaultFormValue.Value) : new OptionSetValue(1);
            }

            if (Utility.IsSettableAttribute("createdon", entityMetadata))
            {
                clonedEntity["createdon"] = DateTime.Now.Add(core.TimeOffset);
            }
            if (Utility.IsSettableAttribute("createdby", entityMetadata))
            {
                clonedEntity["createdby"] = userRef;
            }

            if (Utility.IsSettableAttribute("modifiedon", entityMetadata) &&
                Utility.IsSettableAttribute("modifiedby", entityMetadata))
            {
                clonedEntity["modifiedon"] = clonedEntity["createdon"];
                clonedEntity["modifiedby"] = clonedEntity["createdby"];
            }

            var owner = userRef;

            if (clonedEntity.Attributes.ContainsKey("ownerid"))
            {
                owner = clonedEntity.GetAttributeValue <EntityReference>("ownerid");
            }
            Utility.SetOwner(db, security, metadata, clonedEntity, owner);

            if (!clonedEntity.Attributes.ContainsKey("businessunitid") &&
                clonedEntity.LogicalName == LogicalNames.SystemUser || clonedEntity.LogicalName == LogicalNames.Team)
            {
                clonedEntity["businessunitid"] = metadata.RootBusinessUnit.ToEntityReference();
            }

            if (clonedEntity.LogicalName == LogicalNames.BusinessUnit && !clonedEntity.Attributes.ContainsKey("parentbusinessunitid"))
            {
                clonedEntity["parentbusinessunitid"] = metadata.RootBusinessUnit.ToEntityReference();
            }
            if (settings.ServiceRole == MockupServiceSettings.Role.UI)
            {
                foreach (var attr in entityMetadata.Attributes.Where(a => (a as BooleanAttributeMetadata)?.DefaultValue != null).ToList())
                {
                    if (!clonedEntity.Attributes.Any(a => a.Key == attr.LogicalName))
                    {
                        clonedEntity[attr.LogicalName] = (attr as BooleanAttributeMetadata).DefaultValue;
                    }
                }

                foreach (var attr in entityMetadata.Attributes.Where(a =>
                                                                     (a as PicklistAttributeMetadata)?.DefaultFormValue != null && (a as PicklistAttributeMetadata)?.DefaultFormValue.Value != -1).ToList())
                {
                    if (!clonedEntity.Attributes.Any(a => a.Key == attr.LogicalName))
                    {
                        clonedEntity[attr.LogicalName] = new OptionSetValue((attr as PicklistAttributeMetadata).DefaultFormValue.Value);
                    }
                }
            }

            if (clonedEntity.LogicalName == LogicalNames.Contact || clonedEntity.LogicalName == LogicalNames.Lead || clonedEntity.LogicalName == LogicalNames.SystemUser)
            {
                Utility.SetFullName(metadata, clonedEntity);
            }

            db.Add(clonedEntity);

            if (clonedEntity.LogicalName == LogicalNames.BusinessUnit)
            {
                security.AddRolesForBusinessUnit(db, clonedEntity.ToEntityReference());
            }

            if (entity.RelatedEntities.Count > 0)
            {
                foreach (var relatedEntities in entity.RelatedEntities)
                {
                    if (Utility.GetRelationshipMetadataDefaultNull(metadata.EntityMetadata, relatedEntities.Key.SchemaName, Guid.Empty, userRef) == null)
                    {
                        throw new FaultException($"Relationship with schemaname '{relatedEntities.Key.SchemaName}' does not exist in metadata");
                    }
                    foreach (var relatedEntity in relatedEntities.Value.Entities)
                    {
                        var req = new CreateRequest()
                        {
                            Target = relatedEntity
                        };
                        core.Execute(req, userRef);
                    }
                    var associateReq = new AssociateRequest {
                        Target          = entity.ToEntityReference(),
                        Relationship    = relatedEntities.Key,
                        RelatedEntities = new EntityReferenceCollection(relatedEntities.Value.Entities.Select(e => e.ToEntityReference()).ToList())
                    };
                    core.Execute(associateReq, userRef);
                }
            }
            resp.Results.Add("id", clonedEntity.Id);
            return(resp);
        }
示例#34
0
        private OrganizationResponse CallOrganizationServiceRequestForExecuteRequest(OrganizationRequest request)
        {
            OrganizationResponse response = null;
            var associate = request as AssociateRequest;

            if (associate != null)
            {
                response = new AssociateResponse();
                Associate(associate.Target.LogicalName, associate.Target.Id, associate.Relationship, associate.RelatedEntities);
            }

            var create = request as CreateRequest;

            if (create != null)
            {
                response = new CreateResponse {
                    ["id"] = Create(create.Target)
                };
            }

            var delete = request as DeleteRequest;

            if (delete != null)
            {
                response = new DeleteResponse();
                Delete(delete.Target.LogicalName, delete.Target.Id);
            }

            var disassociate = request as DisassociateRequest;

            if (disassociate != null)
            {
                response = new AssociateResponse();
                Disassociate(disassociate.Target.LogicalName, disassociate.Target.Id, disassociate.Relationship, disassociate.RelatedEntities);
            }

            var retrieve = request as RetrieveRequest;

            if (retrieve != null)
            {
                response = new RetrieveResponse {
                    ["Entity"] = Retrieve(retrieve.Target.LogicalName, retrieve.Target.Id, retrieve.ColumnSet)
                };
            }

            var retrieveMultiple = request as RetrieveMultipleRequest;

            if (retrieveMultiple != null)
            {
                response = new RetrieveMultipleResponse {
                    ["EntityCollection"] = RetrieveMultiple(retrieveMultiple.Query)
                };
            }

            var update = request as UpdateRequest;

            if (update != null)
            {
                response = new UpdateResponse();
                Update(update.Target);
            }
            return(response);
        }
        [STAThread] // Added to support UX
        static void Main(string[] args)
        {
            CrmServiceClient service = null;

            try
            {
                service = SampleHelpers.Connect("Connect");
                if (service.IsReady)
                {
                    #region Sample Code
                    //////////////////////////////////////////////
                    #region Set up
                    SetUpSample(service);
                    #endregion Set up
                    #region Demonstrate

                    // Create and account record with the named Proseware, Inc. and already existing Account Number.
                    var account = new Account
                    {
                        Name          = "Proseware, Inc.",
                        AccountNumber = "ACC005"
                    };

                    // Create operation by suppressing duplicate detection
                    var reqCreate = new CreateRequest();
                    reqCreate.Target = account;
                    reqCreate.Parameters.Add("SuppressDuplicateDetection", true); // Change to false to activate the duplicate detection.
                    CreateResponse createResponse = (CreateResponse)service.Execute(reqCreate);
                    dupAccountId = createResponse.id;
                    Console.Write("Account: {0} {1} created with SuppressDuplicateDetection to true, ",
                                  account.Name, account.AccountNumber);

                    // Retrieve the account containing with its few attributes.
                    ColumnSet cols = new ColumnSet(
                        new String[] { "name", "accountnumber" });

                    var retrievedAccount = (Account)service.Retrieve("account", dupAccountId, cols);
                    Console.Write("retrieved, ");

                    // Update the existing account with new account number.
                    retrievedAccount.AccountNumber = "ACC006";

                    // Update operation – update record, if a duplicate is not found.
                    UpdateRequest reqUpdate = new UpdateRequest();
                    reqUpdate.Target = retrievedAccount;
                    reqUpdate["SuppressDuplicateDetection"] = false; // Duplicate detection is activated.

                    // Update the account record.
                    var updateResponse = (UpdateResponse)service.Execute(reqUpdate);
                    Console.WriteLine("and updated.");
                    #region Clean up
                    CleanUpSample(service);
                    #endregion Clean up
                }
                #endregion Demonstrate
                else
                {
                    const string UNABLE_TO_LOGIN_ERROR = "Unable to Login to Common Data Service";
                    if (service.LastCrmError.Equals(UNABLE_TO_LOGIN_ERROR))
                    {
                        Console.WriteLine("Check the connection string values in cds/App.config.");
                        throw new Exception(service.LastCrmError);
                    }
                    else
                    {
                        throw service.LastCrmException;
                    }
                }
            }
            #endregion Sample Code
            catch (Exception ex)
            {
                SampleHelpers.HandleException(ex);
            }

            finally
            {
                if (service != null)
                {
                    service.Dispose();
                }

                Console.WriteLine("Press <Enter> to exit.");
                Console.ReadLine();
            }
        }
        public void BatchTest()
        {
            Mock <IOrganizationService> orgSvc = null;
            Mock <MoqHttpMessagehander> fakHttpMethodHander = null;
            CdsServiceClient            cli = null;

            testSupport.SetupMockAndSupport(out orgSvc, out fakHttpMethodHander, out cli);


            CreateResponse createResponse = new CreateResponse();

            createResponse.Results = new ParameterCollection();
            createResponse.Results.Add("annotationid", testSupport._DefaultId);

            ExecuteMultipleResponseItem responseItem = new ExecuteMultipleResponseItem();

            responseItem.Response     = createResponse;
            responseItem.RequestIndex = 0;

            ExecuteMultipleResponseItemCollection responseItems = new ExecuteMultipleResponseItemCollection();

            responseItems.Add(responseItem);

            ExecuteMultipleResponse executeMultipleResponse = new ExecuteMultipleResponse();

            executeMultipleResponse.Results = new ParameterCollection();
            executeMultipleResponse.Results.Add("Responses", responseItems);

            orgSvc.Setup(req1 => req1.Execute(It.IsAny <ExecuteMultipleRequest>())).Returns(executeMultipleResponse);


            // Setup a batch
            string BatchRequestName = "TestBatch";
            Guid   batchid          = cli.CreateBatchOperationRequest(BatchRequestName);

            // use create operation to setup request
            Dictionary <string, CdsDataTypeWrapper> newFields = new Dictionary <string, CdsDataTypeWrapper>();

            newFields.Add("name", new CdsDataTypeWrapper("CrudTestAccount", CdsFieldType.String));
            newFields.Add("accountnumber", new CdsDataTypeWrapper("12345", CdsFieldType.String));
            newFields.Add("telephone1", new CdsDataTypeWrapper("555-555-5555", CdsFieldType.String));
            newFields.Add("donotpostalmail", new CdsDataTypeWrapper(true, CdsFieldType.Boolean));

            // issue request as a batch:
            Guid result = cli.CreateAnnotation("account", testSupport._DefaultId, newFields, batchid);

            Assert.Equal <Guid>(Guid.Empty, result);

            OrganizationRequest req = cli.GetBatchRequestAtPosition(batchid, 0);

            // Executes the batch request.
            cli.ExecuteBatch(batchid);

            // Request Batch by name
            Guid OperationId = cli.GetBatchOperationIdRequestByName(BatchRequestName);

            // Request batch back
            RequestBatch reqBatch = cli.GetBatchById(batchid);

            Assert.NotNull(reqBatch);
            Assert.Equal(BatchRequestName, reqBatch.BatchName);
            Assert.True(reqBatch.BatchItems.Count == 1);

            // Release batch request
            cli.ReleaseBatchInfoById(batchid);
        }
        public void DataTypeParsingTest()
        {
            Mock <IOrganizationService> orgSvc = null;
            Mock <MoqHttpMessagehander> fakHttpMethodHander = null;
            CdsServiceClient            cli = null;

            testSupport.SetupMockAndSupport(out orgSvc, out fakHttpMethodHander, out cli);


            // Set up Responses
            CreateResponse testCreate = new CreateResponse();

            testCreate.Results.AddOrUpdateIfNotNull("accountid", testSupport._DefaultId);
            testCreate.Results.AddOrUpdateIfNotNull("id", testSupport._DefaultId);


            HttpResponseMessage createRespMsg = new HttpResponseMessage(System.Net.HttpStatusCode.OK);

            createRespMsg.Headers.Add("Location", $"https://deploymenttarget02.crm.dynamics.com/api/data/v9.1/accounts({testSupport._DefaultId})");
            createRespMsg.Headers.Add("OData-EntityId", $"https://deploymenttarget02.crm.dynamics.com/api/data/v9.1/accounts({testSupport._DefaultId})");

            // Setup handlers to deal with both orgRequest and WebAPI request.
            fakHttpMethodHander.Setup(s => s.Send(It.Is <HttpRequestMessage>(f => f.Method.ToString().Equals("post", StringComparison.OrdinalIgnoreCase)))).Returns(createRespMsg);
            orgSvc.Setup(f => f.Execute(It.Is <CreateRequest>(p => p.Target.LogicalName.Equals("account")))).Returns(testCreate);

            // Setup request for all datatypes
            // use create operation to setup request
            Dictionary <string, CdsDataTypeWrapper> newFields = new Dictionary <string, CdsDataTypeWrapper>();

            newFields.Add("name", new CdsDataTypeWrapper("CrudTestAccount", CdsFieldType.String));
            newFields.Add("Field01", new CdsDataTypeWrapper(false, CdsFieldType.Boolean));
            newFields.Add("Field02", new CdsDataTypeWrapper(testSupport._DefaultId, CdsFieldType.Customer, "parentaccount"));
            newFields.Add("Field03", new CdsDataTypeWrapper(DateTime.UtcNow, CdsFieldType.DateTime));
            newFields.Add("Field04", new CdsDataTypeWrapper(64, CdsFieldType.Decimal));
            newFields.Add("Field05", new CdsDataTypeWrapper(1.001, CdsFieldType.Float));
            newFields.Add("Field06", new CdsDataTypeWrapper(testSupport._DefaultId, CdsFieldType.Key));
            newFields.Add("Field07", new CdsDataTypeWrapper(testSupport._DefaultId, CdsFieldType.Lookup, "parentaccount"));
            newFields.Add("Field08", new CdsDataTypeWrapper(50, CdsFieldType.Money));
            newFields.Add("Field09", new CdsDataTypeWrapper(100, CdsFieldType.Number));
            newFields.Add("Field010", new CdsDataTypeWrapper(20, CdsFieldType.Picklist));
            newFields.Add("Field011", new CdsDataTypeWrapper("RawValue", CdsFieldType.Raw));
            newFields.Add("Field012", new CdsDataTypeWrapper(testSupport._DefaultId, CdsFieldType.UniqueIdentifier));

            Entity acctEntity = new Entity("account");

            acctEntity.Attributes.Add("name", "CrudTestAccount");
            acctEntity.Attributes.Add("Field01", false);
            acctEntity.Attributes.Add("Field02", new EntityReference("parentaccount", testSupport._DefaultId));
            acctEntity.Attributes.Add("Field03", DateTime.UtcNow);
            acctEntity.Attributes.Add("Field04", 64);
            acctEntity.Attributes.Add("Field05", 1.001);
            acctEntity.Attributes.Add("Field08", 50);
            acctEntity.Attributes.Add("Field09", 100);
            acctEntity.Attributes.Add("Field010", new OptionSetValue(20));

            // Test Helper create
            var respId = cli.CreateNewRecord("account", newFields);

            Assert.Equal(testSupport._DefaultId, respId);

            // Test entity create
            var response = cli.ExecuteCdsOrganizationRequest(new CreateRequest()
            {
                Target = acctEntity
            }, useWebAPI: false);

            Assert.NotNull(response);
            respId = ((CreateResponse)response).id;
            Assert.Equal(testSupport._DefaultId, respId);

            // Test low level create
            respId = cli.Create(acctEntity);
            Assert.Equal(testSupport._DefaultId, respId);
        }
        public static CreateObjectOutput CreateObjectinTCAndReturnTCItemIdAndRev(CreateObjectParameters[] createObjectParList, String ItemTypeName, String ItemRevisionName)
        {
            String item_id     = "";
            String revision_id = "";

            InitializeProces();
            // The create input for the ChangeNotice Item
            Teamcenter.Services.Strong.Core._2008_06.DataManagement.CreateInput itemCreateIn = new Teamcenter.Services.Strong.Core._2008_06.DataManagement.CreateInput();
            itemCreateIn.BoName = ItemTypeName;
            //itemCreateIn.BoName = "A9_AutoCN";

            // The create input for the ChangeNoticeRevision
            Teamcenter.Services.Strong.Core._2008_06.DataManagement.CreateInput revisionCreateIn = new Teamcenter.Services.Strong.Core._2008_06.DataManagement.CreateInput();
            revisionCreateIn.BoName = ItemRevisionName;
            //revisionCreateIn.BoName = "A9_AutoCNRevision";

            foreach (CreateObjectParameters createObjectPar in createObjectParList)
            {
                String propType = createObjectPar.propType;
                String propOn   = createObjectPar.propOn;

                switch (propType.ToLower())
                {
                case "string":
                    if (propOn == "Item")
                    {
                        itemCreateIn.StringProps.Add(createObjectPar.propName, createObjectPar.propValue);
                    }
                    else
                    {
                        revisionCreateIn.StringProps.Add(createObjectPar.propName, createObjectPar.propValue);
                    }
                    break;

                case "date":
                    DateTime dateValue = Teamcenter.Soa.Client.Model.Property.ParseDate(createObjectPar.propValue);
                    if (propOn == "Item")
                    {
                        itemCreateIn.DateProps.Add(createObjectPar.propName, dateValue);
                    }
                    else
                    {
                        revisionCreateIn.DateProps.Add(createObjectPar.propName, dateValue);
                    }
                    break;
                }
            }

            // Tie the Revision CreateInput to the Item CreateInput
            itemCreateIn.CompoundCreateInput.Add("revision", new Teamcenter.Services.Strong.Core._2008_06.DataManagement.CreateInput[] { revisionCreateIn });

            // The data for the createObjects call
            Teamcenter.Services.Strong.Core._2008_06.DataManagement.CreateIn cnCreateIn = new Teamcenter.Services.Strong.Core._2008_06.DataManagement.CreateIn();
            cnCreateIn.ClientId = "One";
            cnCreateIn.Data     = itemCreateIn;

            CreateResponse createResponse = dmService.CreateObjects(new Teamcenter.Services.Strong.Core._2008_06.DataManagement.CreateIn[] { cnCreateIn });

            if (createResponse.ServiceData.sizeOfPartialErrors() > 0)
            {
                //createResponse.ServiceData.;
            }
            else
            {
                //Teamcenter.Services.Strong.Core._2008_06.DataManagement.CreateOut[] createOut = createResponse.Output;
                foreach (Teamcenter.Services.Strong.Core._2008_06.DataManagement.CreateOut createOut in createResponse.Output)
                {
                    //createOut.ClientId
                    Console.WriteLine("Response for client ID " + createOut.ClientId);
                    foreach (ModelObject modelObject in createOut.Objects)
                    {
                        //modelObject.
                        //Console.WriteLine();
                        String[] uids = new String[1];
                        uids[0] = modelObject.Uid;
                        ServiceData sd = dmService.LoadObjects(uids);

                        ModelObject[] foundObjs = new ModelObject[sd.sizeOfPlainObjects()];
                        for (int k = 0; k < sd.sizeOfPlainObjects(); k++)
                        {
                            foundObjs[k] = sd.GetPlainObject(k);

                            if (foundObjs[k].SoaType.ClassName == ItemRevisionName)
                            {
                                dmService.GetProperties(foundObjs, new String[] { "item_id" });
                                item_id = foundObjs[k].GetPropertyDisplayableValue("item_id");

                                dmService.GetProperties(foundObjs, new String[] { "item_revision_id" });
                                revision_id = foundObjs[k].GetPropertyDisplayableValue("item_revision_id");
                            }
                        }
                    }
                }
            }

            CreateObjectOutput createObjectOutput = new CreateObjectOutput(item_id, revision_id);

            return(createObjectOutput);
        }
        /// <summary>
        /// Create a user without or without a password and return a ClaimsIdentity representing the user created.
        /// </summary>
        /// <param name="request">Instance of CreateRequest</param>
        /// <returns>Instance of CreateResponse</returns>
        public async Task<CreateResponse> CreateAsync(CreateRequest request)
        {
            CreateResponse response = new CreateResponse();

            try
            {
                AspNetUser newUser = new AspNetUser()
                {
                    Id = Guid.NewGuid().ToString(),
                    FirstName = request.FirstName,
                    LastName = request.LastName,
                    UserName = request.UserName,
                    Discriminator = "ApplicationUser" //Change as per your requirements
                };

                IdentityResult result;

                if (!string.IsNullOrWhiteSpace(request.Password))
                    result = await this.UserManager.CreateAsync(newUser, request.Password);
                else
                    result = await this.UserManager.CreateAsync(newUser);

                if (result.Succeeded)
                {

                    string authType = EnumStringValue.GetStringValue(request.AuthenticationType);
                    ClaimsIdentity identity = await this.UserManager.CreateIdentityAsync(newUser, authType);

                    response.UserId = new Guid(newUser.Id);
                    response.ClaimIdentity = identity.ConvertToClaimIdentityView();
                    response.Success = true;
                }
                else
                {
                    response.AddErrors(response.Errors);
                    response.Success = false;
                }
            }
            catch (Exception e)
            {
                response.Success = false;
                response.Errors.Add(e.Message);
            }

            return response;
        }