Показать сообщение отдельно
Старый 16.07.2020, 19:51   #9  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
643 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от oleggy Посмотреть сообщение
Привет.
Подскажите возможно ли просто скопировать пользователей из одной базы в другую?
Да, это возможно.
Цитата:
Сообщение от oleggy Посмотреть сообщение
Это можно сделать в рамках SQL ?
Да.
Цитата:
Сообщение от oleggy Посмотреть сообщение
Я так понял речь идет о таблице UserInfo.
Не только. Нужно учесть 3 таблицы: UserInfo, SysUserInfo и UserGroupList. Просмотрите их содержимое и поймете как, что и зачем.
Цитата:
Сообщение от oleggy Посмотреть сообщение
Если через SQL невозможно создать пользователей то возможно ли в базе назначения через Job ?
Оба способа вполне работоспособны. У нас DEV база копируется с PROD'а, соответственно, изначально там не предусмотрены разработчики. Запустив SQL-скрипт, мы создавали нужное количество записей с аккаунтами разработчиков автоматически.
Цитата:
Сообщение от oleggy Посмотреть сообщение
Спрашиваю т.к. может быть не все так просто с добавлением пользователей..
В основном есть 2 серьезные проблемы, это генерация RecId и извлечение SID пользователя в ActiveDirectory средствами SQL. Вторую проблему мы решили, захардкодив SID каждого разработчика. При копировании, проблем возникнуть не должно.
Цитата:
Сообщение от oleggy Посмотреть сообщение
Спасибо.
А вы не могли бы скинуть сюда пример такого джоба который создает нескольких пользователей и добавляет права. Или существующий джоб какой то, которым вы пользуетесь.
Просмотрите оборзевателем 3 таблицы, на которые я указал. Там нет ничего сложного, посмотрите также метод SysUserInfo.initValue().
Цитата:
Сообщение от oleggy Посмотреть сообщение
А так же если возможно как вы через SQL назначали пользователю права. Тоже интересно.
Легко, смотрите записи в таблице UserGroupList. Примеров приводить не буду, это довольно просто.

Приведу код генерации RecId, без которого может возникнуть зависон на недельку-другую в поисках решения.
PHP код:
CREATE PROCEDURE [dbo].[ppoGetRecId] (@TableId INT, @hop BIGINT, @RecId BIGINT OUTPUT)
AS
BEGIN

SET NOCOUNT ON

SET 
@RecId NULL

-- if record not exists
IF NOT EXISTS 
  
(SELECT FROM SYSTEMSEQUENCES
     WHERE DataAreaId 
'dat'
       
AND Id = -1
       
AND TabId = @TableId)
  
INSERT INTO SYSTEMSEQUENCES
    
(IDNEXTVALMINVALMAXVALCYCLENAMETABIDDATAAREAIDRECVERSIONRECID)
    
VALUES (-11192233720368547758070'SEQNO', @TableId'dat'1, -1)
-- 
end of if
  
UPDATE SYSTEMSEQUENCES
    SET 
@RecId    A.NextVal,
        
NextVal    A.NextVal + @HOP
FROM SYSTEMSEQUENCES A
WHERE A
.ID = -AND A.DATAAREAID 'dat' AND A.TABID = @TableId

SELECT ISNULL
(@RecId0) AS RecId

END 
P.S. Параметр @hop - это размер выделяемой порции, выделять RecId под несколько записей - обычное дело в AX.
__________________
// no comments

Последний раз редактировалось dech; 16.07.2020 в 19:59.
За это сообщение автора поблагодарили: sukhanchik (15).