Вопрос

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

У меня такой же вопрос

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

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

 

 

Возможно вам будут полезны эти приложения 1 2 3 доступные на меркетплэйсе

 

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

 

 

Возможно вам будут полезны эти приложения 1 2 3 доступные на меркетплэйсе

 

В первом, Advanced schedule for bpm'online, как раз есть то, что Вы хотите:

Дополнение платное, но есть «тест-драйв», можно установить и посмотреть, как оно сделано.

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

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

У меня такой же вопрос

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

lordlen,

Не нужно будет давать отдельные права для пула, в 

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

 

Подробнее тут

Добрый день!
Да, установку сервера приложения, сервера БД и Redis можно провести на одном компьютере.

Инструкция по установке: https://academy.terrasoft.ru/documents/common/7-12/ustanovka-bpmonline

Сидоров Александр В.,

Благодарю за ответ,сделал всё по инструкции и в итоге после запуска сайта получаеться вот такая ошибка(

Прочитал статьи по этому поводу  на stackoverflow но решения которые там были описаны не исправили ситуацию,можете пожалуйста помочь понять мне как можно исправить эту проблему?
Использую Microsoft SQl Server Express 2012 (64-bit) (на Windows 10)

 

 

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

Сидоров Александр В.,

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

Все на одной машине, просто в свойство пула поставьте Identity = LocalSystem и можно не давать отдельных прав пользователю от которого пул стартует

Григорий Чех,Спасибо,При этом не нужно будет ничего менять в настройках SQL сервера и Connection string (Так и оставить SQL аутентификацию,в место SSPI)?

В ConnectionStrings.config может быть настроен либо вход по на SQL-сервер прописанному там же логину и паролю, либо SSPI, когда к базе подключается пользователь Windows, под которым работает сайт.

Григорий Чех,Здравствуйте,к сожалению это не решило проблему,не подскажете в чём ещё могут быть причины?

 

В неправильной настройке доступа к базе. Впишите в ConnectionStrings.config верные логин и пароль к базе или разрешите доступ в базу пользователю Windows, если там указано SSPI.

lordlen,

Не нужно будет давать отдельные права для пула, в 

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

 

Подробнее тут

Григорий Чех,

Благодарю за помощь,уже всё работаетyes

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

Добрый день. Неожиданно возникла ошибка при выборе лида из справочника. При нажатии на выбор лида открывается окно выбора, но оно пустое так же возникает ошибка:

ReferenceError: event is not defined

в файле: /0/conf/content/DcmStageViewModel.js?hash=079534da32e34fb895054e9f93ff2428

в функции: onAddDcmStageElementBlur

В чем проблема и как можно ее решить?

У меня такой же вопрос

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

Firefox? Тогда см. обсуждение тут.

Спасибо, Александр, это помогло

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

Добрый день!

Внутри CRM есть большое число позиций изделий из сплавов металлов. В сплав может входить от двух до четырех металлов.  

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

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

У меня такой же вопрос

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

Вариантов много я бы посмотрел в сторону

1) Искать начинающиеся на #Арб

2) или изменить структуру хранения данных о составе металла

3) а лучше всего, создать свой фильтр в котором вы обработаете вашу строку с указанием сплава. (Например разобьете в массив со списком металлов и его отфильтруете)

В расширенных фильтрах

 

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

Спасибо за совет, но строка с указанием сплава имеет вид - #Наименование сплава# (#Металл1##Металл2##Металл3##Металл4#) Например: Мельхиор (CuNi)

Вариантов много я бы посмотрел в сторону

1) Искать начинающиеся на #Арб

2) или изменить структуру хранения данных о составе металла

3) а лучше всего, создать свой фильтр в котором вы обработаете вашу строку с указанием сплава. (Например разобьете в массив со списком металлов и его отфильтруете)

А что мешает искать по «(Cu»?

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

Спасибо за совет, хорошая идея!

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

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

У меня такой же вопрос

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

Добрый день, 

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

http(s)://[Адрес приложения bpm'online]/ServiceModel/AuthService.svc/Login

Header:

Content-Type: application/json

Body: 

{"UserName": "User01", "UserPassword":"User01"}

Полученные в HTTP-ответе cookie (BPMLOADER, .ASPXAUTH и BPMCSRF) необходимо использовать в дальнейших запросах к сервисам bpm'online, требующих аутентификационных данных

Header последующих запросов в bpm должен иметь вид: 

Accept: application/atom+xml
Content-Type: application/atom+xml;type=entry
Cookie: BPMSESSIONID=cxa54p2dsb4wnqbbzvgyxcoo; BPMCSRF=6yCmyILSlIE8/toyQm9Ca.; BPMLOADER=rqqjjeqyfaudfyk4xu404j5f; .ASPXAUTH=697...A292D8164;
BPMCSRF: 6yCmyILSlIE8/toyQm9Ca.
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Есть файл *.dbf около 25 столбцов и 300000 строк. Нужно импортировать в бд bpm. На данный момент импорт реализован в БП через "Задание-сценарий" и данные успешно импортируются, но это занимает ооочень много времени и блокирует приложение полностью. Как можно ускорить процесс или хотя-бы сделать так, чтобы приложение не висло?

У меня такой же вопрос

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

Добрый день! Добавьте после стартового сигнала - сигнал ожидания 1сек. В результате, данный скрипт будет выполняться в параллельном потоке

Если система используется on site и вариант выше всё равно работает слишком долго,  то можно подключиться к базе dbf и залить данные в основную базу bpm'online при помощи SQL Server Management Studio. Учтите, при таком сохранении не отработает логика на уровне объектов и БП, её нужно будет реализовать самостоятельно.

Чубко Илья,

Спасибо!

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

Добрый день!

Нужно выполнить авторизацию из стороннего приложения, но этому препятствует технология CORS. Каким образом можно ее обойти?

Возникают такие ошибки:

У меня такой же вопрос

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

Нужно в IIS разрешить доступ с другого домена, как описано тут.

 

 

Добавил раздел CORS в секцию <system.webServer> файла web.config сайта как описано в инструкции, после чего сайт перестал работать - выходит ошибка сервера:

Кто нибудь сталкивался с этим? Как решить эту проблему?

 

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

Вернул. Сделал как описано тут. Но ошибка осталась или поменялась, вот такая выходит:

policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Такое сообщение и его причины обсуждаются тут.

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

День добрый! Есть ли возможность увеличить количество знаков после запятой в модуле итогов? 

У меня такой же вопрос

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

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

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

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

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

Добрый день!

Подскажите, пожалуйста, как изменить название Лида.
Стандартное : Тип потребности/ФИО Контакта, Контрагент.

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

Не совсем понимаю, где необходимо внести изменения.

У меня такой же вопрос

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

опишите ваш кейс точнее, абсолютно не понятно что вы хотите в конечном итоге:
1) отрегулировать последовательность пунктов в выпадающем списке
2) все таки изменить название объекта "Лид"
3) внести изменения в справочник типов для Лида
.. и это только первое, что приходит в голову

Мне необходимо изменить последовательность в названии Лида в поле LeadName.
Пример на скриншоте ниже. Скрин страницы редактирования Лида.

Вам необходим метод UpdateLeadName в объекте Lead.
Переопределите его и внесите свои изменения

Спасибо,Мария, получилось !

"Мария Ватулина" написал:

Вам необходим метод UpdateLeadName в объекте Lead.
Переопределите его и внесите свои изменения

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

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

Система версии 7.10.1.1161
Есть карточка заказа и есть кастомная страница подборщика продуктов, которая открывается из карточки заказа по нажатию на специально созданную кнопку. Кастомная страница унаследована от BasePageV2 и привязана к entitySchema Order (то есть к тому же объекту, что и карточка заказа). На ней используется стандартная кнопка Закрыть. Все прекрасно работает, кроме случая когда подборщик открываем из карточки ново создаваемого заказа(add). В этом случае при нажатии Закрыть на кастомной странице выбрасывает обратно в раздел, а должно бы в карточку заказа.

Обратил внимание, что при добавлении нового заказа когда открывается карточка редактирования, то хеш все равно остается от раздела - SectionModuleV2/OrderSection (аналогично и во всех остальных разделах). Вероятно, в этом и есть причина, так как при нажатии Закрыть публикуется BackHistoryState. Ниже код, который используем для открытия карточки подборщика. Подскажите как добиться нужного эффекта, так как кейс с открытием подборщика из нового заказа и есть самый основной.

                                openProductSelector: function() {
                                        var orderId = this.get("PrimaryColumnValue") || this.get("Id");
                                       
                                        var defaultValues = [
                                                        {
                                                                name: "PrimaryColumnValue",
                                                                value: orderId
                                                        },
                                                        {
                                                                name: "UseSeparatedPageHeader",
                                                                value: true
                                                        }

                                                ];
                                       
                                        stateObj = {
                                                                        isSeparateMode: true,
                                                                        schemaName: "SelectProductInOrderPage",
                                                                        moduleId: "CardModuleV2_SelectProductInOrderPage",
                                                                        valuePairs: defaultValues,
                                                                        operation: "open",
                                                                        isInChain: false
                                                                };
                                        requestUrl = "CardModuleV2/SelectProductInOrderPage/";
                                       
                                        this.sandbox.publish("PushHistoryState", {
                                                hash: requestUrl,
                                                stateObj: stateObj
                                        });
                                },     

                                onProductSelectionButtonClick: function() {
                                        this.set("OpenselectProductPage", true);
                                        this.save({isSilent: true});
                                },

                onSaved: function (response, config) {
                    this.hideBodyMask();
                    if (!this.get("NextPrcElReady")) {
                        this.set("NextPrcElReady", response.nextPrcElReady);
                    }
                    if (config && config.isSilent) {
                        this.onSilentSaved(response, config);
                    } else {
                        var updateConfig = this.getUpdateDetailOnSavedConfig();
                        this.sandbox.publish("UpdateDetail", updateConfig, [this.sandbox.id]);
                        this.sendSaveCardModuleResponse(response.success);
                        if (this.get("IsInChain")) {
                            this.onProcessCardSaved();
                            return;
                        }
                        if (this.isNewMode()) {
                            this.onCloseCardButtonClick();
                        } else {
                            this.onProcessCardSaved(true);
                        }
                    }
                    this.set("Operation", Terrasoft.ConfigurationEnums.CardOperation.EDIT);
                    if (!this.destroyed) {
                        this.updateButtonsVisibility(false, { force: true });
                    }
                    this.set("IsChanged", this.isChanged());
                    this.subscribeOwner(config);
                    if (config && config.isSilent) {
                                                if(this.get("OpenselectProductPage")) {
                                                        this.set("OpenselectProductPage", false);
                                                        this.openProductSelector();
                                                }
                        return;
                    }
                    this.updateAmountAfterSave("ProductInProductsTab",
                        function () {
                            this.updateDetail({ detail: "ProductInResultsTab" });
                            this.updateOrderProductSummary();
                        },
                        this
                    );
                },

У меня такой же вопрос

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

пока заказ не сохранен - некуда возвращаться у заказа нет Id а стало быть и хеша не собрать.
В том числе и по этой причине при попытке что либо добавить в деталь на странице, ее карточка карточка предварительно принудительно сохраняется, т.к. если открыть в Chain карточку детали, то куда потом возвращаться :)

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

Илья, но я ведь и делаю save перед открытием. И делаю его silent - как раз как в случае с сохранением из детали. И this.set("Operation", Terrasoft.ConfigurationEnums.CardOperation.EDIT) тоже происходит в методе onSaved до открытия кастомной страницы (про этот "режим" вы говорите? или про silent save все же ?)

В более старых версиях помнится при добавлении новой записи был хеш вида CardModuleV2/OrderPageV2/add/recordId Почему от этого отказались - неясно.

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

this.isAddMode() 

там аккурат считывается значение этого атрибута.

PS:
зачастую просто надо предотвратить поведение при котором новая карточка закрывается при сейве, этот кейс решается именно так.

Илья, режим хранится как раз в атрибуте Operation. То есть он сменяется на EDIT до того как я открываю кастомную страницу. Проблема состоит именно в том, что при нажатии Закрыть на кастомной странице идет запрос BackHistoryState, а там - хеш раздела. Вот и идет вылет в раздел.

В общем, пока проблему обходим следующим путем:

1) На странице заказа перенесли вызов метода, отвечающего за открытие кастомной страницы подборщика, из onSaved в onSilentSaved, так как он вызывается до смены режима в атрибуте Operation
2) сам режим передаем в массиве defaultValues на кастомную страницу. Код выглядит теперь так

openProductSelector: function() {
	var orderId = this.get("PrimaryColumnValue") || this.get("Id");
	var operation = this.get("Operation");
 
	var defaultValues = [
			{
				name: "PrimaryColumnValue",
				value: orderId
			}, 
			{
				name: "UseSeparatedPageHeader",
				value: true
			},
			{
				name: "Operation",
				value: operation
			} 							
		];
 
	stateObj = {
					isSeparateMode: true,
					schemaName: "SelectProductInOrderPage",
					moduleId: "CardModuleV2_SelectProductInOrderPage",
					valuePairs: defaultValues,
					operation: "open",
					isInChain: false
				};
	requestUrl = "CardModuleV2/SelectProductInOrderPage/";
 
	this.sandbox.publish("PushHistoryState", {
		hash: requestUrl,
		stateObj: stateObj
	});
},	
 
onProductSelectionButtonClick: function() {
	this.set("OpenselectProductPage", true);
	this.save({isSilent: true});
},
 
 
onSilentSaved: function() {
	if(this.get("OpenselectProductPage")) {
		this.openProductSelector();
	this.set("OpenselectProductPage", false);
	} else {
		this.callParent(arguments);
	}
}  

3) на кастомной странице создали кнопку по виду идентичную кнопке Закрыть. Видимость этой кастомной кнопки прибиндили к isNewMode, а кнопки Закрыть к противоположному к isNewMode значению.
4) Метод обработчик нажатия на кастомную кнопку открывает наш заказа в режиме редактирования.

onBacktToOrderButtonClick: function() {
		var orderId = this.get("PrimaryColumnValue") || this.get("Id");
		var defaultValues = [
				{
					name: "PrimaryColumnValue",
					value: orderId
				}					
		];
 
		stateObj = {
						isSeparateMode: true,
						schemaName: "OrderPageV2",
						moduleId: "CardModuleV2_" + orderId + "_OrderPageV2",
						valuePairs: defaultValues,
						operation: "edit",
						isInChain: false
					};
		requestUrl = "CardModuleV2/OrderPageV2/edit/" + orderId;
 
		this.sandbox.publish("PushHistoryState", {
			hash: requestUrl,
			stateObj: stateObj
		});				
},

Но это решение все равно несколько "корявое". Так как при создании нового заказа: карточка заказа. Открыть подборщик => Подборщик. Закрыть => Карточка Заказа. Закрыть => попдаем обратно в подборщик вместо раздела.

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