<?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://www.schweda.net/blog_rss.php?bid=241" rel="self" type="application/rss+xml" />
<item>
<title><![CDATA[Dynamics AX: SalesTable2LineField]]></title>
<description><![CDATA[
<p>In der Auftragserfassung gibt es im Auftragskopf Felder, die, wenn sie aktualisiert werden, entweder vollautomatisch bzw. nach R&uuml;ckfrage beim Benutzer in den Auftragszeilen ebenfalls aktualisiert werden. Welche Felder das sind kann in den <strong>Debitorenparametern</strong>, Register <em>Aktualisierungen</em> &uuml;ber die Schaltfl&auml;che <em>Auftragspositionen aktualisieren</em> eingesehen werden. Dort kann auch parametriert werden, wie sich Dynamics AX bei der Aktualisierung dieser Felder verhalten soll.
</p>


<p><a href="http://www.schweda.net/pictures/blogpics/salestable2linefieldparm.jpg" rel="lightbox" target="_blank"><img alt="Debitorenparameter - Auftragspositionen aktualisieren" height="370" src="http://www.schweda.net/pictures/blogpics/salestable2linefieldparm.jpg" width="1237" /></a>
</p>


<p>Um nun ein weiteres Feld in diese Logik mitaufzunehmen bedarf es einiger Schritte. Im folgenden demonstriere ich die notwendigen &Auml;nderungen anhand des neuen Feldes <em>DevReceiptDateRequested</em> (abgeleitet vom EDT <em>DevSalesReceiptDateRequested</em>):
</p>


<p>&nbsp;
</p>


<ul>
	
<li>Neues Feld in Tabelle <strong>Salestable</strong> und <strong>Salesline</strong> anlegen
</li>
	
<li>Das neue Feld in der Salestable in die <strong>Fieldgroup HeaderToLineUpdate</strong> integrieren
</li>
	
<li>In der Klasse <strong>SalesTable2LineField</strong> die Methode <strong>lineUpdateDescription</strong> um das neue Feld erweitern (einfach die Logik eines bestehenden Feldes abschreiben)
</li>
	
<li>In der Klasse <strong>SalesLineType</strong> die Methode <strong>initFromSalesTable</strong> um das neue Feld erweitern (einfach die Logik eines bestehenden Feldes abschreiben)
</li>
	
<li>In der Klasse <strong>AxSalesline</strong> eine neue Methode wie folgt erstellen
	
<pre class="pre_blog_axcode">
protected boolean isDevReceiptDateRequestedSet()
{
     return this.isFieldSet(fieldNum(SalesLine, DevReceiptDateRequested)) ||
            this.AxSalesTable().isFieldModified(fieldNum(SalesTable, DevReceiptDateRequested));
}
</pre>
	
</li>
	
<li>In der Klasse <strong>AxSalesline</strong> eine weitere Methode wie folgt erstellen
	
<pre class="pre_blog_axcode">
public DevSalesReceiptDateRequested DevReceiptDateRequested(DevSalesReceiptDateRequested _DevReceiptDateRequested = dateNull())
{
   if (!prmisdefault(_DevReceiptDateRequested))
   {
       this.setField(fieldNum(SalesLine, DevReceiptDateRequested), _DevReceiptDateRequested);
   }
 
   return SalesLine.DevReceiptDateRequested;
}
</pre>
	
</li>
	
<li>In der Klasse <strong>AxSalesline</strong> eine dritte neue Methode wie folgt erstellen
	
<pre class="pre_blog_axcode">
protected void setDevReceiptDateRequested()
{
   if (this.isMethodExecuted(funcName(), fieldNum(SalesLine, DevReceiptDateRequested)))
   {
       return;
   }
   if (this.isDevReceiptDateRequestedSet())
   {
       this.DevReceiptDateRequested(this.AxSalesTable().DevReceiptDateRequested());
   }
}
</pre>
	
</li>
	
<li>In der Klasse <strong>AxSalesLine </strong>muss nun die Methode <strong>setTableFields </strong>um den Aufruf der zuvor angelegten Methode <strong>setDevReceiptDateRequested </strong>erweitert werden
</li>
	
<li>In der Klasse <strong>AxSalesTable</strong> eine neue Methode wie folgt anlegen
	
<pre class="pre_blog_axcode">
protected void setDevReceiptDateRequested()
{
    ;
    if (this.isMethodExecuted(funcName(), fieldNum(SalesTable, DevReceiptDateRequested)))
    {
        return;
    }
}
</pre>
	
</li>
	
<li>In der Klasse <strong>AxSalesTable</strong> eine weitere Methode wie folgt anlegen
	
<pre class="pre_blog_axcode">
public DevSalesReceiptDateRequested DevReceiptDateRequested(DevSalesReceiptDateRequested _DevReceiptDateRequested = dateNull())
{
    ;
    if (!prmisdefault(_DevReceiptDateRequested))
    {
        this.setField(fieldNum(SalesTable, DevReceiptDateRequested), _DevReceiptDateRequested);
    }

    return salesTable.DevReceiptDateRequested;
}
</pre>
	
</li>
	
<li>In der Klasse <strong>AxSalesTable </strong>muss nun die Methode <strong>setTableFields </strong>um den Aufruf der zuvor angelegten Methode <strong>setDevReceiptDateRequested </strong>erweitert werden
</li>
	
<li>Nun mu&szlig; noch folgender Code einmalig ausgef&uuml;hrt werden (z.B. per Job) um das neue Feld in die Aktualisierungslogik einzubinden
	
<pre class="pre_blog_axcode">
SalesTable2LineParameters salesTable2LineParameters;
;
ttsbegin;
salesTable2LineParameters.clear();
salesTable2LineParameters.initValue();
salesTable2LineParameters.fieldId           = fieldNum(SalesTable, DevReceiptDateRequested);
salesTable2LineParameters.table2LineUpdate  = Table2LineUpdate::Prompt;
salesTable2LineParameters.insert();
ttscommit;
</pre>
	
</li>

</ul>


<p>&Uuml;brigens, die gleiche Logik gibt es nat&uuml;rlich auch einkaufsseitig. Die obige Abfolge und die Codebeispiele wurden unter AX3 entwickelt.
</p>


<p><strong>Update vom 28.07.2010:</strong> In Dynamics AX 2009 funktioniert die beschriebene L&ouml;sung genauso. Lediglich beim auszuf&uuml;hrenden Job hat sich der Datentyp des Feldes <strong>table2LineUpdate </strong>ge&auml;ndert.
</p>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Sun, 22 Jun 2008 10:03:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=241</link>
<comments>https://www.schweda.net/blog_ax.php?bid=241</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=241</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=241</wfw:commentRss>
</item>
</channel>
</rss>	
