2012-01-24 16 views
8

मेरी समस्या बाहरी स्रोत से पढ़ने वाले कुछ आयाम मान सेट कर रही है।एएक्स 2012 में एकल आयाम मान कैसे सेट करें?

ledgerJournalTrans.Dimension = ledgerTable.Dimension; 
ledgerJournalTrans.Dimension[1] = "abc"; 

कि कुल्हाड़ी 2012 में के बराबर तरीका क्या है:

AX 2009 बयान को देखते हुए?

इस कारण से पहले विभाग के रूप में "विभाग" आयाम का अस्तित्व माना जाएगा।

+0

मैं हाल ही में कहा था कि वित्तीय आयाम एक अलग में जमा हो जाती 2012 में टेबल और वे भी असीमित हैं। मुझे अभी तक देखने का मौका नहीं मिला है, लेकिन मेरा अनुमान यह होगा कि यह इनवेंटडिम जैसा है जहां आप करते हैं :: FindOrCreate() और आपके पास आविष्कार DimId है। सुनिश्चित नहीं है कि यह आपको सही दिशा में इंगित करने में मदद कर सकता है। –

+0

आप सही हैं, लेकिन कोई आसान खोज नहीं है Orcreate(), सभी संदर्भ रिकॉइड हैं, याद रखें :) –

+0

मेरे पास अब तक एक्सएक्स 2012 को देखने के लिए समय नहीं है। मेरे पास काम करने के पीछे एक प्रमुख माइक्रोसॉफ्ट समर्थन प्रतिनिधि है, लेकिन हम 200 9 में हैं और मुझे यकीन है कि अगर मैं उन्हें 2012 प्रोग्रामिंग प्रश्न पूछता हूं तो वह उलझन में होगा। इच्छा है कि मैं और मदद कर सकता हूं। –

उत्तर

13

सबसे पहली बात, कुल्हाड़ी 2009 में विरासत आयाम खाते का एक संयोजन और पुराने आयाम मान खाता संरचना और उन्नत के आधार पर की जरूरत है किया गया है पूरी तरह से पुनः किया गया है और नई LedgerDimension कुल्हाड़ी 2012 में बदल दिया जाता है नियम संरचनाएं एएक्स 2012 में नए आयाम फ्रेमवर्क के बारे में और जानने के लिए नए आयाम ढांचे के बारे में whitepaper पढ़ने का प्रयास करें।

मान लीजिए कि विभाग पहला आयाम है और दोनों आयाम लेजरडिमेंशन का उपयोग कर रहे हैं खाता ईडीटी इस परिदृश्य को काफी सरल बनाता है, लेकिन नया आयाम ढांचा बहुत लचीला है इसलिए यह धारणा सही नहीं हो सकती है। यहां तक ​​कि यदि यह है, तो बस विभाग के लिए एक नया मूल्य निर्दिष्ट करने की आवश्यकता हो सकती है कि संयोजन की संरचना को उन्नत नियम संरचनाओं के कारण बड़े पैमाने पर बदलने की आवश्यकता हो।

ईमानदारी से, मैं केवल नीचे दिए गए कोड को केवल एक प्रदर्शन के रूप में मानता हूं कि कुछ मूल बातें कैसे काम करती हैं, ऐसा कुछ नहीं जो उत्पादन में उपयोग किया जाना चाहिए। इसके साथ ही, यह कोड आपको जो चाहिए, उसे पूरा करना चाहिए, यदि लेजररटेबल पर आयाम फ़ील्ड लेजरडिमेंशन एडीटी का उपयोग करके लेजरडिमेंशन फ़ील्ड के साथ प्रतिस्थापित किया गया है जो पूर्ण संयोजन संग्रहीत करता है।

DimensionStorage dimensionStorage; 
DimensionAttribute deparmentDimensionAttribute; 
DimensionAttributeValue newDepartmentValue; 

// Find the deparment dimension attribute 
deparmentDimensionAttribute = DimensionAttribute::findByName("Department"); 

// Find the new department value we want to put in the new combination. 
newDepartmentValue = DimensionAttributeValue::findByDimensionAttributeAndValue(deparmentDimensionAttribute, "abc"); 

// Load a DimensionStorage instance with the old combination and update the first segment with new value 
dimensionStorage = DimensionStorage::findById(ledgerTable.LedgerDimension); 
dimensionStorage.setSegment(1,DimensionStorageSegment::constructFromValue("abc", newDepartmentValue)); 
ledgerJournalTrans.LedgerDimension = dimensionStorage.save(); 
+1

इससे बहुत मदद मिली। सफेद पेपर भी * फिर से पढ़ना * अच्छा समय बिताया गया था। –

2

मेरा मामला "डिफ़ॉल्ट आयाम" परिदृश्य था, इसलिए मुझे थोड़ा अनुकूलित करना पड़ा। इस विधि मैं अंत में प्रयोग किया जाता है:

DimensionAttribute मेज पर एक नए क्षेत्र नाम Number जोड़ने तो इस पद्धति जोड़ें:

public static DimensionAttribute findByNumber(DimensionOrdinal _number) 
{ 
    DimensionAttribute dimensionAttribute; 
    select firstonly dimensionAttribute where dimensionAttribute.Number == _number; 
    return dimensionAttribute; 
} 

यह स्पष्ट रूप से एक इसी संख्या के साथ आयाम को दिखाता है।

public void addItemNumber(DimensionOrdinal _idx, SysDim _value) 
{ 
    DimensionAttributeValue attrValue; 
    DimensionAttribute attr = DimensionAttribute::findByNumber(_idx); 
    if (!attr) 
     throw error(strFmt("@SYS342559", _idx)); 
    attrValue = DimensionAttributeValue::findByDimensionAttributeAndValue(attr, _value, false, true); 
    this.addItemValues(attr.RecId, attrValue.RecId, attrValue.HashKey); 
} 

DimensionAttributeValueSetStorage श्वेत पत्र @dlannoye उल्लेख में वर्णित के रूप संभालती "डिफ़ॉल्ट आयाम":

DimensionAttributeValueSetStorage वर्ग पर विधि जोड़ें।

फिर इसी कोड इस तरह पढ़ें:

dimensionStorage = DimensionAttributeValueSetStorage::find(salesTable.DefaultDimension); 
dimensionStorage.addItemNumber(1, "abc"); 
salesTable.DefaultDimension = dimensionStorage.save(); 
+0

मुझे लगता है कि आपके पास नौकरी या कुछ ऐसा ही था जो DimensionAttribute तालिका पर संख्या फ़ील्ड के मान सेट करता है, क्या यह सही है? – dlannoye

+0

नहीं, मैंने अभी फ़ील्ड फ़ील्ड समूह में फ़ील्ड जोड़ा है, फिर मानों को मैन्युअल रूप से वित्त \ सेटअप \ वित्तीय आयामों में संपादित किया है। –

संबंधित मुद्दे