2012-04-02 15 views
2

Ich denke, dass ich einen interessanten Fehler mit AX 2009 gefunden habe, und ich unsicher bin, wie ich fortfahren kann.AX 2009: Bericht Bereich für enums Parsing enum Wert Kommas?

Ich versuche, einen neuen Bericht zu schreiben, und eine der Bedingungen dieses Berichts soll basierend auf dem Posting-Feld der LedgerTrans-Tabelle gefiltert werden. Es scheint jedoch, dass, wenn der Bericht ausgeführt wird, die Beschriftung der Enumeration Purchase, receipt ohne Rücksicht auf die Anführungszeichen analysiert wird. Dies wäre normalerweise kein Problem, aber das Enumerations-Label enthält in diesem Fall ein Komma. Das Ergebnis ist, dass wenn das Abfragedialogfeld ausgeführt wird: Purchase, consumption, __ILLEGAL_VALUE__. Ich bekomme dieses Ergebnis, auch wenn ich den Aufzählungswert oder den Namen verwenden. Der Bericht muss interaktiv bleiben, aber dieses Feld muss gesperrt sein, damit die Benutzer die Abfrage nicht zur Laufzeit anpassen können.

An diesem Punkt möchte ich nicht das Etikett selbst ändern, aber wenn es der einzige Weg ist, dies zu lösen, werde ich. Ist noch jemand dazu gekommen oder weiß, wie wir es überwinden könnten?

Antwort

2

ich in diese vor ausgeführt haben. Manchmal ist eine akzeptable Option ist hart Codierung der Bedingungswerte als Anweisung OR, anstatt das Komma getrennte Liste:

((LedgerTrans.Posting == LedgerPostingType::PurchReceipt) || (LedgerTrans.Posting == LedgerPostingType::PurchConsump)) 

die in einen Bereich Filterfeld eingegeben werden kann, oder kann als der Wert eines Bereichs eingestellt werden via x ++ Code:

ledgerPostingRange.value("((LedgerTrans.Posting == LedgerPostingType::PurchReceipt) || 
          (LedgerTrans.Posting == LedgerPostingType::PurchConsump))"); 

AX versucht nicht, diese auf die Etiketten zu konvertieren, so dass sie bleiben, wie unterschiedliche Werte, statt als Markierungen wiedergegeben wird. Beachten Sie, dass Klammern erforderlich sind, damit sie ordnungsgemäß analysiert werden.

Da die ILLEGAL_VALUE kann erscheinen, selbst wenn man versucht, einen einzelnen Wert zu verwenden, die ein Komma in dem Etikett enthält, kann das gleiche für einen einzelnen getan werden:

ledgerPostingRange.value("(LedgerTrans.Posting == LedgerPostingType::PurchReceipt)"); 
0

Ich würde definitiv das Etikett ändern! Als Workaround können Sie stattdessen die Nummer des Aufzählungswerts verwenden.

Wenn das Feld oft abgefragt wird, können Sie das Feld in einem Dialog setzen Sie dann die Abfrage ändern:

ledgerPostingRange.value(ledgerPostingType ? int2str(ledgerPostingType) : ''); 
+0

habe ich versucht, den numerischen Wert zu verwenden, der Enum, aber es zieht immer noch das gleiche Ergebnis. Ich werde das Label in der Zwischenzeit ändern, aber das ist offensichtlich kein gewünschtes Ergebnis, zumal es sich hier um eine System-Enumeration handelt. Interessanterweise funktioniert dies ordnungsgemäß, wenn Sie es auf der Benutzerseite eingeben, nur nicht, wenn Sie es für eine Bericht (und möglicherweise andere) Abfrage vordefinieren. – kingofzeal