Добрый день!

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

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

Таких процессов у нас много, НО мы хотим избавится от передачи исключений в родительские процессы. 

В случае ошибки, нам бы хотелось перевести процесс в состояние Canceled, чтобы иметь статистику ошибок.

Подскажите пожалуйста есть ли корректный способ завершения процесса в случае выбрасывания исключений, чтобы он перешел в статус Canceled?

Нравится

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

Добрый день!

Попробуйте использовать return false; в скрипте.

Еще, как вариант, помечать как нибудь эти процессы (можно в другой таблице) и сделать периодический процесс, который будет отменять/завершать данные процессы

Как вариант добавить параметр процесса в скриптаске его менять и после скриптаска поставить элемент исключающее или с  условным потоком на выход (если условие в скриптаске установленно)

Или вызвать 

var proc = userConnection.ProcessEngine.FindProcessByUId(context.Process.InstanceUId);

 proc.CancelExecution();

Второй вариант нужно протестировать так как я никогда не завершал таким образом процесс из самого себя

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

Задача в общем типовая - есть продаваемые услуги и товары, которые нужны при оказании услуги (по сути еще и склад).

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

Напрямую, сделать реестр продуктов в разделе Продукт не получается. 

Какой типовой подход может быть, наверняка задача распространенная у многих? Не хочется велосипед придумывать;

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

Нравится

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

Ну подходов может быть несколько как вариант в объект продукт добавить признак является услуга (булевый) и вывести в реестре этот признак. Добавить деталь с добавлением из справочника "продукты в услуге" по которой добавлять к продукту (у которого является услугой = true) продукты (у которого является услугой = false)

Эту же деталь вывести на страницу редактирования продукта.

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

При этом счет или заказ формировать по продуктам которые и является услугами, при этом формирование счета/заказа не придется переделывать!

Ну подходов может быть несколько как вариант в объект продукт добавить признак является услуга (булевый) и вывести в реестре этот признак. Добавить деталь с добавлением из справочника "продукты в услуге" по которой добавлять к продукту (у которого является услугой = true) продукты (у которого является услугой = false)

Эту же деталь вывести на страницу редактирования продукта.

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

При этом счет или заказ формировать по продуктам которые и является услугами, при этом формирование счета/заказа не придется переделывать!

Спасибо, так и буду делать. Подскажите, а как в счете делается расчет цены на основе выбранных продуктов? Это БП какой-то? Хотелось бы посмотреть пример. Если самому делать бизнес процесс - его привязывать к детали (те при добавлении позиции в детали запускать процессс пересчета) или как-то под другому лучше реализовать? Не хотелось бы на грабли наступать))

 

 

SERGEY PIMINOV,

Нужно что-то вроде такого кода писать (ниже) или можно как-то визуально процесс сделать для расчета суммы итоговой по суммам из детали? 

 

UpdateInvoiceAmount(UserConnection);

 

/*var entitySchemaManager = this.UserConnection.GetSchemaManager("EntitySchemaManager") as EntitySchemaManager;

EntitySchemaQuery invoiceProductEntitySchemaQuery = new EntitySchemaQuery(entitySchemaManager, "InvoiceProduct");

var invoiceIdColumn = invoiceProductEntitySchemaQuery.AddColumn("Invoice");

var primaryAmountColumn = invoiceProductEntitySchemaQuery.AddColumn(invoiceProductEntitySchemaQuery.CreateAggregationFunction(AggregationTypeStrict.Sum, "PrimaryTotalAmount"));

var amountColumn = invoiceProductEntitySchemaQuery.AddColumn(invoiceProductEntitySchemaQuery.CreateAggregationFunction(AggregationTypeStrict.Sum, "TotalAmount"));

var filters = invoiceProductEntitySchemaQuery.Filters;

var invoiceId = this.Entity.GetTypedColumnValue<Guid>("InvoiceId");

filters.Add(invoiceProductEntitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Invoice", invoiceId));

var entityCollection = invoiceProductEntitySchemaQuery.GetEntityCollection(this.UserConnection);

var invoice = new Invoice(this.UserConnection);

invoice.FetchFromDB(invoiceId);

decimal PrimarySumTotalAmount = 0;

decimal SumTotalAmount = 0;

var discountPercent = invoice.GetTypedColumnValue<decimal>("DiscountPercent");

decimal totalAmount = 0;

decimal PrimaryTotalAmount = 0;

decimal discountAmount = 0;

if (entityCollection.Count > 0) {

PrimarySumTotalAmount = entityCollection[0].GetTypedColumnValue<decimal>(primaryAmountColumn.Name);

SumTotalAmount = entityCollection[0].GetTypedColumnValue<decimal>(amountColumn.Name);

totalAmount = SumTotalAmount;

PrimaryTotalAmount = PrimarySumTotalAmount;

discountAmount = invoice.GetTypedColumnValue<decimal>("DiscountAmount");

if (discountPercent != 0) {

discountAmount = Multiply(Division(SumTotalAmount, 100), discountPercent);

totalAmount = SumTotalAmount - Multiply(Division(SumTotalAmount, 100), discountPercent);

PrimaryTotalAmount = PrimarySumTotalAmount - Multiply(Division(PrimarySumTotalAmount, 100), discountPercent);

} else {

if (discountAmount != 0) {

totalAmount = SumTotalAmount - discountAmount;

discountPercent = Division(Multiply(discountAmount, 100), SumTotalAmount);

PrimaryTotalAmount = PrimarySumTotalAmount - Multiply(Division(PrimarySumTotalAmount, 100), discountPercent);

}

}

}

var update = new Update(context.UserConnection, "Invoice")

.Set("PrimaryAmount",Column.Parameter(PrimarySumTotalAmount))

.Set("Amount",Column.Parameter(SumTotalAmount))

.Set("DiscountAmount",Column.Parameter(discountAmount))

.Set("DiscountPercent",Column.Parameter(discountPercent))

.Set("TotalAmount",Column.Parameter(totalAmount))

.Set("PrimaryTotalAmount",Column.Parameter(PrimaryTotalAmount))

.Where("Id").IsEqual(Column.Parameter(invoiceId)) as Update;

update.Execute();*/

return true;

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

Коллеги, как настроить раздел Лиды таким образом, что бы при создании нового лида, после сохранения или изменения стадии в лиде, карточка не закрывалась. Спасибо

Нравится

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

У вас карточка открывается из БП? Нужно продебажится и проверить заходит ли в блок 

this.onCloseCardButtonClick();
Если сохранение идет в миникарточке и вам нужно чтобы она не закрывалась этот подход вам не подойдет

Заместите страницу редактирования лида и переопределите метод сохранения, как то так:

onSaved: function() {
		this._stopPerformanceAnalyzer();
		this.callParent(arguments);
		var response = arguments[0];
		this.hideBodyMask();
		if (!response.success) {
				return;
		}
		if (!this.get("NextPrcElReady")) {
			if (this.get("ProcessCardSavedArgument")) {
				this.onCloseCardButtonClick();
			}
		} else {
			if (!this.isNewMode()) {
				this.set("PrimaryColumnValue", this.get("Id"));
				//this.reloadEntity();				
			}
		}
	}
},
 
onCloseCardButtonClick: function() {
	this.hideBodyMask();
	this.callParent(arguments);
},

 

Григорий, огромная просьба раскрыть метод сохранения не покидая записи. Описанный вами код не сработал(

У меня лиды создаются не из карточки, а из миникарточки, которая закрывается, но при изменении стадии карточка остаётся открытой. Возможно, у Вас есть какие-то доработки или изменения настроек по сравнению со стандартной системой.

У вас карточка открывается из БП? Нужно продебажится и проверить заходит ли в блок 

this.onCloseCardButtonClick();
Если сохранение идет в миникарточке и вам нужно чтобы она не закрывалась этот подход вам не подойдет
Показать все комментарии

Изображение удалено.

О компании

Компания EQUIP GROUP специализируется на обслуживании оптовых покупателей. Она предлагает профессиональное оборудование для оснащения предприятий общественного питания, столовых, кафе, баров, ресторанов, объектов fast-food, объектов торговли, прачечных и химчисток.

Дилерская сеть насчитывает более 600 компаний-дилеров. География сети охватывает всю территорию Европейского союза. Ежегодно дилерская сеть EQUIP GROUP увеличивается, что говорит о серьезном интересе клиентов к продукции компании.

 

Предпосылки внедрения bpm’online:

1. Предыдущая CRM-система не покрывала в должном качестве задачи компании.

2. Необходимость консолидации информации в единой системе. Ранее сотрудники отдела продаж работали в удобном для себя формате без четко построенных процессов, поэтому данные хранилась в разрозненном виде.

3. Возможность строить эффективные маркетинговые активности для удержания и развития существующих клиентов и для привлечения новых клиентов.  

 

Для достижения этих целей были выбраны вертикальные продукты bpm’online — sales и marketing.  

 

Основные задачи внедрения bpm’onlineуправление процессами взаимодействия с клиентами и автоматизация процессов оформления заказов с возможностью резервации продукции на складах в разных странах, а также управление маркетинговыми мероприятиями.

 

Выполненные настройки

В рамках отдельного проекта реализована синхронизация разделов bpm’online «Продукты», «Заказы», «Счета», «Контакты» и «Контрагенты» с сайтом клиента, благодаря чему информация с сайта автоматически попадает в систему. Это позволяет дилерам самостоятельно формировать заказы и счета на сайте, которые затем автоматически формируются в CRM-системе. Такой подход существенно сокращает трудовые затраты клиента, развивает клиентоориентированность, а также увеличивает лояльность.

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

 

Согласно процессу работы, сотрудникам отдела продаж необходимо иметь возможность создать лид из входящего письма. С целью решения этой задачи в приложение клиента был установлен темплейт Автоматическое создание лида по входящему письму. Темплейт – готовое решение, которое позволяет выполнить задачу клиента, применив заранее реализованную настройку необходимого алгоритма.

 

Далее по процессу обработки лида bpm’online автоматически создает активности. После подтверждения потребности клиента в нашей продукции bpm’online автоматически создает Контакт.

 

Когда контакт готов к совершению покупки, в системе оформляется заказ. В зависимости от выбранной страны Европейского союза в заказе система подсчитывает актуальную сумму налога. Чтобы оптимизировать сроки доставки продукции для клиента, при оформлении заказа необходимо выбрать склад, с которого будет выполняться доставка товара. В связи с этим есть необходимость отслеживать остатки товаров на складах. Для решения этой задачи команда внедрения воспользовалась готовым решением с площадки marketplace Актуализация остатков по продуктам. Данный темплейт был дополнен необходимой логикой. Реализована возможность расчёта остатков продуктов в зависимости от того, на каком складе они находятся.

 

Для управления маркетинговыми активностями настроен и успешно используется базовый функционал bpm’online marketing. Все контакты сгруппированы по определённым признакам и сегментированы в динамические группы. При появлении контакта, который соответствует условиям определённой группы, он автоматически в неё попадает. Это позволяет запускать целевые рассылки клиентам в интерфейсе bpm’online marketing, в которых клиенты уведомляются о новинках и потенциально интересных товарах.

 

Результат

В результате внедрения bpm’online EQUIP GROUP получила возможность использовать инструменты продаж и маркетинга в единой IT-экосистеме, что решает проблему объединения результатов работы из разных систем. Работа в единой системе улучшила коммуникацию между сотрудниками компании.

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

Нравится

Поделиться

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

Забиндил обязательность поля "Название" под функцию isEditMode(), поле визуально выглядит будто оно обязательное, но я могу легко удалить название и сохранить запись... Кто-нибудь подскажет почему так происходит?

Изображение удалено.

 

 

 

 

 

 

 

 

 

 

Изображение удалено.

Нравится

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

Чтобы проверка на обязательность работала, создайте атрибут для этого поля и укажите для него свойство "IsRequired", а из свойств поля уберите.

Но с таким подходом также есть проблемы, которые в последних версиях так и не решены - посмотрите этот пост.

Скорее всего Вашу задачу нужно решать через валидацию.

Чтобы проверка на обязательность работала, создайте атрибут для этого поля и укажите для него свойство "IsRequired", а из свойств поля уберите.

Но с таким подходом также есть проблемы, которые в последних версиях так и не решены - посмотрите этот пост.

Скорее всего Вашу задачу нужно решать через валидацию.

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

действительно, большое спасибо, помогло.

Alex Zaslavsky,

Обязательно посмотрите пост с описанием возможных проблем при такой реализации.

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

спасибо, обязательно.

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

Нашел публикацию, где описывается создание модального окна - здесь. Но теперь нужно разобраться как в это модальное окно "прикрутить" справочное поле с выбором Контрагента, допустим. Кто-нибудь может помочь с этим?

Нравится

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

Охота вам велосипед изобретать? Уже есть готовые механизм (openLookup) для вызова модального диалога выбора из справочника, пример ниже

addCallBack: function(args) {
      // Коллекция выбранных в справочнике документов.
      this.selectedRows = args.selectedRows.getItems();
      this.selectedRows.forEach(function(item) {
           //item.OrderId = OrderId;
       }
},
 
 
 
 
var config = {
    // Название схемы объекта, записи которого будут отображены в справочнике.
    entitySchemaName: "Document",
    // Возможность множественного выбора.
    multiSelect: true,
    // Колонки, которые будут использованы в справочнике, например, для сортировки.
     columns: ["Number", "Date", "Type"]
};
this.openLookup(config, this.addCallBack, this);

 

Охота вам велосипед изобретать? Уже есть готовые механизм (openLookup) для вызова модального диалога выбора из справочника, пример ниже

addCallBack: function(args) {
      // Коллекция выбранных в справочнике документов.
      this.selectedRows = args.selectedRows.getItems();
      this.selectedRows.forEach(function(item) {
           //item.OrderId = OrderId;
       }
},
 
 
 
 
var config = {
    // Название схемы объекта, записи которого будут отображены в справочнике.
    entitySchemaName: "Document",
    // Возможность множественного выбора.
    multiSelect: true,
    // Колонки, которые будут использованы в справочнике, например, для сортировки.
     columns: ["Number", "Date", "Type"]
};
this.openLookup(config, this.addCallBack, this);

 

Больше спасибо, Григорий. Это покроет большинство моих проблем, когда не всплывает автогенерируемая страница. Может еще есть готовый механизм, который позволит мне открыть окно с несколькими справочными полями?) Или все-таки придется изобрести велосипед)

Да, этот механизм называется «автогенерируемая страница». Если она не всплывает, то этот процесс по различным причинам запущен в фоне или переведен в фон.

А с открытием модального окна, а потом из него второго модального окна выбора из справочника могут быть проблемы.

Зверев Александр,

Спасибо за ссылку на тему с примерами, попробуем.

Вот ещё ссылка с примерами работы с модальным окном: Фильтрация справочного поля в модальном окне.

Зверев Александр,

Благодарю!

Еще один небольшой вопрос. Можно ли в открывшемся лукапе изменить Caption? Вместо "Выбор: Документ" вписать какую-то небольшую подскаку по действиям для пользователя? Я пробовал в config вызываемого лукапа добавить caption, но увы, не сработало)

Логика формирования этого текста реализована функцией initCaptionLookup в LookupPageViewModelGenerator.

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

Изображение удалено.

О компании

Компания «Ирбис Моторс» является производителем мототехники. 

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

Предпосылки внедрения

Ранее сотрудники компании «Ирбис Моторс» фиксировали всю полезную информацию о взаимодействии с клиентом в индивидуальных таблицах, которая находилась в учетной системе 1С и личном кабинете клиента (web-площадка b2b для дилеров). Такая ситуация значительно усложняла возможность оперативно проанализировать работу как отдельного сотрудника, так и отдела в целом. Более того, при увольнении сотрудника продолжать работу в его «файле» очень сложно, так как каждый менеджер работал со своими клиентами в удобном для него формате. Важная информация о клиенте могла потеряться.

Для объединения информации в единой системе и автоматизации процессов была выбрана bpm’online.  

 

Основная задача внедрения bpm’onlineуправление процессами взаимодействия с клиентами. В рамках этой задачи необходимо организовать процессы по удержанию и развитию существующих клиентов, а также проведение маркетинговых активностей, направленных на привлечения новых клиентов.

 

Выполненные настройки

Первым шагом в адаптации системы стало определение требований к карточкам основных разделов. Далее на страницы разделов [Лиды], [Контакты], [Контрагенты], [Заказы] и [Продукты] через мастер раздела добавлены необходимые поля и справочники. Так, например, на страницу продукта добавлены такие поля: Марка и Тип транспортного средства, Технические характеристики и др.

 

Следующий шаг — приведение данных клиентской базе к единому представлению, после чего информация была импортирована в bpm’online. Важно отметить, что предыдущие заказы и активности также были импортированы, что позволило менеджерам иметь историю взаимодействия с клиентами для ведения работы в системе. После этого был настроен обмен данными, при котором заказы из учетной системы попадали в CRM и обратно в учетную систему. Это позволило централизировать процесс управления заказами.

 

Далее рассмотрим сам процесс работы и выполненные настройки. Так как в системе уже есть контакты и контрагенты, дополнительно был установлен темплейт Авоматического создания активностей по неактивным контрагентам. Это ускорило выполнение настроек, так как решение содержит готовый для работы бизнес-процесс.

 

Один из процессов работы менеджеров — это создание лидов из уже существующих Контактов/Контрагентов в случае выявления потребности. Второй алгоритм работы состоит из проработки новых потенциальных клиентов. Такие лиды формируются автоматически. Для автоматического создания лидов и регистрации их в системе был настроен лендинг, благодаря которому данные из регистрационной формы на сайте компании автоматически попадают в bpm’online. После получения и обработки информации о потребности   менеджер в один клик создает Контакт и Контрагент и система автоматически устанавливает взаимосвязи.

 

После стандартных коммуникаций с клиентом, в рамках лида, менеджер принимает решение о создании заказа или оставляет клиента на этапе «Взращивание», в крайних случаях — дисквалифицирует лид. Под взращиванием клиента подразумеваются периодические коммуникации с клиентом (телефонные звонки, личные встречи) с целью расположить его к продуктам компании. Кроме этого, контакты, у которых есть лиды на стадии «Взращивание», попадают в аудиторию e-mail рассылок, где происходит оповещение клиентов о специальных предложениях.

 

После оформления заказа и выполнения обязательных шагов менеджер выставляет счет. Оплата ожидается в учетной системе, которую используют в компании, после чего информация отображается в bpm’online. Важно отметить, что синхронизация учётной системы с bpmonline произведена в рамках отдельных доработок силами разработчиков компании.

 

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

 

Результат

В результате внедрения bpm’online компания «Ирбис Моторс» получила систему автоматизации процессов взаимодействия с клиентом, в которой можно вести прозрачную работу с клиентом, следить за историей взаимодействия, автоматизировать процессы выполнения заказов и составлять аналитику по ключевым показателям работы менеджеров и отдела в целом. Наличие единого центр коммуникации с клиентами (телефон, электронная почта, чат с площадкой b2b, социальные сети) позволяет сократить время на активности в других системах и уделять это время клиентам. Работа в bpmonline позволила повысить лояльность существующих клиентов к компании и улучшить процессы взаимодействия с новыми клиентами.

Нравится

Поделиться

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

Изображение удалено.

О компании

Сервис Dving.ru был основан в 2010 с целью помогать игрокам в прокачке аккаунтов, получении различных достижений в играх и осуществления продажи и покупки игровой валюты, а также консультаций по игре и просто ради веселья. 

 

Предпосылки внедрения bpm’online

До внедрения bpm’online сотрудники компании работали в CRM-системе, которая была разработана под определенные задачи клиента и не имела возможности изменения процессов   без партнёрских доработок. Клиент был заинтересован в гибкой системе с возможностью изменения своего бизнес-процесса, которая легко интегрируется с другими системами и дополнениями для возможности реагировать на потребности клиентов и на глобальные изменения в бизнес-процессах.

 

Основные задачи проекта:

  • автоматическое создание и обработка заявок в системе, на основании заказов на сайте клиента;
  • уведомление менеджеров о новом заказе с целью ускорения реакции на потребность клиента;
  • настройка аналитики, которая поможет отследить индивидуальную эффективность менеджеров и работу компании в целом;
  • организация мультиязычности взаимодействия с клиентом: компания Dving.net работает с клиентами по всему миру, поэтому важно отправлять уведомления заказчику на понятном языке с соответствующей валютой.

Для решения этих задач был выбран продукт bpm'online sales.

 

Выполненные настройки

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

 

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

На каждом этапе обработки лида и заказа, система создает активности для ответственного, где подсказывает следующий шаг, что даёт возможность выполнить все необходимые задачи ответственному, а его руководителю контролировать ход обработки заявки.

 

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

 

В системе, которая использовалась до внедрения bpm’online, не было возможности настраивать аналитические графики и показатели. В результате настройки дашбордов в bpm’online руководство имеет возможность увидеть количество обработанных заявок по ответственным, общую сумму выполненных заказов, затраченные средства на выполнение заявки (на подрядчиков) и сумму маржи, как общей, так и по каждому ответственному.

 

Результат

Внедрение bpm’online позволило организовать работу со всей клиентской базой в единой системе, где прописаны все шаги в работе с клиентом и настроены автоматические напоминания по задачам, что повысило качество обработки заказов клиентов. Также появилась возможность прозрачного контроля показателей эффективности работы менеджеров.

 

Нравится

Поделиться

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

Наш програмный продукт интегрирован с BpmOnline.



Для получения сущностей, мы используем ссылки:

Для лидов -  /0/ServiceModel/EntityDataService.svc/LeadCollection

Для контактов - /0/ServiceModel/EntityDataService.svc/ContactCollection



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

Как получить список обязательных полей и их типы по Контакту, Лиду? Можете отправить ссылку где описан такой сервис?



Спасибо

 

Нравится

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

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

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

getFullAddressFromVacancy: function (Id) {

                        var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {

                            rootSchemaName: "AccountAddress"

                        });

                        esq.addColumn("Id");

                        esq.addColumn("Address", "Address");

                        esq.addColumn("AccountAddress.SxSubwayStation.Name", "MetroName");

                        esq.addColumn("AccountAddress.City.Name", "CityName");

                        esq.filters.add("VacancyCandidateFilter222", this.Terrasoft.createColumnFilterWithParameter(

                            this.Terrasoft.ComparisonType.EQUAL,

                            "Id", Id));

                        esq.getEntityCollection(function (response) {

                            if (response.success && response.collection.getCount() == 1) {

                                var entity = response.collection.getByIndex(0);

                                var addr = entity.get("Address");

                                var city = entity.get("CityName");

                                var metro = entity.get("MetroName");

                                var add = '';

                                if (city != undefined && city != 'Москва')

                                  add += city + ', ';

                                if (metro != undefined)

                                  add += metro + ', ';

                                if (addr != undefined)

                                  add += addr;

                                this.log('Add = ' + add);

                                this.set("BpMetroAutoFill", add);

                            }

                        }, this);

                }

В консоли хрома вижу что столбцы, кроме Address пишутся isNotFound. 

Делал согласно https://academy.terrasoft.ru/documents/technic-sdk/7-8/poluchenie-rezul…

EntitySchemaQuery умеет довыгребать AccountAddress.SxSubwayStation.Name в таблице AccountAddress есть столбец SxSubwayStationId

Аналогично с City.

Что не так делаю, подскажите плиз?

Нравится

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

Прооосто ужас.

...rootSchemaName: "AccountAddress"... //запрос уже идёт в AccountAddress
...esq.addColumn("City.Name", "CityName");... // поэтому писать AccountAddress.City.Name не правильно
...esq.addColumn("SxSubwayStation.Name", "MetroName");.. //аналогично
...esq.filters.add("VacancyCandidateFilter222", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL,
"Id", Id));
esq.getEntityCollection()... //Есть метод esq.getEntity(id, callback, scope). Зачем зазря писать фильр по id, а потом фильтровать коллекцию?

 

Варфоломеев Данила,

Угу, в первый день "отношений с платформой" этим "правильным методом" не получилось (был другой запрос), надо будет попробовать еще раз. Ща пока не до эстетики, но к ней придем, исправил, работает, уже хорошо, спасибо! 

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