實現自定義外掛以更新多家公司

要建立自定義外掛,只需建立一個派生自 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 文件