· Hard seal Hard seal (Nov 2016) Soft seal (Spring release 2017) Soft seal (Fall release 2017)...

Post on 07-Jun-2020

23 views 0 download

Transcript of  · Hard seal Hard seal (Nov 2016) Soft seal (Spring release 2017) Soft seal (Fall release 2017)...

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