Access to Protected Graph Members
To call a protected member of a graph in its extension, you can use the PXProtectedAccess attribute.
Calling Protected Graph Members
To be able to access a protected member of a graph in a graph extension, you should do the following:
- In a graph extension, declare an abstract member with the same signature as the
protected member you want to access.Attention: The graph extension should also be abstract.
- Add the PXProtectedAccess attribute to the definition of the graph extension.
- Add the PXProtectedAccess attribute to the member definition.
The framework replaces the body of the member annotated with PXProtectedAccess with the body of the corresponding member in the graph or lower-level graph extension.
Example: Calling Protected Members of a Graph
public class MyGraph : PXGraph<MyGraph>
{
protected void Foo(int param1, string param2) { ... }
protected static void Foo2() { }
protected int Bar(MyDac dac) => dac.IntValue;
protected decimal Prop { get; set; }
protected double Field;
}You can use the members in an extension of the graph, as shown in the following example.
[PXProtectedAccess]
public abstract class MyExt : PXGraphExtension<MyGraph>
{
[PXProtectedAccess]
protected abstract void Foo(int param1, string param2)
[PXProtectedAccess]
protected abstract void Foo2();
[PXProtectedAccess]
protected abstract int Bar(MyDac dac);
[PXProtectedAccess]
protected abstract decimal Prop { get; set; }
[PXProtectedAccess]
protected abstract double Field { get; set; }
private void Test()
{
Foo(42, "23");
int bar = Bar(new MyDac());
decimal prop = Prop;
Prop = prop + 12;
double field = Field;
Field = field + 15;
}
}
Example: Calling Protected Members of a Graph Extension
Suppose that the code of MYOB Acumatica includes the following graph.
public class MyGraph : PXGraph<MyGraph>
{
protected void Bar() { }
}
Suppose also that custom code includes the following extension of this graph.
public class MyExt : PXGraphExtension<MyGraph>
{
protected void Foo() { }
}
You can use the protected member of the graph extension by specifying the parameter of the attribute, as shown in the following example.
[PXProtectedAccess]
public abstract class MySecondLevelExt : PXGraphExtension<MyExt, MyGraph>
{
[PXProtectedAccess]
protected abstract void Bar();
[PXProtectedAccess(typeof(MyExt))]
protected abstract void Foo();
}
