Пытаюсь читать данные, как писали опытные люди

var entities1 = Get<ICompositeObjectList<ICompositeObject>>("ReadDataUserTask1.ResultCompositeObjectList");
var	entityLocation	= entities1.FirstOrDefault();
if (entityLocation == null)
	throw(new Exception("NULL!!!"));

ReadDataUserTask1 - чтение 1 записи.

entityLocation получается null, хотя я читаю элемент, по заранее заданному Id.

Если сделать просто entities1.First(), то ошибка System.InvalidOperationException: Последовательность не содержит элементов в System.Linq.Enumerable.First

Что я делаю не так?

Нравится

1 комментарий
Лучший ответ

Попробуйте обращаться не к ResultCompositeObjectList, а к ResultEntity. И тип данных Entity

 

Попробуйте обращаться не к ResultCompositeObjectList, а к ResultEntity. И тип данных Entity

 

Показать все комментарии

Можно ли как-то прочитать название если в объекте в колонке указан справочник, так как там указан Guid?

Пример:

[#Читать данные контакта.Первый элемент результирующей коллекции.Страна#] узнать название страны при чтении из "Читать данные"

Нравится

8 комментариев
Лучший ответ

Здравствуйте!

Можно получить нужное вам значение 2 вариантами.

1. Первый способ - 2-мя элементами 'Чтение данных'. Одним вычитываете Id города из Вашего объекта, а вторым название города по его Id из предыдущего элемента.

2. Второй способ сразу вычитать данные в элементе скрипт таск с помощью EntitySchemaQuery.

Здравствуйте!

Можно получить нужное вам значение 2 вариантами.

1. Первый способ - 2-мя элементами 'Чтение данных'. Одним вычитываете Id города из Вашего объекта, а вторым название города по его Id из предыдущего элемента.

2. Второй способ сразу вычитать данные в элементе скрипт таск с помощью EntitySchemaQuery.

Алла Савельева,

Первый способ не подходит, там 18 справочником, выйдет многовато читать. Второй способ я использовал, но руководство не совсем приветствует использование C# скриптов

Придётся делать подряд 2 элемента чтения данных: в первом читать из контакта Id страны, во втором — из справочника стран, отфильтрованного по этому Id, получать название.

Зверев Александр у меня 6 таблиц которые нужно заполнить данными. Для каждой таблицы порядка 20 справочников читать. Выйдет адский труд

Если таких слишком много и писать скрипты не хотите, можно ещё сделать view с текстовыми колонками, потом создать по нему объект и работать с ним.

Prime Source,

Prime Source пишет:

руководство не совсем приветствует использование C# скриптов

Главное с этим не злоупотреблять, в данном случае это оптимальный вариант.

К сожалению, пока вычитать данные из связанных таблиц в элементе 'Чтение данных' невозможно.

Как вариант, можно реализовать представление, которое содержит все нужные данные и обращаться к нему из элемента 'Чтение данных', но это такой вариант костыля и потом, так как мне не до конца известна Ваша задача, то не факт, что представление будет лучше, чем C# код.

Алла Савельева,

Спасибо, мне нужно было что бы люди тоже подтвердили мое мнение начальству. Скрипт я написал, он сам чиатет и сам пишет все в таблице трансферную которую мне нужно

Если хотите правильнее всего и много однотипных чтений, создайте своё действие в процессе (отдельную схему с этой всей логикой внутри) и далее используйте в БП без необходимости программирования.

Показать все комментарии

Коллеги, добрый день!

Такой кейс: есть бизнес-процесс с несколькими задачами, которые создаю с помощью элемента бизнес-процесса «Выполнить задачу». Для примера, создаем такой процесс: при создании новой записи в разделе «Счета» запускается бизнес-процесс, состоящий из трех последовательных задач: «Уточнить юридический адрес Контрагента», «Отправить счет на оплату по почте» и «Ожидать оплату». Для заполнения параметров создаваемой активности «Читаю данные» из записи созданного Счёта, в том числе, в поле «Ответственный» создаваемых Активностей ставлю значение поля «Ответственный» из записи Счёта.

В реальной жизни, пока пользователь выполнял задачу, ответственный сотрудник по Счёту мог поменяться (уволился, перевёлся и т.д.). Логично, что при формировании следующей задачи следует в поле «Ответственный» поставить новое значение из Счёта. Однако для этого необходимо заново прочитать запись «Счёт» с помощью элемента «Читать данные». Таким образом, поскольку мы не знаем, когда будут изменены данные в Счёте, приходится перед каждым элементом задачи ставить элемент «Читать данные» и ориентироваться на него при создании новой Активности.

Хотела бы обсудить, какие еще варианты решения этого кейса есть. Напрашивается вытащить однотипные действия (в нашем случае – «Читать данные» Счёта) в отдельный событийный подпроцесс, но что бы я не делала, я не смогла запустить его более одного раза либо без ошибок.

Нравится

2 комментария

Проще всего именно так и делать - три раза читать данные. Просто и надежно.

Добрый день! 

Оптимальнее всего это будет сделать посредством бизнес-кейсов:

Это позволит уйти от бизнес-процессов, длительных загрузок при сохранении и необходимости обновлять страницу. 

Также это избавит от необходимости создавать множество чтений данных.

Удачи!

Показать все комментарии

Коллеги, добрый день!

Ранее в сообществе несколько раз поднимались темы использования элемента "Чтение данных" для получения "результирующей коллекции", чтобы в последствии её использовать в элементе "Задание-сценарий" для различных нужд. В версии 7.8 осталось только режимы: "читать первую запись", "считать количество записей" и "считать функцию".

Каким образом в данной версии можно получить Результирующую коллекцию? И каким образом можно к ней обратиться в элементе "Задание-сценарий"?

Заранее спасибо!

Нравится

2 комментария

Добрый день!

Пример обработки коллекции из чтения данных в ScriptTask:

EntityCollection entities = Get<EntityCollection>("ReadDataUserTask1.ResultEntityCollection");

var result = new Collection<string>();

foreach(Entity entity in entities) {

    

    var cityName = entity.GetTypedColumnValue<string>("Name");

    string temp = cityName.ToString();

    result.Add(temp);

    }

string displayValue = result.ConcatIfNotEmpty(",");

Set("MyResult", displayValue);

return true;

* MyResult - параметр процесса с типом Строка неограниченной длины

* ReadDataUserTask1 - название элемента Чтения данных

 

Олег, Спасибо!

Показать все комментарии

Добрый день!

На карточке контакта через элемент "Добавить связанную активность" (флажок) переходи в новую Активность. Посредством мастера раздела Активности создано поле "Контакт". Стоит задача, - как с помощью БП прочесть ФИО контакта из карточки Контакта после перехода в связанную Активность. Где-то то в элементе БП "Чтение данных" делаю ошибку, данные не читаются.
Заранее благодарен за помощь от Сообщества!

Нравится

21 комментарий

Добрый день Сергей!!!

немного не понял зачем на Карточку редактирования Активности добавлять поле Контакт, ведь данное поле там уже есть, в виде Автора, Ответственного (как пример). Отвечая на ваш вопрос вопросом: Прочитать ФИО контакта требуется уже в существующем или новом создаваемом бизнес процессе я правильно вас понял? если так то для начало в бизнес-процессе через "Чтение данных" требуется прочитать Активность (задачу) которая передана в бизнес-процесс в виде параметра или прочитана из базы данных по разным условиям. И вот после чтения уже можно получить ФИО контакта, внутри процесса. Получить ФИО можно и присвоить Параметру бизнес-процесса с помощью инструмента "Формула". Можно другим способом. Все зависит от задачи.

Здравствуйте!

Поле "Контакт" доступно в блоке полей "Связи". Данные из этих полей переносятся в связанную активность.

Михаил, добрый день!

Речь идет о новом БП. Активность прочитал, через элемент "И" читаю данные Контакта. Затем из данных Контакта записываю на странице активности в новое поле данные КОНТАКТ-ФИО. И БП не отрабатывает. Поле "Ответственный" конечно есть, но нужно именно ФИО Контакта с которого переходим в связанную активность. Задача стоит чтобы новое поле ФИО контакта на странице Активности также автоматом заполнялось, как и поле Ответственный. Можно после сохранения Активности, а в идеале, чтобы поле авто заполнялось при переходе на страницу связанной с контактом активности, также, как авто заполняется поле Ответственный.

"Демьяник Алексей" написал:

Здравствуйте!

Поле "Контакт" доступно в блоке полей "Связи". Данные из этих полей переносятся в связанную активность.


Блок "Связи" немного не подходит, так как в мастере раздела создана новая страница активности, куда и требуется авто заполнить поля Контакт+Контрагент

"Дудченко Сергей" написал:

Блок "Связи" немного не подходит, так как в мастере раздела создана новая страница активности, куда и требуется авто заполнить поля Контакт+Контрагент

Предоставьте, пожалуйста, текущие настройки процесса (интересует элемент "Чтение данных" по объекту "Контакт" и элемент, в котором используются параметры из чтения данных)

Добрый день!

Ещё раз о задаче с картинками. На стандартной странице Контакта, Активность, в которую автоматом подтягиваются данные о Контакте и Контрагенте, находится в разделе "История"

Однако, есть желание разместить один из элементов детали "Активности" в элементе "Добавить связанную Активность" (пиктограмма - флаг) над главным окном основной информации.

Элемент с названием Активности - "МФП" размещён, а автозаполнение не работает.
Есть версия, что не передаётся ID

Здравствуйте, Сергей!

Функционал связанных активностей переносит значение полей из детали "Связи". Данная деталь есть в объектах:
- Продажа
- Заказ
- Счет
- Активность

В разделе "Контакт" данной детали нет, поэтому созданной активности нет в истории контакта.

"Дудченко Сергей" написал:Ещё раз о задаче с картинками. На стандартной странице Контакта, Активность, в которую автоматом подтягиваются данные о Контакте и Контрагенте, находится в разделе "История"

Добрый день Сергей!!!

вы изначально на скриншоте обозначили уже доработанную страницу редактирования Контакты, где у вас добавлена возможность добавление "Связанных активностей". Поумолчанию на странице редактирования Контакты такой функциональности нет. Алексей в предыдущем посте правильно подметил, что данные детали есть в схемах:
- Продажа
- Заказ
- Счет
- Активность

Вам требуется по образу и подобию создать данную деталь на странице редактирования Контакты. Если будут вот уже сложности по созданию данной детали, прошу писать в данном Инциденте.

А на будущее просьба Сергей более подробно описывать суть самого Инцидента. Чтобы получить правильный и развернутый ответ, по возможности с примерами. Спасибо!!!

На странице редактирования Контакты деталь Активность появилась после обращения в техподдержку. Правильно ли я понял, если во вновь появившейся детали связанной активности нет связи с контактом и контрагентом (нет авто заполнения полей), необходимо оформить обращение в техподдержку?

Сергей подскажите у вас конфигурация On-Site или On-Demand?

"Власов Михаил Викторович" написал:

Сергей подскажите у вас конфигурация On-Site или On-Demand?


On-Demand

Если доработку вы ведете сами, то еще раз повторюсь "Вам требуется по образу и подобию создать данную деталь Связанные активности, на странице редактирования Контакты.", если доработку ведет Техническая поддержка компании Террасофт, тогда вам требуется обратиться с данным вопросом в Техническую поддержку компании Террасофт

"Власов Михаил Викторович" написал:Если доработку вы ведете сами, то еще раз повторюсь "Вам требуется по образу и подобию создать данную деталь Связанные активности, на странице редактирования Контакты."

Извините, за некоторый простой во времени! В прошлый раз, удалось обойти затронутый вопрос. Сейчас вновь пытаюсь решить задачу. Можете ли чуть подробнее по цитате выше? Среди всех доступных деталей, детали "Связанные активности" не нахожу

Здравствуйте, Сергей!

В текущей реализации приложения уже есть возможность добавлять связанную активность из страницы контакта или контрагента. Это можно сделать на Actions Dashboard с помощью соответвующей кнопки.
http://www.community.terrasoft.ru/system/files/image.png

Руслан, добрый день!

Предложенная реализация связанной активности известна. К сожалению, такой вариант не подходит, так как по клику на флажок открывается многофункциональная форма Активности без возможности промежуточного выбора типа активности. Т.е., если я создам пользовательскую активность, то её всё-равно не увижу.

Сергей, здравствуйте!

Предлагаю не изобретать велосипед и не придумывать как доделать логику создания связанных записей.
Если проблема только в поле "Тип", тогда проще всего добавить это поле на миникарточку активности.

  1. Что нужно?

Заместить ActivityMiniPage

  1. Какой код добавить?
define("ActivityMiniPage", ["BusinessRuleModule"], function(BusinessRuleModule) {
	return {
		entitySchemaName: "Activity",
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "Type",
				"parentName": "EditGeneralInfoContainer",
				"propertyName": "items",
				"values": {
					"contentType": this.Terrasoft.ContentType.ENUM,
					"controlConfig": {
						"placeholder": {
							"bindTo": "Resources.Strings.ActivityTypePlaceholder"
						}
					}
				}
			}
			]/**SCHEMA_DIFF*/,
		rules: {}
	};
});
  1. Поле не отображается

Нужно почистить кеш браузера.

Алексей, добрый день!

Предложенный код добавил. При сохранении, - ошибки. Буду признателен за подсказку по устранению ошибок.

Здравствуйте!

При сохранении проверяется только синтаксис. Проверить корректность работы кода можно только, создавая новую запись активности.

По клику на флажок миникарточка не открывается. Запускается прежняя страница универсальной активности. Кэш чистил, страницу обновлял

Здравствуйте.

Скорей всего у Вас отключены миникарточки для Активностей. Вам стоит смотреть в сторону изменения системной настройки "Использовать миникарточку добавления активности".

"Мотков Илья" написал:

Здравствуйте.

Скорей всего у Вас отключены миникарточки для Активностей. Вам стоит смотреть в сторону изменения системной настройки "Использовать миникарточку добавления активности".

Да, так и было. Спасибо!

Показать все комментарии

Коллеги, приветствую.

Есть некоторый элемент- действие "Чтение данных", который считывает записи из таблицы и помещает в некоторую результирующую коллекцию ResultEntityCollection.

Как обратиться к этой коллекции из кода C# в действии "Задание- сценарий"?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

5 комментариев

Алексей,

В новом движке процессов работать можно только с параметрами процесса, либо напрямую с параметрами элементов, на которые настроен маппинг.
Пример решения задачи во вложении.
scripttaskmapping.txt

Олег, спасибо большое за ответ! Посмотрю сегодня.

Олег, не могли бы Вы выложить пример в UTF-8? Был бы весьма признателен.

Здравствуйте!

Согласно этому сайту, мой коллега хотел написать следующее:
1. Создать параметр процесса типа Строка - TestParam.
2. В значение параметра указать [#Read data 1.First item of resulting collection#].GetTypedColumnValue("Name")
3. В элементе Задание-сценарий работать с параметром.
var contactFullName = Get("TestParam");

Отлично, спасибо большое за ответ!

Показать все комментарии

Добрый день,
Использую стандартный элемент БП Чтение данных, нужно выбрать звонки из Активностей, в которых начало меньше или равно текущей дате/времени, ставлю такое условие, но вытягиваются звонки у которых значение больше текущей даты/времени. Собственно вопрос в чем проблема, стандартный элемент не умеет сравнивать DateTime?
Причем дату сравнивает нормально, а вот по времени сравнение не идет.
1

Нравится

3 комментария

Здравствуйте!

Элемент "Читать данные" умеет это делать. Проблема в другом:biggrin:

Поле "Ответственный" смотрит в [dbo].[Contact]. Значение "Текущий пользователь" берется из [dbo].[SysAdminUnit]. Поле "Ответственный" необходимо сравнивать со значением "Контакт текущего пользователя".

С этим фильтром хоть какие-то активности подтягиваются?

Как ни странно но подтягиваются по контакту текущего пользователя, так что с этим проблем нет, проблема только с датой

Здравствуйте!

Правильно ли я понимаю, что "Текущее значение даты времени" - это параметр процесса? Каким значением заполняется этот параметр?

Показать все комментарии

Добрый день,
Подскажите как работать с результирующей коллекцией элемента "Чтение данных" в БП.
Необходимо создать задачу на всех контактов с должностью "Менеджер" - добавляю чтение данных ставлю условие "Должность" равно "Менеджер", дальше добавляю элемент "Задача" и пытаюсь выбрать туда "Результирующая коллекция", но она недоступна. Возможно ли как то организовать цикл в БП чтобы создать задачи для всех элементов выборки?
Или еще случай, необходимо в БП предать при запуске сразу несколько идентификаторов записей и для них создавать задачи, опять же как сделать цикл чтобы пройтись по всем идентификаторам или единственный вариант - запускать отдельный БП для каждого идентификатора?
Заранее спасибо.

Нравится

7 комментариев

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.

Здравствуйте, Олег!

Действительно, оптимальным вариантом является запускать отдельный экземпляр процесса для каждой записи.

Но если Вы все же хотите реализовать в рамках одного экземпляра процесса, то Вы можете это сделать в помощью цикла, пробежавшись по всем элементам результирующей коллекции. Для этого необходимо добавить элемент процесса Задание-Сценарий и в коде реализовать цикл foreach.

Спасибо Андрей, уже разобрался, не знал как обращаться к результирующей коллекции

Добрый день,
Чтоб не создавать новую тему спрошу тут:
Неверно срабатывает стандартный элемент БП "Страница редактирования", а точнее нужная страница открывается, но поля установленные по умолчанию подтягиваются не все:
1
Дополнительно созданное поле (Контакт физ.лицо) не заполняется из стандартного поля Лида (Квалифицирован как контакт), хотя оно заполнено:
2
В чем может быть проблема, как исправить? Пробовал перекомпилировать и задавать это поле просто через элемент "Изменение данных" результат тот же - поле не заполняется

Добрый день, Олег!

Проверьте правильно ли создано данное поле. "Квалифицирован как контакт" отображает информацию о том, с каким контактом при квалификации был связан лид. Поле не отображается на странице лида, но может быть отображено в реестре.
А значение "Квалифицирован как контрагент" передаются?

Добрый день, Дмитрий,
Поле создано верно, вставить туда значение вручную из карточки возможно, как обычно для LOOKUP поля открывается модальное окно где можно выбрать необходимого контакта /контрагента, затем успешно сохранить.
Поле квалифицирован как контрагент также не передается, в чем может быть причина?

Team версия 7.4.0.2628

Разобрался, проблема по моей вине, Читал данные Лида раньше чем у него появлялось это поле :exclaim:

Показать все комментарии

Добрый день!
Столкнулся с такой проблемой:
В элементе чтение данных процесса необходимо выбрать последнюю запись по дате(Дата окончания подписки).
Эксперименты с галкой "читать первые при указанной сортировке" и указание различных порядков по сортировке показали, что результат независимо от настроек всегда такой же как и без сортировки.
Вопрос: как все таки установить сортировку по убыванию?
Версия 7.2.0.942

Нравится

2 комментария

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу

Здравствуйте, Иван.
Данная проблема действительно присутствует в данной сборке. Ошибка исправлена в более старших версиях приложения. Для исправления ошибки в Вашей версии приложения Вам необходимо в разделе "Конфигурация" открыть метаданные, вкладку "Пакет разницы" схемы "ReadDataUserTask" и вставить в нее код вложенного документа readdatausertask.txt затем выполнить сохранение метаданных и компиляцую измененного.

Показать все комментарии