實現自定義外掛以更新多家公司
要建立自定義外掛,只需建立一個派生自 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。你將用於釋出自定義的管理員使用者可以訪問兩個公司,並且由 CustomA 外掛建立的 MyVerticalSolution 角色已存在於 CompanyA 中:
使用早期開發的自定義外掛釋出自定義(登入到 CompanyA 或 CompanyB 時) 以在當前使用者可用的所有公司中建立 MyVerticalSolution 角色後,請注意為 CompanyA 跳過 MyVerticalSolution 角色併成功為 CompanyB 建立。
下次釋出此自定義時,將為你的 Acumatica 應用程式中的兩家公司跳過 MyVerticalSolution 角色: