摘要:
禁止同一用户多次登录void startupPost() { int counter; int maxUserSessions = 1; int maxAdminSessions = 4; int num = 0; int maxSessions = Info::licensedUsersTotal(); xSession session; UserInfo userInfo; UserId currentUserId; UserGroupList UserGroupList; FormRun formRun; ; currentUserId = curuserid(); if (curren 阅读全文
posted @ 2012-04-10 17:22
K小子
阅读(366)
评论(0)
推荐(0)
摘要:
void CleanMap(map _map){ MapEnumerator mapEnumerator; ; mapEnumerator = _map.getEnumerator(); while (mapEnumerator.moveNext()) { if (_map.exists(mapEnumerator.currentKey())) _map.remove(mapEnumerator.currentKey()); } return; } 阅读全文
posted @ 2012-04-10 17:12
K小子
阅读(217)
评论(0)
推荐(0)
摘要:
【项目实施随笔】打扮一下生产订单前面提到给生产BOM增加一个状态,表示各个部门的修改状态,今天用户又提出,想看到五颜六色的生产订单,生产BOM在不同的修改阶段用不同的颜色表示,人还是对颜色这东西比较敏感。AX的优势在于快速开发,对于一些不用太多时间就可以搞定的东西,与其费力气去劝说用户,还不如花一两分钟时间实现他们的需求,然后让他们自己去衡量利弊,当他们自己意识到原来自己想象中的效果实现后还不如之前的时候,他们就会欣然接受你的主意。1.窗体ProdTable数据源ProdTable的displayOption方法: Codepublic void displayOptio... 阅读全文
posted @ 2012-04-10 12:08
K小子
阅读(158)
评论(0)
推荐(0)
摘要:
读取Info内容后记:最近发现其实AX里的类Info已经提供了相应的静态方法infoCon2Str来实现这个功能,所以可以直接调用这个方法去实现本文所说的功能,本文不看也罢。AX用Infolog去管理用户操作中的出错或者提示信息,最后用SysInfologBrowser这个窗体去展现,但如果通过.NET Business Connector之类的去调用AX的系统类就不可能用这种方法了,因为不可能将窗体通过.NET Business Connector去展现,如果想知道调用的系统类到底发生了什么事情,可以把Infolog的内容转换成字符串返回给调用者。窗体SysInfologBrowser的数据 阅读全文
posted @ 2012-04-10 12:03
K小子
阅读(331)
评论(0)
推荐(0)
摘要:
实现Pick和ReigisterAX有个问题是很多功能都跟表现层窗体绑定在一起,要用代码直接实现某个功能就需要看窗体中的代码是如何处理的并将其剥离出来。比如领料和登记功能,它都封装到了窗体InventTransPick和InventTransRegister中,虽然也是通过类InventTransWMS,InventTransWMS_Pick和InventTransWMS_Register实现相应的功能,但如果要通过代码直接实现Pick和Register功能就需要看一下它们的处理逻辑,并将其改造一下。1.给InventTransWMS_Pick和InventTransWMS_Register分 阅读全文
posted @ 2012-04-10 12:02
K小子
阅读(455)
评论(0)
推荐(0)
摘要:
修改Project中的表名及字段名 开发了大半,遇到这样一个需求:1.自己创建的表,要加上公司的简称做为前缀;2.自己创建的表的字段不需要添加公司的简称做为前缀;3.在系统原有的表上添加的字段要添加公司的简称做为前缀。创建的表太多了,一个个修改是重体力活,于是写了个Job来完成,在这里记录一下: static void ModifyTableAndFieldNameOfSomeProject(Args _args) { #TreeNodeSysNodeType #define.prefix('PF') #define.ProjectName('ProjectName 阅读全文
posted @ 2012-04-10 12:00
K小子
阅读(628)
评论(0)
推荐(0)
摘要:
用代码修改类名新创建一个类TestClass,用代码修改其类名为NewTestClass: static void ChangeClassName(Args _args) { #AOT TreeNode treeNode = TreeNode::findNode(#ClassesPath+'\\TestClass'); ; treeNode.AOTsetProperty("Name","NewTestClass"); treeNode.AOTcompile(1); treeNode.AOTsave(); }在运行到treeNode.AOT 阅读全文
posted @ 2012-04-10 11:58
K小子
阅读(228)
评论(0)
推荐(0)
摘要:
创建采购订单 经常要用代码创建采购和销售订单,需要弄清楚哪些字段是必输的,这段代码经常需要拷贝,放在这里做个备份。 static void CreatePurchDirectly(Args _args) { PurchTable purchTable; PurchLine purchLine; InventDim inventDim; ; ttsbegin; //PurchTable //PurchId purchTable.PurchId = NumberSeq::newGetNum(PurchParameters::numRefPurchId()).num();pur... 阅读全文
posted @ 2012-04-10 11:58
K小子
阅读(398)
评论(0)
推荐(0)
摘要:
static void axd_importinventtable_excel(Args _args){sysexcelapplication m_application;sysexcelworkbooks m_workbooks;sysexcelworkbook m_workbook;sysexcelworksheets m_worksheets;sysexcelworksheet m_worksheet;sysexcelcells m_cells;//enum typeItemType m_ItemType;NoYes m_NoYes;SalesPriceModel m_SalesPric 阅读全文
posted @ 2012-04-10 11:56
K小子
阅读(397)
评论(0)
推荐(0)
摘要:
定时调用某个方法在Form中可以调用FormRun的setTimeOut方法,实现定时调用某个方法,但如何是一般的类,不是窗体,该如何实现那?1.在全局缓存中缓存当前对象. server static void Main(Args _args) { TestClass testClass = new TestClass(); SysGlobalCache cache = infolog.globalCache(); ; cache.set(classstr(TestClass),"HelloTestClass",testClass); testClass.testMeth. 阅读全文
posted @ 2012-04-10 11:55
K小子
阅读(309)
评论(0)
推荐(0)
摘要:
用X++代码创建表 用代码创建表的代码,在这里记录一下: static void CreateNewTable(Args _args) { #AOT TreeNode treeNode = TreeNode::findNode(#TablesPath); DictType dictType; TreeNode treeNodeField; str tableName = 'Student'; str fieldName1 = 'StudentNum'; str fieldName2 = 'StudentName'; AOTTableFieldLi 阅读全文
posted @ 2012-04-10 11:54
K小子
阅读(184)
评论(0)
推荐(0)
摘要:
将 转移单 自动发货说到开发,首先想到的是对语言语法细节的熟悉,对面向对象的理解.对于AX的二次开发,这些当然也比较重要,但相对来说更加重要的是对系统已有的几千张表和几千个类的熟悉.决定二次开发速度的主要因素也是对这些表和类的理解,因为系统中有大量的功能已经封装成了比较好的类可以调用,比如获取库存的现有量想到InventOnhand可以使用,想获取此前某一天的库存量可以用InventSumDate,销售订单和采购订单的过账可以调用SaelsFormLetter和PurchFormLetter的update方法等等.有些公司一些移库,采购销售的动作并不想通过人为操作过账,而是想让系统自己完成,这 阅读全文
posted @ 2012-04-10 11:52
K小子
阅读(337)
评论(0)
推荐(0)
摘要:
TypeId浅析AX提供了一些内置函数用来获取数据的类型,比如Typeof(),比如ClassIdGet(),TypeId().这里只讨论一下TypeId(),查了半天都没找到关于这个函数的描述,倒是Inside AX这本书对TypeOf()有所描述:Typeof()这个系统函数以变量实例为入参,返回入参对应的基本类型,比如下面的例子: int i = 123; str s = "Hello world"; MyClass c; Guid g = newGuid(); print typeOf(i); //Prints Integer print typeOf(s); .. 阅读全文
posted @ 2012-04-10 11:50
K小子
阅读(431)
评论(0)
推荐(0)
摘要:
标签颜色的设定有时候对一些字段的标签要用不同的颜色设定,AX的控件有个属性LabelForegroundColor可以用来干这事。这个字段可以设定的值取决于另一个属性ColorScheme,该属性有Default,Windows palette和RGB三种,我感觉Default和Windows palette是一样的。可以在代码中对这些属性进行设定,如下代码所示: public void init() { super(); //RGB CustTable_AccountNum.colorScheme(FormColorScheme::RGB); CustTable_Ac... 阅读全文
posted @ 2012-04-10 11:48
K小子
阅读(163)
评论(0)
推荐(0)
摘要:
获取最根级EDT类型名称 有时候需要修改某个扩展数据类型的属性,比如字段的长度等,这些属性只能在最根级的EDT类型上修改,所以需要找到最根级的EDT类型,这个小例子演示了如何根据当前表的字段获取其对应的最根级EDT类型。 //Return the top extendtypeid,If error,return '' static ExtendedDataTypeName GetFinalExtendedType(TableId _tableId,FieldId _fieldId) { SysDictField dictField; SysDictType dictTyp... 阅读全文
posted @ 2012-04-10 11:47
K小子
阅读(151)
评论(0)
推荐(0)
摘要:
设定Excel列的格式MBSCN网友Jedison提了一个关于设定Excel列格式的问题,俺写了个例子贴到了MBSCN上,在这里再贴一下,便于以后查找。 static void StyleTest(Args _args) { #Excel #define.AlignModeText('Align_Text') #define.AlignModeNumber('Align_Number') #define.FileName('d:\\StyleTest.xls') #define.Text('@') //文本类型 #define.N 阅读全文
posted @ 2012-04-10 11:46
K小子
阅读(299)
评论(0)
推荐(0)
摘要:
创建自定义的右键菜单有时候用户需要在原有的右键菜单上添加几个选项,有时候需要删掉一些不需要的项,也就是要创建自己的右键菜单。由于右键菜单的实现是由AX核心管理的,我们看不到它的具体实现(至少我没找到实现的代码),我们能做的就是通过控件的showContextMenu来实现自己的想法。本文以CustTable为例,创建一个Form,数据源为CustTable,关注的字段为CustAccount.需求一:去掉右键菜单重载CustAccount的showContextMenu方法即可: public int showContextMenu(int _menuHandle) { ... 阅读全文
posted @ 2012-04-10 11:45
K小子
阅读(267)
评论(0)
推荐(0)
摘要:
人费解窗体数据源之间的关系在Form的数据源之间可以建立各种关系,连接的方式诸如InnerJoin,OuterJoin,Delay之类,可对于两个数据源之间的通过哪些字段进行关联没有显示指定的地方,一直想当然地以为会按照从表上建立的关系去连接,今天让这个问题给郁闷了一把。问题描述改造ProdTable窗体,添加SalesLine做为数据源,目的是将销售订单行的信息显示在生产单上。在ProdTable上添加了一个字段SalesLineRecId,在Form中让ProdTable和SalesLine通过ProdTable的SalesLineRecId和SalesLine的RecId建立InnerJ 阅读全文
posted @ 2012-04-10 11:44
K小子
阅读(714)
评论(0)
推荐(0)
摘要:
cacheAddMethod方法display方法会带来效率上的损失,因为每当界面刷新时都会调用display方法,在Inside Dynamics AX在性能(一)这一节介绍了用cacheAddMethod提升性能的做法.FormDataSource的cacheAddMethod可以将display的返回值打包发送到客户端,只有在调用FormDataSource的reread,create和write方法的时候刷新缓存的值.使用这个方法的时候要注意以下两点:1.cacheAddMethod只能缓存定义在表的方法结点上的display方法;2.cacheAddMethod要在FormDataS 阅读全文
posted @ 2012-04-10 11:43
K小子
阅读(276)
评论(0)
推荐(1)
摘要:
给多个表的Dimension字段赋初值[需求]最近遇到这样一个需求,在实施的时候把系统现有的三个纬度前两个分别用于记录分公司和部门,在做财务凭证或者销售采购订单的时候,需要给这些表相应的Dimension字段的前两个纬度赋值,用户要求根据当前用户所属的分公司和部门直接赋值,而不想自己去选择。[分析]最直观的想法就是修改各个表的InitValue()方法,给相应的表赋初值,不过这样的工作量有些大,要修改多个表,并且当需要赋初值的表增加时还需要继续修改相应的表。AX中用Map实现表方法的共享,于是考虑用Map来实现这个功能。只有Map还是不行的因为InitValue()这个方法还是在各个表上的,好 阅读全文
posted @ 2012-04-10 11:41
K小子
阅读(203)
评论(0)
推荐(0)

浙公网安备 33010602011771号