/// <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(); }
/// <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)); }
/// <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); }
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); }
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)); } }
/// <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)); }
public async Task УстановитьЗначениеКонстантыАсинх(string имяКонстанты, object значение) { await this.SoapКлиент.SetConstantAsync(имяКонстанты, ValueBase.From(значение)); }
/// <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); }