Dataverse
If there is no defined standard by the customer, then we are following the “Common Development Guidlines!“
Deviations must be justified in the architectural documentation
Configuration / Customization
In general, we apply Microsoft's customization rules. This means that we only deviate if we see an advantage for development or if we feel there would be serious disadvantages if we stayed with the “standard” (e.g. name collisions within generated classes).
Publisher & prefixes
For development of components which get developed and packaged at DIGITALL and later on deployed on customer environments, we use the DIGITALL publisher, and therefore the prefix dgt_. [dgt_publisher]
For all customer centric projects, we typically use a customer specific publisher, and therefore a customer specific prefix.
Before installing any special-purpose 3rd party solution in the Power Platform, please check first if there is a XrmToolbox plugin for this
If you want to make changes on the ribbon bar, please also use the XrmToolbox
Themes
Every Instance/Stage/App gets his own color theme
Logo: 150-400x50px (png)
Images (Alternative 1):
Entity Image:
Unified Interface:
svg: Black (Hex: #000000 bzw. #ff000000; RGB: 0, 0, 0) - 0px Padding
Ribbon Bar Icons:
svg: Grey (HEX: #3A3A3A bzw. ##FF3A3A3A; RGB: 58, 58, 58 ) - 0px padding
Images (Alternative 2):
Use the fluentui icons
It is recommended to use the original sources
To quickly search for Fluent Icons and possibly download them as .svg, Flicon offers a good overview
Naming Conventions
In the following, please either apply "dgt_" for internal development, or the customer specific publisher + prefix for customer projects. prfx_ is just a placeholder which should then be replaced by the corresponding publisher/prefix.
The format of the items in the following list is as follows:
Description:
example(general format)
Please apply a similar format on any new types not included in this list.
All schema names have to be snake_case (lower case)
Entity Name:
prfx_entityname([publisher]_name)Entity Image:
prfx_/Icons/Entity/entityname.svg([publisher]_/Icons/Entity/name)Global Option Set Name:
prfx_optionsetname_set([publisher]_name_set)Action Name:
prfx_some_action([publisher]_name)Field Name:
prfx_fieldname_*([publisher]_name[_type])field names should match the type pattern
Lookup:
prfx_..._idOptionSet:
prfx_..._setMultiOptionSet:
prfx_..._msetImage:
prfx_..._imgCurrency:
prfx_..._curDate Only/Date Time:
prfx_..._dtCustomer:
prfx_..._vid(virtual id)Polymorph/Multiple Lookup:
prfx_..._vidWhole Number:
prfx_..._intDuration:
prfx_..._durLanguage:
prfx_..._lcidTime Zone:
prfx_..._tzid
Decimal number:
prfx_..._decFloating point number:
prfx_..._fltTwo options:
prfx_..._bitFile:
prfx_..._fileText Area:
prfx_..._txtText:
prfx_...[_txt]Url:
prfx_..._urlPhone:
prfx_..._numbereMail:
prfx_..._email
Rollup field:
prfx_...[_type]_rfCalculated field:
prfx_...[_type]_cfFormular field:
prfx_...[_type]_fx
Long Field Name:
Max length for unique name is 41
If the generated name exceeds this length shorten it, but keep the type!
Entity Relations (recommendation):
N:1 relation:
prfx_account_to_contact_on_former_id([publisher]_[parent(lookup)]_to_[child(field)]_on_[field]; parent=1; child=N)N:N relation:
prfx_contact_to_account_by_employed([publisher]_[entity]_to_[entity]_by_[purpose])
Alternate Keys:
Alternate Key:
prfx_accountnumber_key([publisher]_[fieldname-without-prefix-and-suffix]_key)
Business Process Flow:
Name:
prfx_accountnumber_process([publisher]_[fieldname-without-prefix-and-suffix]_process)
Ribbon:
Button:
prfx.prfx_message.Button.PublishMessageFile([publisher].[entity].Button.[name])Command:
prfx.prfx_message.Command.PublishMessageFile([publisher].[entity].Command.[name])DisplayRule:
prfx.prfx_message.DisplayRule.MainFormOnly([publisher].[entity].DisplayRule.[name])EnableRule:
prfx.prfx_message.EnableRule.FormExisting([publisher].[entity].EnableRule.[name])Icons:
prfx_/Icons/Button/prfx.prfx_message.Button.PublishMessageFile.svg([publisher]_/Icons/[button-id].[suffix].[optional:dimension])
Further recommendations
For Security Roles & Rollup/Calculated Fields, you should always set the managed property "IsCustomizable" to
false