/// <summary>
        /// Асинхронно записывает данные объекта на сервере.
        /// </summary>
        /// <param name="режимЗаписиДокумента">Режим записи документа (только для документов).</param>
        /// <param name="режимПроведенияДокумента">Режим проведения документа (только для документов).</param>
        /// <returns></returns>
        protected async Task ЗаписатьДанныеАсинх(ежимЗаписиДокумента режимЗаписиДокумента = ежимЗаписиДокумента.Запись, ежимПроведенияДокумента режимПроведенияДокумента = ежимПроведенияДокумента.Неоперативный)
        {
            ValueObjectRef tempObject = new ValueObjectRef(this.reference);

            tempObject.Property = new ValueBase[this.modifiedFields.Count];
            int i = 0;

            foreach (string key in this.modifiedFields)
            {
                object value = null;
                this.data.TryGetValue(key, out value);
                ValueBase property = ValueBase.From(value);
                property.Name          = key;
                tempObject.Property[i] = property;
                i++;
            }

            PostObject_Settings settings = new PostObject_Settings(
                this.ДополнительныеСвойства,
                режимЗаписиДокумента,
                режимПроведенияДокумента,
                this.isExchangeLoadMode
                );

            Task <PostObjectResponse> task = this.Клиент().SoapКлиент.PostObjectAsync(tempObject, settings);

            ValueObjectRef returnObject = (await task).@return;
            ОбъектСсылка   ссылка       = returnObject.GetValue(this.Клиент()) as ОбъектСсылка;

            this.УстановитьСсылку(ссылка);

            this.УстановитьЗначенияИзСвойствSOAP(returnObject.Property);

            this.modifiedFields.Clear();
        }
Exemple #2
0
        /// <summary>
        /// Асинхронно вызывает удаленный метод на стороне 1C:Предприятие и возвращает результат.
        /// </summary>
        /// <param name="имяМодуля">Имя модуля удаленного приложения 1С:Предприятие.</param>
        /// <param name="имяМетода">Имя метода (процедуры или функции).</param>
        /// <param name="параметры">Параметры метода.</param>
        /// <returns></returns>
        public async Task <object> ВызватьМетодАсинх(string имяМодуля, string имяМетода, object[] параметры)
        {
            ValueArray paramArray = ValueBase.From(параметры) as ValueArray;

            Task <ExecuteMethodResponse> task = this.SoapКлиент.ExecuteMethodAsync(имяМодуля, имяМетода, paramArray);

            return((await task)[email protected](this));
        }
Exemple #3
0
        /// <summary>
        /// Вызывает удаленный метод на стороне 1C:Предприятие и возвращает результат.
        /// </summary>
        /// <param name="имяМодуля">Имя модуля удаленного приложения 1С:Предприятие.</param>
        /// <param name="имяМетода">Имя метода (процедуры или функции).</param>
        /// <param name="параметры">Параметры метода.</param>
        /// <returns></returns>
        public object ВызватьМетод(string имяМодуля, string имяМетода, object[] параметры)
        {
            ValueArray paramArray = ValueBase.From(параметры) as ValueArray;

            Task <object> task = this.ВызватьМетодАсинх(имяМодуля, имяМетода, параметры);

            task.Wait();

            return(task.Result);
        }
Exemple #4
0
        public async Task <ДеревоЗначений> ПолучитьДанныеОбъектаАсинх(
            Ссылка ссылка,
            IEnumerable <string> поля = null,
            АвтозагрузкаПолейОбъектов автозагрузкаПолей = null)
        {
            автозагрузкаПолей = автозагрузкаПолей ?? АвтозагрузкаПолейОбъектов.Ничего;

            GetObject_Settings settings = new GetObject_Settings();

            settings.AddSkippedProperties          = true;
            settings.AddSkippedPropertiesSpecified = true;
            settings.PropertiesHierarchyType       = "Hierarchy";

            settings.FieldAutoinclusion = new RequestFieldAutoinclusionSettings();
            settings.FieldAutoinclusion.DefaultFields          = автозагрузкаПолей.ЗагружатьСтандартныеРеквизиты;
            settings.FieldAutoinclusion.DefaultFieldsSpecified = автозагрузкаПолей.ЗагружатьСтандартныеРеквизиты;
            settings.FieldAutoinclusion.CustomFields           = автозагрузкаПолей.ЗагружатьПользовательскиеРеквизиты;
            settings.FieldAutoinclusion.CustomFieldsSpecified  = автозагрузкаПолей.ЗагружатьПользовательскиеРеквизиты;
            settings.FieldAutoinclusion.Tables          = автозагрузкаПолей.ЗагружатьТабличныеЧасти;
            settings.FieldAutoinclusion.TablesSpecified = автозагрузкаПолей.ЗагружатьТабличныеЧасти;

            if (поля != null)
            {
                string[] именаПолей = поля.ToArray();
                settings.Field = new RequestField[именаПолей.Length];
                for (int i = 0; i < именаПолей.Length; i++)
                {
                    RequestField field = new RequestField();
                    field.Key         = именаПолей[i];
                    settings.Field[i] = field;
                }
            }

            Task <GetObjectResponse> task = this.SoapКлиент.GetObjectAsync((ValueRef)ValueBase.From(ссылка), settings);

            return((await task)[email protected](this));
        }
        /// <summary>
        /// Получает данные выборки асинхронно с учетом всех установленных настроек.
        /// </summary>
        /// <returns>Метод возвращает ссылку на исходный селектор.</returns>
        public async Task <Селектор> ВыполнитьАсинх()
        {
            if (this.collectionMetadata == null)
            {
                throw new Exception("Не установлена коллекция для получения выборки.");
            }

            GetObjectList_Settings settings = new GetObjectList_Settings();

            settings.AddSkippedProperties          = true;
            settings.AddSkippedPropertiesSpecified = true;

            settings.PropertiesHierarchyType = "Hierarchy";

            settings.FieldAutoinclusion = new RequestFieldAutoinclusionSettings();
            settings.FieldAutoinclusion.DefaultFields          = this.АвтозагрузкаПолей.ЗагружатьСтандартныеРеквизиты;
            settings.FieldAutoinclusion.DefaultFieldsSpecified = this.АвтозагрузкаПолей.ЗагружатьСтандартныеРеквизиты;
            settings.FieldAutoinclusion.CustomFields           = this.АвтозагрузкаПолей.ЗагружатьПользовательскиеРеквизиты;
            settings.FieldAutoinclusion.CustomFieldsSpecified  = this.АвтозагрузкаПолей.ЗагружатьПользовательскиеРеквизиты;
            settings.FieldAutoinclusion.Tables          = this.АвтозагрузкаПолей.ЗагружатьТабличныеЧасти;
            settings.FieldAutoinclusion.TablesSpecified = this.АвтозагрузкаПолей.ЗагружатьТабличныеЧасти;

            if (this.limit > 0)
            {
                settings.Limit          = this.limit;
                settings.LimitSpecified = true;
            }

            settings.Field = new RequestField[this.Поля.Count];
            int i = 0;

            foreach (string fieldName in this.Поля)
            {
                RequestField field = new RequestField();
                field.Key         = fieldName;
                settings.Field[i] = field;
                i++;
            }

            settings.Filter = new RequestFilter[this.Отбор.Count];
            for (i = 0; i < this.Отбор.Count; i++)
            {
                RequestFilter filter = new RequestFilter();
                filter.Key            = this.Отбор[i].Ключ;
                filter.Value          = ValueBase.From(this.Отбор[i].Значение);
                filter.ComparisonType = this.Отбор[i].ВидСравнения.ToString();
                settings.Filter[i]    = filter;
            }

            settings.Sort = new RequestSort[this.Порядок.Count];
            for (i = 0; i < this.Порядок.Count; i++)
            {
                RequestSort field = new RequestSort();
                field.Key        = this.Порядок[i].Ключ;
                field.Direction  = this.Порядок[i].Направление == НаправлениеСортировки.Убывание ? "Убыв" : "Возр";
                settings.Sort[i] = field;
            }

            Task <GetObjectListResponse> task = this.bromClient.SoapКлиент.GetObjectListAsync(this.ТипКоллекции.ToString(), this.ИмяКоллекции, settings);

            ValueArray objectList = (await task).@return;

            this.items.Clear();
            if (objectList.Item != null)
            {
                foreach (ValueBase item in objectList.Item)
                {
                    this.items.Add(item.GetValue(this.Клиент) as Ссылка);
                }
            }

            this.isModified = false;

            return(this);
        }
Exemple #6
0
        private async Task <object> ВыполнитьЗапросОбщееАсинх(string текстЗапроса, IDictionary <string, object> параметры = null, IList <УсловиеОтбора> отбор = null, IList <ПолеДанных> поля = null, IList <Сортировка> порядок = null, bool пакетный = false, ОбходРезультатаЗапроса типОбхода = ОбходРезультатаЗапроса.Прямой, bool включатьВременныеДанные = false)
        {
            ExecuteRequest_Settings settings = new ExecuteRequest_Settings();

            if (параметры != null)
            {
                settings.Parameter = new RequestParameter[параметры.Count];
                int i = 0;
                foreach (KeyValuePair <string, object> параметр in параметры)
                {
                    RequestParameter parameter = new RequestParameter();
                    parameter.Key         = параметр.Key;
                    parameter.Value       = ValueBase.From(параметр.Value);
                    settings.Parameter[i] = parameter;
                    i++;
                }
            }
            if (отбор != null)
            {
                settings.Filter = new RequestFilter[отбор.Count];
                for (int i = 0; i < отбор.Count; i++)
                {
                    RequestFilter filter = new RequestFilter();
                    filter.Key            = отбор[i].Ключ;
                    filter.Value          = ValueBase.From(отбор[i].Значение);
                    filter.ComparisonType = отбор[i].ВидСравнения.ToString();
                    settings.Filter[i]    = filter;
                }
            }
            if (поля != null)
            {
                settings.Field = new RequestField[поля.Count];
                int i = 0;
                foreach (ПолеДанных поле in поля)
                {
                    RequestField field = new RequestField();
                    field.Key         = поле.Ключ;
                    field.Name        = поле.Псевдоним;
                    settings.Field[i] = field;
                    i++;
                }
            }
            if (порядок != null)
            {
                settings.Sort = new RequestSort[порядок.Count];
                int i = 0;
                foreach (Сортировка элементПорядка in порядок)
                {
                    RequestSort sort = new RequestSort();
                    sort.Key         = элементПорядка.Ключ;
                    sort.Direction   = элементПорядка.Направление == НаправлениеСортировки.Убывание ? "Убыв" : "Возр";
                    settings.Sort[i] = sort;
                    i++;
                }
            }
            settings.QueryResultIteration         = типОбхода.ToString();
            settings.IncludeTemporalData          = включатьВременныеДанные;
            settings.IncludeTemporalDataSpecified = включатьВременныеДанные;

            if (!пакетный)
            {
                Task <ExecuteRequestResponse> task = this.SoapКлиент.ExecuteRequestAsync(текстЗапроса, settings);
                return((await task)[email protected](this));
            }
            else
            {
                Task <ExecuteRequestBatchResponse> task = this.SoapКлиент.ExecuteRequestBatchAsync(текстЗапроса, settings);

                return((await task)[email protected](this));
            }
        }
Exemple #7
0
        /// <summary>
        /// Метод для отладки и тестирования. Асинхронно возвращает обратно значение переданное серверу.
        /// </summary>
        /// <param name="значение">Значение, передаваемое на сервер.</param>
        /// <returns>Возвращает обратно значение переданное серверу.</returns>
        public async Task <object> ЭхоАсинх(object значение)
        {
            Task <ValueBase> task = this.soapClient.DebugEchoAsync(ValueBase.From(значение));

            return((await task).GetValue(this));
        }
Exemple #8
0
 public async Task УстановитьЗначениеКонстантыАсинх(string имяКонстанты, object значение)
 {
     await this.SoapКлиент.SetConstantAsync(имяКонстанты, ValueBase.From(значение));
 }
Exemple #9
0
        /// <summary>
        /// Асинхронно выполняет фрагмент кода на языке 1С:Предприятие на стороне сервера.
        /// </summary>
        /// <param name="исполняемыКод">Текст исполняемого кода.</param>
        /// <param name="параметр">Значение параметра, которое доступно в исполняемом коде в переменной "Параметр".</param>
        /// <returns>Возвращает значение, которое было установлено в переменную "Результат" на стороне 1С.</returns>
        public async Task <object> ВыполнитьАсинх(string исполняемыКод, object параметр)
        {
            Task <ExecuteCodeResponse> task = this.SoapКлиент.ExecuteCodeAsync(исполняемыКод, ValueBase.From(параметр));

            return((await task)[email protected](this));
        }
        /// <summary>
        /// Асинхронно загружает данные объекта с сервера.
        /// </summary>
        /// <param name="ссылка">Ссылка на объект.</param>
        public async Task ЗагрузитьДанныеОбъектаАсинх(ОбъектСсылка ссылка)
        {
            GetObject_Settings settings = new GetObject_Settings();

            settings.AddSkippedProperties = true;

            settings.FieldAutoinclusion = new RequestFieldAutoinclusionSettings();
            settings.FieldAutoinclusion.DefaultFields          = true;
            settings.FieldAutoinclusion.DefaultFieldsSpecified = true;
            settings.FieldAutoinclusion.CustomFields           = true;
            settings.FieldAutoinclusion.CustomFieldsSpecified  = true;
            settings.FieldAutoinclusion.Tables          = true;
            settings.FieldAutoinclusion.TablesSpecified = true;

            Task <GetObjectResponse> task = this.bromClient.SoapКлиент.GetObjectAsync((ValueObjectRef)ValueBase.From(ссылка), settings);

            ValueObjectRef refSoap = (await task).@return as ValueObjectRef;

            this.ИнициализироватьДанныеОбъекта(ссылка);

            this.УстановитьПредставлениеОбъекта(ссылка, refSoap.Presentation);
            this.УстановитьЗначенияИзСвойствSOAP(ссылка, refSoap.Property);
        }