实现自定义插件以更新多家公司

要创建自定义插件,只需创建一个派生自 CustomizationPlug 的类并将其打包到自定义中。当系统发布自定义项目时,它将仅在当前公司范围内执行自定义插件中实现的 OnPublishedUpdateDatabase 方法。 ******

话虽如此,自定义插件永远不会对当前公司以外的任何其他公司进行更改,除非它使用 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。你将用于发布自定义的管理员用户可以访问两个公司,并且由 CustomA 插件创建的 MyVerticalSolution 角色已存在于 CompanyA 中: StackOverflow 文档

使用早期开发的自定义插件发布自定义(登录到 CompanyA 或 CompanyB 时) 以在当前用户可用的所有公司中创建 MyVerticalSolution 角色后,请注意为 CompanyA 跳过 MyVerticalSolution 角色并成功为 CompanyB 创建。

StackOverflow 文档

下次发布此自定义时,将为你的 Acumatica 应用程序中的两家公司跳过 MyVerticalSolution 角色:

StackOverflow 文档