telepole in crops
blog
dynamics
export setttings
settings
documentation

Dynamics 365: Settings in Solutions

Craig SeymourMay 30th 2019

When you are exporting a solution in Dynamics 365, you can choose to include organization settings, but there’s no documentation - how do you know exactly what it is you are exporting? Craig, our Dynamics practice lead has the answers you seek...

At cloudThing, we follow the guiding principle that the deployment of D365 solutions should be automated where possible.  And if it’s not possible, figure out a way to make it possible - hence the birth of our buildThing tools.

One exception to this has been organization settings: when you are exporting a solution, you can choose to include organization settings, but there’s no documentation - how do you know exactly what it is you are exporting?

With that uncertainly, and as these settings are generally a one-off change, we’ve covered them by documenting the necessary steps in the release note.  But I’d really rather we didn’t have manual steps in the process, so when I had a bit of spare time recently I decided to take a bit of a goosey gander…

So, if you've ever wondered what's included with each checkbox, read on!

Diving in

So, how do you find out what settings are actually going to get transferred with your solution?

The first thing I tried was simply exporting the solution twice, once with the settings checked and once without. This gave the output below, but I was left a bit unsure about what each setting was and where it had come from. For example, there seemed to be a lot of settings from the UI which were missing. Perhaps it doesn't export ones which are set to the default?

<OrganizationSettings>
    <general>
      <fullnameconventioncode>1</fullnameconventioncode>
      <numberformat>us</numberformat>
      <negativeformatcode>1</negativeformatcode>
      <currencysymbol>£</currencysymbol>
      <currencyformatcode>0</currencyformatcode>
      <pricingdecimalprecision>2</pricingdecimalprecision>
      <sharetopreviousowneronassign>False</sharetopreviousowneronassign>
      <blockedattachments>

ade;adp;app;asa;ashx;asmx;asp;bas;bat;cdx;

cer;chm;class;cmd;com;config;cpl;crt;csh;

dll;exe;fxp;hlp;hta;htr;htw;ida;idc;idq;inf;

ins;isp;its;jar;js;jse;ksh;lnk;mad;maf;mag;

mam;maq;mar;mas;mat;mau;mav;maw;

mda;mdb;mde;mdt;mdw;mdz;msc;msh;

msh1;msh1xml;msh2;msh2xml;mshxml;

msi;msp;mst;ops;pcd;pif;prf;prg;printer;

pst;reg;rem;scf;scr;sct;shb;shs;shtm;shtml;

soap;stm;tmp;url;vb;vbe;vbs;vsmacros;

vss;vst;vsw;ws;wsc;wsf;wsh</blockedattachments>
      <getstartedpanecontentenabled>True</getstartedpanecontentenabled>
      <ispresenceenabled>True</ispresenceenabled>
      <isautosaveenabled>True</isautosaveenabled>
      <globalhelpurl></globalhelpurl>
      <globalhelpurlenabled>False</globalhelpurlenabled>
      <globalappendurlparametersenabled>False</globalappendurlparametersenabled>
      <istextwrapenabled>False</istextwrapenabled>
      <enablelivepersonacarduci>True</enablelivepersonacarduci>
      <allowlegacydialogsembedding>True</allowlegacydialogsembedding>
    </general>
    <calendar>
      <weekstartdaycode>0</weekstartdaycode>
      <calendartype>0</calendartype>
      <dateformatcode>2</dateformatcode>
      <dateseparator>/</dateseparator>
      <timeformatcode>0</timeformatcode>
      <showweeknumber>False</showweeknumber>
      <maxappointmentdurationdays>10</maxappointmentdurationdays>
    </calendar>
    <email>
      <trackingprefix>CRM:;</trackingprefix>
      <trackingtokenidbase>0</trackingtokenidbase>
      <trackingtokeniddigits>3</trackingtokeniddigits>
      <maximumtrackingnumber>999</maximumtrackingnumber>
      <ignoreinternalemail>False</ignoreinternalemail>
      <rendersecureiframeforemail>False</rendersecureiframeforemail>
      <allowunresolvedpartiesonemailsend>False</allowunresolvedpartiesonemailsend>
    </email>
    <marketing>
      <allowmarketingemailexecution>True</allowmarketingemailexecution>
      <allowautoresponsecreation>True</allowautoresponsecreation>
      <allowautounsubscribe>False</allowautounsubscribe>
      <allowautounsubscribeacknowledgement>False</allowautounsubscribeacknowledgement>
    </marketing>
    <customization>
      <isappmode>False</isappmode>
    </customization>
    <outlookSynchronization>
      <tagpollingperiod>600000</tagpollingperiod>
      <tagmaxaggressivecycles>2</tagmaxaggressivecycles>
      <allowoutlookscheduledsyncs>True</allowoutlookscheduledsyncs>
      <minoutlooksyncinterval>900000</minoutlooksyncinterval>
      <emailsendpollingperiod>600000</emailsendpollingperiod>
      <allowofflinescheduledsyncs>True</allowofflinescheduledsyncs>
      <minofflinesyncinterval>900000</minofflinesyncinterval>
      <allowaddressbooksyncs>True</allowaddressbooksyncs>
      <minaddressbooksyncinterval>3600000</minaddressbooksyncinterval>
    </outlookSynchronization>
    <sales>
      <useinbuiltrulefordefaultpricelistselection>True</useinbuiltrulefordefaultpricelistselection>
      <maxproductsinbundle>15</maxproductsinbundle>
      <oobpricecalculationenabled>True</oobpricecalculationenabled>
      <discountcalculationmethod>0</discountcalculationmethod>
      <maximumdynamicpropertiesallowed>50</maximumdynamicpropertiesallowed>
      <createproductswithoutparentinactivestate>False</createproductswithoutparentinactivestate>
    </sales>
  </OrganizationSettings>
  <RelationshipRoles />
  <IsvConfig>
    <configuration version="3.0.0000.0">
      <Root />
      <ServiceManagement>
        <AppointmentBook>
          <SmoothScrollLimit>2000</SmoothScrollLimit>
          <TimeBlocks>
            <TimeBlock EntityType="4214" StatusCode="1" CssClass="ganttBlockServiceActivityStatus1" />
            <TimeBlock EntityType="4214" StatusCode="2" CssClass="ganttBlockServiceActivityStatus2" />
            <TimeBlock EntityType="4214" StatusCode="3" CssClass="ganttBlockServiceActivityStatus3" />
            <TimeBlock EntityType="4214" StatusCode="4" CssClass="ganttBlockServiceActivityStatus4" />
            <TimeBlock EntityType="4214" StatusCode="6" CssClass="ganttBlockServiceActivityStatus6" />
            <TimeBlock EntityType="4214" StatusCode="7" CssClass="ganttBlockServiceActivityStatus7" />
            <TimeBlock EntityType="4214" StatusCode="8" CssClass="ganttBlockServiceActivityStatus8" />
            <TimeBlock EntityType="4214" StatusCode="9" CssClass="ganttBlockServiceActivityStatus9" />
            <TimeBlock EntityType="4214" StatusCode="10" CssClass="ganttBlockServiceActivityStatus10" />
            <TimeBlock EntityType="4201" StatusCode="1" CssClass="ganttBlockAppointmentStatus1" />
            <TimeBlock EntityType="4201" StatusCode="2" CssClass="ganttBlockAppointmentStatus2" />
            <TimeBlock EntityType="4201" StatusCode="3" CssClass="ganttBlockAppointmentStatus3" />
            <TimeBlock EntityType="4201" StatusCode="4" CssClass="ganttBlockAppointmentStatus4" />
            <TimeBlock EntityType="4201" StatusCode="5" CssClass="ganttBlockAppointmentStatus5" />
            <TimeBlock EntityType="4201" StatusCode="6" CssClass="ganttBlockAppointmentStatus6" />
          </TimeBlocks>
        </AppointmentBook>
      </ServiceManagement>
    </configuration>
  </IsvConfig>

However, when I looked online for references to the XML attributes, I found the SDK documentation for the Request classes which can be called when you are generating a Solution programmatically; They're a bit hard to digest, but they do help to understand what exactly you're going to get.

And the answer is?

The short answer is, exactly the same list as above; the longer answer is as below:

Calendar Settings

  • Organization.DateSeparator : Character used to separate the month, the day, and the year in dates throughout Microsoft Dynamics 365.

  • Organization.ShowWeekNumber : Information that specifies whether to display the week number in calendar displays throughout Microsoft CRM.

  • Organization.DateFormatCode: Information about how the date is displayed throughout Microsoft CRM. (It's not clear if this is the Short or Long format)

  • Organization.TimeFormatCode : Information that specifies how the time is displayed throughout Microsoft CRM. (It's not clear if the format includes the separator, symbols, etc)

Customisation Settings

  • Organization.IsAppMode : Indicates whether loading of Microsoft Dynamics 365 in a browser window that does not have address, tool, and menu bars is enabled.

Email Tracking Settings

  • Organization.RenderSecureIFrameForEmail : Flag to render the body of email in the Web form in an IFRAME with the security='restricted' attribute set. This is additional security but can cause a credentials prompt.

General Settings

  • Organization.NumberFormat : Specification of how numbers are displayed throughout Microsoft CRM. (It's not clear which part is encode here)

Marketing Settings

Outlook Synchronization Settings

Sales Settings

Relationship Roles

You're not still using these, right? :-)

ISV Config

If you're exporting this, you know much more about it than I do...

Conclusions

If you bothered to read all the detail above, you'll have noticed that there's a few incomplete bits, and my intended next steps were to go through and track down the missing items or uncertain items, but actually I think that I'd be wasting my time.

We can see that:

  1. Not all the visible settings in the UI under the tab of the same name as the checkbox in the Solution Export dialog are taken through (e.g. If you tick 'General' in the Solution Export, you don't get all the settings in the 'General' tab in Application Settings.
  2. Functionally related settings are scattered throughout the UI (e.g. some of the 'General' settings are in the currency and locale areas of the UI)
  3. There are settings for things which you shouldn't be using (e.g. Relationship Roles)

All of which makes me reticent to use this functionality - without careful checking, there's no certainty about which settings are actually going to make it through. And with the dynamic nature of Dynamics 365 CE updates, it could change tomorrow...

So where next? I think that cloudThing needs to write a buildThing which iterates through the the whole list of Organization Settings (not just those exposed as specific Request classes), and allows you to set them programmatically in your ALM pipeline. Watch this space ;-)

© Craig SeymourMay 30th 2019

Credits

Social

© 2019 Copyright cloudThing ltd. All rights reserved. Company registered in England & Wales no. 7510381, VAT no. 152340739