Добрый день! 

Подскажите пжл.

Я новенький в этом деле. 

Мне дали задачу сформировать отчет по истории отправленных сообщений.

Как это делается?

Нравится

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

Добрый день.

Creatio не хранит данные про отдельно отправленные сообщения.

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

Как выгрузить записи в Excel:

https:/academy.terrasoft.ru/docs/user/bazis_platformy/dannye/excel_export/export_v_excel

Также Вы можете настроить отчет для раздела или записи:

https:/academy.terrasoft.ru/docs/developer/elements_and_components/reports/otchety_ms_word#case-2851

Вы можете выгрузить все данные про синхронизированные письма(отправленные и полученные) напрямую из базы данных.

Данные по синхронизированным письмам хранятся в таблице EmailMessageData.

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

Коллеги, подскажите как получить табличную часть документа.

Я использую сервис 0/ServiceModel/EntityDataService.svc/DocumentCollection/ GET запросом я получаю коллекцию документов по своему дистрибьютору в XML формате.

А как мне получить информацию о товарах которые были проданы в этом документе и их количестве?

Нравится

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

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

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

EntityDataService работает аналогично для объекта каждой детали. То есть для детали продуктов в счёте (объект InvoiceProduct) будет 0/ServiceModel/EntityDataService.svc/InvoiceProductCollection/. А наложить фильтр по Id счёта можно подобно тому, как фильтруют по контакту тут.

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

 Григорий мне нужно получить заказ, который торговый представитель набил в КПК, чтобы перекинуть его в нашу учетную систему 1С.

Я нашел что коллекцию товаров можно получить из OfferingCollection.

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

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

OfferingCollection по документам из DocumentCollection по клиентам из AccountCollection у которых &filter=Distributor/Id eq мой Дистрибьтор/мEdm.Guid'e63ac989-9760-4453-b45f-943e906447e8'

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

 

Видимо да, из одного запроса получать список Id результатов, затем поочерёдно с ними работать. Возможно, есть смысл создать в базе view по этим условиям, возвращающий плоскую таблицу со всей информацией, к нему объект в конфигурации с такими же колонками и затем работать по OData с ним, накладывая простые фильтры по Id или названию.

Способы построения запросов к OData с фильтрацией описаны тут и тут.

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

 Спасибо! Еще вопрос:

Вы не в курсе, а можно ли сделать фильтр по массиву значений? Например я получил 100 документов (DocumentCollection), и хочу сразу в одном запросе получить все строки этих документов (DocumentOfferingCollection). Я могу как то в фильтр загнать все 100 Document/id и единым запросом получить все табличные части всех документов. А потом уже у себя циклом их перебирать и к каждому документу прибавлять его строки.

Если записей немного, можно написать условие с OR, как описано по ссылке выше. Но 100 записей, скорее всего, не влезет в длину строки запроса. В таком случае стоит пересмотреть логику и не получать список, а фильтровать сразу документы по условию.

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

Добрый день. Использую 5 версию системы.

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

var Filters5 = facilityStructure.CreateFilterWithParameters(dataSource.Schema, FilterComparisonType.Equal, "Phone", Number.Replace('-',''));

Нравится

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

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

+(38064) 714 -82 -23

записать как

322841764083

Для поиска вы переворачиваете номер удалив с него все кроме цифр и используете фильтр начинается с  или содержит

Этот способ используется в некоторых стандартых разделов в bpmonline

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

Меня интересует как правильно прописать фильтр на bpm, а не как использовать реплэйсы.

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

+(38064) 714 -82 -23

записать как

322841764083

Для поиска вы переворачиваете номер удалив с него все кроме цифр и используете фильтр начинается с  или содержит

Этот способ используется в некоторых стандартых разделов в bpmonline

Григорий, я правильно Вас понимаю, что без вот таких так скажем "выкрутасов", я не смогу фильтр написать!?

Алексейченко Антонина,

Можно, но это уже будет не фильтрация, а поиск записей с обработкой выбранных значений и последующая фильтрация. Если у вас количество записей в базе большое, поиск нужно будет делать на стороне сервера (sql) те прикручивать внешний сервис или что-то аналогичное.

Антонина, так, как написали в начале — точно не получится. Ведь Number — это не поле таблицы, а переменная, где в номере и так уже нет лишних символов. А Вам надо наоборот, очистить значения в поле.

Все разновидности функции CreateFilterWithParameters перечислены тут, а варианты FilterComparisonType — тут. Варианта с регулярными выражениями там нет, максимум доступно включение подстроки в начале, конце или где угодно.

Так что придётся, как посоветовал Григорий, или добавлять второе поле с номером без спецсимволов, или чисто программно перебирать и находить массив ID найденных подходящих записей, которые и добавлять в фильтр.

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

Продукт: BPMonline Service Desk, версия 5.4.0.2408.

Создала нестандартный справочник (в соответствии с инструкцией по настройке): объект + страница редактирования + страница реестра. После регистрации справочника открываю его для добавления записи, но в нем неактивны кнопки (добавить, изменить, удалить, копировать) и не отображаются колонки.

Может кто-нибудь помочь с этим вопросом?

Прикрепленные файлы

Нравится

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

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

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

Елена, имею в виду, что если Вы сами его создали, то это самодельный справочник. Он может быть стандартным (две текстовых колонки «название» и «описание» в объекте, отдельная карточка не нужна) и нестандартным (больше колонок, своя карточка).

Александр, Ваше решение помогло. За это огромное спасибо! Создала только страницу редактирования (так как справочник нестандартный) и в карточке регистрации справочника, в поле "страница карточки" выбрала созданную страницу редактирования, а поле "страница реестра" оставила пустым. Тогда всё получилось."

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

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

Вопрос по правам доступа в портале:

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

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

 

Нравится

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

По идее, эта логика меняется в функции GetContactFilter страницы PortalServiceRequestsModulePage или PortalServiceRequestsGridPage. Возможно, в обеих местах. Нужно тестировать.

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

С некоторого времени не можем посмотреть структуру БизнесПроцессов (БП). Требуется установка SilverLight. При нажатии на "установить" - все устанавливается, но тем не менее структуру БП не видим

Нравится

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

См. комментарии тут.

работайте в Microsoft Explorer 

в chrome://flags/#enable-npapi не нашла возм-ть включения..

 

Его там и нет. См. ответы по ссылке.

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

Добрый день. Можно ли в портале сделать фильтр, который в системе слева настраивается?

Нравится

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

К сожалению, в Сustomer Portal для фильтрации можно использовать только быстрый фильтр.

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

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

Вот скрипт, который очистит таблицы базы данных SysLicUser, SysLic и SysLicPackage от информации о старых и повреждённых лицензиях. Это должно помочь удалить «неиспользуемые» записи в этих 3 таблицах, а также лицензии, у которых вышел срок.

Чтобы просто проверить наличие таких записей, замените «delete» на «select *».

delete from "SysLicUser"
where "Id" not in (select slu."Id" from "SysLicUser" slu
inner join "SysLicPackage" slp on slp."Id" = slu."SysLicPackageId"
inner join "SysAdminUnit" sau on sau."Id" = slu."SysUserId"
inner join "Contact" c on c."Id" = sau."ContactId"
where slu."Active" = '1'
)
 
delete from "SysLic"
where "SysLicPackageId" not in (select slp."Id" from "SysLicUser" slu
inner join "SysLicPackage" slp on slp."Id" = slu."SysLicPackageId"
inner join "SysAdminUnit" sau on sau."Id" = slu."SysUserId"
inner join "Contact" c on c."Id" = sau."ContactId"
where slu."Active" = '1'
)
or "DueDate" < GETDATE() --если Oracle, то заменить на SYSDATE без скобок
 
delete from  "SysLicPackage"
where "Id" not in (select slp."Id" from "SysLicUser" slu
inner join "SysLicPackage" slp on slp."Id" = slu."SysLicPackageId"
inner join "SysAdminUnit" sau on sau."Id" = slu."SysUserId"
inner join "Contact" c on c.Id = sau."ContactId"
where slu."Active" = '1'
)

Если это не поможет, придётся полностью очистить таблицы лицензий запросами:

delete from "SysLicUser"
 
delete from "SysLic"
 
delete from "SysLicPackage"

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

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

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

Нравится

Поделиться

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

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

 

Прикрепленные файлы

Нравится

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

Чтобы изменить текст на странице входа, можно ручками поправить страницу Login.aspx в корневой >папке сайта (предварительно конечно лучше сделав копию).

 

Сама логика вывода того или иного города и телефона в зависимости от локали сделана в ядре.

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

Добрый день.

Из карточки обращения открываю карточку контакта и передаю туда параметры с обращения. Далее сохраняю контакт и при сохранении хочу отдать некоторые параметры в карточку обращения обратно.

Могу ли я каким-то образом поднять уже открытую ранее карточку обращения и сделать там обновления?

Нравится

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

Антонина, можно при открытии дочернего окна передавать ему то сообщение, которое оно породит при закрытии. Затем в родительском будет срабатывать обработчик этого сообщения. А непосредственно данные передавать через UserConnection.SessionData. Пример можно увидеть в стандартном процессе FindInSocialMediaModuleProcess. Там 2 скрипта, один готовит дочернее окно, другой получает из него данные.

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

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