<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEMAQHY4eCp7ImA9WhRUGEk.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994</id><updated>2012-01-29T05:07:21.830-08:00</updated><category term="BC.Net" /><category term="troubleshooting" /><category term="Batch" /><category term="WebServices" /><category term="Ax2009" /><category term="divers" /><category term="architecture" /><category term="COM.BC" /><category term="Axapta 3" /><category term="AIF" /><category term="Ax4" /><title>Florian's Dynamics Ax Blog</title><subtitle type="html">Aif, WebServices, BC.Net, troubleshooting and architecture
(formerly http://blogs.msdn.com/floditt)</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://floditt.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/FloriansDynamicsAxBlog" /><feedburner:info uri="floriansdynamicsaxblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>FloriansDynamicsAxBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;CkMGQXw4eCp7ImA9WhdWGEk.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-4076104824105754083</id><published>2011-09-09T12:22:00.000-07:00</published><updated>2011-09-12T08:13:40.230-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-12T08:13:40.230-07:00</app:edited><title>Reference architecture using the Spring.Net framework with Microsoft Dynamics Ax 2012 services</title><content type="html">One month without new posting. But not because I wasn't working for this blog ;-) ...&lt;br /&gt;
&lt;a href="http://floditt.blogspot.com/2011/06/bcnet-in-dynamics-ax-2012.html"&gt;I was never a fan of the BC.Net&lt;/a&gt; and I always hoped that Microsoft would fully integrate the WCF and so fully integarte Ax into a &lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture"&gt;SOA architecture&lt;/a&gt;. With Dynamics Ax 2012 it looks like Microsoft did a great move in this direction.&lt;br /&gt;
Some years ago I worked on a .Net SOA framework for a French bank that was pretty similar to the &lt;a href="http://www.springsource.org/"&gt;Spring-framework&lt;/a&gt; which did not exist for the .Net framework at that time. When a colleague presented the &lt;a href="http://www.springframework.net/"&gt;Spring.Net framework&lt;/a&gt; 2007&amp;nbsp;(thank you, Bruno)&amp;nbsp;it was first quite frustrating, because this framework did exactly the same as the one I was working on but much better, with much more flexibility and was more reliable. For me it is still the best business framework I know and its SOA approach makes it a perfect fit with Dynamics Ax 2012. Spring.Net is not only a perfect fit because its technical arguments, but also because millions of well skilled Java developers are very quickly operational on this framework because the Spring.Net API is nearly identical with its brother from the Java-platform (and reciproke, of course).
As you can see there are a lot of arguments to do a &lt;a href="http://en.wikipedia.org/wiki/Proof_of_concept"&gt;POC&lt;/a&gt;, so that Spring.Net becomes a serious alternative when integrating Dynamics Ax 2012 in a SOA architecture. That's why I started a &lt;a href="http://ax2012springnet.codeplex.com/"&gt;new project on Codeplex&lt;/a&gt;&amp;nbsp;and&amp;nbsp;blog the next months on this POC.&lt;br /&gt;
Feel free to participate by contributing code or ideas ;-)
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-4076104824105754083?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JjR8iN7LccYP9ipMGM_Ljbll6lE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JjR8iN7LccYP9ipMGM_Ljbll6lE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JjR8iN7LccYP9ipMGM_Ljbll6lE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JjR8iN7LccYP9ipMGM_Ljbll6lE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/91aUrMR6Jvo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/4076104824105754083/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/09/reference-architecture-using-springnet.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/4076104824105754083?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/4076104824105754083?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/91aUrMR6Jvo/reference-architecture-using-springnet.html" title="Reference architecture using the Spring.Net framework with Microsoft Dynamics Ax 2012 services" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/09/reference-architecture-using-springnet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4MQnsyfCp7ImA9WhdQEEw.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-4632545496372685993</id><published>2011-08-10T14:16:00.000-07:00</published><updated>2011-08-10T14:16:23.594-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-10T14:16:23.594-07:00</app:edited><title>Why I'm using BC.Net as abbreviation for .Net Business Connector</title><content type="html">It's always painful to write (and read) the full name "Dynamics Ax .Net Business Connector" and because BC stands for "Business Connector" and because we do have a COM and a .Net Business Connectors, the easiest to write and less ambiguous abbreviation for the "Dynamics Ax .Net Business Connector" is BC.Net&lt;br /&gt;
Still wondering why I don't get much results on Google for "BC.Net" ;-)&lt;br /&gt;
&lt;br /&gt;
Alternatives would be ".NetBC" or  ".Net BC" - but seriously...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-4632545496372685993?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AyfuY1dZmPGdn_vbSwgoFy9dCwc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AyfuY1dZmPGdn_vbSwgoFy9dCwc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AyfuY1dZmPGdn_vbSwgoFy9dCwc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AyfuY1dZmPGdn_vbSwgoFy9dCwc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/ldIPPRd61oo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/4632545496372685993/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/08/why-im-using-bcnet-as-abbreviation-for.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/4632545496372685993?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/4632545496372685993?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/ldIPPRd61oo/why-im-using-bcnet-as-abbreviation-for.html" title="Why I'm using BC.Net as abbreviation for .Net Business Connector" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/08/why-im-using-bcnet-as-abbreviation-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MER3YzeCp7ImA9WhdQF00.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-1551077908515710235</id><published>2011-08-07T12:41:00.000-07:00</published><updated>2011-08-18T14:03:26.880-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-18T14:03:26.880-07:00</app:edited><title>Simplify tracking changes with sysDatabaseLog on field-level</title><content type="html">SysDatabaseLog is a great help to log any kind of data-changes and it is &lt;a href="http://seangalliher.com/?p=70"&gt;very easy to use&lt;/a&gt;. The setup of logs allows you to configure tracking the changes until the field-level. But unfortunately it is painful to look for the changes for these field-level based database-logs if the same table is already configured to track all modification because the information about the changed field is saved in a container.&amp;nbsp;Here now a suggestion to simplify the tracking and reduce the need of ressources during the data-investigation by flagging database-logs that are done on fields that are tracked:&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;i&gt;1 Add a new column&amp;nbsp;hasTrackedFieldChanged (EDT:&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/aa882754(v=AX.50).aspx"&gt;NoYesId&lt;/a&gt;) in the&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/aa660034.aspx"&gt;SysDatabaseLog&lt;/a&gt;-table&lt;/i&gt;&lt;/u&gt;&lt;br /&gt;
&lt;i&gt;&lt;u&gt;2 Create a new method&amp;nbsp;hasTrackedFieldChanged in the &lt;a href="http://msdn.microsoft.com/en-us/library/aa885903(v=AX.50).aspx"&gt;Application&lt;/a&gt;-class&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
&lt;pre class="CSharp" name="code"&gt;boolean hasTrackedFieldChanged(TableId _tableId, container changedFields, DatabaseLogType _logType)
{
    boolean hasField = false;
    DatabaseLog dbLog;//contains the information about tracked tables/ fields
    int counter;
    FieldId fieldId, extFieldId;
    ;

    if (conlen(changedFields) &gt; 0) //are there items in the container?
    {
        for(counter = 0; counter &lt;= conlen(changedFields); counter++)  // loops all elements in the container
        {
            extFieldId = conpeek(changedFields, counter); //gets the extended fieldId

            if (extFieldId != 0) //extFieldId is 0 if it concerns the entire table
            {
                fieldId = fieldExt2Id(extFieldId); //gets the fieldId based on the extFieldId

                SELECT FIRSTONLY
                    recID
                FROM
                    dbLog
                WHERE
                    dbLog.logfield == fieldId       //is the changed field in the list of tracked fields...
                    &amp;&amp; dbLog.LogTable == _tableId   //...for that table...
                    &amp;&amp; dbLog.LogType == _logType ;  //...and the current action (Update)
                if(dbLog)
                {
                    hasField = true;
                    break; //no need to continue
                }
            }
        }
    }
    return hasField;
}
&lt;/pre&gt;
&lt;u&gt;&lt;i&gt;3 Change the&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/aa862237(v=AX.50).aspx"&gt;logUpdate&lt;/a&gt;-method in the Application class&lt;/i&gt;&lt;/u&gt;
&lt;pre class="CSharp" name="code"&gt;sysDatabaseLog.hasTrackedFieldChanged =
            this.hasTrackedFieldChanged(recordUpdated.TableId, changedFields, DatabaseLogType::Update);
&lt;/pre&gt;It is now easy to filter all logs for tracked fields:
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-DyWLVBr0QxM/Tj7oqzMY2yI/AAAAAAAAAME/vQvHtfdo2aM/s1600/Dblogtracking.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="145" src="http://1.bp.blogspot.com/-DyWLVBr0QxM/Tj7oqzMY2yI/AAAAAAAAAME/vQvHtfdo2aM/s640/Dblogtracking.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-1551077908515710235?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Cwl_ufxVmCV4WnS69zE9_Oe7n-E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Cwl_ufxVmCV4WnS69zE9_Oe7n-E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Cwl_ufxVmCV4WnS69zE9_Oe7n-E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Cwl_ufxVmCV4WnS69zE9_Oe7n-E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/L-0N5FNGcdg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/1551077908515710235/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/08/simplify-tracking-changes-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/1551077908515710235?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/1551077908515710235?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/L-0N5FNGcdg/simplify-tracking-changes-with.html" title="Simplify tracking changes with sysDatabaseLog on field-level" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-DyWLVBr0QxM/Tj7oqzMY2yI/AAAAAAAAAME/vQvHtfdo2aM/s72-c/Dblogtracking.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/08/simplify-tracking-changes-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04FQH04cSp7ImA9WhdQFE4.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-3262827493152103828</id><published>2011-08-06T04:25:00.000-07:00</published><updated>2011-08-15T12:18:31.339-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-15T12:18:31.339-07:00</app:edited><title>Using ADO.Net with X++</title><content type="html">X++ is, as you know, a powerful language which allows you to do almost all reasonable things with your data. But, sometimes you need to use the full power of your SQL-Server, or access an &lt;a href="http://msdn.microsoft.com/en-us/library/ee677510.aspx"&gt;external database&lt;/a&gt;. This can be done with &lt;a href="http://msdn.microsoft.com/en-us/library/ee677510.aspx"&gt;ODBC&lt;/a&gt;&amp;nbsp;or &lt;a href="http://olondono.blogspot.com/2008/08/using-ado-for-interfacing-ax-with_04.html"&gt;ADO&lt;/a&gt;. But ODBC is not enabling you the full capacities of your database and ADO is not the most &lt;a href="http://www.rt.db.erau.edu/655s08/655webADO/index.html"&gt;performant &lt;/a&gt;way to access databases. Instead of these two&amp;nbsp;possibilities it is in most situation handier to use the &lt;a href="http://msdn.microsoft.com/en-us/library/904fck4k(v=vs.71).aspx"&gt;ADO.Net&lt;/a&gt; instead of ADO (I &lt;a href="http://blogs.msdn.com/b/floditt/archive/2008/11/04/axapta-3-ado-instead-of-odbc-or-install-the-sp6.aspx"&gt;posted an example&lt;/a&gt; in 2008 on msdn). The only thing to do in Dynamics Ax 2009 is to reference the System.Data assembly, which inclued the SQL-Server client implementation. The .Net framework includes a client for &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.oracleclient.aspx"&gt;Oracle&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/f0tse5zk.aspx"&gt;ODBC&lt;/a&gt;. Using the Oracle-client requires the assembly&amp;nbsp;System.Data.OracleClient, the ODBC is part of the System.Data assembly, like the SqlServer-client. Other providers can be found &lt;a href="http://msdn.microsoft.com/en-us/data/dd363565"&gt;here&lt;/a&gt;.&lt;br /&gt;
This sample gives you a&amp;nbsp;pretty&amp;nbsp;good idea of how to implement this on your own:&lt;br /&gt;
&lt;pre class="CSharp" name="code"&gt;public static server void ExecuteADONETQuery()
{
    str serverName;
    str catalogName;
    str ConnectionString;
    str sqlQuery;
    //ADO.Net via CLR objects. Requires referenced System.Data
    System.Data.SqlClient.SqlConnectionStringBuilder connectionStringBuilder;
    System.Data.SqlClient.SqlConnection connection;
    System.Data.SqlClient.SqlCommand command;
    System.Data.SqlClient.SqlParameterCollection parameterCollection;
    System.Data.SqlClient.SqlDataReader dataReader;
    ;
    new InteropPermission( InteropKind::ClrInterop ).assert();

    //Defining any SQL-Server 200x query....
    //use parameter instead of variables, so that the database can precompile it
    //and estimate an optimal execution plan
    sqlQuery = "SELECT DISTINCT TOP 3 PDT.ACCOUNTRELATION, PDT.ITEMRELATION,  PDT.DATAAREAID FROM PRICEDISCTABLE PDT" +
                     "   LEFT OUTER JOIN INVENTTABLE  ON (PDT.ITEMRELATION = INVENTTABLE.ITEMID " +
                     "       AND PDT.ITEMCODE = 0 " +
                     "       AND PDT.DATAAREAID = INVENTTABLE.DATAAREAID) " +
                    " WHERE PDT.DATAAREAID = @DATAAREAID ";

    //ceating the ConnectionString dynamically, based on the current connection
    serverName = SysSQLSystemInfo::construct().getLoginServer();
    catalogName = SysSQLSystemInfo::construct().getloginDatabase();
    connectionStringBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder();
    connectionStringBuilder.set_DataSource(serverName);
    //here it becomes interesting. The current execution context will be used to
    //establish a conection. If this is executed by a batch, this is the user 
    //configured for the batch
    connectionStringBuilder.set_IntegratedSecurity(true);
    connectionStringBuilder.set_InitialCatalog(catalogName);
    //all this to prevent working with a fixed string...
    //on my computer, this would be equal to
    //"Data Source=DYNAMICSVM;Initial Catalog=DynamicsAx1;Integrated Security=True"
    ConnectionString = connectionStringBuilder.get_ConnectionString();

    //initializing connection and command
    connection = new System.Data.SqlClient.SqlConnection(ConnectionString);
    command = new System.Data.SqlClient.SqlCommand(sqlQuery);
    command.set_Connection(connection);

    //initializing the parameter @DATAAREAID with AddWithValue
    //http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx
    //To prevent using the System.Data.DBTypes. These might not work on the server.
    //This will automatically set the correct DBType during the runtime and prevent running
    //into this pitfall...
    parameterCollection = command.get_Parameters();
    parameterCollection.AddWithValue("@DATAAREAID", "CEE");

    //executing SQL-query
    try
    {
        //open within catch, so that the object can correcly be disposed
        //all these try-catch are quite ennoying in X++, but this because 
        //X++ does not know finally...
        connection.Open();
        try
        {
            //All code after the open must be in a seperate catch, so that the
            //open connection-object can correcly be disposed.
            dataReader = command.ExecuteReader();

            while(dataReader.Read())
            {
                //use the named columns instead of index.
               info( dataReader.get_Item("ITEMRELATION"));
            }
            //Dispose ADO.Net objects ASAP
            dataReader.Dispose();
        }
        catch //should be more precise in a real-world application
        {
            //if exception occures while reading, DataReader need to be
            dataReader.Dispose();
        }
        catch(Exception::CLRError) //CLR exception need to be handled explicitely
        //otherwise they might be 'lost'. Happy copy&amp;amp;pasteing
        {
            //if exception occures while reading, DataReader need to be
            dataReader.Dispose();
        }
        connection.Dispose();
    }
    catch //should be more precise in a real-world application
    {
        connection.Dispose(); //disposing connection if it fails before opening it
    }
    catch(Exception::CLRError)
    {
        connection.Dispose();
    }
    command.Dispose();
    CodeAccessPermission::revertAssert();
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-3262827493152103828?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JPJmrIvFdf_gNZSSqF7pzku_y1Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JPJmrIvFdf_gNZSSqF7pzku_y1Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JPJmrIvFdf_gNZSSqF7pzku_y1Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JPJmrIvFdf_gNZSSqF7pzku_y1Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/1w8xKWvGI9A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/3262827493152103828/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/08/using-adonet-with-x.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/3262827493152103828?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/3262827493152103828?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/1w8xKWvGI9A/using-adonet-with-x.html" title="Using ADO.Net with X++" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/08/using-adonet-with-x.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYERH05eip7ImA9WhRUEUo.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-215761933581786369</id><published>2011-07-17T08:13:00.000-07:00</published><updated>2012-01-21T12:01:45.322-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-21T12:01:45.322-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><title>Redefining (mapping) Dynamics Ax EventLogs</title><content type="html">Ever tried to monitor Dynamics Ax events with a monitoring tool that does only work with EventIds? Dynamics Ax does unfortunately writes nearly all relevant events with the eventId 110 (&lt;a href="http://floditt.blogspot.com/2011/07/dynamics-ax-eventids.html"&gt;here&lt;/a&gt; a complete list). It is possible to &lt;a href="http://floditt.blogspot.com/2011/07/windows-eventlogs-with-x.html"&gt;create your own events&lt;/a&gt;, but it isn't possible to change the standard events. &lt;br /&gt;
For that reason &lt;a href="https://skydrive.live.com/redir.aspx?cid=173a12e34673a860&amp;resid=173A12E34673A860!496&amp;parid=173A12E34673A860!135&amp;authkey=!AMPtEGpQ44sI2HM"&gt;I scripted a small tool&lt;/a&gt; that collects the events that are&amp;nbsp;defined in a list (by EventId, EventType and a fragment of the EventMessage)&amp;nbsp;from a list of servers (SourceServers) &amp;nbsp;and writes them locally based on mapping rules defined in the Xml-configuration file. so that it is now possible to create fine grained eventLogs. The scripts creates for each SourceServers a cookie to store the creation-DateTime of the last message, so that the script just reads out all newly created messages. Here's an example for an configuration&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&lt;eventpackages&gt;
    &lt;eventpackage name="AxAOS110-Live"&gt;
        &lt;sourceservers&gt;
              &lt;server address="HOSTNAME" logname="Application"&gt;
        &lt;/server&gt;&lt;/sourceservers&gt;
     &lt;events destinationeventlog="Custom Events" destinationeventsource="CustomEventSource"&gt;
      &lt;event descriptionpart="RPC exception" id="180" transformedid="32470" transformedtype="Error" type="Information"&gt;
     &lt;/event&gt;&lt;/events&gt;
    &lt;/eventpackage&gt;
&lt;/eventpackages&gt;
&lt;/pre&gt;The XmlElement &lt;b&gt;SourceServers&lt;/b&gt; does define the list of servers with its &lt;i&gt;logName&lt;/i&gt; (for standard Ax EventLogs it is "Application"). The XmlElement &lt;b&gt;Events&lt;/b&gt; does define the mapping-rules with:&lt;br /&gt;
&lt;li&gt;EventId (id)&lt;/li&gt;&lt;li&gt;The part of the message (no wildcard character)&lt;/li&gt;&lt;li&gt;EventType (Information, Warning, Error)&lt;/li&gt;&lt;br /&gt;
&lt;br /&gt;
The local eventSource (defined with the attribute &lt;i&gt;destinationEventSource&lt;/i&gt; on the XmlElement Events) is automatically created if it does not already exist. The eventSource needs to be unique on the machine (1), so you can only define it once and not use it with another eventLog. You need to run the script with the EventPackage-name as argument (see documentation in the script) as with Administrator rights for the &lt;a href="http://en.wikipedia.org/wiki/User_Account_Control"&gt;UAC&lt;/a&gt;. Please be aware that the local path is actually security reasons hardcoded for:&lt;br /&gt;
&lt;pre class="CSharp" name="code"&gt;$scriptPath = "C:\Scripts\MapEventIds\";
&lt;/pre&gt;This script is just an example. Feel free to customize it for your needs.&lt;br /&gt;
&lt;br /&gt;
Update: (23/07/11)  Refactored the code so that it is now using the pipeline instead of referenced arguments. Please use the FQN instead of the IP to avoid issues with the machine name resolution. (hope that the cache on the WebServer refreshes the next hours...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-215761933581786369?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pFSQ3bmO5f-FtPLVerC9GcNTjc0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pFSQ3bmO5f-FtPLVerC9GcNTjc0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pFSQ3bmO5f-FtPLVerC9GcNTjc0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pFSQ3bmO5f-FtPLVerC9GcNTjc0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/kUc__yyt0H8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/215761933581786369/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/07/redefining-mapping-dynamics-ax.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/215761933581786369?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/215761933581786369?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/kUc__yyt0H8/redefining-mapping-dynamics-ax.html" title="Redefining (mapping) Dynamics Ax EventLogs" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/07/redefining-mapping-dynamics-ax.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4CRHk8fip7ImA9WhdTGU4.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-6805520624661875261</id><published>2011-07-17T02:06:00.000-07:00</published><updated>2011-07-17T13:02:45.776-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T13:02:45.776-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><title>Dynamics Ax EventIds</title><content type="html">The only information Google finds about Dynamics Ax EventIds from Microsot &lt;a href="http://support.microsoft.com/kb/888455/it"&gt;is in Italian&lt;/a&gt; and very old (2005). &lt;a href="http://babelfish.yahoo.com/translate_url?doit=done&amp;amp;tt=url&amp;amp;intl=1&amp;amp;fr=bf-home&amp;amp;trurl=http%3A%2F%2Fsupport.microsoft.com%2Fkb%2F888455%2Fit&amp;amp;lp=it_en&amp;amp;btnTrUrl=Translate"&gt;Translationg it with BabelFish&lt;/a&gt; gives at least the chance to understand it (for a non Italian-speaking person). Would be great if Microsoft could at least publish this document in English, which shouldn't be a big deal, since this is the same text as in the original message definition file and publish it for Ax 2009 and 2012, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-6805520624661875261?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VDmCM0cUbbBInVXI5Yl_wNyHG7I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VDmCM0cUbbBInVXI5Yl_wNyHG7I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VDmCM0cUbbBInVXI5Yl_wNyHG7I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VDmCM0cUbbBInVXI5Yl_wNyHG7I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/ZZt3ipEWxfM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/6805520624661875261/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/07/dynamics-ax-eventids.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/6805520624661875261?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/6805520624661875261?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/ZZt3ipEWxfM/dynamics-ax-eventids.html" title="Dynamics Ax EventIds" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/07/dynamics-ax-eventids.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMEQ3Y_eip7ImA9WhdREEQ.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-2186138276662678221</id><published>2011-07-16T11:40:00.000-07:00</published><updated>2011-07-31T00:30:02.842-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-31T00:30:02.842-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><title>AOS service does not stop and stays pending (what happens when the AOS stops)</title><content type="html">In &lt;a href="http://floditt.blogspot.com/2011/07/powershell-script-to-restart-windows.html"&gt;my article&lt;/a&gt; about stopping AOS services via PowerShell, I implemented a&amp;nbsp;timeout&amp;nbsp;for stopping the AOS gracefully before killing that service. In that script I set the timeout to 60 sec, which should be more then enough under normal&amp;nbsp;circumstances. If this timeout needs to be different for you, just change that. But at the end, you need to be&amp;nbsp;sure&amp;nbsp;that the AOS service is stopped, and if it isn't, the service needs to be stopped by&amp;nbsp;killing the process.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-oEANxYNcJys/TiHVCeloe7I/AAAAAAAAAMA/NZ6khFWlUv8/s1600/servicestopping.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="56" src="http://4.bp.blogspot.com/-oEANxYNcJys/TiHVCeloe7I/AAAAAAAAAMA/NZ6khFWlUv8/s320/servicestopping.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;i&gt;Why can an AOS stuck in a pending state?&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
First an&amp;nbsp;explanation&amp;nbsp;what the AOS does when it is stopped: The AOS is managed by the service control manager&amp;nbsp;(&lt;a href="http://msdn.microsoft.com/en-us/library/ms685150(v=vs.85).aspx"&gt;MSDN&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/Service_Control_Manager"&gt;Wiki&lt;/a&gt;) (SCM). This SCM does send the messages STOP, PAUSE, CONTINUE and SHUTDOWN to the AOS, which does react on these messages. In my script, I'm using the .Net class&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller(v=VS.90).aspx"&gt;ServiceController&lt;/a&gt;&amp;nbsp;to work with the SCM in a very&amp;nbsp;comfortable&amp;nbsp;way because the .Net class wraps the Win32 API (&lt;a href="http://pinvoke.net/default.aspx/advapi32.OpenSCManager"&gt;PInvoke&lt;/a&gt;) and&amp;nbsp;guarantees&amp;nbsp;you a safe way to work with windows services. By calling the &lt;a href="http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.stop(v=VS.90).aspx"&gt;Stop&lt;/a&gt;&amp;nbsp;method, the script just sends a STOP message via SCM to the AOS and, if the main-thread of the AOS service does have time to handle that message, it will set the first set the service in a pending state and then trigger the Shutdown. The shutdown of an AOS does first interrupt all user sessions (you might find this message in the event-log: "Object Server 01: RPC error: Client provided an invalid session ID 9") , then terminates the server session ("Object Server 01: Server main session is being destroyed.") and once all these sessions are closed, it will then &lt;a href="http://msdn.microsoft.com/en-us/library/aa378446(v=vs.85).aspx"&gt;remove the RPC&lt;/a&gt; interface from the RPC run-time library registry and then &lt;a href="http://msdn.microsoft.com/en-us/library/aa375793(v=vs.85).aspx"&gt;stop listening to the RPC&lt;/a&gt; calls. Only then the SCM sets the status of the AOS to stopped. (&lt;a href="http://msdn.microsoft.com/en-us/library/aa378687(v=vs.85).aspx"&gt;This article on MSDN&lt;/a&gt; shows in a very simple example what the AOS does for disposing the RPC, too).&lt;br /&gt;
So there shouldn't be any problem when stopping the AOS, but unfortunately the AOS does sometimes not succeed to stop the service gracefully and this happens only from time to time when the AOS is under stress and it is therefore difficult to reproduce. But because the&amp;nbsp;shutdown waits until the &lt;a href="http://sysserversessions/"&gt;ServerSession&lt;/a&gt; is terminated, it is enough to freeze the thread of the AOS session with a &lt;a href="http://msdn.microsoft.com/en-us/library/aa867595.aspx"&gt;sleep&lt;/a&gt;.&lt;br /&gt;
&lt;pre class="c-sharp" name="code"&gt;public server static void FreezeAOSSessionThread()
{
    ;
    sleep(60000);
}
&lt;/pre&gt;Calling the sleep on the client wouldn't work, because the client-sessions are killed. In no case, the client can prevent the AOS to stop and hold him in a pending state (In all cases I could track back, the situation on the AOS was similar: The AOS-session could not be terminated). If you are looking for the cause, take a &lt;a href="http://support.microsoft.com/kb/286350/en-us"&gt;dump with ADPlus&lt;/a&gt; from the AOS and check the &lt;a href="http://blogs.msdn.com/b/emeadaxsupport/archive/2011/04/10/finding-the-x-call-stack-that-caused-a-crash.aspx"&gt;X++ call stack&lt;/a&gt;. Once again, thank you Tariq... Attach AdPlus to the process and kill the process with the task-manager. The dump will then automatically taken.&lt;br /&gt;
Killing the AOS might terminate open connections to the SQL-Server as well. But because CUD (create, update and delete) operations are done within transactions, killing the AOS-service shouldn't break the &lt;a href="http://en.wikipedia.org/wiki/Database_integrity"&gt;database integrety&lt;/a&gt; - if no custom code breaks this best-practice. Just keep in mind that you will loose all data of non-committed transactions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-2186138276662678221?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OsGyrXy6hankFmo0LY6Sr5EnOSE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OsGyrXy6hankFmo0LY6Sr5EnOSE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OsGyrXy6hankFmo0LY6Sr5EnOSE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OsGyrXy6hankFmo0LY6Sr5EnOSE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/bvQoPdkUXHw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/2186138276662678221/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/07/aos-service-does-not-stop-and-stays.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/2186138276662678221?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/2186138276662678221?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/bvQoPdkUXHw/aos-service-does-not-stop-and-stays.html" title="AOS service does not stop and stays pending (what happens when the AOS stops)" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-oEANxYNcJys/TiHVCeloe7I/AAAAAAAAAMA/NZ6khFWlUv8/s72-c/servicestopping.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/07/aos-service-does-not-stop-and-stays.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4NQ3szeyp7ImA9WhdTGU4.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-7987942444525492065</id><published>2011-07-14T14:21:00.000-07:00</published><updated>2011-07-17T13:03:12.583-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T13:03:12.583-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="divers" /><title>My first AIF project is finally flying :-)</title><content type="html">Finishing a project is always the most thrilling moment in a project. Seeing finally the application been used by customers and colleagues is just magic and the major&amp;nbsp;reason&amp;nbsp;for me&amp;nbsp;to work in the IT...&lt;br /&gt;
7 months of hard work and the new &lt;a href="http://en.wikipedia.org/wiki/Electronic_Data_Interchange"&gt;EDI &lt;/a&gt;platform for the purchase and sales process is finally flying. The publicly visible part of the &lt;a href="http://en.wikipedia.org/wiki/Electronic_commerce"&gt;eCommerce &lt;/a&gt;is the &lt;a href="http://webshop.de.camfilfarr.net/start"&gt;WebShop&lt;/a&gt; which is a custom &lt;a href="http://msdn.microsoft.com/en-us/library/ywdtth2f(v=VS.90).aspx"&gt;.Net Web-application &lt;/a&gt;that is communicating via &lt;a href="http://en.wikipedia.org/wiki/Microsoft_BizTalk_Server"&gt;BizTalk &lt;/a&gt;with the AIF framework. Because of the quite disappointing &lt;a href="http://msdn.microsoft.com/en-us/library/bb496530(v=AX.50).aspx"&gt;standard AIF-services&lt;/a&gt;, I decided to create a complete new EDI-platform on top of AIF. The platform is now online for the German subsidiary of &lt;a href="http://www.camfilfarr.com/corporate/Camfil-Farr---Global/"&gt;Camfil&lt;/a&gt;, but it will be soon rolled out in most other European countries.&amp;nbsp;I hope I will find the time to blog about some of the strategic key elements of that architecture in the next weeks (why not using the Enterprise Portal or the standard AIF services, how to prevent performance bottle necks, testing AIF services and integrating EDI smoothly into standard processes)&lt;br /&gt;
A big thank you, Mathias, Alex, Sebastian, Markus, Peter and Bettina,&amp;nbsp;for all your great work&amp;nbsp;:-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-7987942444525492065?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/28jGFMs31yBS16tCiY0cf-7I68c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/28jGFMs31yBS16tCiY0cf-7I68c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/28jGFMs31yBS16tCiY0cf-7I68c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/28jGFMs31yBS16tCiY0cf-7I68c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/a_z_s-9eLfk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/7987942444525492065/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/07/my-first-aif-project-is-finally-flying.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/7987942444525492065?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/7987942444525492065?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/a_z_s-9eLfk/my-first-aif-project-is-finally-flying.html" title="My first AIF project is finally flying :-)" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/07/my-first-aif-project-is-finally-flying.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcFQ344eyp7ImA9WhdTGU4.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-1458112520919678989</id><published>2011-07-13T11:41:00.000-07:00</published><updated>2011-07-17T13:03:32.033-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T13:03:32.033-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="divers" /><title>Windows PowerShell Cookbook</title><content type="html">Because I already &lt;a href="http://floditt.blogspot.com/2011/07/powershell-script-to-restart-windows.html"&gt;blogged about PowerShell-scripts&lt;/a&gt; for administration tasks, &lt;a href="http://www.pavleck.net/powershell-cookbook/"&gt;here a link to great online-book&lt;/a&gt; from Lee Holmes about everything you need to know about programming PowerShell and much, much more. You can order it on &lt;a href="http://www.amazon.com/gp/product/0596801505?ie=UTF8&amp;amp;tag=preciscomput-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596801505"&gt;Amazon&lt;/a&gt;, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-1458112520919678989?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/O_xIZDtKF8a76iSW6M2aIQEMtDs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O_xIZDtKF8a76iSW6M2aIQEMtDs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/O_xIZDtKF8a76iSW6M2aIQEMtDs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O_xIZDtKF8a76iSW6M2aIQEMtDs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/nYXPJsrM2YA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/1458112520919678989/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/07/windows-powershell-cookbook.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/1458112520919678989?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/1458112520919678989?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/nYXPJsrM2YA/windows-powershell-cookbook.html" title="Windows PowerShell Cookbook" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/07/windows-powershell-cookbook.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04DQ3YzeCp7ImA9WhRUEUo.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-6277943188249096026</id><published>2011-07-12T13:23:00.000-07:00</published><updated>2012-01-21T11:59:32.880-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-21T11:59:32.880-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><title>Windows EventLogs with X++</title><content type="html">&lt;a href="https://skydrive.live.com/redir.aspx?cid=173a12e34673a860&amp;resid=173A12E34673A860!500&amp;parid=173A12E34673A860!135&amp;authkey=!AP8svx-BP94bwUU"&gt;Here's a very small and simple class&lt;/a&gt; that makes it very easy to use the &lt;a href="http://en.wikipedia.org/wiki/Event_Viewer"&gt;Windows EventLogs&lt;/a&gt; with X++. It creates, if necessary, a new log/source and logs the events there:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-XY3LXpyp58o/ThyqtYDHUiI/AAAAAAAAALk/uLjsa09153I/s1600/Events.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="106" src="http://3.bp.blogspot.com/-XY3LXpyp58o/ThyqtYDHUiI/AAAAAAAAALk/uLjsa09153I/s400/Events.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Just derive from the abstract base-class "WinEventLogsBase" (as&amp;nbsp;it is done in WinEventLogs_Batches)&amp;nbsp;and overwrite the log/source and messageId, so that your events are unique.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-2Jpzz7nrg48/TiFIfMegeLI/AAAAAAAAAL8/UBAh_I2-sKQ/s1600/XppEventLogs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="294" src="http://4.bp.blogspot.com/-2Jpzz7nrg48/TiFIfMegeLI/AAAAAAAAAL8/UBAh_I2-sKQ/s400/XppEventLogs.png" width="268" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The job TestEventLogs is an example how to write EventLogs:&lt;br /&gt;
&lt;pre class="c-sharp" name="code"&gt;static void TestEventLogs(Args _args)
{
    WinEventLogsBase logs;
    System.Diagnostics.EventLogEntryType type = System.Diagnostics.EventLogEntryType::Error;
    System.Int32 eventId = 110;
;
    //Works well, but in the EventLog for Workflow events
    SysWorkflowHelper::writeEventLogEntry("Test simple error from Workflow.");

    //uses the EventSource for the Dynamics Server with the instance suffix to write a message
    System.Diagnostics.EventLog::WriteEntry("Dynamics Server 01", "Test simple error with WriteEntry.");
    //will result in:
    //The description for Event ID ( 0 ) in Source ( Dynamics Server 01 ) cannot be found.
    //because this source is linked to the ressource:
    //C:\Program Files\Microsoft Dynamics AX\50\Server\DynamicsAx1\Bin\Ax32Serv.exe
    //in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\Dynamics Server 01
    //which doesn't know how to handle that EventId

    //now by selecting the Dynamics Ax standard EventId 110:
    System.Diagnostics.EventLog::WriteEntry("Dynamics Server 01", "Test simple error with WriteEntry.", type, eventId);
    //Works pretty fine, but: always the same EventSource and EventId, which is not possible to track for many
    //monitoring tools like for example Heroix Longitude which do only interpret the EventId.

    //now that little tool:
    logs = new WinEventLogs_Batches(); //specialization for logs

    //WinEventLogs_Batches uses an EventSource and EventLog on its own
    logs.writeError("Test simple error");  //uses a default EventId
    logs.writeInfo("Test simple info", 4711); //uses an explicit EventId
    logs.writeWarning("Test simple warning");

    logs = new WinEventLogs_Test(); //specialization that uses the Eventlog "Application" for the source

    //WinEventLogs_Test uses its own EventSource but "Application" as EventLog
    logs.writeError("Test simple error");
    logs.writeInfo("Test simple info", 4712);
    logs.writeWarning("Test simple warning");
    //because this tool links the registered EventSource to:
    //c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll
    //it is now possible to use any custom EventId which is not predifined in the resource like in the
    //first example.
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-6277943188249096026?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P8FopKU8UFTFQEJAqZkYNhDwLwA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P8FopKU8UFTFQEJAqZkYNhDwLwA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P8FopKU8UFTFQEJAqZkYNhDwLwA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P8FopKU8UFTFQEJAqZkYNhDwLwA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/JfEXyG-aWoQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/6277943188249096026/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/07/windows-eventlogs-with-x.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/6277943188249096026?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/6277943188249096026?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/JfEXyG-aWoQ/windows-eventlogs-with-x.html" title="Windows EventLogs with X++" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-XY3LXpyp58o/ThyqtYDHUiI/AAAAAAAAALk/uLjsa09153I/s72-c/Events.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/07/windows-eventlogs-with-x.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMNRn49eyp7ImA9WhdSF0U.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-3884851625205952292</id><published>2011-07-10T10:14:00.001-07:00</published><updated>2011-07-27T10:24:57.063-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-27T10:24:57.063-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><title>Authenticating a user with user-name and password against Windows with X++</title><content type="html">The &lt;a href="http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement(v=VS.90).aspx"&gt;AccountManagement &lt;/a&gt;Namespace was introduced with .Net 3.5 and provides some very useful classes which are, by&lt;a href="http://www.axaptapedia.com/.NET_Integration"&gt; referencing this assembly&lt;/a&gt;, available with X++, as well. At least if you've installed .Net 3.5.&lt;br /&gt;
&lt;br /&gt;
Here's an example how to authenticate a username and password against Windows with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.principalcontext(v=VS.90).aspx"&gt;PrincipalContext &lt;/a&gt;class and the &lt;a href="http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.principalcontext.validatecredentials(v=VS.90).aspx"&gt;ValidateCredentials&lt;/a&gt;-method. &lt;br /&gt;
&lt;pre class="c-sharp" name="code"&gt;boolean isAuthenticated = false;
System.DirectoryServices.AccountManagement.PrincipalContext principalContext;
;

principalContext = new System.DirectoryServices.AccountManagement.PrincipalContext(System.DirectoryServices.AccountManagement.ContextType::Domain, "contoso.com");
isAuthenticated = principalContext.ValidateCredentials("username", "password");
principalContext.Dispose();

if (isAuthenticated)
{
    //do something
}
else
{
    //do something
}
&lt;/pre&gt;&lt;br /&gt;
Update: (15/07/11) And bcause of the Google search keywords: The username and password for the contoso.com VPC are Administrator and Passw0rd (or pass@word1 depends on the vpc) ... ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-3884851625205952292?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/R2EFteUDUwxEuOkDHXHsylHQyOY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/R2EFteUDUwxEuOkDHXHsylHQyOY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/R2EFteUDUwxEuOkDHXHsylHQyOY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/R2EFteUDUwxEuOkDHXHsylHQyOY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/RbERl2cQ5_U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/3884851625205952292/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/07/authenticating-user-with-user-name-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/3884851625205952292?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/3884851625205952292?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/RbERl2cQ5_U/authenticating-user-with-user-name-and.html" title="Authenticating a user with user-name and password against Windows with X++" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/07/authenticating-user-with-user-name-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUGQ304fCp7ImA9WhdSFkQ.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-6433203022044787908</id><published>2011-07-09T03:28:00.000-07:00</published><updated>2011-07-26T09:20:22.334-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-26T09:20:22.334-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><title>Authentication of the different components in Ax 2009</title><content type="html">One of the most&amp;nbsp;annoying&amp;nbsp;subjects in Ax2009 is &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=2960"&gt;installing and configuring the&amp;nbsp;huge&amp;nbsp;number of components&lt;/a&gt;&amp;nbsp;which do need to&amp;nbsp;authenticate&amp;nbsp;each other. There are &lt;a href="http://en.wikipedia.org/wiki/SQL_Server_Reporting_Services"&gt;Reporting Services&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Analysis_Services"&gt;Analysis Services&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/SharePoint_Services"&gt;SharePoint Services&lt;/a&gt; (or &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Office_SharePoint_Server"&gt;MOSS&lt;/a&gt;) on &lt;a href="http://en.wikipedia.org/wiki/Internet_Information_Services"&gt;IIS&lt;/a&gt;, AIF &lt;a href="http://en.wikipedia.org/wiki/MSMQ"&gt;MSMQ&lt;/a&gt;, AIF WebServices, AIF &lt;a href="http://en.wikipedia.org/wiki/Microsoft_BizTalk_Server"&gt;BTS&lt;/a&gt;, the Ax AOS, &amp;nbsp;Internet&amp;nbsp;Explorer, &lt;a href="http://en.wikipedia.org/wiki/Server_Message_Block"&gt;SMB &lt;/a&gt;for the application file-share and the Ax client (some do have BC.Net applications as well). If they are all installed &lt;a href="http://technet.microsoft.com/en-us/library/dd309706(AX.50).aspx"&gt;on one box&lt;/a&gt;, this is quite easy to maintain. But a &lt;a href="http://technet.microsoft.com/en-us/library/dd309710(AX.50).aspx"&gt;distributed installation&lt;/a&gt; (especially &lt;a href="http://technet.microsoft.com/en-us/library/dd309620(AX.50).aspx"&gt;on a large scale&lt;/a&gt;) is&amp;nbsp;extremely&amp;nbsp;complicated and requires a profound understanding of &lt;a href="http://en.wikipedia.org/wiki/Kerberos_(protocol)"&gt;Kerberos &lt;/a&gt;authentication. &amp;nbsp;Because I recently had to find an issue on my erroneous installation, here's a nice schema of my current Ax 2009 configuration which might help you as well:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-V08tunJIyoY/ThgtClOVs4I/AAAAAAAAALc/Yfo691ezXXs/s1600/Axapta+2009.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-V08tunJIyoY/ThgtClOVs4I/AAAAAAAAALc/Yfo691ezXXs/s1600/Axapta+2009.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-6433203022044787908?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KL-oT4Aw9PhQsCB_prdpUsl7nHk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KL-oT4Aw9PhQsCB_prdpUsl7nHk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KL-oT4Aw9PhQsCB_prdpUsl7nHk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KL-oT4Aw9PhQsCB_prdpUsl7nHk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/6t7XK1zyqlc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/6433203022044787908/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/07/authentication-of-different-components.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/6433203022044787908?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/6433203022044787908?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/6t7XK1zyqlc/authentication-of-different-components.html" title="Authentication of the different components in Ax 2009" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-V08tunJIyoY/ThgtClOVs4I/AAAAAAAAALc/Yfo691ezXXs/s72-c/Axapta+2009.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/07/authentication-of-different-components.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQHRHYyfyp7ImA9WhRUEUo.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-1054467415372439173</id><published>2011-07-06T15:07:00.000-07:00</published><updated>2012-01-21T12:05:35.897-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-21T12:05:35.897-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><title>PowerShell script to restart Windows (AOS) services remotely</title><content type="html">&lt;div style="margin: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Just a small script to restart a list of Windows-services (&lt;a href="https://skydrive.live.com/redir.aspx?cid=173a12e34673a860&amp;resid=173A12E34673A860!498&amp;parid=173A12E34673A860!135&amp;authkey=!AG35_r72QWzErgY"&gt;download here&lt;/a&gt;). It checks that they are stopped and kills them if they cannot be stopped and then starts them. If there are any errors, an email is sent and the user is informed about the progress in the tray-bar. All this is configurable in an Xml-file. It's a small script and should only be used as an example of how the PowerShell can be useful for the daily business (please understand that I don't publish the final version):&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;stopping and starting services remotely&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;killing a process remotely&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;getting ProcessId from service-name&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;sending a mail&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;executing WMI queries on remote machines&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;pinging machines&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Info-bubble in the tray bar&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;creating and writing into EventLogs&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;handling exceptions&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;working with Xml-files&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;passing parameter to a function&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;working with ref-variables&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;Update: (09/07/11) Updated script with some fixes and changes in the behavior.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;Update: (10/07/11)&amp;nbsp; As this was my first experience with PowerShell scripting, I rewrote the script with all what I learned during these days. The script does now restart remotely in a controlled way the services and tracks all info about the executed&amp;nbsp;activities&amp;nbsp;and anomalies during this process.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;Update: (23/07/11)&amp;nbsp; Still novice with PowerShell... :-( Refactored the code so that it is now using the pipeline instead of referenced arguments.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-1054467415372439173?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/K4vf973UxhWgPp53LZk2YSoOX14/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K4vf973UxhWgPp53LZk2YSoOX14/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/K4vf973UxhWgPp53LZk2YSoOX14/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K4vf973UxhWgPp53LZk2YSoOX14/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/fwps1IEpiRY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/1054467415372439173/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/07/powershell-script-to-restart-windows.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/1054467415372439173?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/1054467415372439173?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/fwps1IEpiRY/powershell-script-to-restart-windows.html" title="PowerShell script to restart Windows (AOS) services remotely" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/07/powershell-script-to-restart-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcCQ3o9eyp7ImA9WhdTGU4.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-2294228100315958574</id><published>2011-07-02T13:44:00.000-07:00</published><updated>2011-07-17T13:04:22.463-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T13:04:22.463-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Batch" /><title>Links about the Ax 2009 batch-framework</title><content type="html">Some interesting links:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Tariq wrote on the &lt;a href="https://blogs.msdn.com/b/emeadaxsupport/"&gt;EMEA DAX support blog&lt;/a&gt; &lt;a href="https://blogs.msdn.com/b/emeadaxsupport/archive/2011/02/22/how-batch-processing-works-under-the-hood-ax2009.aspx"&gt;an interesting article&lt;/a&gt; about how batches are processed in Ax2009. Thanks a lot for that, Tariq :-)&lt;/li&gt;
&lt;li&gt;A nice &lt;a href="http://msdn.microsoft.com/en-us/library/cc588679.aspx"&gt;How-To about debugging batches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Processing &lt;a href="http://blogs.msdn.com/b/emeadaxsupport/archive/2009/06/16/how-to-run-client-batches-on-ax-2009.aspx"&gt;batches on clients&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Tom Stumpf (&lt;a href="http://blogs.msdn.com/b/axinthefield/"&gt;Ax in the field&lt;/a&gt;) on Ax &lt;a href="http://blogs.msdn.com/b/axinthefield/archive/2011/03/25/optimizing-ax-batch-performance-using-batch-group-configurations.aspx"&gt;batch performance tuning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;How to &lt;a href="http://axforum.info/forums/showthread.php?t=15116"&gt;start a specific Batch Group during Startup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.artofcreation.be/2010/10/03/batch-multithreading/"&gt;Multithreading in Batches&lt;/a&gt; on&amp;nbsp;&lt;a href="http://www.artofcreation.be/"&gt;Art Of Creation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-2294228100315958574?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V5yc5klJyfES7M1qBhMQKk5p19s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V5yc5klJyfES7M1qBhMQKk5p19s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V5yc5klJyfES7M1qBhMQKk5p19s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V5yc5klJyfES7M1qBhMQKk5p19s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/2m1ngHi-DY8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/2294228100315958574/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/07/links-about-ax-2009-batch-framework.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/2294228100315958574?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/2294228100315958574?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/2m1ngHi-DY8/links-about-ax-2009-batch-framework.html" title="Links about the Ax 2009 batch-framework" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/07/links-about-ax-2009-batch-framework.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMFRXY4eyp7ImA9WhRUEUo.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-7076562608226511029</id><published>2011-06-26T05:35:00.000-07:00</published><updated>2012-01-21T12:06:54.833-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-21T12:06:54.833-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AIF" /><title>Batchable AxdSend-class in Ax2009 and Ax2012</title><content type="html">The &lt;a href="http://msdn.microsoft.com/en-us/library/aa628527.aspx"&gt;AxdSend&lt;/a&gt;-class is a very easy to implement class, that helps you writing outbound services for Dynamics Ax 2009 and 2012. The &lt;a href="http://msdn.microsoft.com/en-us/library/cc556413.aspx"&gt;AxdSendExchangeRates&lt;/a&gt;-class from Ax 2009 (not existing in Ax 2012 anymore) gives you an idea of how to use this class. Unfortunately there are some reasons why the AxdSend-class cannot run as-is in batches:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;The base class: The AxdSend-class needs to derive from &lt;a href="http://msdn.microsoft.com/en-us/library/aa864002.aspx"&gt;RunBaseBatch&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The dialog: The dialog is built on the&amp;nbsp;axdSend-form which does not provide the 'tab'-control for the RunBaseBatch-dialog. This form needs to be modified by adding a new tab-control named 'tab'. Otherwise you would get an exception from the &lt;a href="http://msdn.microsoft.com/en-us/library/aa657588.aspx"&gt;buildControl&lt;/a&gt;-method in the &lt;a href="http://msdn.microsoft.com/en-us/library/aa605480.aspx"&gt;DialogForm&lt;/a&gt;-class. Btw: The name 'tab' is hardcoded in the &lt;a href="http://msdn.microsoft.com/en-us/library/aa847469.aspx"&gt;tabName&lt;/a&gt;-method of the same class.&lt;/li&gt;
&lt;li&gt;The method&amp;nbsp;sendMultipleDocuments: calling this method results in calling the &lt;a href="http://msdn.microsoft.com/en-us/library/aa678813.aspx"&gt;run&lt;/a&gt;-method, and, as you know, batches are executed by calling the run-method...&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;Changing this would let the AxdSend-class be 'batchable', but unfortunately the class wouldn't be executable in the interactive mode anymore. This, because the dialog form from the AxdSend, which is opened by calling the &lt;a href="http://msdn.microsoft.com/en-US/library/aa879577.aspx"&gt;prompt&lt;/a&gt;-method, requires these members being initialized:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;aifDocumentClassId&lt;/li&gt;
&lt;li&gt;serviceClassId&lt;/li&gt;
&lt;li&gt;aifConstraintList&lt;/li&gt;
&lt;li&gt;aifSendMode&lt;/li&gt;
&lt;li&gt;sendActionType&lt;/li&gt;
&lt;li&gt;aifActionId&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;My suggestion here is to create a new base-class for batchable AxdSend-classes to isolate these modifications as much as possible. You can &lt;a href="https://skydrive.live.com/redir.aspx?cid=173a12e34673a860&amp;resid=173A12E34673A860!499&amp;parid=173A12E34673A860!135&amp;authkey=!AJParnK6bp33sZ8"&gt;download a private project&lt;/a&gt;&amp;nbsp; that contains my modifications/new classes&amp;nbsp;for Ax2009&amp;nbsp;in all concerned AOT-objects:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;AxdSend-class&lt;/li&gt;
&lt;li&gt;axdSend-form&lt;/li&gt;
&lt;li&gt;AxdBatchableSend-class (custom base-class)&lt;/li&gt;
&lt;li&gt;AxdSendExchangeRates as an example how to use the&amp;nbsp;AxdBatchableSend class&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;The batch will use the endpoint that is stored in the usage-data. So the batch needs to be executed at least once in the interactive mode.&lt;br /&gt;
Important&amp;nbsp;note:&lt;br /&gt;
Importing this project will overwrite these objects and overwrite all modifications in the same layer, too. Please be careful when importing the project.&lt;br /&gt;
These modifications are not compatible with Ax2012, but it requires only slight changes to adapt this to Ax2012. I will upload a project for Ax2012 once Ax2012 is released.&lt;br /&gt;
&lt;br /&gt;
Update: (30/06/11) I fixed an issue with the&amp;nbsp;initialization&amp;nbsp;of the endpoint-list.&lt;br /&gt;
Update: (02/07/11) Ups, fixed an issue with the dialog&amp;nbsp;initialization.&lt;br /&gt;
Update: (04/07/11) Sends only message if query returns more than one element.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-7076562608226511029?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/E7Wv3qiqaHNmrauvEW1Xa4jAaDc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/E7Wv3qiqaHNmrauvEW1Xa4jAaDc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/E7Wv3qiqaHNmrauvEW1Xa4jAaDc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/E7Wv3qiqaHNmrauvEW1Xa4jAaDc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/xEOrHbumgXQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/7076562608226511029/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/06/batchable-axdsend-class.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/7076562608226511029?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/7076562608226511029?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/xEOrHbumgXQ/batchable-axdsend-class.html" title="Batchable AxdSend-class in Ax2009 and Ax2012" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/06/batchable-axdsend-class.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcMQHY-eyp7ImA9WhdTGU4.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-2818817522782517325</id><published>2011-06-19T08:43:00.000-07:00</published><updated>2011-07-17T13:04:41.853-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T13:04:41.853-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BC.Net" /><title>The BC.Net in Dynamics Ax 2012</title><content type="html">I've never been a fan of using the BC.Net in client applications. It's true that this is a very easy to use interface, but in most use-cases the Ax-client or the AIF are a better choice. The BC.Net is in fact a regular Ax-client without UI (user interface) and this means that it requires such an installation with the application that has been written - with all the constraints of the Ax-client plus some BC.Net specific ones:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Local BC.Net installation (not easily maintainable when deploying on a larger scale)&lt;/li&gt;
&lt;li&gt;Dynamics Ax 2009 doesn't support side-by-side installations of clients (inflexible architecture)&lt;/li&gt;
&lt;li&gt;RPC-protocol (constraint for the infrastructure: Firewall)&lt;/li&gt;
&lt;li&gt;No multi-threading (lousy performance). Using multi-threading with the BC.Net results always in exceptions.&lt;/li&gt;
&lt;li&gt;No session-management. Only one session at a time. (no scalability) A very complex session-management needs to be written.&lt;/li&gt;
&lt;li&gt;No contract for the method and its signature (difficultly&amp;nbsp;maintainable when application changes over the time) as it is available with the AIF (service+Xsd or Wsdl with AIF-WebServices)&lt;/li&gt;
&lt;li&gt;BC.Net requires the Enterprise Portal license when hosted by the IIS (this&amp;nbsp;constraint&amp;nbsp;is hardcoded in the BC.Net)&lt;/li&gt;
&lt;/ol&gt;I wasn't surprised when I read that &lt;a href="http://dynamics-ax.blogspot.com/2011/05/net-business-connector-not-recommend.html"&gt;the BC.Net is no longer recommended&lt;/a&gt; to be used directly. The future is services + WCF. I would even say, that the use of the BC.Net should already be avoided&amp;nbsp;whenever possible today. The AIF does offer you many possibilities for doing it today and&amp;nbsp;the standard Ax client is&amp;nbsp;for most other situations good-enough...&lt;br /&gt;
&lt;br /&gt;
PS: And don't forget that there is no COM.BC available with Dynamics Ax 2012.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-2818817522782517325?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/X6Wxz_NmmxRL3YDPWQRdVKTjaNk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X6Wxz_NmmxRL3YDPWQRdVKTjaNk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/X6Wxz_NmmxRL3YDPWQRdVKTjaNk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X6Wxz_NmmxRL3YDPWQRdVKTjaNk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/R3rABmOx0TE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/2818817522782517325/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/06/bcnet-in-dynamics-ax-2012.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/2818817522782517325?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/2818817522782517325?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/R3rABmOx0TE/bcnet-in-dynamics-ax-2012.html" title="The BC.Net in Dynamics Ax 2012" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/06/bcnet-in-dynamics-ax-2012.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcNQXo8fSp7ImA9WhdTGU4.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-7669744124638058435</id><published>2011-06-19T06:09:00.000-07:00</published><updated>2011-07-17T13:04:50.475-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T13:04:50.475-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AIF" /><title>Exporting AIF endpoints with Dynamics Ax 2012</title><content type="html">What a good news in Dynamics Ax 2012! The nightmare while deploying AIF endpoints has finally an end and you do&amp;nbsp;obviously&amp;nbsp;not need to be worried about changed classIDs and RefRecIds (AifDataPolicy does reference AifDocumentField by the RecId) anymore. &lt;a href="http://technet.microsoft.com/en-us/library/aa834357(AX.60).aspx"&gt;Here's a guide&lt;/a&gt; how to export the endpoints by definition groups in Ax 2012 on Msdn.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-7669744124638058435?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3PZagIkBfM1eArnlWC9vfdJWQ4o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3PZagIkBfM1eArnlWC9vfdJWQ4o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3PZagIkBfM1eArnlWC9vfdJWQ4o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3PZagIkBfM1eArnlWC9vfdJWQ4o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/sZASTT6CheY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/7669744124638058435/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/06/exporting-aif-enpoints-with-dynamics-ax.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/7669744124638058435?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/7669744124638058435?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/sZASTT6CheY/exporting-aif-enpoints-with-dynamics-ax.html" title="Exporting AIF endpoints with Dynamics Ax 2012" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/06/exporting-aif-enpoints-with-dynamics-ax.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYNQHs5fSp7ImA9WhdTGUw.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-7213927633795244958</id><published>2011-06-19T04:11:00.000-07:00</published><updated>2011-07-17T08:56:31.525-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T08:56:31.525-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BC.Net" /><title>.Net 4.0 client profile not enough for the Dynamics Ax BC.Net</title><content type="html">On &lt;a href="http://daxdilip.blogspot.com/"&gt;Dilip's blog on Dynamics Ax&lt;/a&gt;, Dilip suggests in &lt;a href="http://daxdilip.blogspot.com/2011/06/tip-visual-studio-2010-ultimate-and.html"&gt;his article&lt;/a&gt;&amp;nbsp;on BC.Net compatibility settings, to switch from .Net Framework 4.0 Client Profile to .Net Framework 3.5 with the argument, that this makes sense because the BC.Net is compiled on top of the .Net 3.5 Framework.&lt;br /&gt;
&lt;div&gt;I was surprised reading this, because Microsoft promised&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ff602939.aspx"&gt;backward compatibility and the .NET Framework 4&lt;/a&gt;:&lt;/div&gt;&lt;blockquote&gt;The .NET Framework 4 is backward-compatible with applications that were built with the .NET Framework versions 1.1, 2.0, 3.0, and 3.5. In other words, applications and components built with previous versions of the .NET Framework will work on the .NET Framework 4.&lt;/blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Segoe UI', Verdana, Arial; font-size: 13px;"&gt;The errormessage when compiling the BC.Net application against the .Net 4.0 client was:&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Segoe UI', Verdana, Arial; font-size: 13px;"&gt;...could not be resolved because it has a dependency on "System.Web....&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;So why do BC.Net projects don't compile with client profiles ? To answer this, browse through the BC.Net assembly with the &lt;a href="http://www.reflector.net/"&gt;.Net Reflector&lt;/a&gt; or, because it's open-source and free:&amp;nbsp;&lt;a href="http://wiki.sharpdevelop.net/ILSpy.ashx"&gt;ILSpy&lt;/a&gt;&amp;nbsp;and you will notice that the BC.Net does reference for the BC.Net 2012 'Microsoft.Dynamics.AX.ManagedInterop' and this references the 'System.Web' assembly. The BC.Net 2009 does directly reference the 'System.Web'-assembly.&lt;/div&gt;&lt;div&gt;Now, having a look on &lt;a href="http://msdn.microsoft.com/en-us/library/cc656912.aspx"&gt;Msdn for the .Net 4.0 client profile&lt;/a&gt;, it is documented:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;The .NET Framework 4 Client Profile does not include the following features. You must install the .NET Framework 4 to use these features in your application:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;ASP.NET&lt;/li&gt;
&lt;li&gt;Advanced Windows Communication Foundation (WCF) functionality&lt;/li&gt;
&lt;li&gt;.NET Framework Data Provider for Oracle&lt;/li&gt;
&lt;li&gt;MSBuild for compiling&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;The 'System.Web' assembly, which is part of the &lt;a href="http://msdn.microsoft.com/en-us/library/gg145018.aspx"&gt;System.Web-namespace&lt;/a&gt;&amp;nbsp;and so not part of the reduced .Net framework runtime, requires the &lt;a href="http://www.microsoft.com/net/download.aspx"&gt;full .Net 4.0 Framework&lt;/a&gt;. Now select the full .Net 4.0 Framework for compatibility and compile it again. It will work.&amp;nbsp;Selecting the .Net 3.5 client profile will, of course, result in the same error.&amp;nbsp;As I mentioned, this is true for the BC.Net of Dynamics Ax 2009 AND 2012.&lt;br /&gt;
&lt;br /&gt;
UPDATED 02/07/2011: Dilip updated his article with a very interesting information about the runtime-compatibility of applications referencing the BC.Net assembly: It requires the&amp;nbsp;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bbx34a2h.aspx"&gt;useLegacyV2RuntimeActivationPolicy &lt;/a&gt;attribute to be set to true. But read his article fur further information.&lt;/span&gt;&lt;a href="http://www.blogger.com/"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
UPDATED 17/112011: Dilips first article was about the error message during the compilation and I was referring to the compile-time compatibility that .Net4 guaranties. The updated article now is talking about the runtime-compatibility.&lt;br /&gt;
Anyway, the useLegacyV2RuntimeActivationPolicy is, despite of its name, not executing the application in a different CLR context (CLR2), but does translate some legacy &lt;a href="http://en.wikipedia.org/wiki/Shim_(computing)"&gt;shim APIs&lt;/a&gt; to the current CLR4, as explained in &lt;a href="http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx"&gt;this great article&lt;/a&gt; about this attribute. So even by using this attribute we are, as promised by Microsoft, fully .Net 4 :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-7213927633795244958?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/e8jG20Is3pE289kmVJA1qwbYvAw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e8jG20Is3pE289kmVJA1qwbYvAw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/e8jG20Is3pE289kmVJA1qwbYvAw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e8jG20Is3pE289kmVJA1qwbYvAw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/mlm29w-frbQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/7213927633795244958/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/06/net-40-client-profile-not-enough-for.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/7213927633795244958?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/7213927633795244958?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/mlm29w-frbQ/net-40-client-profile-not-enough-for.html" title=".Net 4.0 client profile not enough for the Dynamics Ax BC.Net" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/06/net-40-client-profile-not-enough-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4HQ3o7fSp7ImA9Wx9UEUo.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-5656069166576285526</id><published>2011-02-08T06:22:00.000-08:00</published><updated>2011-02-08T06:22:12.405-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-08T06:22:12.405-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ax2009" /><category scheme="http://www.blogger.com/atom/ns#" term="AIF" /><title>Aif changes implicitly document schema when changing underlying table</title><content type="html">Changing the mandatory property of fields&amp;nbsp;in&amp;nbsp;tables that are used in Aif-documents does change implicitly the document schema. The table FDI_AifModTest_CF does have the following fields: PK, opt, opt1, mand and mand1. The mandatory fields are flaged aith "m":&lt;br /&gt;
﻿ &lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_VDjtHNPhGww/TVFJ-OzN12I/AAAAAAAAAK4/GZwYPtikBzk/s1600/Table.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" h5="true" src="http://4.bp.blogspot.com/_VDjtHNPhGww/TVFJ-OzN12I/AAAAAAAAAK4/GZwYPtikBzk/s1600/Table.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Mandatory fields in version 1 and 2&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;﻿ &lt;div class="separator" style="clear: both; text-align: left;"&gt;In the beginning the mandatory fields of the table are: PK, mand and mand1.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;After having created and configured &amp;nbsp;the Aif-service, the document schema looks like this:&lt;/div&gt;﻿﻿﻿﻿﻿ &lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_VDjtHNPhGww/TVFJ_cjrAZI/AAAAAAAAAK8/5h4xn_en7T4/s1600/SchemaVS1.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" h5="true" height="188" src="http://2.bp.blogspot.com/_VDjtHNPhGww/TVFJ_cjrAZI/AAAAAAAAAK8/5h4xn_en7T4/s640/SchemaVS1.PNG" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Document schema according the version 1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;﻿﻿﻿﻿﻿ Then, in a second step, the mandatory field is changed as descibed in the first graphic.&amp;nbsp;After refreshing the&amp;nbsp;Aif-services the document schema changed without any notification: &lt;br /&gt;
﻿﻿﻿ &lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_VDjtHNPhGww/TVFKATySKAI/AAAAAAAAALA/zvOxduAXJ6s/s1600/SchemaVS2.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" h5="true" height="188" src="http://1.bp.blogspot.com/_VDjtHNPhGww/TVFKATySKAI/AAAAAAAAALA/zvOxduAXJ6s/s640/SchemaVS2.PNG" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Document schema according the version 2&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;So this shows that changing the &lt;/span&gt;﻿﻿﻿﻿&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;field to mandatory changes the schema, but changing&amp;nbsp;from mandatory to optional does not change the schema. The schema change does make sense but unfortunately&amp;nbsp;this is done completely transparent to the user and there is by default no possibility to get notified by this.&amp;nbsp;So, doing an Aif-service refresh can&amp;nbsp;cause regressions and has to be done with precaution.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-5656069166576285526?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YdRUWbaOp5XIx82tT5hRDCq1_RA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YdRUWbaOp5XIx82tT5hRDCq1_RA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YdRUWbaOp5XIx82tT5hRDCq1_RA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YdRUWbaOp5XIx82tT5hRDCq1_RA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/h4SRVhxicUM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/5656069166576285526/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/02/aif-changes-implicitly-document-schema.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/5656069166576285526?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/5656069166576285526?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/h4SRVhxicUM/aif-changes-implicitly-document-schema.html" title="Aif changes implicitly document schema when changing underlying table" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_VDjtHNPhGww/TVFJ-OzN12I/AAAAAAAAAK4/GZwYPtikBzk/s72-c/Table.PNG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/02/aif-changes-implicitly-document-schema.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYESX84eyp7ImA9WhdTGU4.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-561484505803929900</id><published>2011-01-15T14:55:00.000-08:00</published><updated>2011-07-17T13:05:08.133-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T13:05:08.133-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AIF" /><title>Specific order of fields in Aif messages</title><content type="html">Aif-messages require the data to be defined in a specific order. This is why in the schema file, the Aif data-types (declared as &lt;a href="http://www.w3.org/TR/xmlschema-1/#Complex_Type_Definitions"&gt;complex types&lt;/a&gt;) are declared with the &lt;a href="http://www.w3schools.com/schema/schema_complex.asp"&gt;xs:sequence indicator&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
Example from the DirAddressService:&lt;br /&gt;
...&lt;br /&gt;
&lt;pre class="xml:nocontrols" name="code"&gt;&lt;complextype name="AxdEntity_Address"&gt;
    &lt;sequence&gt;
      &lt;element minoccurs="0" name="_DocumentHash" nillable="true" type="xs:string"&gt;&lt;/element&gt;
      &lt;element minoccurs="0" name="Address" nillable="true" type="AxdExtType_Addressing"&gt;&lt;/element&gt;
            ...
    &lt;/sequence&gt;
    &lt;attribute fixed="entity" name="class" use="required"&gt;&lt;/attribute&gt;
    &lt;attribute name="action" type="AxdEnum_AxdEntityAction"&gt;&lt;/attribute&gt;
  &lt;/complextype&gt;
&lt;/pre&gt;...&lt;br /&gt;
&lt;br /&gt;
This is particularly surprising, as the elements in an entity are always ordered alphabetically... :-\&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-561484505803929900?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JlbFpWiPWKVE7se2KobrzRjfxqE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JlbFpWiPWKVE7se2KobrzRjfxqE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JlbFpWiPWKVE7se2KobrzRjfxqE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JlbFpWiPWKVE7se2KobrzRjfxqE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/WBeASzmsPhk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/561484505803929900/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/01/specific-order-of-fields-in-aif.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/561484505803929900?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/561484505803929900?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/WBeASzmsPhk/specific-order-of-fields-in-aif.html" title="Specific order of fields in Aif messages" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/01/specific-order-of-fields-in-aif.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYFR304fyp7ImA9WhdTGU4.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-8824416529695846107</id><published>2011-01-15T08:44:00.000-08:00</published><updated>2011-07-17T13:05:16.337-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T13:05:16.337-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AIF" /><title>Aif message header editor (reloaded)</title><content type="html">&lt;strike&gt;I blogged some weeks ago about my very simple tool to change &lt;/strike&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa872025(v=AX.50).aspx"&gt;&lt;strike&gt;Aif header-information&lt;/strike&gt;&lt;/a&gt;&lt;strike&gt; in Xml-files&lt;/strike&gt;. (Article deleted)&lt;br /&gt;
I reviewed the code and made it now usable "as is". So it is now more then just a proof of concept :-) &lt;a href="http://amhe.codeplex.com/"&gt;The project&lt;/a&gt; is hosted on &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt; under the &lt;a href="http://amhe.codeplex.com/license"&gt;new GNU license&lt;/a&gt; (so that you can do whatever you like to do with the code without restrictions).&lt;br /&gt;
This tool makes it now possible to modify the content of the Aif-message and to change the file-owner, which is used by Aif to authenticate messages by comparing the file-owner with the source endpoint user.&lt;br /&gt;
&lt;div&gt;The tool has a graphical user interface and a simple comand-line interface, so that you can include this tool in scripts which makes it easier to automize creating messages.&lt;/div&gt;&lt;div&gt;The Guid looks like this:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_VDjtHNPhGww/TTHKni072sI/AAAAAAAAAKE/6gX4cZ2kNHI/s1600/amhe.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="351" src="http://1.bp.blogspot.com/_VDjtHNPhGww/TTHKni072sI/AAAAAAAAAKE/6gX4cZ2kNHI/s400/amhe.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;It is very easy to use: just open the valid Xml-file with the "..."-button. If the Xml-files are associated with this tool, a double-click will work, too. Then choose your destination directory. This will be probably the directory that you configured for the incoming messages in Dynamics Ax and&amp;nbsp;choose the same user for the file owner and the "&lt;a href="http://technet.microsoft.com/en-us/library/ee355069.aspx"&gt;source endpoint user&lt;/a&gt;". The Aif authenticates the &lt;a href="http://technet.microsoft.com/en-us/library/ee355069.aspx"&gt;Aif-user&lt;/a&gt; by comparing the "source endpoint user" in the header with the &lt;a href="http://technet.microsoft.com/en-us/library/cc780020(WS.10).aspx"&gt;document owner&lt;/a&gt;.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;A new functionality is the command-line interface:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_VDjtHNPhGww/TTHOe8-Fn2I/AAAAAAAAAKI/GpDqytx0zeM/s1600/amhe-cmd.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="353" src="http://3.bp.blogspot.com/_VDjtHNPhGww/TTHOe8-Fn2I/AAAAAAAAAKI/GpDqytx0zeM/s400/amhe-cmd.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Type "-help" for a simple "how-to" use this tool and include this in your cmd-script for an automized file-creation...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This tool is provided "as-is", and nobody (including me), will be responsable for any damage this tool might cause... ;-)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Please feel free to report any issues on &lt;a href="http://amhe.codeplex.com/workitem/list/basic"&gt;the project homepage&lt;/a&gt;&amp;nbsp;or just drop me a mail.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-8824416529695846107?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Z5uII279yz4IL-lzP-4q3P0iTLE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z5uII279yz4IL-lzP-4q3P0iTLE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Z5uII279yz4IL-lzP-4q3P0iTLE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z5uII279yz4IL-lzP-4q3P0iTLE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/iV2TomxpCVk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/8824416529695846107/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2011/01/aif-message-header-editor-reloaded.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/8824416529695846107?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/8824416529695846107?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/iV2TomxpCVk/aif-message-header-editor-reloaded.html" title="Aif message header editor (reloaded)" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_VDjtHNPhGww/TTHKni072sI/AAAAAAAAAKE/6gX4cZ2kNHI/s72-c/amhe.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://floditt.blogspot.com/2011/01/aif-message-header-editor-reloaded.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUDQ3s9eSp7ImA9Wx9XEEs.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-1818422724293987947</id><published>2010-12-15T02:01:00.000-08:00</published><updated>2011-01-03T05:44:32.561-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-03T05:44:32.561-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ax2009" /><category scheme="http://www.blogger.com/atom/ns#" term="AIF" /><title>Namespaces in Aif Xml-messages</title><content type="html">In a &lt;a href="http://floditt.blogspot.com/2010/11/here-is-simple-schema-of-aif-message.html"&gt;previous&amp;nbsp;posting&lt;/a&gt; I described the structure of a Dynamics Ax 2009&amp;nbsp;Aif message. Here now some information about &lt;a href="http://en.wikipedia.org/wiki/Namespace_(computer_science)"&gt;Namespaces&lt;/a&gt; in Aif Xml-messages:&lt;br /&gt;
&lt;br /&gt;
An Aif Xml message is identified by namespaces on 3 locations:&lt;br /&gt;
- the Xml-envelope (1)&lt;br /&gt;
- the Aif-service (2)&lt;br /&gt;
- the Xml-messageparts (3) + (4)&lt;br /&gt;
&lt;br /&gt;
According to my &lt;a href="http://floditt.blogspot.com/2010/11/here-is-simple-schema-of-aif-message.html"&gt;previous&amp;nbsp;posting&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_VDjtHNPhGww/TQec5ObiwmI/AAAAAAAAAJw/iV-iLuaeY08/s1600/Aif-namespaces.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" n4="true" src="http://2.bp.blogspot.com/_VDjtHNPhGww/TQec5ObiwmI/AAAAAAAAAJw/iV-iLuaeY08/s1600/Aif-namespaces.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
These information are defined in Ax&amp;nbsp;in the following places:&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;Macros&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;Aif:&lt;/em&gt; (1) + (3)&lt;br /&gt;
#define.MessageNamespace ('http://schemas.microsoft.com/dynamics/2008/01/documents/Message')&lt;br /&gt;
#define.EntityKeyNamespace ('http://schemas.microsoft.com/dynamics/2006/02/documents/EntityKey')&lt;br /&gt;
#define.EntityKeyListNamespace ('http://schemas.microsoft.com/dynamics/2006/02/documents/EntityKeyList')&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;Axd:&lt;/em&gt; (3) used as standard namespace for all Axd-documents by default:&lt;br /&gt;
#define.DocumentNameSpace('http://schemas.microsoft.com/dynamics/2008/01/documents')&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;Services nodes&lt;/u&gt;&lt;/strong&gt;&amp;nbsp;(2) &lt;a href="http://msdn.microsoft.com/en-US/library/bb629443.aspx"&gt;as described on msdn&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_VDjtHNPhGww/TQefOpnnsYI/AAAAAAAAAJ0/SCcZYqAjH0Q/s1600/Aif-service-namespace.png" imageanchor="1" style="height: 117px; margin-left: 1em; margin-right: 1em; width: 695px;"&gt;&lt;img border="0" height="130" n4="true" src="http://2.bp.blogspot.com/_VDjtHNPhGww/TQefOpnnsYI/AAAAAAAAAJ0/SCcZYqAjH0Q/s640/Aif-service-namespace.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;strong&gt;&lt;u&gt;X++&lt;/u&gt;&lt;/strong&gt; (4)&amp;nbsp;the default Axd-document namespace&amp;nbsp;in the &lt;a href="http://msdn.microsoft.com/en-us/library/aa847839.aspx"&gt;AxdBase&lt;/a&gt;-class by the &lt;a href="http://msdn.microsoft.com/en-us/library/cc519029.aspx"&gt;getNamespace()&lt;/a&gt;-method&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_VDjtHNPhGww/TQegs0meQ6I/AAAAAAAAAJ4/W8powExXR8A/s1600/Aif-document-default-namespace.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="173" n4="true" src="http://2.bp.blogspot.com/_VDjtHNPhGww/TQegs0meQ6I/AAAAAAAAAJ4/W8powExXR8A/s640/Aif-document-default-namespace.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
(4) if the Axd-document namespace&amp;nbsp;can be overridden in the Axd-class:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_VDjtHNPhGww/TQehidrB51I/AAAAAAAAAJ8/CYmx3kpFywI/s1600/Aif-document-namespace.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="92" n4="true" src="http://2.bp.blogspot.com/_VDjtHNPhGww/TQehidrB51I/AAAAAAAAAJ8/CYmx3kpFywI/s400/Aif-document-namespace.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-1818422724293987947?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/glWRdJBPA6Qr5IzVCeOxRvQgW4c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/glWRdJBPA6Qr5IzVCeOxRvQgW4c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/glWRdJBPA6Qr5IzVCeOxRvQgW4c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/glWRdJBPA6Qr5IzVCeOxRvQgW4c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/TyDdGNwRQvY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/1818422724293987947/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2010/12/namespaces-in-aif-xml-messages.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/1818422724293987947?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/1818422724293987947?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/TyDdGNwRQvY/namespaces-in-aif-xml-messages.html" title="Namespaces in Aif Xml-messages" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_VDjtHNPhGww/TQec5ObiwmI/AAAAAAAAAJw/iV-iLuaeY08/s72-c/Aif-namespaces.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2010/12/namespaces-in-aif-xml-messages.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYGRnk5eip7ImA9WhdTGU4.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-6266424608486361388</id><published>2010-11-11T07:01:00.000-08:00</published><updated>2011-07-17T13:05:27.722-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T13:05:27.722-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AIF" /><title>AIF surprises with verbose responses...</title><content type="html">The title could also be "AIF security whole", but I choosed the understatement ;-)&lt;br /&gt;
&lt;br /&gt;
Using QueryCriteria to filter can result in returning all data it you do an error in your request. To describe this, lets take the standard AddressService and do a find request by using the FileSystemAdapter. Here's a correct requst example:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="xml:nocontrols" name="code"&gt;&lt;envelope xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/Message"&gt;
 &lt;header&gt;
  &lt;messageid&gt;{DD112222-0306-1220-0001-DD33444455DD}&lt;/messageid&gt;
  &lt;sourceendpointuser&gt;DYNAMICS\Administrator&lt;/sourceendpointuser&gt;
  &lt;sourceendpoint&gt;Sample&lt;/sourceendpoint&gt;
  &lt;destinationendpoint&gt;Contoso&lt;/destinationendpoint&gt;
  &lt;action&gt;http://schemas.microsoft.com/dynamics/2008/01/services/AddressService/find&lt;/action&gt;
  &lt;conversationid&gt;&lt;/conversationid&gt;
 &lt;/header&gt;
 
  &lt;messageparts xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/Message"&gt;
&lt;querycriteria xmlns="http://schemas.microsoft.com/dynamics/2006/02/documents/QueryCriteria"&gt;
 &lt;criteriaelement&gt;
  &lt;datasourcename&gt;Address&lt;/datasourcename&gt;
  &lt;fieldname&gt;Name&lt;/fieldname&gt;
  &lt;operator&gt;Equal&lt;/operator&gt;
  &lt;value1&gt;Sit*&lt;/value1&gt;
  &lt;value2&gt;&lt;/value2&gt;
 &lt;/criteriaelement&gt;
&lt;/querycriteria&gt;
  &lt;/messageparts&gt;
 
&lt;/envelope&gt;
&lt;/pre&gt;&lt;br /&gt;
Now the QueryCriteria does contain an error (I removed the CriteriaElement):&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="xml:nocontrols" name="code"&gt;&lt;envelope xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/Message"&gt;
 &lt;header&gt;
  &lt;messageid&gt;{DD112222-0306-1220-0001-DD33444455DD}&lt;/messageid&gt;
  &lt;sourceendpointuser&gt;DYNAMICS\Administrator&lt;/sourceendpointuser&gt;
  &lt;sourceendpoint&gt;Sample&lt;/sourceendpoint&gt;
  &lt;destinationendpoint&gt;Contoso&lt;/destinationendpoint&gt;
  &lt;action&gt;http://schemas.microsoft.com/dynamics/2008/01/services/AddressService/find&lt;/action&gt;
  &lt;conversationid&gt;&lt;/conversationid&gt;
 &lt;/header&gt;
 
  &lt;messageparts xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/Message"&gt;
&lt;querycriteria xmlns="http://schemas.microsoft.com/dynamics/2006/02/documents/QueryCriteria"&gt;
  &lt;datasourcename&gt;Address&lt;/datasourcename&gt;
  &lt;fieldname&gt;Name&lt;/fieldname&gt;
  &lt;operator&gt;Equal&lt;/operator&gt;
  &lt;value1&gt;Sit*&lt;/value1&gt;
  &lt;value2&gt;&lt;/value2&gt;
 &lt;/querycriteria&gt;
  &lt;/messageparts&gt;
 
&lt;/envelope&gt;
&lt;/pre&gt;&lt;br /&gt;
Normally this cannot be validated because it is not conform to the schema &lt;br /&gt;
defined in the QueryCriteria.xsd. The QueryCriteria elemet riquires to have at least one CriteriaElement:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="xml:nocontrols" name="code"&gt;&lt;schema elementformdefault="qualified" targetnamespace="http://schemas.microsoft.com/dynamics/2006/02/documents/QueryCriteria" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/dynamics/2006/02/documents/QueryCriteria"&gt;


    &lt;element name="QueryCriteria" type="QueryCriteria"&gt;&lt;/element&gt;            
    
    &lt;complextype name="QueryCriteria"&gt;
        &lt;sequence maxoccurs="unbounded" minoccurs="1"&gt;
            &lt;element name="CriteriaElement" type="CriteriaElement"&gt;&lt;/element&gt;
        &lt;/sequence&gt;
    &lt;/complextype&gt;

    &lt;complextype name="CriteriaElement"&gt;
        &lt;sequence&gt;
            &lt;element name="DataSourceName" type="xsd:string"&gt;&lt;/element&gt;
            &lt;element name="FieldName" type="xsd:string"&gt;&lt;/element&gt;
            &lt;element name="Operator" type="Operator"&gt;&lt;/element&gt;
            &lt;element name="Value1" type="xsd:string"&gt;&lt;/element&gt;
            &lt;element minoccurs="0" name="Value2" type="xsd:string"&gt;&lt;/element&gt;
        &lt;/sequence&gt;
    &lt;/complextype&gt;

    &lt;simpletype name="Operator"&gt;
        &lt;restriction base="xsd:string"&gt;
            &lt;enumeration value="Equal"&gt;&lt;/enumeration&gt;
            &lt;enumeration value="NotEqual"&gt;&lt;/enumeration&gt;
            &lt;enumeration value="Greater"&gt;&lt;/enumeration&gt;
            &lt;enumeration value="GreaterOrEqual"&gt;&lt;/enumeration&gt;
            &lt;enumeration value="Less"&gt;&lt;/enumeration&gt;
            &lt;enumeration value="LessOrEqual"&gt;&lt;/enumeration&gt;
            &lt;enumeration value="Range"&gt;&lt;/enumeration&gt;
        &lt;/restriction&gt;
    &lt;/simpletype&gt;

&lt;/schema&gt;
&lt;/pre&gt;&lt;br /&gt;
But instead of not validating the document of the request, AIF decides to return all data. This behavior can be reproduced on any standard or custom AIF document service.&lt;br /&gt;
&lt;br /&gt;
It is very likely that the Aif-services do not validate incoming Xml messages (as it is configurable for outgoing messages!) for performance reasons, but it should be possible to configure this nevertheless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-6266424608486361388?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p_zkx7Q8YGtJvBaHeKG22G7j6jM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p_zkx7Q8YGtJvBaHeKG22G7j6jM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p_zkx7Q8YGtJvBaHeKG22G7j6jM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p_zkx7Q8YGtJvBaHeKG22G7j6jM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/-p4qpDoDm_Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/6266424608486361388/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2010/11/aif-surprises-with-verbose-responses.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/6266424608486361388?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/6266424608486361388?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/-p4qpDoDm_Y/aif-surprises-with-verbose-responses.html" title="AIF surprises with verbose responses..." /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2010/11/aif-surprises-with-verbose-responses.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYHRXozeCp7ImA9WhdTGU4.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-8753924396727007521</id><published>2010-11-08T12:46:00.000-08:00</published><updated>2011-07-17T13:05:34.480-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T13:05:34.480-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AIF" /><title>Dyanmics Ax 2009 AIF message</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;Here is a simple schema of the&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa627117.aspx"&gt;AIF message structure&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;based on the&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb629440.aspx"&gt;Dynamics Ax 2009 AIF Xsd-schemas&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;:&lt;/span&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5537278044957229618" src="http://4.bp.blogspot.com/_MxoajUteC4E/TNhdC0w-wjI/AAAAAAAAAAU/ejbEAVrefn4/s400/AIF+-+Message.jpg" style="cursor: pointer; display: block; font-family: Georgia, serif; font-size: 16px; height: 368px; margin: 0px auto 10px; text-align: center; width: 390px;" /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;The two principle elements of an AIF message are the&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa872025.aspx"&gt;message header&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;and the&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa865166.aspx"&gt;message body&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;All elements in the schema with exception of the "any" element (part of the message body) are explicitly defined by a Microsoft namespace (like http://schemas.microsoft.com/dynamics/...). The custom schema (by default deduced from the document underlying query) need to be explicitly defined by its own namespace. A namespace will define the service by default by its editor (like schemas.microsoft.com), its version (defined by its creation date: yyy/mm) and its purpose: the name of the service. This might be for example: http://yourcompany.com/2010/11/services/YourCustomService&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;The&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa864923.aspx"&gt;AIF actions&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px;"&gt;are associated to the namespace of the message. A message header might for example look like this:&lt;/span&gt;&lt;br /&gt;
&lt;pre class="xml:nocontrols" name="code"&gt;&lt;header&gt;
        &lt;messageid&gt;{3B7C23AB-B0EF-4C35-8DC6-481574080F62}&lt;/messageid&gt;
        &lt;sourceendpoint&gt;Default&lt;/sourceendpoint&gt;
        &lt;destinationendpoint&gt;Default&lt;/destinationendpoint&gt;
        &lt;action&gt;http://yourcompany.com/2010/11/services/YourCustomService/read&lt;/action&gt;
        &lt;requestmessageid&gt;{C8111B69-9786-4BB4-9A03-D0BE847F4C3C}
            &lt;/requestmessageid&gt; 
&lt;/header&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-8753924396727007521?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jD43T6rhERtaUN8j527hhl3bqNE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jD43T6rhERtaUN8j527hhl3bqNE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jD43T6rhERtaUN8j527hhl3bqNE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jD43T6rhERtaUN8j527hhl3bqNE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/QHO_rrMWCNs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/8753924396727007521/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2010/11/here-is-simple-schema-of-aif-message.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/8753924396727007521?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/8753924396727007521?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/QHO_rrMWCNs/here-is-simple-schema-of-aif-message.html" title="Dyanmics Ax 2009 AIF message" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_MxoajUteC4E/TNhdC0w-wjI/AAAAAAAAAAU/ejbEAVrefn4/s72-c/AIF+-+Message.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2010/11/here-is-simple-schema-of-aif-message.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYARn8ycCp7ImA9WhdTGU4.&quot;"><id>tag:blogger.com,1999:blog-5105267482422907994.post-58801177364758502</id><published>2010-10-11T06:30:00.001-07:00</published><updated>2011-07-17T13:05:47.198-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T13:05:47.198-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><title>Listing changed objects in a rollup</title><content type="html">Once a rollup archive has been decompressed, a manifest file is accessible in the root-directory of the extracted files. In the RU5 for the SP1 (KB982812) this file is called “dynamicsax2009-kb982812-sp1-manifest.xml”. So far so good. Unfortunately this manifest file can be very large and is over 1GB for the RU. This because the file contains not only the changes, but also all dependencies, with makes this file so verbose.&lt;br /&gt;
&lt;a href="http://www.dittgen.net/florian/TransformTool.zip"&gt;The TransformTool&lt;/a&gt; is very simple tool and might help you working with these data by transforming the original manifest data into a much less verbose xml-file:&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img alt="image" border="0" src="http://lh6.ggpht.com/_VDjtHNPhGww/TLMRbvXIJSI/AAAAAAAAAH4/mPGuBqygJak/image_thumb%5B1%5D.png?imgmax=800" style="border-width: 0px; display: inline; margin-left: auto; margin-right: auto;" title="image" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Screenshot of the tool&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;The transformed xml-data do not contain the dependencies and can now be opened in Excel. The Xslt-file that is used for the transformation is:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:stylesheet&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="2.0"&lt;/span&gt; 
&lt;span class="attr"&gt;xmlns:xsl&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/XSL/Transform"&lt;/span&gt; 
&lt;span class="attr"&gt;xmlns:xs&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/2001/XMLSchema"&lt;/span&gt; 
&lt;span class="attr"&gt;xmlns:fn&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/2005/xpath-functions"&lt;/span&gt; 
&lt;span class="attr"&gt;exclude-result-prefixes&lt;/span&gt;&lt;span class="kwrd"&gt;="xs fn xsl"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:output&lt;/span&gt; &lt;span class="attr"&gt;method&lt;/span&gt;&lt;span class="kwrd"&gt;="xml"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt; &lt;span class="attr"&gt;omit-xml-declaration&lt;/span&gt;&lt;span class="kwrd"&gt;="yes"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt; &lt;span class="attr"&gt;match&lt;/span&gt;&lt;span class="kwrd"&gt;="/"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;changes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="//manifest"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="hotfix"&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:variable&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;='kb'&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="./@id"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="changes"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="layer"&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:variable&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;='layerId'&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="./@id"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="change"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;change&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;   
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:attribute&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="kb"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="$kb"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:attribute&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:attribute&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="layer"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="$layerId"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:attribute&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:attribute&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="object"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="./@object"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:attribute&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:if&lt;/span&gt; &lt;span class="attr"&gt;test&lt;/span&gt;&lt;span class="kwrd"&gt;="./@method"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:attribute&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="method"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="./@method"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:attribute&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;                            
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:if&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;change&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;changes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:stylesheet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img alt="image" border="0" height="111" src="http://lh3.ggpht.com/_VDjtHNPhGww/TLMS1qlV_YI/AAAAAAAAAIM/r-eOM4rxlT0/image_thumb%5B1%5D.png?imgmax=800" style="border: 0px none; display: inline; margin-left: auto; margin-right: auto;" title="image" width="614" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The generated Xml-file&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;a href="http://lh4.ggpht.com/_VDjtHNPhGww/TLMS1Z7LAqI/AAAAAAAAAII/URtQ3r_z2iM/s1600-h/image%5B4%5D.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Opening this Xml-file in Excel will look like this:&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img alt="image" border="0" height="297" src="http://lh5.ggpht.com/_VDjtHNPhGww/TLMRcZMkVBI/AAAAAAAAAIA/ELfZgVcKEMs/image_thumb%5B3%5D.png?imgmax=800" style="border-width: 0px; display: inline; margin-left: auto; margin-right: auto;" title="image" width="529" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The Xml data imported in Excel&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;pre&gt;&lt;a href="http://lh3.ggpht.com/_VDjtHNPhGww/TLMRb1ycLzI/AAAAAAAAAH8/a8nXrbVN6Ck/s1600-h/image%5B7%5D.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt; &lt;/pre&gt;&lt;br /&gt;
which makes it now possible to filter, sort…&lt;br /&gt;
&lt;br /&gt;
Hope this might help ;-)&lt;br /&gt;
&lt;br /&gt;
PS (01/10/2010):&lt;br /&gt;
Excel needs the meta-tag:&lt;br /&gt;
&lt;br /&gt;
to display the Xml-data correctly formatted. If you need the Xml in a formatted, easy to read format, open the Xml in Visual Studio, select the whole content (Ctrl+A) and format the Xml (Ctrl+K+F). Just keep the Ctrl button pressed and press first "K" and then "F".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5105267482422907994-58801177364758502?l=floditt.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YuJWDMzKQ8W37E7ZoSylmWS9V1U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YuJWDMzKQ8W37E7ZoSylmWS9V1U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YuJWDMzKQ8W37E7ZoSylmWS9V1U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YuJWDMzKQ8W37E7ZoSylmWS9V1U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FloriansDynamicsAxBlog/~4/HU6M2vd7V4o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://floditt.blogspot.com/feeds/58801177364758502/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://floditt.blogspot.com/2010/10/listing-changed-objects-in-rollup.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/58801177364758502?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5105267482422907994/posts/default/58801177364758502?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FloriansDynamicsAxBlog/~3/HU6M2vd7V4o/listing-changed-objects-in-rollup.html" title="Listing changed objects in a rollup" /><author><name>Florian Dittgen</name><uri>https://profiles.google.com/107525572181409505092</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-W10TAkbvzOQ/AAAAAAAAAAI/AAAAAAAAAAA/MB1yU2lH_x4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_VDjtHNPhGww/TLMRbvXIJSI/AAAAAAAAAH4/mPGuBqygJak/s72-c/image_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://floditt.blogspot.com/2010/10/listing-changed-objects-in-rollup.html</feedburner:origLink></entry></feed>

