在前文(http://www.cnblogs.com/duanshuiliu/p/3243048.html)最后演示了如何使用代码更改默认财务维度,那段代码模拟了创建各数据表记录的过程,实际上AX提供了一些类及方法来简化,下面给出更多如何通过代码更改财务维度的例子:

方法一:使用DimensionAttributeValueSetStorage类

static void ChangeCustFinancialDimension(Args _args)
{
CustTable custTable;
DimensionAttributeValueSetStorage dimensionStorage;
DimensionAttribute customerDimensionAttribute;
DimensionAttributeValue newDimensionValue; ;
ttsBegin;
custTable = CustTable::find('',true); //查找Customer财务维度主记录
customerDimensionAttribute = DimensionAttribute::findByName("Customer");
//查找值为“1102”的Customer维度的维度值记录,最后一个参数true表示如果没有找到记录就新建
newDimensionValue = DimensionAttributeValue::findByDimensionAttributeAndValue(customerDimensionAttribute, "",false, true); //根据客户记录表的默认维度查找DimensionAttributeValueSetStorage
dimensionStorage = DimensionAttributeValueSetStorage::find(CustTable.DefaultDimension);
//直接添加维度值记录到DimensionAttributeValueSetStorage
dimensionStorage.addItem(newDimensionValue); //save()返回的就是新的DimensionAttributeValueSet记录的recId
CustTable.DefaultDimension = dimensionStorage.save(); CustTable.update();
ttscommit;
}

上面的例子中将客户代码为1101的客户默认维度中的“Customer”维度值更改为“1102”。

方法二:使用类AxdDimensionUtil、DimensionDefaultingService

static void replaceDefaultDimensions2(Args _args)

{

    CustTable                       custTable = CustTable::find('');
container defDimensionCon;
DimensionDefault dimensionDefault; ;
defDimensionCon += ; //两个维度
defDimensionCon += 'Department';//先维度名称
defDimensionCon += 'OU_4608';//后维度值,依次存放在container中
defDimensionCon += 'CostCenter';
defDimensionCon += 'OU_4615';
defDimensionCon += 'Customer';
defDimensionCon += '';
//使用上面的维度值得到一个新的默认维度记录RecId
dimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(defDimensionCon); //更新到CustTable
ttsBegin;
custTable.selectForUpdate(true);
if (custTable.DefaultDimension)
//合并新的维度值到现有维度
custTable.DefaultDimension = DimensionDefaultingService::serviceMergeDefaultDimensions(dimensionDefault, custTable.DefaultDimension);
else
custTable.DefaultDimension = dimensionDefault;
custTable.doUpdate(); ttsCommit; }

上面两个例子演示如何添加维度值到默认维度,如果是要删除默认维度中的某个维度值又该怎么办呢?参照上面的两个方法,也有两种删除维度的办法:

方法一

static void DeleteDimensionValue1(Args _args)
{
CustTable custTable = CustTable::find('');
DimensionAttributeValueSetStorage dimStorage;
;
ttsBegin;
custTable.selectForUpdate(true);
dimStorage = DimensionAttributeValueSetStorage::find(custTable.DefaultDimension);
dimStorage.removeDimensionAttribute(DimensionAttribute::findByName('CostCenter').RecId);
custTable.DefaultDimension = dimStorage.save();
custTable.update();
ttsCommit;
}

方法二

static void DeleteDimensionValue2(Args _args)
{
CustTable custTable = CustTable::find('');
container c;
int i;
; c = AxdDimensionUtil::getDimensionAttributeValueSetValue(custTable.DefaultDimension);
i = conFind(c, 'CostCenter');
if(i)
{
c = conDel(c, i+, );
c = conDel(c, i, );
}
c = conDel(c, , );
c = conIns(c, , conLen(c) / ); ttsBegin;
custTable.selectForUpdate(true);
custTable.DefaultDimension = AxdDimensionUtil::getDimensionAttributeValueSetId(c);
custTable.update();
ttsCommit;
}

两种方法都不是很复杂,实际上AxdDimensionUtil内部用的也有用DimensionAttributeValueSetStorage,所以还是直接使用DimensionAttributeValueSetStorage更为简单。

[AX2012]代码更改默认财务维度的更多相关文章

  1. openwrt 更改默认主题

    BB 版本默认的主题为 bootstrap,想要修改为其他的主题,可以按照如下方法修改: 1.查看可以使用的主题. "make menuconfig" ---> " ...

  2. Discuz更改默认搜索模块

    由于网站使用DZ的侧重点不同,在搜索中可能需要更改默认搜索模块 首先找到模板中搜索模块对应的文件,默认模板中搜索模块的地址是 template\default\common\pubsearchform ...

  3. update-java-alternatives 更改默认Java环境

    Ubuntu/debian 更改默认Java环境 我的电脑里安装了两个版本的Java,一个是java-6-sun,还有一个是java-gcjgcj是在JVM非常缓慢的时候诞生的,他可以把Java代码编 ...

  4. webstorm 10 更改默认端口

    快捷键 ctrl + Alt + s :打开配置 如图下可以更改 默认端口.快捷键可能跟qq的快捷键冲突,可以关闭qq来设置端口

  5. Eclipse更改默认工作目录的方法

    参考: Eclipse更改默认工作目录的方法:http://blog.163.com/take_make/blog/static/208212210201272611406227/ 用记事本打开&qu ...

  6. gcc -D 传值给代码,默认值为1

    gcc -D 传值给代码,默认值为1 -D 参数可以给代码中的宏打开一扇门.简单的代码#include <stdio.h> #ifdef WHO #define NAME "jo ...

  7. SharePoint发展 - 使用Session(代码更改webconfig)

    博客地址 http://blog.csdn.net/foxdave SharePoint启用Session能够使用Powershell,戳这里:能够改动webconfig. 本篇叙述的重点是通过fea ...

  8. ssh更改默认端口号及实现免密码远程登陆

    近来在复习防火墙管理工具 iptables 的基本使用方法,涉及到对端口添加或删除防火墙策略的内容,之前对ssh更改默认端口号及免密码登录的方法不熟悉,这次做一个基本的总结防止自己遗忘. 错误偏差及其 ...

  9. 如何彻底解决MySQL更改默认字符集以及字符乱码问题!!!

    在我们使用MySQL数据库时,字符乱码,对我们来说是一个很头疼的问题.今天笔者就来教大家如何彻底解决更改默认字符集以及字符乱码问题. 当我们使用压缩包进行MySQL安装后,系统会使用默认的字符集,这时 ...

随机推荐

  1. 解决Eclipse闪退问题的方法总结

    1.在C:/WINDOWS/system32 系统文件夹中ctrl+F 然后搜索java.exe,如果存在java.exe, javaw.exe etc.全部删除. 2.内存不足,打开Eclipse目 ...

  2. jPlayer 视频播放

    在网页中播放MP4格式视频代码:显示效果如下图,缺陷是不能自动适应页面大小,只能全屏 <!DOCTYPE html> <html> <head> <meta ...

  3. 14款优秀的JavaScript调试工具大盘点

    JavaScript是一种非常简单的语言,一般说来任何人都可以在几小时内掌握它的基本知识. 然而就像其他任何语言一样,JavaScript存在着一些可以轻易避免的常见错误和不好的做法.开发人员喜欢使用 ...

  4. JQuery之拖拽插件

    一直以来,都对JS获取元素的位置感到非常的困惑:一会client.一会offset.一会scroll. 再加上各大浏览器之间的不兼容,唉,搞得哥晕晕乎乎的. 而很多页面效果都要用到这些位置.不得已,得 ...

  5. Java 内部线程

    InsttoolCacheScheduler_ Worker-2 Quartz InsttoolCacheScheduler_Worker-2线程就是ThreadPool线程的一个简单实现,它主要负责 ...

  6. 【Python】Centos + gunicorn+flask 报错ImportError: No module named request

    今天用Python去下载图片,用到了 urllib.request,这个是python3的方法.python2 使用的是urllib2 遇到了这么个问题后台报错,ImportError: No mod ...

  7. visual studio运行时库MT、MTd、MD、MDd 的区别

    msdn上面的解释: MT:mutithread,多线程库,编译器会从运行时库里面选择多线程静态连接库来解释程序中的代码,即连接LIBCMT.lib库 MTd:mutithread+debug,多线程 ...

  8. doctest初次体验

    测试代码放在两个地方才有效果,一个是模块开头,一个是函数声明语句的下一行 doctest 的概念模型 在python的官方文档中,对doctest是这样介绍的: doctest模块会搜索那些看起来像是 ...

  9. C#-----------------------------回收机制中Destroy与null的作用

    关于Object被Destroy之后,该Object的原引用==null的问题 标签: unityc#继承对象 2017-01-23 23:32 506人阅读 评论(0) 收藏 举报  分类: Uni ...

  10. unity3d-----Collider 组件参考

    Collider 组件参考 点击 属性检查器 下面的 添加组件 按钮,然后从 添加碰撞组件 中选择需要的 Collider 组件,即可添加 Collider组件到节点上. Collider 组件属性 ...