Dynamics 365 Blog

Kombination LedgerDimension und LedgerJournalACType prüfen

Angenommen man hat in einer Tabelle ein Feld vom Typ LedgerDimension (RefRecId abgeleitet vom EDT DimensionDefault) und eines vom Base enum LedgerJournalACType und möchte prüfen, ob die Kombination zusammenpasst. In einem solchen Szenario kann man die Klasse DimensionDynamicAccountResolver verwenden:

DimensionDynamicAccountResolver dimensionDynamicAccountResolver = DimensionDynamicAccountResolver::newResolver(
    LedgerDimensionFacade::getDisplayValueForLedgerDimension(ledgerJournalTrans.LedgerDimension),
    ledgerJournalTrans.AccountType);
dimensionDynamicAccountResolver.resolve();

Im Beispiel verwende ich die Felder LedgerDimension und AccountType aus der Tabelle LedgerJournalTrans. Dabei muss das Feld LedgerDimension über LedgerDimensionFacade in einen String (=Anzeigewert) umgewandelt werden. um diesen an die Klasse DimensionDynamicAccountResolver übergeben zu können.


 
 
 

Best-Practice-Abweichungen unterdrücken

Prinzipiell sollte jede Lösung in Dynamics 365 for Finance and Operations frei von Best-Practice-Abweichungen sein, dennoch gibt es ab und an die Notwendigkeit, sie unterdrücken zu müssen.

Ein solcher Fall sind beispielsweise Eventhandler, die ein vorgegebenes Paramterprofil aufweisen, im Falle eine Nicht-Verwendung eines dieser Parameter aber eine BP-Abweichung verursachen.

class MyFreeTextInvoiceHeaderFooterTmpEH
{
    [DataEventHandler(tableStr(FreeTextInvoiceHeaderFooterTmp), DataEventType::Inserting)]
    public static void FreeTextInvoiceHeaderFooterTmp_onInserting(Common sender, DataEventArgs e)
    {
        FreeTextInvoiceHeaderFooterTmp freeTextInvoiceHeaderFooterTmp;
    
        freeTextInvoiceHeaderFooterTmp = sender;
    
        if (freeTextInvoiceHeaderFooterTmp.CompanyBankAccount == "")
        {
            freeTextInvoiceHeaderFooterTmp.CompanyBankName = "Unknown";
        }
    }
}

Bei obigem EH würde folgende BP-Abweichung ausgegeben werden, da der Parameter e nicht verwendet wird:

BP Rule: [BPParameterNotUsed]:The parameter 'e' is not used.


 
 
 

Exception beim Platformupdate 30

Als ich vor kurzem eine lokales D365-VPC mit dem Platform Update 30 versorgen wollte, trat bei Step 19 der folgende Fehler auf:

GlobalUpdate script for service model: AOSService on machine: D365Local
Sync AX database
The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: System.Management.Automation.RuntimeException: An exception of type System.Net.WebException occurred when making an http request to: http://127.0.0.1/ReportServer. Refer to the log file for more details.
The step failed

Die Ursache für diesen Fehler war rasch gefunden - nach dem Download des VPC aus LCS wurde der Name des virtuellen Computers geändert, dieser aber nicht überall nachgezogen. Dadurch hatten die SQL Reporting Services ein Problem, hier musste eine neue Database eingetragen werden. Wie dies geht, und was man noch alles beim Umbenennen eines VPCs berücksichtigen muss steht übrigens hier.


 
 
 

Fehler "The step failed" beim Platformupdate 30 in Verbindung mit Reporting services

Tritt während eines Platform Updates eines lokalen VPCs folgender Fehler auf...

Executing step: 19
GlobalUpdate script for service model: AOSService on machine: D365FOSHLocal
Sync AX database
The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: System.Management.Automation.RuntimeException: An exception of type System.Net.WebException occurred when making an http request to: http://127.0.0.1/ReportServer. Refer to the log file for more details.
The step failed
The step: 19 is in failed state, you can use rerunstep command to debug the step explicitly
   at Microsoft.Dynamics.AX.AXUpdateInstallerBase.RunbookExecutor.ExecuteRunbookStepList(RunbookData runbookData, String updatePackageFilePath, Boolean silent, String stepID, ExecuteStepMode executeStepMode, Boolean versionCheck, Parameters parameters)
   at Microsoft.Dynamics.AX.AXUpdateInstallerBase.AXUpdateInstallerBase.execute(String runbookID, Boolean silent, String updatePackageFilePath, IRunbookExecutor runbookExecutor, Boolean versionCheck, Parameters param)
   at Microsoft.Dynamics.AX.AXUpdateInstaller.Program.InstallUpdate(String[] args)
   at Microsoft.Dynamics.AX.AXUpdateInstaller.Program.Main(String[] args)

...kann die Ursache sein, daß der Computername des VPCs geändert wurde, und dabei aber nicht alle von Microsoft empfohlenen Schritte durchgeführt wurden.

Welche das sind, ist hier zu finden: https://docs.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/migration-upgrade/vso-machine-renaming

 

 


 
 
 

Finanzdimension als Display-Methode anzeigen

[SysClientCacheDataMethodAttribute(true)]
public display DimensionDisplayValue displayLedgerDimensionValue()
{
    return LedgerDimensionFacade::getDisplayValueForLedgerDimension(this.LedgerDimension);
}

 
 
 

Fehler "Argument für Methode getFieldValue liegt außerhalb des zulässigen Bereichs" beim Importieren über eine Entität

Beim Importieren von Daten über eine selbst erstellte Data Entity, für eine ebenfalls selbst erstellte Tabelle die Finanzdimensionen enthält, hatte ich vor kurzem das Problem, dass der Import immer mit dem folgenden Fehler fehlschlug:

Argument für Methode getFieldValue liegt außerhalb des zulässigen Bereichs.

Beim Debuggen stelte sich heraus, daß in der Methode DimensionDynamicAccountDataEntityResolver.getEnumValue() ein Feldname nicht ermittelt werden konnte. Allerdings ist die verantwortliche Methode DictDataEntityField.dynamicDimensionEnumartionField() nicht einsehbar.


 
 
 

Feld vom Typ LedgerDimension zu einer (eigenen) Tabelle hinzufügen

Um in Dynamics 365 for Finance and Operations zu einer (eigenen) Tabelle ein Feld vom Typ LedgerDimension hinzuzufügen - also ein Feld, welches Finanzdimensionen aufnehmen soll - sind nur wenige Schritte erforderlich:

  1. Neue Foreign-Key-Relation zur Tabelle DimensionAttributeValueCombination erstellen
  2. Als Index dieser Relation RecId auswählen
    Dadurch wird nun ein neues Feld in der Tabelle generiert und die Relation zu diesem Feld erstellt
  3. Die Eigenschaft Extends dieses neuen Feldes sollte nun auf DimensionDynamicAccount geändert werden
    Das Feld kann nun ggf. umbenannt werden, z.B. LedgerDimension
  4. Nun muss ein weiteres neues Feld eingefügt werden, daß von BaseEnum LedgerJournalACType ableitet

Um ein solches Feld nun auch in einem (eigenen) Formular anzuzeigen, sind folgende Schritte notwendig:

  1. Per Drag & Drop beide erstellten Felder im Design platzieren
  2. Dabei wird für das Feld, das die Dimension aufnehmen soll (z.B. LedgerDimension), ein Segmented Entry Control erstellt
  3. In den Eigenschaften dieses Controls sind nun folgende Eigenschaften anzupassen
    • Controller Class: DimensionDynamicAccountController
    • Account type field: Hier muss jenes Feld eingetragen werden, das von LedgerJournalACType abgeleitet wurde

Abhängig von der Klasse die man am Segmented Entry Control in der Eigenschaft Controller Class hinterlegt, sind noch ggf. weitere Einstellungen vorzunehmen, wobei nicht alle immer zulässig sein. Mehr dazu unter https://docs.microsoft.com/de-at/dynamics365/unified-operations/dev-itpro/financial/segmented-entry-control-metadata-specification


 
 
Seiten 1 2 3 4 » 

 

 
 
 
Beiträge des aktuellen Monats
Februar 2020
MoDiMiDoFrSaSo
 12
3456789
10111213141516
17181920212223
242526272829 
 
© 2006-2020 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.  Mehr dazu