Поиск…


Вступление

С классами, полученными из CustomizationPlug, вы можете использовать возможности платформы адаптации Acumatica и выполнять собственный код после публикации проекта настройки. В этом разделе вы узнаете, как плагины настройки могут использоваться для внесения изменений в несколько компаний.

Дополнительная информация о плагинах настройки доступна в руководстве по настройке Acumatica

Внедрение плагина настройки для обновления нескольких компаний

Чтобы создать плагин настройки, вы просто создаете класс, полученный из CustomizationPlug, и упаковываете его в настройку. Пока система публикует проект настройки, она будет выполнять методы OnPublished и UpdateDatabase, реализованные в вашем плагине настройки, только в пределах текущей сферы деятельности компании .

С учетом сказанного, плагин настройки никогда не будет вносить изменения ни в какую другую компанию, кроме текущей компании, если только он не использует PXLoginScope для входа во все компании, один за другим, доступные для текущей пользовательской настройки публикации.

Ниже приведен пример плагина настройки, создающего роль пользователя MyVerticalSolution во всех компаниях, доступных текущему пользователю:

public class MyVerticalSolutionInit : CustomizationPlugin
{
    public override void UpdateDatabase()
    {
        var companies = PXAccess.GetCompanies();

        foreach (var company in companies)
        {
            using (var loginScope = new PXLoginScope(string.Format("{0}@{1}",
                PXAccess.GetUserLogin(), company)))
            {
                string roleName = "MyVerticalSolution";
                RoleAccess graph = PXGraph.CreateInstance<RoleAccess>();

                Roles existingRole = graph.Roles.Search<Roles.rolename>(roleName);
                if (existingRole != null)
                {
                    WriteLog(string.Format("{0} already exists in company '{1}' - skipped", roleName, company));
                    continue;
                }

                var wmsRole = new Roles();
                wmsRole.Rolename = roleName;
                wmsRole.Descr = "User Role for MyVerticalSolution";

                graph.Roles.Insert(wmsRole);
                graph.Save.Press();

                WriteLog(string.Format("{0} was succesfully created in company '{1}'", roleName, company));
            }
        }
    }
}

Чтобы получить список компаний, доступных для текущего пользователя, вы просто вызываете статический PXAccess.GetCompanies() . Затем PXLoginScope используется для входа в каждую из доступных компаний для создания роли пользователя MyVerticalSolution . Обратите внимание, что экземпляр RoleAccess BLC повторно инициализирован для каждой компании - это абсолютно обязательный шаг для внесения изменений в несколько компаний за раз.

Предположим, что на вашем примере Acumatica есть 2 компании: CompanyA и CompanyB. Пользователь admin , который вы собираетесь использовать для публикации настроек, имеет доступ к обеим компаниям, а роль MyVerticalSolution , созданная плагином настройки, уже существует в CompanyA: введите описание изображения здесь

После публикации настроек (вошедших в CompanyA или CompanyB) с ранее разработанным плагином настройки для создания роли MyVerticalSolution во всех компаниях, доступных текущему пользователю, обратите внимание, что роль MyVerticalSolution пропущена для CompanyA и успешно создана для CompanyB.

введите описание изображения здесь

В следующий раз, когда вы опубликуете эту настройку, роль MyVerticalSolution будет пропущена для обеих компаний в вашем приложении Acumatica:

введите описание изображения здесь



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow