Why Extensibility?
Eliminate overlayering Support continuous updateImprove implementation / update speed and quality
Hard seal
Hard seal (Nov 2016)
Soft seal (Spring release 2017)
Soft seal(Fall release 2017)
Hard seal (Nov 2016)
Hard seal
Hard seal (Nov 2016)
Hard seal (Fall release 2017)
Hard seal(Spring release 2018)
Extension based customizations only!
Hard seal (Nov 2016)
Published Table method Preceding event Succeeding event
validateWrite ValidatingWrite ValidatedWrite
validateDelete ValidatingDelete ValidatedDelete
validateField ValidatingField ValidatedField
validateFieldValue ValidatingFieldValue ValidatedFieldValue
modifiedField ModifyingField ModifiedField
modifiedFieldValue ModifyingFieldValue ModifiedFieldValue
Insert Inserting Inserted
Update Updating Updated
Delete Deleting Deleted
Initvalue InitializingRecord InitializedRecord
DefaultField DefaultingField DefaultedField
DefaultRow DefaultingRow DefaultedRow
• Note: Cannot add a new computed column (Q4 - 2017)
PU11+
https://docs.microsoft.com/en-us/dynamics365/unified-
operations/dev-itpro/extensibility/customization-
overlayering-extensions
[ExtensionOf(classStr(OriginalClass))]
final class OriginalClassExt_Extension
{
void MyNewMethod()
{
}
}
[ExtensionOf(classStr(OriginalClass))]
final class OriginalClass_Extension
{
int myStuff;
void MyNewMethod()
{
myStuff += 1;
}
}
class OriginalClass
{
real memberArg; // protected by default
protected bool OriginalMethod(real arg)
{
return arg > 1.5;
}
}
[ExtensionOf(classStr(OriginalClass))]
final class ForOriginalClass_Extension
{
void NewMethod()
{
this.OriginalMethod(memberArg);
}
}
class OriginalClass
{
bool theMethod(real arg)
{
return arg > 1.5;
}
}
[ExtensionOf(classStr(OriginalClass))]
final class ForOriginalClass_Extension
{
bool theMethod(real arg)
{
bool ret = next theMethod(arg);
return ret;
}
}
ISV requirements:
a) Change the return
value of calcAmount()
b) Insert a history log of
the posting inside
same transaction
OriginalClass::method
OriginalClass_Extension::method
OriginalClass::method
OriginalClass_Extension::method
OriginalClass::methodOriginalClassExt_Extension
::method
Indeterminate Order
int SomeMethodWrapper()
{
int ret;
//ret = next canRunInNewSession();
ret = 8;
return ret;
}
Extensible Enums Exposing Members
Data manipulations events without
DataEvents
Hookable methods
Inline delegates Metadata overlayering
Method signature changes Extensibility platform
Reports Other