Добрый день, подскажите где искать алгоритм происходящий после нажатия на зеленую трубку в детали средства связи
http://goo.gl/It5cS1
необходимо добавить дополнительные параметры при создания звонка

Нравится

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

Нажатие на кнопку обрабатывается в CTIBaseCommunicationViewModel функцией onLinkClick: function()

Не нашел там такой функции, есть

/**
 * Совершает звонок по текущему номеру телефона.
 * @protected
 */
call: function() {
	var number = this.get("Number");
	var contact = this.get("Contact");
	var customerId = contact ? contact.value : this.get("Account").value;
	var entitySchemaName = contact ? "Contact" : "Account";
	this.sandbox.publish("CallCustomer", {
		number: number,
		customerId: customerId,
		entitySchemaName: entitySchemaName
	});
},

кто то может подсказать где принимается этот CallCustomer?

CallCustomer - в BaseCommunicationDetail

нашел только это в BaseCommunicationDetail

messages: {
	"CallCustomer": {
		mode: Terrasoft.MessageMode.PTP,
		direction: Terrasoft.MessageDirectionType.PUBLISH
	},
	"DoNotUseCommunication": {
		mode: Terrasoft.MessageMode.PTP,
		direction: Terrasoft.MessageDirectionType.PUBLISH
	}
},

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

Добрый день.
Если я правильно понял, речь идет о 7.4.0 (cti-панель находится слева).
Вы все верно нашли - отправляется сообщение "CallCustomer", c параметрами: номер, идентификатор абонента и название объекта (Контакт или Контрагент).

Обрабатывается сообщение в схеме CtiPanelPage, метод onCallCustomer:

/**
 * Обработчик события звонка клиенту.
 * @param numberInfo {Object} Информация о параметрах звонка.
 * @param numberInfo.number {String} Номер телефона клиента.
 * @param numberInfo.isConsultCall {Boolean} Консультационный звонок.
 * @param numberInfo.isCanvassCall {Boolean} Звонок по исходящей кампании.
 * @param numberInfo.customerId {String} Id записи клиента.
 * @param numberInfo.callCampaignId {String} Id исходящей кампании.
 * @param numberInfo.callCampaignTargetId {String} Id целевой аудитории исходящей кампании.
 * @param numberInfo.callActivityId {String} Id активности.
 * @private
 */
function onCallCustomer(numberInfo) {
	if (!Ext.isEmpty(ctiModel.get("CurrentCallNumber")) && !Ext.isEmpty(ctiModel.get("ConsultCallNumber"))) {
		return;
	}
	if (!Ext.isEmpty(ctiModel.get("CurrentCallNumber"))) {
		if (numberInfo.number === ctiModel.get("CurrentCallNumber")) {
			return;
		} else {
			numberInfo.isConsultCall = true;
		}
	}
	var customerId = numberInfo.customerId;
	if (!numberInfo.isConsultCall && Ext.isEmpty(ctiModel.get("CurrentCallNumber"))) {
		var callLaterControlContainer = Ext.getCmp("callLaterControlContainer");
		if (callLaterControlContainer.rendered && !callLaterControlContainer.el) {
			callLaterControlContainer.rendered = false;
		}
		ctiModel.set("isCanvassCall", numberInfo.isCanvassCall);
		ctiModel.set("callCampaignId", numberInfo.callCampaignId);
		ctiModel.set("callCampaignTargetId", numberInfo.callCampaignTargetId);
		ctiModel.set("callActivityId", numberInfo.callActivityId);
		caller = numberInfo.number;
		callerInfo = null;
		if (Terrasoft.isGUID(customerId)) {
			ctiModel.set("customerId", customerId);
		}
		ctiModel.dial(numberInfo.number);
	} else if (numberInfo.isConsultCall && Ext.isEmpty(ctiModel.get("ConsultCallNumber"))) {
		ctiModel.transfering();
		if (!ctiModel.set("isModalWindowOpened")) {
			ctiModel.showModalWindow();
		}
		if (Terrasoft.isGUID(customerId)) {
			ctiModel.set("consultCustomerId", customerId);
		}
		ctiModel.callConsultCustomer(numberInfo.number);
	}
}

Можете добавить дополнительные свойства в numberInfo и обработать их в расширенной схеме CtiPanelPage.

Добрый день, почти то что нужно, метод вызывается из детали CommunicationDetail, он отправляет сообщение CallCustomer, эту деталь добавили на страницу активности и вопрос собственно заключается в том как связать Актиность со звонком, в объекте Call есть поле ActivityId вот как туда передать Id активности из которой был сделан звонок, на каком этапе задаются параметры numberInfo не могу найти перекопал уже все файлы что мог заподозрить в связи со звонками

Олег, к сожалению на этапе совершения звонка, еще не существует записи в таблице Call. Она появится уже после того, как телефония отправит сообщение о начале звонка в cti-панель.
Вы можете сделать по аналогии с тем, как происходит сохранение ссылки на кампанию обзвона, а именно сохранить ссылку на ActivityId в модели в onCallCustomer, а затем записать собственно в объект звонка в методе updateCall схемы CtiPanelPage

updateCall: function(columnName, customerId) {
	// ...
	var activityId = ctiModel.get("activityId");
	if (activityId) {
		update.setParameterValue("Activity", activityId,
			Terrasoft.DataValueType.GUID);
		ctiModel.set("activityId", null);
	}
	update.execute();
},

Важно не забыть очистить значение в модели, т.к. метод срабатывает при сохранении всех звонков.

спасибо, это понял, но вот последний вопрос как передать параметр activityid в numberinfo и собственно на модель? в подписке на сообщение CallCustomer в CtiPanelPage есть

ctiModel.set("callActivityId", numberInfo.callActivityId);

откуда он берет айди активности?

Собственно мы его передаем, когда отправляем сообщение CallCustomer откуда-либо:
1. http://www.community.terrasoft.ru/forum/topic/12519#comment-53353

this.sandbox.publish("CallCustomer", {
		number: number,
		customerId: customerId,
		entitySchemaName: entitySchemaName,
// Передаем идентификатор активности
		callActivityId: <id активности>
});

2. Далее http://www.community.terrasoft.ru/forum/topic/12519#comment-53359

function onCallCustomer(numberInfo) {
	// ...
	// Это уже есть
	ctiModel.set("callActivityId", numberInfo.callActivityId);
	// ...
}

3. И наконец наш http://www.community.terrasoft.ru/forum/topic/12519#comment-53372

updateCall: function(columnName, customerId) {
        // ...
        var activityId = ctiModel.get("callActivityId");
        if (activityId) {
                update.setParameterValue("Activity", activityId,
                        Terrasoft.DataValueType.GUID);
                ctiModel.set("callActivityId", null);
        }
        update.execute();
},

Спасибо большое, а есть ли возможность перед публикации сообщений вытащить как то айди активности, объект this никаких связей с тем откуда от вызван в том моменте не содержит

Ну получение id активности уже зависит от того, как Вы реализовали деталь в карточке Активности.
Для контактов или контрагентов достаточно из модели взять атрибут "Contact" или "Account" соответственно. Могу предположить, что у Вас это какой-нибудь "Activity".

Артем, я не много не так выразился, наверное, в CTIBaseCommunicationViewModel.js мы собираем переменные для сообщения, вот как туда передать айди активности, к примеру там есть обращение к this но это обращение к объекту на детали

var number = this.get("Number");
var contact = this.get("Contact");

Олег, мы немного отошли от темы звонка и перешли к теме создания детали в карточке активности.
CTIBaseCommunicationViewModel - это view-модель средства связи, которая создается в NUI.BaseCommunicationDetail. Там же инициализируются атрибуты модели, такие как CommunicationTypes, DetailColumnName, PhoneCommunicationTypes. Вот где-то там Вам нужно также передать активность в качестве дополнительного атрибута, который затем читать в CTIBaseCommunicationViewModel.

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

В базовой версии приложения колонка "Полное название должности" заполняется, если заполнить поле "Должность". Т.е. срабатывает бизнес-правило.

Если у Вас стоит задача, например, чтобы поле "Полное название должности" автоматически не проставлялось при заполении поля "Должность" (Рис. 1)


Рис. 1

то для этого необходимо на замещающей странице «ContactPageV2» добавить следующий метод:

jobChanged: function() {
return false;

},

который отключает базовый метод jobChanged (отвечает за изменение данных полей).

Нравится

Поделиться

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

Здравствуйте!
Есть ли какие-то тонкости при переезде пакетом с 7.4 на 7.5?
На семинаре для разработчиков упоминалась инструкция, можно ли её получить?

Нравится

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

Здравствуйте, Александр!

Инструкция во вложении.

instrukciyapoobnovleniyusversii7.4.1na7.5.0.doc

Сергей, спасибо!
Если я верно понял инструкцию, то 7.5 накатывается поверх 7.4?

с процессами, которые были запущенные под 7.4, после обновления можно будет продолжать работать?

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

Добрый день! Пробовала обновиться способом, указанным в инструкции. Обновление прошло быстро, но при компиляции схем в системе возникло множество ошибок в базовых схемах (в основном, это были элементы бизнес-процессов).
Пришлось пойти обходным и более длинным путем:
1. Выгрузить пакеты с доработками из 7.4 и загрузить их в 7.5
2. Скомпилировать все
3. Выгрузить все пакеты из 7.5 и загрузить их в 7.4 с очисткой конфигурации
В результате все получилось скомпилировать без ошибок в базовых схемах.

С уважением,
Кочеванова Анастасия
Инженер-программист
ООО «Программные технологии»
Центр разработки и внедрения Terrasoft Поволжье

А есть ли возможность обновить 7.2 до 7.5?
И будут ли корректно работать при таком обновлении собственные доработки?

D.T., это будет сложный путь 7.2->7.3.->7.4->7.5. Начиная с 7.3 кардинально изменилась структура клиентских схем, эти доработки точно не будут работать, нужно будет переносить вручную.
БП и процессы объектов, скорее всего, будут работать.

"Кочеванова Анастасия Николаевна" написал:
Пришлось пойти обходным и более длинным путем:

1. Выгрузить пакеты с доработками из 7.4 и загрузить их в 7.5

2. Скомпилировать все

3. Выгрузить все пакеты из 7.5 и загрузить их в 7.4 с очисткой конфигурации

В результате все получилось скомпилировать без ошибок в базовых схемах.

Анастасия, интересный способ.
Спасибо что поделились.

"Вильшанский Дмитрий" написал:

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

Дмитрий, верно ответили.
Хотел подчеркнуть проблему перехода, так как версии отличаються схемами, что-то удалили, что-то добавили.
Потому, как я вижу, вероятность что с процессом можно будет продолжать работать после обновления небольшая.

К примеру, я так же обновлял систему с 7.4 к 7.5 то процесс (процесс работы с лидом, не коробочный) давал сбой, в ходе отлажывания понял что из-за того что у объекта Лид изменилась структура.

Добавлю пару нюансов о переезде:

1. Справочники и папки, привязанные к пакету переезжают некорректно
2. Невозможно добавить собственный справочник в определенную группу, а также перенести из одной группы в другую (в новом интерфейсе)
3. Изменено добавление/скрытие кнопок в действиях детали

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

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

Здравствуйте!
После переезда на 7.5 перестал синхронизироваться мобайл со следующей ошибкой:

Тип: Terrasoft.SyncException
Сообщение: В процессе синхронизации произошла ошибка 
 
Тип: Terrasoft.ODataSecurityException
Сообщение: Для схемы "SysModuleEntity" определено несколько одинаковых позиций по распределению прав по операциям Дополнительная информация: 
{"error":{"code":"5","message":{"lang":"","value":"Для схемы \"SysModuleEntity\"" определено несколько одинаковых позиций по распределению прав по операциям""}

Александр Сергеевич!

Нужно выполнить следующие действия в системе:

1. Раздать права на объекты мобильного приложения;
2. Актуализировать организационную структуру.

Выполнил данную операцию, не помогло.

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

В таком случае нужно проверять права доступа на список объектов в манифествх мобильного приложения: MobileApplicationManifestMobile;MobileApplicationManifestLead;MobileApplicationManifestOpportunity

Проверил, доступ на объекты есть. В чем ещё может быть проблема?

Для указанного объекта в выделенной детали было 2 записи, одну из которых нужно было удалить. Оставили права только для группы пользователей Mobile. Скриншот:

Спасибо, работает!

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

Добрый день!

Пытаюсь настроить фильтрацию поля типа "Справочник" с кодом "SellsSegment" в зависимости от значения другого поля типа "Справочник" с кодом "SellsBranch".

Настраиваю как показано тут http://www.training.terrasoft.ru/resources/video/1331

Что получилось:

rules: {
                "SellsSegment": {
                        FilterSegmentByBranch: {
                                ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
                                autocomplete: true,
                                baseAttributePatch: "SellsBranch",
                                comparisonType: Terrasoft.ComparisonType.EQUAL,
                                type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                                attribute: "SellsBranch"
                        }
                }
        },

В итоге при переходе на страницу добавления элемента она не отображается.

Консоль выдает следующую ошибку:
Uncaught TypeError: Cannot read property 'enums' of undefined

Почему свойство "enums" не удается прочитать? Может в версии 7.4 что то по другому?

Спасибо!

Нравится

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

С ошибкой "Uncaught TypeError: Cannot read property 'enums' of undefined" разобрался путем добавления в "define" элемента "BusinessRuleModule"

Теперь следующая ошибка:

Uncaught TypeError: Cannot read property 'EQUAL' of undefined

Тут я теряюсь, что может быть.

Попробуйте в define добавить еще и "Terrasoft"

"Александр Кудряшов" написал:

Попробуйте в define добавить еще и "Terrasoft"


Он добавлен. Но ничего не меняется, к сожалению.

Радион, используйте

this.Terrasoft.ComparisonType.EQUAL

вместо

Terrasoft.ComparisonType.EQUAL

Должно работать.

"Андрей Каспаревич" написал:

Радион, используйте

this.Terrasoft.ComparisonType.EQUAL

вместо

Terrasoft.ComparisonType.EQUAL

Должно работать.


Да, все верно. Дело именно в этом. Спасибо за помощь!

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

Добрый день!

Как добавить "зеленую" кнопку c именем "Начать работу с лидом" в разделе "Лиды" к уже существующим:
1

И самое главное, как сделать так, чтобы при клике на нее запустился определенный бизнес процесс, скажем "LeadProcess" ?

С системой работаю еще мало, поэтому если можно больше подробностей. Буду очень благодарен.

Спасибо!

Нравится

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

Запуск БП по кнопке:
http://www.community.terrasoft.ru/forum/topic/10554#comment-47944

Добавление кнопки в активную строку (на примере кнопки позвонить водителю в кастомном разделе):

define("SfEvacuatorSection", ["SfEvacuatorSectionResources", "GridUtilitiesV2"],
function(resources) {
	return {
		entitySchemaName: "SfEvacuator",
		contextHelpId: "1001",
		diff: /**SCHEMA_DIFF*/[
			{ // добавление самой кнопки
				"operation": "insert",
				"name": "DataGridActiveRowCallDriverAction",
				"parentName": "DataGrid",
				"propertyName": "activeRowActions",
				"values": {
					"className": "Terrasoft.Button",
					"style": Terrasoft.controls.ButtonEnums.style.BLUE,
					"caption": resources.localizableStrings.CallDriverRowButtonCaption,
					"tag": "call"
				}
			}
		]/**SCHEMA_DIFF*/,
		messages: {},
		methods: {
			onActiveRowAction: function(buttonTag, primaryColumnValue) {
				switch (buttonTag) {
					// замещение базового метода для правильной обработки нажатия по тэгу
					case "call":
						this.callDriver(primaryColumnValue);
						break;
					default:
						this.callParent(arguments);
						break;
				}
			},
			callDriver: function(recordId) {
				//функция-обработчик
			}
		}
	};
});

Попробую подробнее описать задачу.

В разделе "Лиды" в реестре есть зеленые кнопки "Квалифицировть" и т.д. наряду с "Открыть" "Копировать" и т.д.

Мне нужно чтобы при нажатии этих кнопок запускались мои собственные процессы. Например при клике на кнопку "Квалифицировать" мне нужно запустить свой процесс "SellsLeadProcessContact".

Вот код, который у меня получился:

Кнопка:

				{
					"operation": "insert",
					"name": "DataGridActiveRowQualificationProcessAction",
					"parentName": "DataGrid",
					"propertyName": "activeRowActions",
					"values": {
						"className": "Terrasoft.Button",
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"caption": {"bindTo": "getQualificationProcessButtonCaption"},
						"tag": "continueQualify",
						"iconAlign": Terrasoft.controls.ButtonEnums.iconAlign.RIGHT,
						"imageConfig": resources.localizableImages.QualificationProcessActionImage,
						"classes": {"textClass": "ts-grid-image-action"},
						"visible": {"bindTo": "getIsQualificationStageActive"}
					}
				}

Обработка нажатия:

				onActiveRowAction: function(buttonTag) {
					if (buttonTag === "continueQualify") {
						this.continueQualify();
					} else {
						this.callParent(arguments);
					}
				},

Функция запуска процессов в зависимости от статуса лида

				continueQualify: function(id) {
					var qualifyStatusId = this.getQualifyStatus(id);
					var qualifyStatus = LeadConfigurationConst.LeadConst.QualifyStatus;
					var LeadId = this.get(id);
					var processLeadContact = {
						sysProcessName: "SellsLeadProcessContact",
						parameters: {
							LeadId: LeadId
						}
					};
					var processLeadInformation = {
						sysProcessName: "SellsLeadProcessInformation",
						parameters: {
							LeadId: LeadId
						}
					};
					var processLeadMeet = {
						sysProcessName: "SellsLeadProcessMeet",
						parameters: {
							LeadId: LeadId
						}
					};
					if (qualifyStatusId === qualifyStatus.Qualification) {
						this.runProcess(processLeadContact.sysProcessName, processLeadContact.parameters, this);
					}
					if (qualifyStatusId === qualifyStatus.Distribution) {
						this.runProcess(processLeadInformation.sysProcessName, processLeadInformation.parameters, this);
					}
					if (qualifyStatusId === qualifyStatus.TransferForSale) {
						this.runProcess(processLeadMeet.sysProcessName, processLeadMeet.parameters, this);
					}
					return "";
				},

В бизнес процессе создал параметр:

222

В итоге процессы не запускаются.

В консоли при клике на кнопку выдает 3 строки ошибки:

Ошибка 1
POST https://sells.bpmonline.com/0/DataService/json/SyncReply/SelectQuery 500 (FormatException)

Ошибка 2
Uncaught Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

Ошибка 3
user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
file: https://sells.bpmonline.com/0/core/e8b5149b83cf4b4da75b8dc1338afb83/com…
line: 600
message: Uncaught Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

Весь код схемы в приложении

Помогите пожалуйста с проблемой. Уже 3 дня прошло с момента ее возникновения.

Спасибо!

Добрый день!

Насколько я понял, речь идет о странице раздела.

В этом случае получение идентификатора записи с помощью функции this.get(id) не сработает:

var LeadId = this.get(id); //неправильно

Ошибка ниже как раз и говорит о том, что this.get(id), вероятнее всего, возвращает undefined:

message: Uncaught Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

Получайте Id следующим образом:

var LeadId = this.get("ActiveRow");

Все, получилось. Но ошибка была не только в этом.

Строка запуска процесса была написана так:

this.runProcess(processArgs.sysProcessName, processArgs.parameters, this);

А когда заменил спереди "this" на "ProcessModuleUtilities", то процесс запустился.

ProcessModuleUtilities.runProcess(processArgs.sysProcessName, processArgs.parameters, this);

Спасибо большое за помощь!

Вопрос снят

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

Не получается добавить кнопку в карточку редактирования Лида рядом с Сохранить и тп
В файл LeadPageV2, в diff добавил

{
                "operation": "insert",
                "parentName": "LeftContainer",
                "propertyName": "items",
                "name": "CalculateButton",
                "values": {
                        "itemType": Terrasoft.ViewItemType.BUTTON,
                        "caption": "Calculate",
                        "classes": {"textClass": "actions-button-margin-right"},
                        "click": {"bindTo": "GetDeliveryPrice"},
                        "style": Terrasoft.controls.ButtonEnums.style.GREEN,
                        "visible": "true"
                },
                "index": 2
        },

Кнопка не появляется. Какие еще действия необходимо проделать?

Нравится

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

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

Я думаю то, что вам нужно это замещение LeadSectionV2. Попробуйте:

{
	"operation": "insert",
	"name": "CalculateButton",
	"parentName": "CombinedModeActionButtonsCardLeftContainer",
	"propertyName": "items",
	"values": {
		"itemType": Terrasoft.ViewItemType.BUTTON,
		"caption": "Calculate",
		"style": Terrasoft.controls.ButtonEnums.style.GREEN,
		"visible": true
	}
}

"Толмачев Дмитрий Юрьевич" написал:

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

Я думаю то, что вам нужно это замещение LeadSectionV2.


Спасибо. Попробовал Ваш способ. С тем же результатом, не появляется кнопка

Здравствуйте, Эмин.

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

В Google Chrome нажмите F12, правой кнопкой на кнопке перезагрузки страницы - Очистка кэша и аппаратная перезагрузка.
Либо попробуйте в режиме Инкогнито.

"Безродный Андрей" написал:После добавления кнопки необходимо полностью очистить кэш страницы, чтобы браузер выгрузил старый код и загрузил обновленный.

Добрый день, Андрей.
Все эти действия я проделывал и раньше.
Попробовал добавить кнопку в Заказы. Кнопка добавилась корректно

diff: /**SCHEMA_DIFF*/[
			{
					"operation": "insert",
					"name": "CalculateButton",
					"values": {
			                "itemType": Terrasoft.ViewItemType.BUTTON,
			                "caption": "Calculate",
			                "style": Terrasoft.controls.ButtonEnums.style.BLUE,
			                "visible": true,
							"click": {"bindTo": "GetDeliveryPrice"},
			        },
					"parentName": "CombinedModeActionButtonsCardLeftContainer",//"CombinedModeActionButtonsSectionContainer",
					"propertyName": "items",
				},
		]/**SCHEMA_DIFF*/,

Но тот же самый код в Лидах. И кнопка не появляется. Подозреваю, что кнопка "Квалифицировать" мешает отрисовке.

Здравствуйте, Эмин.

Попробовал на 7.5.0.627.

Получилось:

[URL=http://fastpic.ru/view/60/2015/0319/b7c3974c7ba4bdb754f6e43695dc8920.pn…]

Код замещающего клиентского модуля:

define("LeadSectionV2", ["LeadSectionV2Resources", "terrasoft", "ProcessModuleUtilities", "LeadConfigurationConst",
		"ControlGridModule", "BaseProgressBarModule", "css!BaseProgressBarModule",
		"css!LeadQualificationModuleStyles"],
	function(resources, Terrasoft, ProcessModuleUtilities, LeadConfigurationConst) {
		return {
			entitySchemaName: "Lead",
			diff: /**SCHEMA_DIFF*/[
				{
                                        "operation": "insert",
                                        "name": "CalculateButton",
                                        "values": {
                                        "itemType": Terrasoft.ViewItemType.BUTTON,
                                        "caption": "Calculate",
                                        "style": Terrasoft.controls.ButtonEnums.style.BLUE,
                                        "visible": true,
                                },
                                        "parentName": "CombinedModeActionButtonsCardLeftContainer",//"CombinedModeActionButtonsSectionContainer",
                                        "propertyName": "items",
               },
			]
		};
	});

"Безродный Андрей" написал:Попробовал на 7.5.0.627.

Получилось


Спасибо, кнопка появилась. Но возникла следующая проблема:
Функция обработки нажатия кнопки прописана на LeadPageV2. Существует ли способ вызова этой функции из LeadSectionV2? Т.к. в LeadSectionV2 не удается получить значения полей через this.get().

Эмин, здравствуйте.

Вместо this.get('Id') попробуйте написать this.get("ActiveRow")

"Безродный Андрей" написал:

Эмин, здравствуйте.

Вместо this.get('Id') попробуйте написать this.get("ActiveRow")


Спасибо. Да, ActiveRow тоже работает. Т.е. Id я получить могу. Но мне нужны значения полей, которых нет на Section(с помощью this.getActiveRow("") можно получить только значения со страницы реестра), есть только в карточке редактирования. Понятно, что с помощью запроса к бд я получу все необходимые данные. Но как-то глупо получается. Вот она карточка, в ней все данные уже лежат, а я вынужден делать запрос к базе, чтобы еще раз их получить

Эмин,

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

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

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

Здравствуйте!
Есть модуль, написанный на C#. Как из него можно запустить страницу и дождаться завершения БП, чтоб использовать его параметры в дальнейших расчетах.

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

Нравится

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

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

Добрый день!
Александр, а почему бы весь процесс рассчетов не включить в БП? Как работать с параметрами страницы, открытой по БП можно посмотреть в процессе квалификации лида (LeadManagementQualification).

Андрей, я уже так и сделал, спасибо)

Показать все комментарии
Предлагаю дать возможность пользователю выбирать расположение реестра при открытом дереве групп - справа или внизу. При не очень широком мониторе правое расположение буквально "сминается" группами.Еще бы хорошо менять ширину (например, кнопками + и - ), занимаемую деревом групп - сейчас там много свободного места, которое можно освободить под реестр записей
1 комментарий

Здравствуйте, Владимир!

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

Приятного дня!

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

Добрый день!
По кнопке генерируется pdf файл. Сохраняется на жестком диске. Не могу понять как теперь отдать этот файл на скачивание пользователю.

Нравится

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

"Олейник Дмитрий" написал:

Почитайте тут:

http://www.community.terrasoft.ru/blogs/7372

С уважением,

Олейник Дмитрий


Говорит "У Вас нет доступа к этой странице."

Откройте базовую страницу с файлами (там где кнопка "скачать") и посмотрите пример.
Главное здесь не забыть на Inite для события (к примеру клик кнопки) указать свойство isUpload = true;

http://www.community.terrasoft.ru/forum/topic/10213

"Олейник Дмитрий" написал:

Откройте базовую страницу с файлами (там где кнопка "скачать") и посмотрите пример.

Главное здесь не забыть на Inite для события (к примеру клик кнопки) указать свойство isUpload = true;

http://www.community.terrasoft.ru/forum/topic/10213

С уважением,

Олейник Дмитрий


Это пример для BPMOnline 5.4. Я же пытаюсь отдать на скачивание файл в BPM 7.4

В JS можно сделать так.

//var params = convertDate(startDate)  + "/" + convertDate(dueDate) + "/" + Ids;
var params = this.get("Id");
var virtualButton = document.createElement("a");
virtualButton.href = "../rest/MyService/MyMethod/" + params;
virtualButton.download = "MyFile.xlsx";
document.body.appendChild(virtualButton);
virtualButton.click();
document.body.removeChild(virtualButton);

MyService - сервис на С#
MyMethod - метод,возвращающий стрим.

"Пащенко Александр Сергеевич" написал:

В JS можно сделать так.

//var params = convertDate(startDate)  + "/" + convertDate(dueDate) + "/" + Ids;

var params = this.get("Id");

var virtualButton = document.createElement("a");

virtualButton.href = "../rest/MyService/MyMethod/" + params;

virtualButton.download = "MyFile.xlsx";

document.body.appendChild(virtualButton);

virtualButton.click();

document.body.removeChild(virtualButton);

MyService - сервис на С#

MyMethod - метод,возвращающий стрим.


Спасибо. Параллельно подсмотрел реализацию для скачивания файлов детали Файлы. Все работает)

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

Добрый день !

Есть такой запрос:

var select = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Equipment1C" });
select.isDistinct = true;
select.addColumn("OwnerCode1C");
select.addColumn("OwnerName");
select.addColumn("Account");
select.addColumn("AccountOrganizationChart");
select.addColumn("Contact");

var emptyStr = "";
select.filters.add("ownerCode1CFilter", Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.NOT_EQUAL, "OwnerCode1C", emptyStr, Terrasoft.DataValueType.TEXT));

условие where при этом не создается.
Если, например, написать

var emptyStr = "00057";
select.filters.add("ownerCode1CFilter", Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.NOT_EQUAL, "OwnerCode1C", emptyStr, Terrasoft.DataValueType.TEXT));

то работает.

Как создать фильтр для условия

OwnerCode1C > ''

?

Нравится

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

Здравствуйте!
Попробуйте такой фильтр

select.filters.add("ownerCode1CFilter", Terrasoft.createColumnIsNotNullFilter("OwnerCode1C"));

Спасибо, получилось.
В запросе такое условие получается

NOT [Equipment1C].[OwnerCode1C] = @P1

если кому-то интересно

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