Miklix

Cập nhật giá trị chiều tài chính từ mã X++ trong Dynamics 365

Đã xuất bản: lúc 12:01:53 UTC 16 tháng 2, 2025

Bài viết này giải thích cách cập nhật giá trị chiều tài chính từ mã X++ trong Dynamics 365, bao gồm cả ví dụ mã.


Trang này được dịch máy từ tiếng Anh để có thể tiếp cận được với nhiều người nhất có thể. Thật không may, dịch máy vẫn chưa phải là công nghệ hoàn thiện, do đó có thể xảy ra lỗi. Nếu bạn thích, bạn có thể xem phiên bản tiếng Anh gốc tại đây:

Update Financial Dimension Value from X++ Code in Dynamics 365

Thông tin trong bài đăng này dựa trên Dynamics 365. Nó cũng có thể hoạt động trong Dynamics AX 2012, nhưng tôi chưa thử nghiệm cụ thể.

Gần đây tôi được giao nhiệm vụ cập nhật giá trị của một khía cạnh tài chính duy nhất dựa trên một số dạng logic.

Như bạn có thể biết, vì các chiều tài chính của Dynamics AX 2012 được lưu trữ trong các bảng riêng biệt và được tham chiếu thông qua RecId, thường là trong trường DefaultDimension.

Toàn bộ khuôn khổ để xử lý kích thước khá phức tạp và tôi thường phải đọc lại tài liệu về nó, có lẽ vì đây không phải là vấn đề tôi thường xuyên làm việc.

Dù sao thì việc cập nhật một trường trong tập hợp kích thước hiện có là điều thường xuyên xảy ra, vì vậy tôi nghĩ mình sẽ viết một bài về công thức nấu ăn yêu thích của mình ;-)


Một phương thức tiện ích tĩnh có thể trông như thế này:

public static DimensionDefault updateDimension( DimensionDefault    _defaultDimension,
                                                Name                _dimensionName,
                                                DimensionValue      _dimensionValue)
{
    DimensionAttribute                  dimAttribute;
    DimensionAttributeValue             dimAttributeValue;
    DimensionAttributeValueSetStorage   dimStorage;
    DimensionDefault                    ret;
    ;

    ret             = _defaultDimension;

    ttsbegin;

    dimStorage      = DimensionAttributeValueSetStorage::find(_defaultDimension);
    dimAttribute    = DimensionAttribute::findByName(_dimensionName);

    if (_dimensionValue)
    {
        dimAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(  dimAttribute,
                                                                                        _dimensionValue,
                                                                                        true,
                                                                                        true);
        dimStorage.addItem(dimAttributeValue);
    }
    else
    {
        dimStorage.removeDimensionAttribute(dimAttribute.RecId);
    }

    ret = dimStorage.save();

    ttscommit;

    return ret;
}

Phương pháp này trả về một RecId DimensionDefault mới (hoặc giống hệt), do đó, nếu cập nhật giá trị chiều cho một bản ghi - có lẽ là trường hợp phổ biến nhất - bạn nên đảm bảo cập nhật trường chiều trên bản ghi đó bằng giá trị mới.

Chia sẻ trên BlueskyChia sẻ trên FacebookChia sẻ trên LinkedInChia sẻ trên TumblrChia sẻ trên XChia sẻ trên LinkedInGhim trên Pinterest

Mikkel Bang Christensen

Về tác giả

Mikkel Bang Christensen
Mikkel là người sáng lập và chủ sở hữu của miklix.com. Ông có hơn 20 năm kinh nghiệm làm lập trình viên máy tính/nhà phát triển phần mềm chuyên nghiệp và hiện đang làm việc toàn thời gian cho một tập đoàn CNTT lớn của Châu Âu. Khi không viết blog, ông dành thời gian rảnh rỗi cho nhiều sở thích, thú vui và hoạt động, có thể được phản ánh ở một mức độ nào đó trong nhiều chủ đề được đề cập trên trang web này.