Технические вопросы
5.x

Скрипт для быстрого заполнения таблиц

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

Спасибо.

Нравится

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

Добавьте автоматизированное действие, которое будет представлять собой БП с элементом "Добавление данных" ( или "Изменение данных", в зависимости от задачи). Выбранные записи реестра будут передаваться через параметр "Выбранная запись раздела".

[csharp]
insert into ServiceTeam(ProcessListeners, ContactId, SysAdminUnitId, ServiceId)
select 0, null, s.Id, ss.Id from Contact c, SysAdminUnit s, [Service] ss
where s.Name = 'Группа'
and (ss.ServiceName = 'сервис1' or ss.ServiceName = 'сервис2' or ss.ServiceName = 'сервис3')
[/csharp]

Вот только мне кажется что должно быть GroupId и Group вместо ContactId и Contact...

Попробуйте так:
[sql]
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')
[/sql]

Есть ли возможность оптимизировать скрипт?

[sql]
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 = 'Блокировка/Разблокировка')))
[/sql]

Скажите, Наталия, а какой способ предпочтительнее - предложенный Вами в первом посте или все-таки скрипт??

Разница заключается в том, что первый способ позволяет любому пользователю добавить данные из приложения BPMonline воспользовавшись действием.
Второй способ предполагает наличие доступа к СУБД, навыков работы с запросами (чем не обладают пользователи).
Какой из способов предпочтительнее зависит от того, следует добавить данные единоразово или регулярно. Если разово – лучше использовать скрипт.

Наталия, понятно.

Что касается скрипта, я все-таки переспрошу и детализирую вопрос

[sql]
AND (ss.ServiceParentId IN (SELECT Id FROM [Service] sss

WHERE (
sss.ServiceName = 'Тарификация' OR
sss.ServiceName = 'Платежи' OR
sss.ServiceName = 'Блокировка/Разблокировка')))
[/sql]

Можно ли обойтись без этого повторного запроса к Service?

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

Насколько я разобрался, это

Таблицы:

ServiceInServicePackage

Поля ServiceInServicePackage:

ServicePackageId
ServiceId

И правильно ли будет просто очистить таблицу ServiceInServicePackage, если я хочу, чтобы ни один сервис не состоял ни в одном пакете?

Спасибо!

да, верно.

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