示例#1
0
        /// <summary>
        /// Creates an <see cref="T:System.Web.Http.Controllers.IHttpController" /> object.
        /// Creates <see cref="DataObjectController"/> using current <see cref="IDependencyScope"/> and <see cref="IHttpRoute"/>.
        /// </summary>
        /// <param name="request">The message request.</param>
        /// <param name="controllerDescriptor">The HTTP controller descriptor.</param>
        /// <param name="controllerType">The type of the controller.</param>
        /// <returns>
        /// An <see cref="T:System.Web.Http.Controllers.IHttpController" /> object for specified arguments.
        /// </returns>
        public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
        {
            if (controllerDescriptor.ControllerName == "DataObject")
            {
                IDependencyResolver dependencyResolver = request.GetConfiguration().DependencyResolver;
                IDataService        dataService        = (IDataService)dependencyResolver.GetService(typeof(IDataService));

                if (dataService == null)
                {
                    throw new InvalidOperationException("IDataService is not registered in the dependency scope.");
                }

                ManagementToken      token          = request.GetODataServiceToken();
                DataObjectController controller     = new DataObjectController(dataService, token.Model, token.Events, token.Functions);
                BaseOfflineManager   offlineManager = (BaseOfflineManager)dependencyResolver.GetService(typeof(BaseOfflineManager));

                if (offlineManager != null)
                {
                    controller.OfflineManager = offlineManager;
                }

                return(controller);
            }

            return(_fallbackActivator.Create(request, controllerDescriptor, controllerType));
        }
        public bool LoadLeadObjectFromCRM(int LoadObject, string columnName, string columnValue, HttpSessionStateBase SessionBase)
        {
            LeadRecordController LRC = new LeadRecordController();
            LeadRecord           theLead;
            var actionresult = LRC.GetLeadRecordByColumn(columnName, columnValue);

            if (actionresult != null && actionresult != actionresult as System.Web.Http.Results.NotFoundResult)
            {
                var response = actionresult as OkNegotiatedContentResult <LeadRecord>;
                theLead = response.Content;
            }
            else
            {
                SessionManager.StoreProgramParameter("CRMLeadFound", "No", SessionBase);
                return(false);
            }

            ScreenViewer.API.DataObjectController DOC = new DataObjectController();

            //string DOname = DataObjectToLoad;

            var ObjectResult = DOC.GetDataObjectCRM(LoadObject, theLead);
            var LeadObject   = ObjectResult as OkNegotiatedContentResult <DataObjects>;

            DataObjects DisplayObject = (DataObjects)LeadObject.Content;

            SessionManager.StoreDataObject(SessionBase, DisplayObject.DOName, DisplayObject);
            SessionManager.StoreProgramParameter("CRMLeadFound", "Yes", SessionBase);
            SessionManager.StoreProgramParameter("CRMLeadObjectId", LoadObject.ToString(), SessionBase);

            return(true);
        }
        public bool LoadDataObjectFromWebAPI(int scriptObjectId, string webAPIbaseaddress, HttpSessionStateBase SessionBase)
        {
            HttpClient client = new HttpClient();

            //client.BaseAddress = new Uri(webAPIbaseaddress);
            client.DefaultRequestHeaders.Add("Accept", "application/json");

            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage response = client.GetAsync(webAPIbaseaddress).Result;

            if (response.IsSuccessStatusCode)
            {
                var theresponse = response.Content.ReadAsStringAsync();
                //string json = theresponse.Result.Replace("[", "").Replace("]", "");
                string json = theresponse.Result;

                //Example Multi Collection
                //string json = "[{\"Id\":\"00Qj000000IyrXzEAJ\",\"Company\":\"ZINGERS BAR AND GRILL\",\"Title\":null,\"Street\":\"12700 Hill Country Blvd\",\"City\":\"AUSTIN\",\"State\":\"Texas\",\"Country\":\"United States\",\"PostalCode\":\"78738\",\"Phone\":\"(512) 524-2430\",\"MobilePhone\":null,\"Email\":\"[email protected]\",\"FirstName\":\"ALAN\",\"LastName\":\"MCARTHUR\",\"LeadSource\":\"List\",\"Status\":\"Open\",\"Lead_MID__c\":\"650000006747920\",\"Non_Sales_Disposition__c\":null,\"Products_Presented__c\":null,\"Card_Termination_Date__c\":\"2015-07-14\",\"Recent_or_Existing_Merchant_Acct__c\":null,\"Est_Annual_Process_Volume__c\":null,\"Average_Ticket__c\":null,\"Current_Processor__c\":null,\"Name_of_Existing_Equipment_softward__c\":null},{\"Id\":\"00Qj000000IyrXzEAJ\",\"Company\":\"ZINGERS BAR AND GRILL\",\"Title\":null,\"Street\":\"12700 Hill Country Blvd\",\"City\":\"AUSTIN\",\"State\":\"Texas\",\"Country\":\"United States\",\"PostalCode\":\"78738\",\"Phone\":\"(512) 524-2430\",\"MobilePhone\":null,\"Email\":\"[email protected]\",\"FirstName\":\"ALAN\",\"LastName\":\"MCARTHUR\",\"LeadSource\":\"List\",\"Status\":\"Open\",\"Lead_MID__c\":\"650000006747920\",\"Non_Sales_Disposition__c\":null,\"Products_Presented__c\":null,\"Card_Termination_Date__c\":\"2015-07-14\",\"Recent_or_Existing_Merchant_Acct__c\":null,\"Est_Annual_Process_Volume__c\":null,\"Average_Ticket__c\":null,\"Current_Processor__c\":null,\"Name_of_Existing_Equipment_softward__c\":null}]";
                //Example Single Collection
                //string json = "[{\"Id\":\"00Qj000000IyrXzEAJ\",\"Company\":\"ZINGERS BAR AND GRILL\",\"Title\":null,\"Street\":\"12700 Hill Country Blvd\",\"City\":\"AUSTIN\",\"State\":\"Texas\",\"Country\":\"United States\",\"PostalCode\":\"78738\",\"Phone\":\"(512) 524-2430\",\"MobilePhone\":null,\"Email\":\"[email protected]\",\"FirstName\":\"ALAN\",\"LastName\":\"MCARTHUR\",\"LeadSource\":\"List\",\"Status\":\"Open\",\"Lead_MID__c\":\"650000006747920\",\"Non_Sales_Disposition__c\":null,\"Products_Presented__c\":null,\"Card_Termination_Date__c\":\"2015-07-14\",\"Recent_or_Existing_Merchant_Acct__c\":null,\"Est_Annual_Process_Volume__c\":null,\"Average_Ticket__c\":null,\"Current_Processor__c\":null,\"Name_of_Existing_Equipment_softward__c\":null}]";
                //Example No Collection
                //string json = "{\"Id\":\"00Qj000000IyrXzEAJ\",\"Company\":\"ZINGERS BAR AND GRILL\",\"Title\":null,\"Street\":\"12700 Hill Country Blvd\",\"City\":\"AUSTIN\",\"State\":\"Texas\",\"Country\":\"United States\",\"PostalCode\":\"78738\",\"Phone\":\"(512) 524-2430\",\"MobilePhone\":null,\"Email\":\"[email protected]\",\"FirstName\":\"ALAN\",\"LastName\":\"MCARTHUR\",\"LeadSource\":\"List\",\"Status\":\"Open\",\"Lead_MID__c\":\"650000006747920\",\"Non_Sales_Disposition__c\":null,\"Products_Presented__c\":null,\"Card_Termination_Date__c\":\"2015-07-14\",\"Recent_or_Existing_Merchant_Acct__c\":null,\"Est_Annual_Process_Volume__c\":null,\"Average_Ticket__c\":null,\"Current_Processor__c\":null,\"Name_of_Existing_Equipment_softward__c\":null}";
                //Example Collection for DropDown
                //string json = "[{\"Name\":\"Do Not Call\",\"Value\":\"Do_Not_Call\"},{\"Name\":\"Call Back\",\"Value\":\"Call_Back\"},{\"Name\":\"Fax Machine\",\"Value\":\"Fax_Machine\"},{\"Name\":\"Wrong Number\",\"Value\":\"Wrong_Number\"}]";

                var converter = new ExpandoObjectConverter();

                var obj = JsonConvert.DeserializeObject(json);

                //string json = "[{\"Dispo\":{\"Name\":\"Do Not Call\",\"Value\":\"Do_Not_Call\"}},{\"Dispo\":{\"Name\":\"Call Back\",\"Value\":\"Call_Back\"}},{\"Dispo\":{\"Name\":\"Fax Machine\",\"Value\":\"Fax_Machine\"}},{\"Dispo\":{\"Name\":\"Wrong Number\",\"Value\":\"Wrong_Number\"}}]";
                //var obj = JsonConvert.DeserializeObject<List<Dictionary<string,Dictionary<string, string>>>>(json);

                ScreenViewer.API.DataObjectController DOC = new DataObjectController();

                var ObjectResult = DOC.GetDataObjectDictionary(scriptObjectId, obj);
                var LeadObject   = ObjectResult as OkNegotiatedContentResult <DataObjects>;

                DataObjects DisplayObject = (DataObjects)LeadObject.Content;

                SessionManager.StoreDataObject(SessionBase, DisplayObject.DOName, DisplayObject);
                SessionManager.StoreProgramParameter(string.Format("{0}Found", DisplayObject.DOName), "Yes", SessionBase);
                return(true);
            }

            return(false);
        }
示例#4
0
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="controller">Контроллер DataObjectController.</param>
        internal QueryParameters(DataObjectController controller)
        {
            _controller = controller;
            if (controller.QueryOptions == null)
            {
                return;
            }

            if (controller.QueryOptions.Skip != null)
            {
                Skip = controller.QueryOptions.Skip.Value;
            }

            if (controller.QueryOptions.Top != null)
            {
                Top = controller.QueryOptions.Top.Value;
            }
        }
示例#5
0
        public static void SetValue(string ObjectName, string thevalue, HttpSessionStateBase session)
        {
            string      dataobname       = System.Text.RegularExpressions.Regex.Split(ObjectName, "\\.")[0];
            DataObjects ScriptDataObject = (DataObjects)SessionControl.SessionManager.GetDataObject(session, dataobname);

            if (ScriptDataObject == null)
            {
                DataObjectController dataObjectController = new DataObjectController();
                object loadObject   = null;
                var    actionResult = dataObjectController.GetDataObject(dataobname, loadObject);

                if (actionResult != null)
                {
                    var         objectResponse = actionResult as System.Web.Http.Results.OkNegotiatedContentResult <DataObjects>;
                    DataObjects DisplayObject  = (DataObjects)objectResponse.Content;
                    SessionControl.SessionManager.StoreDataObject(session, DisplayObject.DOName, DisplayObject);
                    ScriptDataObject = DisplayObject;
                }
            }

            ScriptDataObject.DetailsArray = SetObjectDetail(ObjectName, thevalue, ScriptDataObject.DetailsArray);
            SessionControl.SessionManager.StoreDataObject(session, dataobname, ScriptDataObject);
        }
        public bool LoadDataObjectFromWebAPI(string DataObjectToLoad, string webAPIbaseaddress, string webAPIcall, HttpSessionStateBase SessionBase)
        {
            HttpClient client = new HttpClient();

            client.BaseAddress = new Uri(webAPIbaseaddress);
            client.DefaultRequestHeaders.Add("Accept", "application/json");

            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage response = client.GetAsync(webAPIcall).Result;

            if (response.IsSuccessStatusCode)
            {
                var    theresponse = response.Content.ReadAsStringAsync();
                string json        = theresponse.Result.Replace("[", "").Replace("]", "");
                var    converter   = new ExpandoObjectConverter();
                var    obj         = JsonConvert.DeserializeObject(json);
                ScreenViewer.API.DataObjectController DOC = new DataObjectController();

                string DOname = DataObjectToLoad;

                var ObjectResult = DOC.GetDataObjectDictionary(DOname, obj);
                var LeadObject   = ObjectResult as OkNegotiatedContentResult <DataObjects>;

                DataObjects DisplayObject = (DataObjects)LeadObject.Content;

                SessionManager.StoreDataObject(SessionBase, Regex.Split(DOname, "\\.")[0], DisplayObject);
                SessionManager.StoreProgramParameter(string.Format("{0}Found", DataObjectToLoad), "Yes", SessionBase);
                return(false);
            }
            else
            {
                SessionManager.StoreProgramParameter(string.Format("{0}Found", DataObjectToLoad), "No", SessionBase);
            }

            return(true);
        }
        public void AfterSavePostComplexObjectTest()
        {
            // TODO: переписать тест с корректным формированием параметра - передаваемой сущности - для Post.
            // Объекты для тестирования создания.
            Медведь медв = new Медведь {
                Вес = 48
            };
            Лес лес1 = new Лес {
                Название = "Бор"
            };
            Лес лес2 = new Лес {
                Название = "Березовая роща"
            };

            медв.ЛесОбитания = лес1;
            var берлога1 = new Берлога {
                Наименование = "Для хорошего настроения", ЛесРасположения = лес1
            };
            var берлога2 = new Берлога {
                Наименование = "Для плохого настроения", ЛесРасположения = лес2
            };

            медв.Берлога.Add(берлога1);
            медв.Берлога.Add(берлога2);

            // Объекты для тестирования создания с обновлением.
            Медведь медвежонок = new Медведь {
                Вес = 12
            };
            var берлога3 = new Берлога {
                Наименование = "Для хорошего настроения", ЛесРасположения = лес1
            };

            медвежонок.Берлога.Add(берлога3);

            ActODataService(args =>
            {
                args.Token.Events.CallbackAfterCreate = AfterCreate;
                args.Token.Events.CallbackAfterUpdate = AfterUpdate;
                args.Token.Events.CallbackAfterDelete = AfterDelete;

                // ------------------ Только создания объектов ------------------
                // Подготовка тестовых данных в формате OData.
                var controller         = new DataObjectController(args.DataService, args.Token.Model, args.Token.Events, args.Token.Functions);
                EdmEntityObject edmObj = controller.GetEdmObject(args.Token.Model.GetEdmEntityType(typeof(Медведь)), медв, 1, null);
                var edmЛес1            = controller.GetEdmObject(args.Token.Model.GetEdmEntityType(typeof(Лес)), лес1, 1, null);
                var edmЛес2            = controller.GetEdmObject(args.Token.Model.GetEdmEntityType(typeof(Лес)), лес2, 1, null);
                edmObj.TrySetPropertyValue("ЛесОбитания", edmЛес1);
                var coll = controller.GetEdmCollection(медв.Берлога, typeof(Берлога), 1, null);
                edmObj.TrySetPropertyValue("Берлога", coll);
                EdmEntityObject edmБерлога1 = (EdmEntityObject)coll[0]; // controller.GetEdmObject(args.ODataService.Model.GetEdmEntityType(typeof(Берлога)), берлога1, 1, null);
                EdmEntityObject edmБерлога2 = (EdmEntityObject)coll[1]; // controller.GetEdmObject(args.ODataService.Model.GetEdmEntityType(typeof(Берлога)), берлога2, 1, null);
                edmБерлога1.TrySetPropertyValue("ЛесРасположения", edmЛес1);
                edmБерлога2.TrySetPropertyValue("ЛесРасположения", edmЛес2);

                // Формируем URL запроса к OData-сервису.
                string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name);

                ParamObj = null;

                // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON.
                HttpResponseMessage response = args.HttpClient.PostAsJsonAsync(requestUrl, edmObj).Result;
                Assert.NotNull(ParamObj);

                // Убедимся, что запрос завершился успешно.
                Assert.Equal(HttpStatusCode.Created, response.StatusCode);

                // Получим строку с ответом.
                string receivedJsonObjs = response.Content.ReadAsStringAsync().Result.Beautify();

                // В ответе приходит объект с созданной сущностью.
                // Преобразуем полученный объект в словарь.
                Dictionary <string, object> receivedObjs = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedJsonObjs);

                // Проверяем созданный объект, вычитав с помощью DataService
                DataObject createdObj = new Медведь {
                    __PrimaryKey = медв.__PrimaryKey
                };
                args.DataService.LoadObject(createdObj);

                Assert.Equal(ObjectStatus.UnAltered, createdObj.GetStatus());
                Assert.Equal(((Медведь)createdObj).Вес, receivedObjs["Вес"]);

                // Проверяем что созданы все зависимые объекты, вычитав с помощью DataService
                var ldef         = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef;
                var lcs          = LoadingCustomizationStruct.GetSimpleStruct(typeof(Лес), "ЛесE");
                lcs.LoadingTypes = new[] { typeof(Лес) };
                var dobjs        = args.DataService.LoadObjects(lcs);

                Assert.Equal(2, dobjs.Length);

                lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Берлога), "БерлогаE");
                lcs.LoadingTypes = new[] { typeof(Берлога) };

                // lcs.LimitFunction = ldef.GetFunction(ldef.funcEQ, new VariableDef(ldef.GuidType, SQLWhereLanguageDef.StormMainObjectKey), keyValue);
                dobjs = args.DataService.LoadObjects(lcs);
                Assert.Equal(2, dobjs.Length);

                // ------------------ Создание объекта и обновление связанных ------------------
                // Создаем нового медведя: в его мастере ЛесОбитания - лес1, но в нём изменим Название; в детейлы заберем от первого медведя  детейл2, изменив Название в мастере детейла.
                // Подготовка тестовых данных в формате OData.
                edmObj = controller.GetEdmObject(args.Token.Model.GetEdmEntityType(typeof(Медведь)), медвежонок, 1, null);
                edmObj.TrySetPropertyValue("ЛесОбитания", edmЛес1);
                edmЛес1.TrySetPropertyValue("Название", лес1.Название + "(обновл)");
                edmЛес2.TrySetPropertyValue("Название", лес2.Название + "(обновл)");
                медв.Берлога.Remove(берлога2);
                медвежонок.Берлога.Add(берлога2);
                coll = controller.GetEdmCollection(медвежонок.Берлога, typeof(Берлога), 1, null);
                edmObj.TrySetPropertyValue("Берлога", coll);
                edmБерлога1 = (EdmEntityObject)coll[0];
                edmБерлога2 = (EdmEntityObject)coll[1];
                edmБерлога1.TrySetPropertyValue("ЛесРасположения", edmЛес2);
                edmБерлога2.TrySetPropertyValue("ЛесРасположения", edmЛес1);

                ParamObj = null;

                // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON.
                response = args.HttpClient.PostAsJsonAsync(requestUrl, edmObj).Result;
                Assert.NotNull(ParamObj);

                // Убедимся, что запрос завершился успешно.
                Assert.Equal(HttpStatusCode.Created, response.StatusCode);

                // Проверяем созданный объект, вычитав с помощью DataService
                createdObj = new Медведь {
                    __PrimaryKey = медвежонок.__PrimaryKey
                };
                args.DataService.LoadObject(createdObj);

                Assert.Equal(ObjectStatus.UnAltered, createdObj.GetStatus());
                Assert.Equal(12, ((Медведь)createdObj).Вес);

                // Проверяем что созданы все зависимые объекты, вычитав с помощью DataService
                ldef              = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef;
                lcs               = LoadingCustomizationStruct.GetSimpleStruct(typeof(Лес), "ЛесE");
                lcs.LoadingTypes  = new[] { typeof(Лес) };
                lcs.LimitFunction = ldef.GetFunction(
                    ldef.funcEQ,
                    new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.StormMainObjectKey),
                    лес1.__PrimaryKey);
                dobjs = args.DataService.LoadObjects(lcs);

                Assert.Equal(1, dobjs.Length);
                Assert.True(((Лес)dobjs[0]).Название.EndsWith("(обновл)"));

                lcs.LimitFunction = ldef.GetFunction(
                    ldef.funcEQ,
                    new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.StormMainObjectKey),
                    лес2.__PrimaryKey);
                dobjs = args.DataService.LoadObjects(lcs);

                Assert.Equal(1, dobjs.Length);
                Assert.True(((Лес)dobjs[0]).Название.EndsWith("(обновл)"));

                lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Берлога), "БерлогаE");
                lcs.LoadingTypes  = new[] { typeof(Берлога) };
                lcs.LimitFunction = ldef.GetFunction(
                    ldef.funcEQ,
                    new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, "Медведь"),
                    медв.__PrimaryKey);
                dobjs = args.DataService.LoadObjects(lcs);

                Assert.Equal(1, dobjs.Length);

                lcs.LimitFunction = ldef.GetFunction(
                    ldef.funcEQ,
                    new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, "Медведь"),
                    медвежонок.__PrimaryKey);
                dobjs = args.DataService.LoadObjects(lcs);

                Assert.Equal(2, dobjs.Length);

                // Вернем детейл для того, чтобы тест работал со следующими СУБД.
                медвежонок.Берлога.Remove(берлога2);
                медв.Берлога.Add(берлога2);
            });
        }
 private void Setup()
 {
     datexIIClientController = new DATEXIIClientController();
     dataObjectController    = new DataObjectController();
     datexIIUpdateService    = DATEXIIUpdateService.GetInstance();
 }