На моем компьютере стояла простая BPMonline CRM. Сегодня я установила BPMonline Realty, и при этом старая система исчезла. Осталась база данных, но каталог, веб-сайт на IIS - все удалено. Хотя при этом я указывала везде разные названия для папок. И разные порты для IIS. Почему так произошло?
Здравствуйте.
На текущий момент при повторной установке BPMonline (из инсталлятора) ситуация выглядит именно так. Если Вам необходимо установить на одном сервере несколько продуктов, то последующие установки нужно выполнять в ручном режиме (создать сайт, установить базу и т.д.). При наличии соответствующих лицензий необходимые файлы можно получить через менеджера или тех. поддержку.
Дело в том, что сама база остается. Самое главное что исчезает - исчезает фолдер с предыдущими установками. Так что я даже руками не могу создать сайт - нет реальной директории.
Я хочу еще раз вернуться к этому вопросу. На данный момент у меня имеются 3 демо версии : простая версия BPMonline, Realty - на русском и на английском.
Мне ОЧЕНЬ хотелось бы иметь все 3 версии на компьютере в рабочем виде. Как я могу это сделать?
Не знаю, как с демо, но несколько обычных версий на одном компьютере установлены быть могут. Инсталлятором не пользовался, проосто копировал папки с бинарниками, прописывал параметры доступа к БД и редактировал конфиг IIS Express. Можно и с IIS.
Если у Вас установочные пакеты, а не просто набор файлов BPMonline, то что бы разместить три сайта на одной машине нужно по очереди устанавливать потом сохранять в другом месте каждый сайт. Так как при запуске очередного установщика оп "перезатрёт" предыдущий результат. Если у Вас возникнут трудности обращайтесь в поддержку и я помогу Вам.
В тестовой базе данных создала несколько собственных модулей (со всеми страницами для редактирования и так далее). можно ли это теперь перенести другую базу данных?
1. Выгрузить все добавленные Вами на базе разработки схемы, загрузить их в другую БД и опубликовать;
2. Проанализировать таблицы SysModule, SysModuleDetails, SysModuleActions, SysModuleReports и т.д. (в зависимости от того, какую функциональность Вы добавляли в разделы), сформировать запрос, который будет добавлять эту информацию в БД и выполнить его на другой БД.
3. Почистить Redis и перезапустить веб-приложение.
> Выгрузить все добавленные Вами на базе разработки схемы, загрузить их в другую БД и опубликовать
Прощу прощения, но как именно я могу это выгрузить? И как я могу их загрузить? Есть где-то описание/документация/инструкция?
Или речь идет просто о создании таблиц в SQL? Но к каждому объекту/модулю еще страницы с интерфейсами прилагаются.
> сформировать запрос, который будет добавлять эту информацию в БД
какую эту информацию? И что это должен быть за запрос?
"Наталия П." написал:какую эту информацию? И что это должен быть за запрос?
Это самое непростое с непривычки.
Набор SQL insert-запросов, которые на новой базе регистрируют такой же раздел. Какие могут быть варианты:
На новой базе после загрузки туда всех файлов со схемами вручную зарегистрировать нужный раздел.
Найти по дате создания новые записи в системных таблицах, которые появились после регистрации такого раздела на старой базе и создать в новой БД вручную или автоматически такие же записи.
При создании с нуля раздела на старой базе записывать insert-запросы при помощи программы-профайлера БД (он же трекер). Если эти запросы прогнать на новой БД - создастся такой же раздел.
Terrasoft CRM 3.4.1 При синхронизации стало вылезать окно, что запись дублируется:
Идет синхронизация контрагентов по коду и по ИНН, эти поля у записей в 1С и террасофте совпадают, т.е. должно идти обычное обновление/изменение записи.
Но даже если я закрываю появившееся окно, или нажимаю "Сохранить новую запись", новая запись не появляется, а старая спокойно обновляется, т.е. от этого окна мне нет толка. А при автоимпорте точно также вылезает это окно, но так как происходит фоново, то я этого не вижу, а автосинхронизация дальше не идет.
Как сделать чтобы оно не выводилось, т.е. в каком скрипте, какую строчку закомментировать или же можно обойтись нескриптовыми средствами?
В настройках поиска дублей попробуйте удалить правило, которое завязано на раздел "Контрагенты".
В дальнейшем, его, конечно же, можно будет легко и быстро заново создать.
Для открытия окна используется функция ShowEditWindowEx. Если это обычная карточка какого-то раздела, то открыть окно с нужной записью в нём можно примерно так.
Извиняюсь, а можно поподробней? Я создал кнопку btn_Costs. Я так понимаю, что на событие OnClick этой кнопки нужно повесить какую-то функцию. Ход мыслей правильный?
Где эту функцию прописывать, в каком скрипте? Вот список для Invoices:
Да, ход мыслей правильный.
В том сервисе, где Вы добавляли кнопку, нужно просто выделить её - и слева внизу есть две вкладки "Свойства" и "События", во перейдите на вкладку события и двойным кликом определите событие OnClick. Вас автоматом перебросит в скрипт, где будет создан также автоматом функция-обработчик события.
Внутри нее Вам и нудно прописать остальной код (см. сообщение от Зверева Александра)
Знакомлюсь с BPMonline. Создала новый объект (таблицу), создала страницу для редактирования. Делала все это через конфигурацию. Хочу так же создать на странице стандартные кнопки Ok и Cancel. Мне нужно самой для этих кнопок писать функциональность? Или есть возможность, как в TerraSoft, указать, что это кнопки со стандартной функциональностью (типа кнопка Ок имеет ModalResult = wmrOk)? Если самой - то есть какое-нибудь описание функциональности?
И еще вопрос. Как вообще правильно создавать в BPMonline новые объекты (модули)? В TerraSoft это делалось через специальный запрос (C:\Program Files\Terrasoft 3.4.1\Bin\TSClient.exe /wnd=wnd_CreateNewWorkspace). И тогда объект уже имел и все необходимые страницы - и для отображения грида, и страницу редактирования, и рабочее пространство. Даже можно было указать где отображать модуль. Есть нечто похожее для BPMonline?
Немного разобралась. Для стандартных страниц надо указывать родительный класс - типа базовая страница реестра или базовая страница раздела. Тогда все стандартные кнопки сразу появляются. Но вот где получить точную информацию о том, какие базовые вещи должны быть оформлены при создании нового модуля? При добавлении нового раздела в рабочее места, программа указала, что не может найти элементов мое_имяFolder и мое_имяInFolder... Потыкавшись в стандартные разделы, я создала такие же элементы для своего модуля. Но судя по всему, есть еще куча всяких стандартных вещей. Хорошо бы заранее знать такую информацию. Возможно есть где-то документация?
На данном этапе у меня проблема с кнопкой "Добавить" - в гриде. Т.е. не могу добавить новую запись - выдается ошибка.
Но с другой стороны я нигде и не указывала какую страницу для редактирования открывать. Не могу найти, где это можно указать.
Заодно еще спрошу - я хочу удалить одну страницу. Я некорректно создала ее. Отметила на удаление. Но она не удаляется. Стоит как отмеченная на удаление. Как ее можно окончательно удалить? Потому как есть подозрение, что ошибка именно из-за нее вылетает. Потому как это некорректно созданная страница для редактирования. Новую страницу я создала, а эту не могу удалить.
"Наталия П." написал:На данном этапе у меня проблема с кнопкой "Добавить" - в гриде. Т.е. не могу добавить новую запись - выдается ошибка.
Но с другой стороны я нигде и не указывала какую страницу для редактирования открывать. Не могу найти, где это можно указать.
Наталия, похоже, что это из-за отсутствия страницы. Её можно указать в разделе "Рабочие места" на детали "Карточки редактирования" или же, если этого требуют обстоятельства, хардкодом в процессе грида.
Заодно еще спрошу - я хочу удалить одну страницу. Я некорректно создала ее. Отметила на удаление. Но она не удаляется. Стоит как отмеченная на удаление. Как ее можно окончательно удалить? Потому как есть подозрение, что ошибка именно из-за нее вылетает. Потому как это некорректно созданная страница для редактирования. Новую страницу я создала, а эту не могу удалить.
Если вы разрабатываете в своей конфигурации (а не общей TSBpm) и ещё не переносили изменения на TSBpm, то можно в меню правой кнопки выбрать "отменить изменения" и страница удалится целиком.
Если есть доступ к БД, можно удалить нужные записи из таблицы SysSchemaInSolution. Найти страницу можно по полям Name и Caption. Перед удалением запомнить значение поля SysSchemaId в удаляемой строке и удалить эту строку из таблицы SysSchema. С одной SysSchema может быть связано несколько SysSchemaInSolution, не забыть удалить все их.
Удалённые (перечёркнутые) страницы не должны влиять на ошибки, проблема в другом.
Спасибо. А как насчет этого вопроса : Но вот где получить точную информацию о том, какие базовые вещи должны быть оформлены при создании нового модуля? При добавлении нового раздела в рабочее места, программа указала, что не может найти элементов мое_имяFolder и мое_имяInFolder... Потыкавшись в стандартные разделы, я создала такие же элементы для своего модуля. Но судя по всему, есть еще куча всяких стандартных вещей. Хорошо бы заранее знать такую информацию. Возможно есть где-то документация?
Процедура создания стандартного раздела выполняется в несколько этапов:
1. Создание основного объекта раздела. Например, для раздела “Контрагенты” таким объектом является “Контрагент”, а для раздела “Контакты” – “Контакт”. Объект раздела должен содержать колонки для хранения данных записей раздела.
2. Создание объектов “группа” и “элемент в группе” для корректной работы группировки записей в разделе.
3. Создание страницы карточки раздела, при помощи которой пользователь сможет добавлять новые, а также редактировать добавленные ранее записи раздела.
4. Создание страницы основного реестра раздела, который будет содержать записи раздела.
5. Создание страницы самого раздела, с помощью которой формируется структура раздела, в частности, эта страница содержит основной реестр раздела, дерево групп и область деталей.
6. Регистрация раздела в системе.
Для создания объектов и страниц используются дизайнер объектов и дизайнер страниц, соответственно. Для регистрации раздела в системе используется раздел “Рабочие места”.
Спасибо. Это действительно полезная информация. И я бы сюда еще добавила (для других новичков-разработчиков), что при создании страницы раздела необходимо указать страницу реестра для данного объекта.
А так же, при регистрации объекта в разделе "Рабочие места", необходимо указать для раздела карточку редактирования, детали и печатные формы (если они уже созданы).
Просто жаль, что все эти вещи приходится осваивать методов тыка (как в моем случае). Хотелось бы видеть такие азы в виде документации. Потому как сейчас, с такими инструкциями, для создания объекта с нуля, нужно пару часов (максимум), а я потратила во всеми ошибками и ожиданиями ответов на свои вопросы 2 рабочих дня.
Наталья, спасибо за вопросы, которые рассмотрели в данном топике!
Информацию на форуме постоянно мониторят наши разработчики и многое из пожеланий вносится в Террасофт. Не исключено, что и данный запрос будет реализован.
Если есть доступ к БД, можно удалить нужные записи из таблицы SysSchemaInSolution. Найти страницу можно по полям Name и Caption. Перед удалением запомнить значение поля SysSchemaId в удаляемой строке и удалить эту строку из таблицы SysSchema. С одной SysSchema может быть связано несколько SysSchemaInSolution, не забыть удалить все их.
Удалённые (перечёркнутые) страницы не должны влиять на ошибки, проблема в другом.
Ув. Александры, для удаления записи SysSchema и связанных с ней записей SysSchemaInSolution можно просто удалить запись в таблице SysSchema. В БД стоит каскадная связь, которая удалит Вам записи из SysSchemaInSolution.
Наталья, в конфигурации TSBpm удалить запись страницы можно только через БД. Но если в Вашей конф пометить страницу для удаления, затем перенести изменения в конф TSBpm, с Вашей конфигурации страница удалится, а в TSBpm (извините за тавтологию) она только будет помечена, как удаленная. На компиляцию эта страница влиять не будет.
И еще, для того чтобы узнать SysSchemaId определенной страницы, можно открыть эту страницу в дизайнере и в адресной строке у Вас будет ...&Id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX... (у вас на скриншоте это пустое значение). Это и есть SysSchemaId страницы. После выполнить SQL в БД:
DELETE SysSchema
WHERE Id = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';
Действительно, удалить сервис можно руками из БД, но мы практикуем следующий подход, создаем дополнительную конфигурацию, после чего дорабатываем все что необходимо в ней, тестируем, переносим в рабочую конфигурацию.
Если что-то не нравится в тестовой конфигурации - ее можно удалить, создать еще одну тестовую, продолжать дорабатывать свои пожелания в ней.
Как показала практика, рабочая конфигурация мало используется для доработок.
2) укажите продукт и версию продукта (5.4.0.195 - пример)
1) Необходимо запустить БП из карточки лида (по факту квалификации). Использовать задачу "подпроцесс" не могу из-за проблем описанных в Как вызвать БП из процесса карточки (по событию). Хотел использовать программный запуск как обходной вариант.
2) BPMOnline CRM OnDemand Версия 5.4.0.195
Валерий, программно конечно можно запустить БП, но можно ведь обойтись и без кода, настроив БП на автоматический запуск по сигналу (добавлен новый контрагент + еще один сигнал добавлен новый контакт), вторым шагом в процессе установить проверку: если у контакта\контрагента записи на детали "Лиды" существуют (Account.LeadId != null, Contact.LeadId !+ null), значит он был создан в рамках квалификации, значит продолжаем выполнения БП, в противном случае - "конец".
Дмитрий, спасибо за ответ.
Да, действительно, такой вариант можно использовать, но мне кажется программный подход здесь будет более элегантным.
И если есть открытый API для вызова БП, то хотелось бы о нем знать. Хотя бы для общего развития :)
var manager = UserConnection.ProcessSchemaManager;
var processSchema = manager.GetInstanceByName("MyProcess");
var process = processSchema.CreateProcess(UserConnection);
if (processSchema.Parameters.ExistsByName("MyParameter")) {
process.SetPropertyValue(“MyParameter”, “value”);
}
process.Execute(Page.UserConnection);
Каким образом можно быстро заполнить все детали выбранных записей одной и той же информацией? В частности, добавить одну группу сервисных инженеров на детали определенного количества сервисов?
Добавьте автоматизированное действие, которое будет представлять собой БП с элементом "Добавление данных" ( или "Изменение данных", в зависимости от задачи). Выбранные записи реестра будут передаваться через параметр "Выбранная запись раздела".
declare @GroupName nvarchar(250)
set @GroupName ='3-я линия поддержки'
declare @AdminUnitID uniqueidentifier
set @AdminUnitID =(select top 1 ID from SysAdminUnit where Name = @GroupName)
INSERT INTO ServiceTeam(Id,
SysAdminUnitId,
DisplayValue,
ServiceId)
select newid(), @AdminUnitID, @GroupName, SS.Id
from Service SS
where (ss.ServiceName='сервис1'or ss.ServiceName='сервис2'or ss.ServiceName='сервис3')
INSERT INTO ServiceTeam(ProcessListeners,
ContactId, SysAdminUnitId, ServiceId, DisplayValue)
SELECT DISTINCT 0, null, s.Id, ss.Id, s.Name
FROM SysAdminUnit s, [Service] ss
WHERE (
s.Name='Команда абонентской службы и бухгалтерии'or
s.Name='Команда поддержки биллинга')
AND (ss.CategoryId in (select Id from CategoryOfService cs where cs.Name='Тех. поддержка абонентов'))
AND (ss.ServiceParentId in (select Id from [Service] sss
where (
sss.ServiceName='Тарификация'or
sss.ServiceName='Платежи'or
sss.ServiceName='Блокировка/Разблокировка')))
OR ((
s.Name='Команда абонентской службы и бухгалтерии'or
s.Name='Команда поддержки биллинга')
AND ss.Id in (select Id from [Service] ssss
where (
ssss.ServiceName='Тарификация'or
ssss.ServiceName='Платежи'or
ssss.ServiceName='Блокировка/Разблокировка')))
Скажите, Наталия, а какой способ предпочтительнее - предложенный Вами в первом посте или все-таки скрипт??
Разница заключается в том, что первый способ позволяет любому пользователю добавить данные из приложения BPMonline воспользовавшись действием.
Второй способ предполагает наличие доступа к СУБД, навыков работы с запросами (чем не обладают пользователи).
Какой из способов предпочтительнее зависит от того, следует добавить данные единоразово или регулярно. Если разово – лучше использовать скрипт.
Что касается скрипта, я все-таки переспрошу и детализирую вопрос
AND (ss.ServiceParentId IN (SELECT Id FROM [Service] sss
WHERE (
sss.ServiceName='Тарификация' OR
sss.ServiceName='Платежи' OR
sss.ServiceName='Блокировка/Разблокировка')))
Можно ли обойтись без этого повторного запроса к Service?
Ещё один вопрос. Если я хочу при помощи скрипта добавить множество сервисов в какой-то пакет сервисов, какие таблицы и поля нужно заполнить в обязательном порядке?
Насколько я разобрался, это
Таблицы:
ServiceInServicePackage
Поля ServiceInServicePackage:
ServicePackageId
ServiceId
И правильно ли будет просто очистить таблицу ServiceInServicePackage, если я хочу, чтобы ни один сервис не состоял ни в одном пакете?
В карточке инцидента при выборе сервисного договора в поле сервиса появляется возможность выбрать из списка сервисов, относящихся к выбранному договору. Нужно, чтобы при выборе одного из этих сервисов в поле "Группа" появлялся значок с изображением молнии и по нажатии на него в списке были группы, добавленные ранее на деталь "Сервисные инженеры" этого сервиса.
Функционал смарт-тега для ответственной группы следует описывать в процессе страницы "Базовая страница редактирования обращения в BPMonline". 1. Событие изменения сервиса в карточке редактирования следует изменить на:
publicvirtualbool ServiceEditChangeScriptTask2Execute(ProcessExecutingContext context){
var serviceId =(Guid)Page.ServiceEdit.Value;
var groupId =(Guid)Page.GroupEdit.Value;
var availableOwners = GetAvailableOwnersNew(serviceId, groupId);//added
var availableGroup = GetAvailableGroupOwnersNew(serviceId);//end
SetOwnerToolButtonStateNew(availableOwners);//added
SetGroupToolButtonStateNew(availableGroup);//end
var currentOwnerId = Page.DataSource.ActiveRow.GetTypedColumnValue<Guid>("OwnerId");if(currentOwnerId != Guid.Empty&& availableOwners != null &&!availableOwners.ContainsId(currentOwnerId)){
Page.OwnerEdit.SuspendAjaxEvents();
Page.OwnerEdit.Clear();
Page.OwnerEdit.ResumeAjaxEvents();}
SetParentRelease();returntrue;
}
2. В структуре процесса необходимо создать новый метод: GetAvailableGroupOwnersNew (+ добавить параметр с типом Guid - serviceId)
if(serviceid == Guid.Empty){return null;}
var result =new List<RecordData>();
var entitySchemaManager = UserConnection.GetSchemaManager("EntitySchemaManager") as EntitySchemaManager;
var serviceTeamSchemaQuery =new EntitySchemaQuery(entitySchemaManager, "ServiceTeam");
var sysAdminUnitIdQueryColumnName = serviceTeamSchemaQuery.AddColumn("SysAdminUnit.Id").Name;
var sysAdminUnitNameQueryColumnName = serviceTeamSchemaQuery.AddColumn("SysAdminUnit.Name").Name;
serviceTeamSchemaQuery.Filters.Add(serviceTeamSchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Service", serviceid));
serviceTeamSchemaQuery.Filters.Add(serviceTeamSchemaQuery.CreateFilterWithParameters(FilterComparisonType.IsNull, "Contact"));
var serviceTeamMembers = serviceTeamSchemaQuery.GetEntityCollection(UserConnection);
var idsList =new List<Guid>();
foreach (var serviceTeamMember in serviceTeamMembers){
var serviceTeamGroups =new List<RecordData>();
var groupId = serviceTeamMember.GetTypedColumnValue<Guid>(sysAdminUnitIdQueryColumnName);
var recordData =new RecordData();
recordData.Id= groupId;
recordData.Name= serviceTeamMember.GetTypedColumnValue<string>(sysAdminUnitNameQueryColumnName);
serviceTeamGroups.Add(recordData);
foreach (var serviceTeamGroup in serviceTeamGroups){if(!idsList.Contains(serviceTeamGroup.Id)){
result.Add(serviceTeamGroup);
idsList.Add(serviceTeamGroup.Id);}}}return result.ToArray();
3. Там же, в структуре процесса необходимо создать еще один метод: SetGroupToolButtonStateNew
Портал не работает, так что отпишусь здесь. С использованием данного функционала возникли проблемы.
При выборе группы, в которой есть хоть один пользователь возникает ошибка (см. вложение). Нужно решить проблему в срочном порядке.
Судя по багрепорту, ошибка ядровая, в компонентах интерфейса, для диагностики необходима отладка на ядре.
В качестве быстрого решения рекомендую попробовать очистить профиль - иногда при активной разработке в профиле сохраняются старые параметры элементов управления. Инструкция по очистке профиля в приложении.
В случае, если очистка профиля не поможет, просим предоставить резервную копию БД и описание точного кейса воспроизведения в техничсекую поддержку.
Ещё одна маленькая проблема. При попытке изменить группу в уже сохраненной записи инцидента при нажатии на молнию в поле Группа список групп не открывается.
Как можно исправить данную ошибку?
Акмаль, это не ошибка. Судя по тому, что в Вас в скриптах, там просто нет скрипта-обработчика для этой кнопки.
Поэтому для того, чтобы она работала, ее нужно сделать с нуля. Поэтому Вам следует в первую очередь определиться с техническим заданием:
1. Что должно происходить при нажатии на кнопку?
2. Что должно происходить при выборе одного из элементов?
3. Как это будет отражаться на остальных событиях и полях карточки редактирования? Какая должна быть связь?
Анна, необходимо, чтобы при нажатии на кнопку отображался список групп, добавленных на деталь сервисные инженеры выбранного (в поле сервис карточки инцидента) сервиса. Проще говоря, чтобы кнопка работала не только при регистрации инцидента с нуля, но и если придётся изменить группу в карточке уже созданного инцидента.
Кто знает что это и как с этим бороться? Visual Studio 2010. Что написано я вижу Но в том и дело, что он не подсоединен.
При этом Visual Studio 2008 открывается нормально.
Настройки сбрасывал не помогает.