Вопрос

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

Я использую сервис 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 скрипта, один готовит дочернее окно, другой получает из него данные.

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

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

Добрый день.

В разделе Объекты имеется вкладка "Файлы и ссылки объекта", а также возможность просматривать изображения(добавленные на вкладке Файлы и ссылки объекта) при помощи отдельной детали "Изображения".

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

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

Мой код:

var defValues = new Dictionary <string, object>();
var parameters = new Dictionary <string, string>();
var defValuesId = Guid.NewGuid();
var facilityInAppESQ = FacilityInApplicationESQ as EntitySchemaQuery;
			
	var activeRowPrimaryColumnValue = Page.DataSource.ActiveRowPrimaryColumnValue;
	var activeRowUId = Guid.Empty;
	activeRowUId = activeRowPrimaryColumnValue;//Выбранный в реестре файл

	Select ProtocolRecordId = new Select(UserConnection)
          	 .Column("FacilityId")
           	 .From("FacilityFile")
           	 .Where("Id").IsEqual(Column.Parameter(activeRowUId)) as Select;
			Guid ProtocolRecord = ProtocolRecordId.ExecuteScalar<Guid>();	

UserConnection.SessionData[defValuesId.ToString()] = defValues;
parameters.Add("defValuesId", defValuesId.ToString());
parameters.Add("FacilityId", ProtocolRecord.ToString());
parameters.Add("recordId", activeRowUId.ToString());
OpenTaskEditPageFacilityUserTask.PageParameters = parameters;	
OpenTaskEditPageFacilityUserTask.PageUId = new Guid("d42fdb94-9284-423a-a561-30ccaff36409");

return true;

 

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

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

Антонина, эта деталь изображений является нестандартной и,вероятно, разработана в ходе проекта. Сложно сказать, не видя всей её логики.

Каким образом я могу Вам показать работу данной детали?

Посмотрел ещё раз, на самом деле эта деталь изображений есть в коробке Loyalty, её схема FacilityPicturesDetailGridPage. Использует такой же источник данных файлов в объекте, как обычная деталь файлов в этом разделе.

Соответственно, если Вы где-то уже делали показ по кнопке страницы реестра, отфильтрованной по записи основного раздела, то делать аналогично.

Если нет, то нужно смотреть, как в БП схемы-страницы BaseModulePage и вызываемых из неё схемах-действиях InitializeDetails и SetDetailFilter сделана привязка любой детали к нужной странице и наложение фильтра.

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