Ejemplo n.º 1
0
 public JsonResult IsTenantAvailable(TenantModel tenant)
 {
     try
     {
         var svc    = WebServiceFactory.ApplicationTenant();
         var result = svc.ReadMultiple(new []
         {
             new ApplicationTenant_Filter
             {
                 Field    = ApplicationTenant_Fields.Name,
                 Criteria = "@" + tenant.TenantName
             },
             new ApplicationTenant_Filter
             {
                 Field    = ApplicationTenant_Fields.Application_Service_Name_Web_Service_Filter_Field,
                 Criteria = Configuration.ApplicationServiceName
             }
         }, null, 1);
         return(Json(result.Length == 0, JsonRequestBehavior.AllowGet));
     }
     catch (Exception e)
     {
         return(Json(e.Message, JsonRequestBehavior.AllowGet));
     }
 }
 private void _cheat_in_place_of_sign_in()
 {
     if (State.Get <TenantModel>() == null)
     {
         var svc = WebServiceFactory.ApplicationTenant();
         State.Set(svc.ReadMultiple(new[]
         {
             new ApplicationTenant.ApplicationTenant_Filter
             {
                 Field    = ApplicationTenant.ApplicationTenant_Fields.Name,
                 Criteria = "Gesellschaft GmbH"
             }
         }, null, 0).FirstOrDefault()?.ToTenantModel());
         State.Set(new UserModel
         {
             UserName = "******",
             Password = "******"
         });
     }
 }
Ejemplo n.º 3
0
        protected override void RequestTasks()
        {
            var svcAppTenantCompany = WebServiceFactory.ApplicationTenantCompany();

            ApplicationTenantCompany.ApplicationTenantCompany company = null;

            RegisterTask(
                new AsyncWorkflowTask("Waiting for company provisioning to complete", (state, action) =>
            {
                Task.Factory.StartNew(() =>
                {
                    try
                    {
                        var attempts  = 0;
                        var svcTenant = WebServiceFactory.ApplicationTenant();
                        while (company == null)
                        {
                            var tenant = svcTenant.Read(state.Get <TenantModel>().Id);
                            company    = svcAppTenantCompany.Read(tenant.ID, Configuration.DefaultCompanyName);
                            if (company == null)
                            {
                                Thread.Sleep(5000);
                            }
                            if (attempts++ > 60)
                            {
                                throw new Exception(
                                    "Timeout during company provisioning. Please contact Contoso support department.");
                            }
                        }
                        action.Complete();
                    }
                    catch (Exception e)
                    {
                        action.Fail(e);
                    }
                });
            }).Then(
                    new AsyncWorkflowTask("Renaming company", (state, action) =>
            {
                svcAppTenantCompany.SetNameCompleted += (sender, args) =>
                {
                    action.CompleteAsyncOperation(args, () =>
                    {
                        state["CompanyRenamed"] = true;
                    });
                };
                svcAppTenantCompany.SetNameAsync(company?.Key, state.Get <TenantModel>().CompanyName);
            }).Then(
                        new AsyncWorkflowTask("Waiting for user account provisioning", (state, task) =>
            {
                Task.Factory.StartNew(() =>
                {
                    while (!state["UserCreated"])
                    {
                        Thread.Sleep(1000);
                    }
                    task.Complete();
                });
            })
                        .Then(
                            new List <ITask>
            {
                new AsyncWorkflowTask("Configuring company", (state, action) =>
                {
                    var features = state.Get <FeaturesModel>();
                    var tenant   = state.Get <TenantModel>();

                    var svcCompanyInfo = WebServiceFactory.Tenant.CompanyInformation(state);
                    var companyInfo    = svcCompanyInfo.ReadMultiple(null, null, 0)[0];

                    companyInfo.Name                        = tenant.CompanyName;
                    companyInfo.Address                     = features.CompanyAddress;
                    companyInfo.Address_2                   = features.CompanyAddress2;
                    companyInfo.Post_Code                   = features.CompanyPostCode;
                    companyInfo.City                        = features.CompanyCity;
                    companyInfo.Country_Region_Code         = features.CompanyCountryCode;
                    companyInfo.Ship_to_Name                = tenant.CompanyName;
                    companyInfo.Ship_to_Address             = features.CompanyAddress;
                    companyInfo.Ship_to_Address_2           = features.CompanyAddress2;
                    companyInfo.Ship_to_Post_Code           = features.CompanyPostCode;
                    companyInfo.Ship_to_City                = features.CompanyCity;
                    companyInfo.Ship_to_Country_Region_Code = features.CompanyCountryCode;
                    companyInfo.VAT_Registration_No         = features.VatRegistrationNumber;

                    svcCompanyInfo.UpdateCompleted += (sender, args) =>
                    {
                        action.CompleteAsyncOperation(args, null);
                    };
                    svcCompanyInfo.UpdateAsync(companyInfo);
                }),
                new AsyncWorkflowTask("Configuring G/L", (state, action) =>
                {
                    var glSvc   = WebServiceFactory.Tenant.GeneralLedgerSetup(state);
                    var glSetup = glSvc.ReadMultiple(null, null, 0)[0];

                    var features          = state.Get <FeaturesModel>();
                    glSetup.LCY_Code      = features.LocalCurrencyCode;
                    glSetup.Register_Time = features.RegisterTime;

                    glSvc.UpdateCompleted += (sender, args) =>
                    {
                        action.CompleteAsyncOperation(args, null);
                    };
                    glSvc.UpdateAsync(glSetup);
                })
            })
                        )
                    )
                );
        }
Ejemplo n.º 4
0
        protected override void RequestTasks()
        {
            var service = WebServiceFactory.ApplicationTenant();

            RegisterTask(
                new AsyncWorkflowTask("Creating a new tenant", (state, task) =>
            {
                service.CreateCompleted += (sender, args) =>
                {
                    task.CompleteAsyncOperation(args, () => state.Set(args.ApplicationTenant));
                };
                service.CreateAsync(state.Get <TenantModel>().ToApplicationTenant());
            })
                .Then(
                    new AsyncWorkflowTask("Starting provisioning a new Microsoft Dynamics NAV tenant",
                                          (state, task) =>
            {
                service.BeginProvisionCompleted += (sender, args) =>
                {
                    task.CompleteAsyncOperation(args, () => _operationId = args.Result);
                };
                service.BeginProvisionAsync(state.Get <ApplicationTenant.ApplicationTenant>().Key);
            })
                    .Then(
                        new AsyncWorkflowTask(
                            "Waiting for provisioning a new Microsoft Dynamics NAV tenant to complete",
                            (state, task) =>
            {
                Task.Factory.StartNew(() =>
                {
                    var status     = @"provisioning";
                    var errorCount = 0;
                    while (status == "provisioning")
                    {
                        try
                        {
                            status = _operation.GetOperationStatus(_operationId).ToLower();
                            Thread.Sleep(5000);
                        }
                        catch (Exception e)
                        {
                            if (errorCount++ > 5)
                            {
                                task.Fail(e);
                                return;
                            }
                        }
                    }
                    task.Complete();
                });
            })
                        .Then(
                            new AsyncWorkflowTask("Retrieving provisioned tenant information",
                                                  (state, task) =>
            {
                service.ReadCompleted += (sender, args) =>
                {
                    task.CompleteAsyncOperation(args, () =>
                    {
                        state.Set(args.Result);
                        state.Get <TenantModel>().Id  = args.Result.ID;
                        state.Get <TenantModel>().Url = args.Result.URL;
                        switch (args.Result.Provisioning_Status)
                        {
                        case Provisioning_Status.Active:
                            task.Complete();
                            break;

                        case Provisioning_Status.Provisioning_Failed:
                            task.Fail(
                                new Exception(
                                    $"Provisioning of tenant {args.Result.Name} failed."));
                            break;
                        }
                    });
                };
                service.ReadAsync(state.Get <ApplicationTenant.ApplicationTenant>().ID);
            })
                            ))));
        }