<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="https://www.schweda.net/style_feed.css" ?>
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:atom="http://www.w3.org/2005/Atom"	
	xmlns:dc="http://purl.org/dc/elements/1.1/" > 
<channel>
    <title>schweda.net - Blog</title>
    <link>https://www.schweda.net/</link>
    <description>schweda.net - Blog - Blog-Beitraege</description>
    <language>de-at</language>
    <copyright>Copyright 2006-2026</copyright>
    <generator>schweda.net</generator>
    <managingEditor>heinz.schweda@schweda.net (Heinz Schweda)</managingEditor>
    <webMaster>heinz.schweda@schweda.net (Heinz Schweda)</webMaster>
    <category>Blog</category>
	<atom:link href="https://schweda.net/blog_rss.php?bsid=4" rel="self" type="application/rss+xml" />
<item>
<title><![CDATA[Filter über Finanzdimensionen in einer FormDataSource]]></title>
<description><![CDATA[
<p>M&ouml;chte man in einem Formular nur Datens&auml;tze einer Tabelle anzeigen, die bestimmte Finanzdimensionen enthalten, kann man dies &uuml;ber das &uuml;berschreiben der <em>init()</em> der FormDataSource wie folgt erreichen:
</p>


<pre class="pre_blog_axcode">
public void init()
{
    super();
    
    SysQuery::addDimensionAttributeRange(salesTable_ds.query(),
                        salesTable_ds.name(),
                        fieldStr(Salestable, DefaultDimension),
                        DimensionComponent::DimensionAttribute,
                        &#39;1001&#39;,
                        &#39;CostCenter&#39;);    
}
</pre>


<p>Man kann <em>addDimensionAttributeRange()</em> auch mehrmals aufrufen, so kann man nach mehreren Dimensionen gleichzeitig filtern.
</p>


<p>Mit <em>clearDimensionRangesFromQuery()</em> entfernt man solche Filter &uuml;brigens wieder:
</p>


<pre class="pre_blog_axcode">
SysQuery::clearDimensionRangesFromQuery(salesTable_ds.query())
</pre>


<p>&nbsp;
</p>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Fri, 08 Mar 2019 18:18:00 +0100</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=661</link>
<comments>https://www.schweda.net/blog_ax.php?bid=661</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=661</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=661</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Ändern einer Standardfinanzdimension (DefaultDimension) eines Datensatzes]]></title>
<description><![CDATA[
<p>Der nachstehende Job demonstriert, wie man den Wert einer Dimension (im Beispiel wird die Dimension <em>Kostenstelle </em>eines Debitors ge&auml;ndert) innerhalb der Standardfinanzdimensionen eines Datensatzes per Code austauschen kann. Auf diese Art &amp; Weise k&ouml;nnen auch einzelne Dimensionswerte entfernt werden.
</p>


<pre class="pre_blog_axcode">
static void changeDimensionValue(Args _args)
{
    DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;
    DimensionAttribute dimensionAttribute;
    CustTable custTable = CustTable::find(&quot;US-014&quot;);
    DimensionValue oldDimensionValue;
    DimensionValue newDimensionValue = &quot;011&quot;;
    DimensionDefault newDimensionDefault;

    #define.dimensionName(&quot;CostCenter&quot;)

    DimensionValue getDimensonValue(DimensionDefault _dimensionDefault)
    {
        DefaultDimensionView defaultDimensionView;
        select firstonly DisplayValue
        from defaultDimensionView
        where defaultDimensionView.Name == #dimensionName
            &amp;&amp; defaultDimensionView.DefaultDimension == _dimensionDefault;

        return defaultDimensionView.DisplayValue;
    }

    // Get current value
    oldDimensionValue = getDimensonValue(custTable.DefaultDimension);

    // Build DimensionAttributeValueSetStorage
    dimensionAttributeValueSetStorage = DimensionAttributeValueSetStorage::find(custTable.DefaultDimension);
 
    // Remove old dimension value
    dimensionAttribute = DimensionAttribute::findByName(#dimensionName);
    dimensionAttributeValueSetStorage.removeDimensionAttributeValue(
        DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, oldDimensionValue).RecId);
 
    // Set new dimension value
    if(newDimensionValue != &quot;&quot;)
    {
        dimensionAttribute = DimensionAttribute::findByName(#dimensionName);
        dimensionAttributeValueSetStorage.addItem(
            DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, newDimensionValue));
    }
 
    newDimensionDefault = dimensionAttributeValueSetStorage.save();

    ttsbegin;
    custTable.selectForUpdate(true);
    custTable.DefaultDimension = newDimensionDefault;
    custTable.update();
    ttscommit;
}
</pre>


<p>Screenshot vor der &Auml;nderung
</p>


<p><a href="http://www.schweda.net/pictures/blogpics/ax2012_changecostcentercustomerold.jpg" rel="lightbox" target="_blank"><img alt="Screenshot" height="93" src="http://www.schweda.net/pictures/blogpics/tb_ax2012_changecostcentercustomerold.jpg" title="Screenshot" width="465" /></a>
</p>


<p>Screenshot nach der &Auml;nderung
</p>


<p><a href="http://www.schweda.net/pictures/blogpics/ax2012_changecostcentercustomernew.jpg" rel="lightbox" target="_blank"><img alt="Screenshot" height="93" src="http://www.schweda.net/pictures/blogpics/tb_ax2012_changecostcentercustomernew.jpg" title="Screenshot" width="465" /></a>
</p>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Sat, 07 Feb 2015 17:06:00 +0100</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=560</link>
<comments>https://www.schweda.net/blog_ax.php?bid=560</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=560</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=560</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Erstellen einer DefaultDimension/LedgerDimension]]></title>
<description><![CDATA[
<p>Nachstehend ein Code-Beispiel, wie man eine RecId vom Typ <strong>DefaultDimension </strong>f&uuml;r mehrere Dimensionen generieren kann.<br />
Anschlie&szlig;end wird diese DefaultDimension mit einem Hauptkonto zu einer RecId vom Typ <strong>LedgerDimension </strong>kombiniert.
</p>


<pre class="pre_blog_axcode">
static void buildDefaultAndLedgerDimension(Args _args)
{
    DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;
    DimensionAttribute dimensionAttribute;
    DimensionAttributeValue dimensionAttributeValue;
    DimensionDefault dimensionDefault;
    LedgerDimensionAccount ledgerDimensionAccount;

    dimensionAttributeValueSetStorage = new DimensionAttributeValueSetStorage();

    // BusinessUnit
    dimensionAttribute = DimensionAttribute::findByName(&#39;BusinessUnit&#39;);
    if(dimensionAttribute)
    {
        dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, &#39;069&#39;, false, true);
        dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);
    }

    // CostCenter
    dimensionAttribute = DimensionAttribute::findByName(&#39;CostCenter&#39;);
    if(dimensionAttribute)
    {
        dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, &#39;010&#39;, false, true);
        dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);
    }

    // Department
    dimensionAttribute = DimensionAttribute::findByName(&#39;Department&#39;);
    if(dimensionAttribute)
    {
        dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, &#39;024&#39;, false, true);
        dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);
    }
 
    dimensionDefault = dimensionAttributeValueSetStorage.save();

    // Merge main account and source dimension values and return RecId which can be used as ledgerDimension
    ledgerDimensionAccount = DimensionDefaultingService::serviceCreateLedgerDimension(DimensionStorage::getDefaultAccountForMainAccountNum(&quot;110110&quot;),
                                                                                      dimensionDefault);

    info(strFmt(&quot;Default dimension recId: %1&quot;, dimensionDefault));
    info(strFmt(&quot;DefaultDimension (Source RecId): %1 LedgerDimension (Merged RecId): %2&quot;, dimensionDefault, ledgerDimensionAccount));
}
</pre>



<p>Notiz: Aufmerksamen Lesern ist sicherlich nicht entgangen, da&szlig; ich beides bereits in anderen Beitr&auml;gen geposted habe. Dieser Beitrag ist lediglich eine Kombination davon.
</p>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Sun, 14 Dec 2014 09:29:00 +0100</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=553</link>
<comments>https://www.schweda.net/blog_ax.php?bid=553</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=553</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=553</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Anzeige-Wert einer LedgerDimension-RecId per Code ausgeben]]></title>
<description><![CDATA[
<p>Im Beispiel wird ein beliebiger Datensatz aus der <em>LedgerJournalTrans </em>selektiert und dessen Finanzdimensionen bzw. das Gegenkonto so ausgegeben, wie der Benutzer es im sog. Segmented Entry Control sieht.
</p>


<pre class="pre_blog_axcode">
static void GetLedgerDimensionDisplayValue(Args _args)
{
    DimensionStorage dimensionStorage;
    DimensionDisplayValue DimensionDisplayValue;
    ledgerJournalTrans ledgerJournalTrans = LedgerJournalTrans::findRecId(5637169330, false);
    
    // LedgerDimension
    dimensionStorage = DimensionStorage::findById(ledgerJournalTrans.LedgerDimension);
    DimensionDisplayValue = dimensionStorage.getComboDisplayValue();
    
    info(DimensionDisplayValue);   
     // OffsetLedgerDimension
    dimensionStorage = DimensionStorage::findById(ledgerJournalTrans.OffsetLedgerDimension);
    DimensionDisplayValue = dimensionStorage.getComboDisplayValue();
    
    info(DimensionDisplayValue);
}
</pre>




<p>Ergebnis beispielsweise:<br />
5170-10-00AB03---1500-<br />
&nbsp;
</p>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Wed, 21 May 2014 21:40:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=514</link>
<comments>https://www.schweda.net/blog_ax.php?bid=514</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=514</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=514</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: LedgerDimension generieren III]]></title>
<description><![CDATA[
<p>Im folgenden ein kurzes Code-Snippet, welches zeigt wie man beispielsweise die Standard-Finanzdimensionen eines Debitoren mit einem Haupt-/Sachkonto zu einer RecId verbindet, welche beispielsweise als LedgerDimension in einer Sachkontenjournal-Zeile (Allgemeine Erfassung; LedgerJournalTrans.LedgerDimension) verwendet werden kann.
</p>

<div class="div_blog_axcode">static void mergeDimensions_I(Args _args)<br />
{<br />
&nbsp;&nbsp;&nbsp; LedgerDimensionAccount ledgerDimensionAccount;<br />
&nbsp;&nbsp;&nbsp; CustTable custTable;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; custTable = CustTable::find('&#8234;&#8234;&#8234;2000');<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;// Merge main account and source dimension values and return RecId which can be used as ledgerDimension<br />
&nbsp;&nbsp;&nbsp; ledgerDimensionAccount = DimensionDefaultingService::serviceCreateLedgerDimension(DimensionStorage::getDefaultAccountForMainAccountNum(&quot;4100&quot;), <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;custTable.DefaultDimension);<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; info(strFmt(&quot;DefaultDimension (Source RecId): %1 LedgerDimension (Merged RecId): %2&quot;, custTable.DefaultDimension, ledgerDimensionAccount));<br />
}<br />
&nbsp;
</div>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Sun, 11 May 2014 12:14:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=510</link>
<comments>https://www.schweda.net/blog_ax.php?bid=510</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=510</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=510</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Finanzdimension als Display-Methode anzeigen]]></title>
<description><![CDATA[
<p>Folgende Display-Methode in der Datasource einer Form zeigt beispielsweise die Finanzdimension <em>Costcenter </em>eines Debitoren an.
</p>


<pre class="pre_blog_axcode">
public display DimensionValue showCostCenter(CustTable _custTable)
{
    DimensionAttributeValueSet dimensionAttributeValueSet;
    DimensionAttributeValueSetItem dimensionAttributeValueSetItem;
    DimensionAttributeValue dimensionAttributeValue;
    DimensionAttribute dimensionAttribute;

    #define.CostCenterDimensionName(&quot;CostCenter&quot;);
 
    if( !_custTable || !_custTable.DefaultDimension)
    {
        return &#39;&#39;;
    } 

    dimensionAttributeValueSet = DimensionAttributeValueSet::find(_custTable.DefaultDimension); 

    select firstOnly RecId
    from dimensionAttributeValueSetItem
        where dimensionAttributeValueSetItem.DimensionAttributeValueSet == dimensionAttributeValueSet.RecId
    join DimensionAttributeValue
        where DimensionAttributeValue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue
    join RecId from dimensionAttribute
    where dimensionAttribute.RecId == DimensionAttributeValue.DimensionAttribute
       &amp;&amp; dimensionAttribute.Name  == #CostCenterDimensionName
    

    if(dimensionAttributeValue &amp;&amp; dimensionAttribute)
    {
        return dimensionAttributeValue.getValue();
    }

    return &#39;&#39;;
}

</pre>


<p><strong>Einfachere Variante (siehe Kommentare)</strong>
</p>


<pre class="pre_blog_axcode">
public display DimensionValue showCostCenter(CustTable _custTable)
{
    #define.CostCenterDimensionName(&quot;CostCenter&quot;);
 
    return ((select firstOnly DisplayValue from DefaultDimensionView
             where DefaultDimensionView.Name == #CostCenterDimensionName
                &amp;&amp; DefaultDimensionView.DefaultDimension == _custTable.DefaultDimension).DisplayValue);
}

</pre>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Thu, 13 Feb 2014 21:40:00 +0100</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=501</link>
<comments>https://www.schweda.net/blog_ax.php?bid=501</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=501</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=501</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Finanzdimension auf Basis einer Formulareingabe eintragen]]></title>
<description><![CDATA[
<p>Oftmals hat man die Anforderung, da&szlig; auf Basis einer Eingabe in einem Formular auch eine bestimmte Finanzdimension eingetragen werden soll.
</p>


<p>Mit folgendem Code-Beispiel ist so etwas relativ einfach zu realisieren. Im Beispiel wird, wann immer ein bestimmtes Feld ge&auml;ndert wird - abgefragt &uuml;ber die Methode <em>modified()</em> des Feldes einer Datasource, die Finanzdimension <em>Kostenstelle </em>mit dem Wert <em>25</em> bef&uuml;llt. Ist der einzutragende Wert ein ung&uuml;ltiger, passiert nichts (Fehlermeldung oder &auml;hnliches).
</p>


<pre class="pre_blog_axcode">
public void modified()
{
    DimensionAttribute DimensionAttribute = DimensionAttribute::findByName(&quot;Kostenstelle&quot;);
    DimensionValue newValue = &#39;25&#39;;    // New dimension value
    
    super();
    
    dimensionDefaultingController.setDimensionAttributeValue(
&nbsp;       DimensionAttribute, 
        DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, newValue).RecId, 
        newValue);
}
</pre>


<p>Im Beispiel wird eine existierende Instanz von <em>DimensionDefaultingController </em>verwendet.<br />
&nbsp;
</p>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Sat, 08 Feb 2014 18:09:00 +0100</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=497</link>
<comments>https://www.schweda.net/blog_ax.php?bid=497</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=497</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=497</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Erstellen einer DefaultDimension mit mehreren Dimensionen]]></title>
<description><![CDATA[
<p>Nachstehend ein Code-Beispiel, wie man eine RecId vom Typ <strong>DefaultDimension </strong>f&uuml;r mehrere Dimensionen generieren kann.
</p>

<p>Im Beispiel werden die Dimension Kostenstelle mit dem Wert &quot;10&quot;, die Dimension Abteilung mit dem Wert &quot;IT&quot; und die Dimension Kategorie mit dem Wert &quot;02&quot; zu einer DefaultDimension kombiniert.
</p>

<p>Durch den letzten Parameter von <em>findByDimensionAttributeAndValue()</em> wird sichergestellt, da&szlig; fehlende Dimensionen angelegt werden (soferne m&ouml;glich).
</p>

<div class="div_blog_axcode">static void buildDefaultDimension(Args _args)<br />
{<br />
&nbsp;&nbsp;&nbsp; dimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;<br />
&nbsp;&nbsp;&nbsp; dimensionAttribute dimensionAttribute;<br />
&nbsp;&nbsp;&nbsp; dimensionAttributeValue dimensionAttributeValue;<br />
&nbsp;&nbsp;&nbsp; dimensionDefault dimensionDefault;&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; dimensionAttributeValueSetStorage = new DimensionAttributeValueSetStorage();<br />
<br />
&nbsp;&nbsp;&nbsp; // Kostenstelle<br />
&nbsp;&nbsp;&nbsp; dimensionAttribute = dimensionAttribute::findByName('Kostenstelle');<br />
&nbsp;&nbsp;&nbsp; if(dimensionAttribute)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, '10', false, true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp; // Abteilung<br />
&nbsp;&nbsp;&nbsp; dimensionAttribute = dimensionAttribute::findByName('Abteilung');<br />
&nbsp;&nbsp;&nbsp; if(dimensionAttribute)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, 'IT', false, true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp; // Kategorie<br />
&nbsp;&nbsp;&nbsp; dimensionAttribute = dimensionAttribute::findByName('Kategorie');<br />
&nbsp;&nbsp;&nbsp; if(dimensionAttribute)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, '02', false, true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp; dimensionDefault = dimensionAttributeValueSetStorage.save();<br />
<br />
&nbsp;&nbsp;&nbsp; info(strFmt(&quot;Default dimension recId: %1&quot;, dimensionDefault));<br />
}&nbsp;<br />
&nbsp;
</div>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Sun, 10 Nov 2013 17:20:00 +0100</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=492</link>
<comments>https://www.schweda.net/blog_ax.php?bid=492</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=492</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=492</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: LedgerDimension generieren II]]></title>
<description><![CDATA[
<p><strong>Update 11.05.2014:</strong> Da die unten stehende Code-Beispiele nicht in allen Applikationen zu funktionieren scheinen, habe ich unter folgendem Beitrag ein <a title="LedgerDimension generieren III" target="_self" href="http://www.schweda.net/blog_ax.php?bid=510">weiteres Code-Beispiel</a> ver&ouml;ffentlicht.
</p>

<p>Im folgenden ein kurzes Code-Snippet, welches zeigt wie man beispielsweise Finanzdimensionen mit einem Haupt-/Sachkonto zu einer RecId verbindet, welche beispielsweise als LedgerDimension in einer Sachkontenjournal-Zeile (Allgemeine Erfassung; LedgerJournalTrans.LedgerDimension) verwendet werden kann.
</p>

<div class="div_blog_axcode">static void mergeDimensions(Args _args)<br />
{<br />
&nbsp;&nbsp;&nbsp; SalesLine salesLine;<br />
&nbsp;&nbsp;&nbsp; MainAccount mainAccount;<br />
&nbsp;&nbsp;&nbsp; LedgerDimensionAccount ledgerDimensionAccount;<br />
<br />
&nbsp;&nbsp;&nbsp; // Get source dimension values (for example from SalesLine-Record)<br />
&nbsp;&nbsp;&nbsp; select firstonly salesLine<br />
&nbsp;&nbsp;&nbsp; where salesLine.SalesId == &quot;20001&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; salesLine.DefaultDimension;<br />
<br />
&nbsp;&nbsp;&nbsp; // Get main account<br />
&nbsp;&nbsp;&nbsp; mainAccount = MainAccount::findByMainAccountId('0500');<br />
<br />
&nbsp;&nbsp;&nbsp; // Merge main account and source dimension values and return RecId which can be used as ledgerDimension<br />
&nbsp;&nbsp;&nbsp; ledgerDimensionAccount = DimensionDefaultingService::serviceCreateLedgerDimension(mainAccount.RecId, salesLine.DefaultDimension);<br />
<br />
&nbsp;&nbsp;&nbsp; info(strFmt(&quot;DefaultDimension (Source RecId): %1 LedgerDimension (Merged RecId): %2&quot;, salesLine.DefaultDimension, ledgerDimensionAccount));<br />
}
</div>

<p>Das zweite Snippet macht prinzipiell das selbe wie oben, allerdings wird hier statt einem Haupt-/Sachkonto ein Debitorenkonto verwendet.
</p>
<br /><a class="div_blog_category_gotodetail" href="https://www.schweda.net/blog_ax.php?bid=470" target="_self" title="Weiterlesen...">Weiterlesen...</a>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Sun, 07 Jul 2013 18:41:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=470</link>
<comments>https://www.schweda.net/blog_ax.php?bid=470</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=470</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=470</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: LedgerDimension generieren]]></title>
<description><![CDATA[
<p>Die folgende Methode erstellt eine sog. LedgerDimension (EDT RecId) unter Verwendung des angebenen Hauptkontos und der angegebenen Finanzdimension.
</p>


<pre class="pre_blog_axcode">
static recid createLedgerDimensionRecId()
{
    AccountNum accountNum = &#39;60000&#39;;
    str 255 dimensionValue = &#39;300&#39;;
    Name DimensionName = &#39;Kostenstelle&#39;;
    
    MainAccount MainAccount;
    LedgerDimensionAccount LedgerDimensionAccount;
    DimensionAttributeValue DimensionAttributeValue;
    DimensionAttribute DimensionAttribute;
    dimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;
    dimensionDefault dimensionDefault;
    
    DimensionAttribute = DimensionAttribute::findByName(DimensionName);
    if (dimensionValue)
    {
        DimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, dimensionValue, false, true);
        if (!DimensionAttributeValue)
        {
            throw error(strFmt(&quot;@SYS24602&quot;, &quot;@SYS13911&quot;, dimensionValue));
        }
    }    
    
    // Konto
    MainAccount = MainAccount::findByMainAccountId(accountNum);
    if(MainAccount)
    {
        LedgerDimensionAccount = DimensionDefaultingEngine::getLedgerDimensionFromAccountAndDim(
            MainAccount.RecId,
            DimensionHierarchy::getAccountStructure(MainAccount.RecId));

        if( !LedgerDimensionAccount)
        {
            throw error(&quot;LedgerDimensionAccount konnte nicht ermittelt werden.&quot;);
        }
    }
    // Konto und Dimension verbinden
    if (DimensionAttributeValue &amp;&amp; LedgerDimensionAccount)
    {
        dimensionAttributeValueSetStorage = new DimensionAttributeValueSetStorage();
        if(dimensionAttribute)
        {
            dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, dimensionValue, false, true);
            dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);
        }
         
        dimensionDefault = dimensionAttributeValueSetStorage.save();
        
        LedgerDimensionAccount =
        DimensionDefaultingService::serviceCreateLedgerDimension(LedgerDimensionAccount, dimensionDefault);
    }
    
    return LedgerDimensionAccount;
}
</pre>




<p>Wichtig: Die Methode pr&uuml;ft nicht, ob es die Dimension gibt, d.h. werden ung&uuml;ltige Werte f&uuml;r DimensionName oder DimensionValue angegeben, bricht die Methode mir einer Fehlermeldung ab.
</p>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Wed, 12 Jun 2013 20:32:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=462</link>
<comments>https://www.schweda.net/blog_ax.php?bid=462</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=462</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=462</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Nützliche Funktionen rund um das Thema Finanzdimensionen]]></title>
<description><![CDATA[
<p>Wenn man in AX beispielsweise Finanzdimensionen aus einer externen Quelle verarbeiten soll, dann k&ouml;nnen die beiden folgenden Methoden m&ouml;glicherweise hilfreich sein.
</p>

<p>Die Erste Methode namens <strong>existDimension()</strong> pr&uuml;ft ob es die &uuml;bergebene, benannte Dimension in AX &uuml;berhaupt gibt und ob der &uuml;bergebene Dimensionswert ebenfalls g&uuml;ltig ist.
</p>

<div class="div_blog_axcode">boolean existDimension(str 255 _dimensionName, str 255 _dimensionValue)<br />
{<br />
&nbsp;&nbsp;&nbsp; boolean isValid = false;<br />
&nbsp;&nbsp;&nbsp; DimensionAttribute DimensionAttribute;<br />
&nbsp;&nbsp;&nbsp; DimensionAttributeValue DimensionAttributeValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; DimensionAttribute = DimensionAttribute::findByName(_dimensionName);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; if(DimensionAttribute)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, _dimensionValue);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(DimensionAttributeValue) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isValid = true;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isValid = checkFailed(strFmt(&quot;'%1' f&uuml;r Dimension '%2' nicht gefunden.&quot;, _dimensionValue, _dimensionName));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isValid = checkFailed(strFmt(&quot;Dimension '%1' unbekannt.&quot;, _dimensionName));&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return isValid;<br />
}
</div>

<p>Beispielaufruf: existDimension(&quot;Costcenter&quot;, &quot;3100&quot;);
</p>

<p>Die Zweite Methode namens<strong> existDimensionCombination()</strong> pr&uuml;ft, ob die Kombination des &uuml;bergebenen Hauptkontos und des &uuml;bergebenen Dimensionswertes g&uuml;ltig ist.
</p>

<div class="div_blog_axcode">boolean existDimensionCombination(str 255 _mainAccount, str 255 _dimensionName, str 255_dimensionValue)<br />
{<br />
&nbsp;&nbsp;&nbsp; boolean isValid = false;<br />
&nbsp;&nbsp;&nbsp; FinancialDimensionValidationService FinancialDimensionValidationService;<br />
&nbsp;&nbsp;&nbsp; ledgerAccountValidationContract ledgerAccountValidationContract;<br />
&nbsp;&nbsp;&nbsp; ledgerAccountContract ledgerAccountContract;<br />
&nbsp;&nbsp;&nbsp; dimensionAttributeValueContract dimensionAttributeValueContract;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; FinancialDimensionValidationService = new FinancialDimensionValidationService();<br />
<br />
&nbsp;&nbsp;&nbsp; ledgerAccountValidationContract = new LedgerAccountValidationContract();<br />
&nbsp;&nbsp;&nbsp; ledgerAccountContract = new LedgerAccountContract();<br />
&nbsp;&nbsp;&nbsp; dimensionAttributeValueContract = new DimensionAttributeValueContract();<br />
&nbsp;&nbsp;&nbsp; ledgerAccountContract.parmMainAccount(_mainAccount);<br />
&nbsp;&nbsp;&nbsp; ledgerAccountContract.parmValues(new List(Types::Class));<br />
&nbsp;&nbsp;&nbsp; dimensionAttributeValueContract.parmName(_dimensionName);<br />
&nbsp;&nbsp;&nbsp; dimensionAttributeValueContract.parmValue(_dimensionValue);<br />
&nbsp;&nbsp;&nbsp; ledgerAccountContract.parmValues().addEnd(dimensionAttributeValueContract);<br />
&nbsp;&nbsp;&nbsp; ledgerAccountValidationContract.parmLedgerAccount(ledgerAccountContract);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; isValid = FinancialDimensionValidationService.validateLedgerAccount(ledgerAccountValidationContract);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; if( !isValid)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error(strFmt(&quot;Ung&uuml;ltige Kombination: %1 - %2: %3&quot;, _mainAccount, _dimensionName, _dimensionValue));&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; return isValid;<br />
}
</div>

<p>Beispielaufruf: existDimensionCombination(&quot;60000&quot;, &quot;Costcenter&quot;, &quot;3100&quot;);
</p>

<p>In der realen AX-Entwickler-Welt wird eine solche Pr&uuml;fung vermutlich etwas komplexer werden und wahrscheinlich auch eine Kombination beider Methoden notwendig sein.
</p>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Tue, 16 Apr 2013 21:27:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=461</link>
<comments>https://www.schweda.net/blog_ax.php?bid=461</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=461</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=461</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Standardfinanzdimension eines Datensatzes setzen]]></title>
<description><![CDATA[
<p>Der nachstehende Code soll zeigen, wie man in Dynamics AX 2012 bei einem Datensatz - im Beispiel handelt es sich um einen Debitor - die Standardfinanzdimensionen per X++ bef&uuml;llen kann.
</p>

<p>Im Beispiel werden mehrere Dimensionen mit Werten bef&uuml;llt. Bitte beachtet, da&szlig; die angef&uuml;hrten Dimensionen m&ouml;glicherweise in Euren AX-Installationen nicht vorhanden sind.
</p>

<div class="div_blog_axcode">static void setDefaultDimension4CustTable(Args _args)<br />
{<br />
&nbsp;&nbsp;&nbsp; CustTable custTable;<br />
<br />
&nbsp;&nbsp;&nbsp; RecId getDefaultDimension(container _c)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DimensionAttribute dimensionAttribute;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DimensionAttributeValue dimensionAttributeValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; container dimensionCon;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name dimensionName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str 255 dimensionValue;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValueSetStorage = new&nbsp; DimensionAttributeValueSetStorage();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=1;i&lt;=conLen(_c);i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionCon = conPeek(_c, i);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionName&nbsp; = conPeek(dimensionCon, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionValue = conPeek(dimensionCon, 2);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select dimensionAttribute<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where dimensionAttribute.Name == dimensionName;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(dimensionAttribute)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, dimensionValue, false, true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return dimensionAttributeValueSetStorage.save();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; ;<br />
<br />
&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ttsbegin;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; custTable = CustTable::find('9101', true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; custTable.DefaultDimension =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getDefaultDimension([<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [&quot;Department&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '100'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [&quot;Debitor&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '3010'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [&quot;CustomerGroup&quot;,&nbsp;&nbsp; '80'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [&quot;ParentProject&quot;,&nbsp;&nbsp; '2000'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [&quot;CostCenter&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '07']<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; custTable.update();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ttscommit;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; info(&quot;Update custtable.defaultDimension sucessfull.&quot;);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw error(&quot;Error occured&quot;);<br />
&nbsp;&nbsp;&nbsp; }<br />
}
</div>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Sat, 19 May 2012 10:55:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=427</link>
<comments>https://www.schweda.net/blog_ax.php?bid=427</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=427</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=427</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Standardfinanzdimension eines Datensatzes auslesen und Inhalt prüfen]]></title>
<description><![CDATA[
<p>Der folgende Job demonstriert, wie man den Inhalt&nbsp;der Standardfinanzdimensionen eines Datensatzes&nbsp;-&nbsp;im Beispiel jene eines Debitoren - per X++ pr&uuml;ft.
</p>

<p>Im Beispiel werden die Dimensionen namens <em>CustomerGroup</em>, <em>Debitor </em>und <em>NonExistingDimension </em>als zu pr&uuml;fen angegeben. Bitte beachtet, da&szlig; nicht alle Dimensionen in jeder AX-Instanz vorhanden sind. Vor allem letztere dient lediglich zur Demonstration, wie sich der Code verh&auml;lt, wenn eine Dimensionen ausgelesen werden soll, die es gar nicht gibt.
</p>

<div class="div_blog_axcode">static void validateDefaultDimensionValues(Args _args)<br />
{<br />
&nbsp;&nbsp;&nbsp; CustTable custTable = CustTable::find('9101', true);<br />
&nbsp;&nbsp;&nbsp; container validateCon;<br />
&nbsp;&nbsp;&nbsp; container helpCon;<br />
&nbsp;&nbsp;&nbsp; int ii;<br />
<br />
&nbsp;&nbsp;&nbsp; container getDimensionValue(RecId _dimensionAttributeValueSetRecId, container _c)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DimensionAttributeValueSetItem dimensionAttributeValueSetItem;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DimensionAttributeValue dimensionAttributeValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DimensionAttribute dimensionAttribute;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Common dimensionValueEntity;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name dimensionName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str 255 dimensionValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; container retCon;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=1;i&lt;=conLen(_c);i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionName&nbsp; = conPeek(_c, i);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( !DimensionAttribute::findByName(dimensionName))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error(strFmt(&quot;Dimension %1 not found&quot;, dimensionName));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while select dimensionAttributeValueSetItem<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where&nbsp;&nbsp; dimensionAttributeValueSetItem.DimensionAttributeValueSet&nbsp;&nbsp; == _dimensionAttributeValueSetRecId<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Find the dimension 'value' (DimensionAttributeValue) that the set item points to.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValue = DimensionAttributeValue::find(dimensionAttributeValueSetItem.DimensionAttributeValue);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Find the underlying attribute.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttribute = DimensionAttribute::find(dimensionAttributeValue.DimensionAttribute);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Use the helper class to obtain a reference to the underlying entity (can be anything)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionValueEntity = DimensionDefaultingControllerBase::findBackingEntityInstance(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; curext(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttribute,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValue.EntityInstance);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(dimensionAttribute.Name == dimensionName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retCon = conIns(retCon, conLen(retCon)+1, [dimensionAttribute.Name, dimensionAttributeValue.getValue()]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return retCon;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; ;<br />
<br />
&nbsp;&nbsp;&nbsp; validateCon = getDimensionValue(custTable.DefaultDimension, [&quot;CustomerGroup&quot;, &quot;Debitor&quot;, &quot;NonExistingDimension&quot;]);<br />
&nbsp;&nbsp;&nbsp; for (ii=1;ii&lt;=conLen(validateCon);ii++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; helpCon = conPeek(validateCon, ii);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(conPeek(helpCon, 1) == &quot;CustomerGroup&quot; &amp;&amp; conPeek(helpCon, 2) != custTable.CustGroup)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; warning(strFmt(&quot;Dimension %1 should be %2.&quot;, conPeek(helpCon, 1), conPeek(helpCon, 2)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(conPeek(helpCon, 1) == &quot;Debitor&quot; &amp;&amp; conPeek(helpCon, 2) != custTable.AccountNum)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; warning(strFmt(&quot;Dimension %1 should be %2.&quot;, conPeek(helpCon, 1), conPeek(helpCon, 2)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(conPeek(helpCon, 1) == &quot;NonExistingDimension&quot; &amp;&amp; conPeek(helpCon, 2) != custTable.AccountNum)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; warning(strFmt(&quot;Dimension %1 should be %2.&quot;, conPeek(helpCon, 1), conPeek(helpCon, 2)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}
</div>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Wed, 16 May 2012 21:22:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=430</link>
<comments>https://www.schweda.net/blog_ax.php?bid=430</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=430</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=430</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Benutzerdefinierte Finanzdimension anlegen]]></title>
<description><![CDATA[
<p>MIt Hilfe des folgenden Jobs kann in Dynamics AX 2012 ein neuer Eintrag f&uuml;r eine benutzerdefinierte Finanzdimension erstellt werden. Im Beispiel ist der Name der Dimension <em>ParentProject </em>und der einzuf&uuml;gende Wert ist <em>4600</em>.
</p>

<div class="div_blog_axcode">static void createCustomDimensionValue(Args _args)<br />
{<br />
&nbsp;&nbsp;&nbsp; DimensionValueService dimensionValueService;<br />
&nbsp;&nbsp;&nbsp; DimensionValueContract dimensionValueContract;<br />
<br />
&nbsp;&nbsp;&nbsp; dimensionValueService = new DimensionValueService();<br />
&nbsp;&nbsp;&nbsp; dimensionValueContract = new DimensionValueContract();<br />
&nbsp;&nbsp;&nbsp; dimensionValueContract.parmDescription('Project 4500');<br />
&nbsp;&nbsp;&nbsp; dimensionValueContract.parmValue('4600');<br />
&nbsp;&nbsp;&nbsp; dimensionValueContract.parmDimensionAttribute('ParentProject');<br />
&nbsp;&nbsp;&nbsp; if(dimensionValueService.createDimensionValue(dimensionValueContract))<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; info(strFmt(&quot;Dimension value %1 for dimension %2 created&quot;, dimensionValueContract.parmValue(), dimensionValueContract.parmDimensionAttribute()));<br />
&nbsp;&nbsp;&nbsp; }<br />
}
</div>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Mon, 14 May 2012 12:53:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=428</link>
<comments>https://www.schweda.net/blog_ax.php?bid=428</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=428</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=428</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Werte einer Finanzdimension auslesen]]></title>
<description><![CDATA[
<p>Der folgende Job demonstriert, wie man sich die Werte einer Finanzdimension - im Beispiel&nbsp; <em>Department </em>- per X++ ausgeben lassen kann.
</p>


<pre class="pre_blog_axcode">
static void getValues4Dimension(Args _args)
{
    DimensionValueService dimensionValueService;
    DimensionContract dimensionContract;
    List dimensionValueContractList;
    ListEnumerator listEnumerator ;
    DimensionValueContract dimensionValueContract;
    DimensionValue dimensionValue;

    dimensionValueService = new DimensionValueService();
    dimensionContract = new DimensionContract();
    dimensionContract.parmDimensionName(&#39;Department&#39;);
    dimensionValueContractList = dimensionValueService.getDimensionValues(dimensionContract);
    listEnumerator = dimensionValueContractList.getEnumerator();

    setPrefix(strFmt(&quot;Dimension %1: &quot;, dimensionContract.parmDimensionName()));
    while(listEnumerator.moveNext())
    {
        dimensionValueContract = listEnumerator.current();
        dimensionValue = dimensionValueContract.parmValue();

        info(dimensionValue);
    }
}
</pre>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Sun, 13 May 2012 20:45:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=431</link>
<comments>https://www.schweda.net/blog_ax.php?bid=431</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=431</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=431</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Kontostruktur eines Hauptkontos ermitteln]]></title>
<description><![CDATA[
<p>M&ouml;chte man f&uuml;r das Hauptkonto einer Position einer Allgemeinen Erfassung ermitteln, kann man dies mit Hilfe des nachstehenden Codes tun.
</p>

<div class="div_blog_axcode">static void getAccountStructureFromLedgerDimension(Args _args)<br />
{<br />
&nbsp;&nbsp;&nbsp; ledgerJournalTrans ledgerJournalTrans;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; select ledgerJournalTrans<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where ledgerJournalTrans.JournalNum == '000151_010';&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; info(DimensionStorage::getAccountStructureFromLedgerDimension(ledgerJournalTrans.LedgerDimension).Name);<br />
}
</div>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Fri, 11 May 2012 11:02:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=433</link>
<comments>https://www.schweda.net/blog_ax.php?bid=433</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=433</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=433</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Standardfinanzdimension eines Datensatzes auslesen und ausgeben]]></title>
<description><![CDATA[
<p>Im folgenden Job werden die eingetragenen Standardfinanzdimensionen eines Datensatzes - im konkreten Fall die eines bestimmten Debitoren - ausgegeben.
</p>

<div class="div_blog_axcode">static void getDimensionsFromDefaultDimension(Args _args)<br />
{<br />
&nbsp;&nbsp;&nbsp; DimensionAttributeValueSet dimensionAttributeValueSet;<br />
&nbsp;&nbsp;&nbsp; DimensionAttributeValueSetItem dimensionAttributeValueSetItem;<br />
&nbsp;&nbsp;&nbsp; DimensionAttributeValue&nbsp;dimensionAttributeValue;<br />
&nbsp;&nbsp;&nbsp; DimensionAttribute dimensionAttribute;<br />
&nbsp;&nbsp;&nbsp; Common dimensionValueEntity;<br />
<br />
&nbsp;&nbsp;&nbsp; dimensionAttributeValueSet = DimensionAttributeValueSet::find(CustTable::find('9101').DefaultDimension);<br />
<br />
&nbsp;&nbsp;&nbsp; // Find all of the 'value set items' linked against the 'value set'<br />
&nbsp;&nbsp;&nbsp; while select dimensionAttributeValueSetItem<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where&nbsp;&nbsp; dimensionAttributeValueSetItem.DimensionAttributeValueSet&nbsp;== dimensionAttributeValueSet.RecId<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Find the dimension 'value' (DimensionAttributeValue) that the set item points to.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValue = DimensionAttributeValue::find(dimensionAttributeValueSetItem.DimensionAttributeValue);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Find the underlying attribute.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttribute = DimensionAttribute::find(dimensionAttributeValue.DimensionAttribute);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Use the helper class to obtain a reference to the underlying entity (can be anything)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionValueEntity = DimensionDefaultingControllerBase::findBackingEntityInstance(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; curext(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttribute,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dimensionAttributeValue.EntityInstance);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; info(strFmt(&quot;%1: %2&quot;, dimensionAttribute.Name, dimensionAttributeValue.getValue()));<br />
&nbsp;&nbsp;&nbsp; }<br />
}
</div>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Wed, 09 May 2012 20:00:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=432</link>
<comments>https://www.schweda.net/blog_ax.php?bid=432</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=432</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=432</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Dimensionen einer Position einer Allgemeines Erfassung per X++ auslesen]]></title>
<description><![CDATA[
<p>Wenn man bei einer Position einer Allgemeinen Erfassung, welche gegen ein Sachkonto/Hauptkonto bucht, per X++ die eingetragenen Dimensionen auslesen m&ouml;chte, kann der folgende Code m&ouml;glicherweise hilfreich sein.
</p>


<p><a href="http://www.schweda.net/pictures/blogpics/ax2012_ledgerjournaltrans_ledgeraccount.JPG" target="_blank"><img alt="Position einer Allgemeinen Erfassung" height="289" src="http://www.schweda.net/pictures/blogpics/tb_ax2012_ledgerjournaltrans_ledgeraccount.JPG" title="Position einer Allgemeinen Erfassung" width="465" /></a>
</p>

<br /><a class="div_blog_category_gotodetail" href="https://www.schweda.net/blog_ax.php?bid=435" target="_self" title="Weiterlesen...">Weiterlesen...</a>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Wed, 09 May 2012 09:28:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=435</link>
<comments>https://www.schweda.net/blog_ax.php?bid=435</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=435</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=435</wfw:commentRss>
</item>
<item>
<title><![CDATA[AX 2012: Datensätze mit einer bestimmten Dimension ausgeben]]></title>
<description><![CDATA[
<p>Der folgende Job listet alle Debitoren auf, bei welchen in der Dimension <em>CustomerGroup </em>der Wert <em>80 </em>eingetragen ist.
</p>

<p>Der interessante Teil des Jobs ist die Methode <em><strong>addDimensionAttributeRange </strong></em>der Klasse <em>SysQuery</em>, da diese sich um das&nbsp;Verkn&uuml;pfen der ben&ouml;tigten Datenquellen k&uuml;mmert.
</p>

<div class="div_blog_axcode">static void getRecords4DimensionValue(Args _args)<br />
{<br />
&nbsp;&nbsp;&nbsp; Query query;<br />
&nbsp;&nbsp;&nbsp; QueryBuildDataSource queryBuildDataSource;<br />
&nbsp;&nbsp;&nbsp; QueryBuildRange queryBuildRange;<br />
&nbsp;&nbsp;&nbsp; QueryRun queryRun;<br />
&nbsp;&nbsp;&nbsp; CustTable custTable;<br />
<br />
&nbsp;&nbsp;&nbsp; query = new Query();<br />
&nbsp;&nbsp;&nbsp; queryBuildDataSource = query.addDataSource(tableNum(CustTable));<br />
<br />
&nbsp;&nbsp;&nbsp; queryBuildRange = SysQuery::addDimensionAttributeRange( query,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queryBuildDataSource.name(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;DefaultDimension&quot;,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DimensionComponent::DimensionAttribute,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queryValue(&quot;80&quot;),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;CustomerGroup&quot;);<br />
<br />
&nbsp;&nbsp;&nbsp; queryRun = new QueryRun(query);<br />
&nbsp;&nbsp;&nbsp; while(queryRun.next())<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; custTable = queryRun.get(tableNum(CustTable));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; info(custTable.name());<br />
&nbsp;&nbsp;&nbsp; }<br />
}
</div>

<p>Die Klasse SysQuery stellt &uuml;brigens zahlreiche weitere &auml;hnliche Funktionen zur Verf&uuml;gung, um mit Dimensionswerten zu arbeiten.
</p>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Tue, 08 May 2012 18:06:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=434</link>
<comments>https://www.schweda.net/blog_ax.php?bid=434</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=434</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=434</wfw:commentRss>
</item>
</channel>
</rss>	
