MS Power BI 데모

Posted by Alvin You
2014. 11. 12. 02:06 Sharepoint

MS가 Sharepoint 2013을 내 놓으면서 공격적인 마케팅을 펼치고 있는 Power BI와 관련된 데모 동영상입니다.

 

Power BI는

 - Power Query

 - Power PIvot

 - Power View

와 같은 구성요소로 구성되어 있어, 이전의 IT부서를 통한 ETL 단계를 거쳐 최총 결과물만을 현업 담당자에게 보여졌던 과정을 이제는 현업에서 Excel(Power Query, Power Pivot)을 통해 간단한 ETL 작업을 진행하고, 그 결과로 나온 결과물은 Sharepoint(Power View)를 통해서 유관 부서와 공유할 수 있도록 하는 그림을 그리는 것 같습니다.

기존의 대기업에만 국한되어 BI를 구축했던 것과는 달리 이제는 중소기업에서도 손쉽게 BI 구축을 할 수 있게 되어 빠르게 변화하는 비지니스 환경에서 필요로 하는 의사 결정에 많은 도움을 줄 수 있지 않을까 싶습니다.

 

참고)

ETL이란 데이터 웨어하우스(DW, Data Warehouse) 구축 시 데이터를 운영 시스템에서 추출하여 가공(변환, 정제)한 후 데이터 웨어하우스에 적재하는 모든 과정을 말한다. ETL은 데이터 추출(Extraction), 변환(Transformation), 적재(Loading)의 약자이다.

 

 

 

X++ 개발 언어 교재(X++ Advanced Course)

Posted by Alvin You
2014. 11. 12. 01:52 Dynamics AX

Dynamics AX 개발과 관련된 서적을 보다보면 X++ 언어 문법에 대해서 다루는 분량은 그리 많지 않습니다.

심지어 MS에서 정식 교육 교재로 사용하는 MOC(Microsoft Official Curriculum) 교재도 사정은 비슷하지요. 언어적인 부분보다는 아키텍쳐와 비지니스 연계 및 새로운 기술 요소들에 대해서 많이 다루는 편입니다.

교재 대부분이 많은 내용을 독자에게 알려줘야 되기 때문에 기술 요소들에 대해서 풀어서 설명하기 보다는 함축된 내용을 그대로 표현하고 있어 관련 영역(SI, ERP 산업군)에 오래 종사하지 않은 초급 개발자라면 난해한 기술용어, 비지니스 용어를 외우다가 끝날 수도 있습니다.

 

아래 슬라이드는 X++ 문법에 대해서만 다루고 있어, 처음 X++ 언어를 접하는분들에게 유익한 내용이 되지 않을까 싶습니다.

즐거운 DAXing 되세요.

 

 

 

 

Dynamics AX Windows 8 App 개발

Posted by Alvin You
2014. 10. 31. 00:37 Dynamics AX

첨부 파일은 Windows 8에서 동작하는 Dynamics AX App 개발에 대한 가이드 자료입니다.

따라하기 형식으로 되어 있어 손쉽게 Windows 8 App 개발을 진행해 보실 수 있습니다.

 

APP DEVELOPMENT GUIDE VERSION 1.0 PAGE 2 OF 26
Table of Contents
Microsoft Dynamics AX Windows 8 App Starter Kit ...............................................................................1
App Development Guide Version 1.0 ..................................................................................................1
1. Introduction .................................................................................................................................3
2. Building your first Dynamics AX App for Windows 8 ..........................................................................3
2.1. Step 1 – Decide what your app is great at .....................................................................................3
2.2. Step 2 – Decide what user activities to support ..............................................................................4
2.3. Step 3 - Decide what features to include .......................................................................................4
3. Development - Building a simple window 8 app that integrates with Dynamics AX 2012 R2 ..................... 5
3.1 Step 1- Prepare an AIF service in Dynamics AX 2012 ....................................................................... 5
3.2 Step 2- Create a new Windows Store App Project in Visual Studio 2012 ............................................ 13
3.3 Step 3- Configure the Package.appxmanifest ................................................................................. 14
3.4 Step 4- Create a Service Reference to a Dynamics AX AIF Service ................................................... 16
3.5 Step 5- Consume data from Dynamics AX within a Windows 8 App ................................................... 17
3.6 Step 6- Present data from Dynamics AX within a Windows 8 App .......................................................19
4. Using Blend to enhance the UX of your Windows 8 App..................................................................... 23
5. Conclusion ................................................................................................................................. 26

 

 

microsoft-dynamics-ax-windows-8-app-starter-kit-development-guide.pdf

 

자주 쓰는 X++ 기본 내장 함수 정리

Posted by Alvin You
2014. 10. 28. 22:53 Dynamics AX/Development

Dynamics AX 개발 언어인 X++ 에서 자주 사용되는 함수들입니다. 개발에 참고하세요.

 

* AX function

1. abs : 절대값  ex) abs(-100.0) -> 100.0
2. 정보없는 것들 : any2Date, any2Enum, ~2Guid, ~2Int, ~2Int64,
                   ~2Read, ~2Str, ~
3. ascii2Ansi : Ansi code에서 문자로 변환(page437 이용)
  ex1)-old pattern
      AsciiIO io;
      io = new AsciiIO('filename', "W");
      io.write(ansi2Ascii("string"));

  ex2)-new pattern
      TextIO io;
      io = new TextIO("filename","W",437);
      io.write("string");
  %ansi2Ascii 는 역방향임
4. char2Num : 특정자리 문자를 숫자로 변환(ascii코드별)
   ex) char2Num("ABCDEFG", 3) => C값으로 67반환
5. classIdGet : 인스턴스화된 객체를 클래스 대한 ID값을 반환
   = int classIdGet(class object)
   ex)
       static void classIdGetExample(Args _args)
       {
           int i;
           WorkTimeCheck w;
           ;
           i = classIdGet(w);
           print "Class ID for object is " + int2Str(i);
           pause;
       }
6. classNum : 클래스에 대한 id값 반환
   = int classNum(class class)
   ex)
       static void classNumExample(Args _args)
       {
           int i;
           ;
           i = classNum(Global);
           print i;
           pause;
       }
7. classStr : 클래스 이름을 스트링 형식으로 반환
   = str classStr(class class)
   ex)
      static void clStrExample(Args _args)
      {
          str s;
          ;
          s = classStr(Global);
          print s;
          pause;
      }
8. configurationKeyNum : configuration 키값을 반환
   = int configurationKeyNum(str keyname)
   ex)
   static void configurationKeyNum(Args _args)
   {
       int i;
       ;
       i = configurationKeyNum(AIF);
       print i;
       pause;
   }
9. conFind : container안에서 해당하는 속성들이 반응하거나 특성을 추적하는 메소드. 만약 결과물안에서 여러개의 특정값이 조회되면 이들의 구분은 콤마에 의해 나뉘어 지고, 정확한 순서대로 위치설정이 된다. 속성값들은 아무 타입이나 상관없음
   = int conFind (container container, anytype element,... )
   ex)
   static void conFindExample(Args _args)
   {
       container c = ["item1", "item2", "item3"];
       int i;
       int j;
       ;

       i = conFind(c, "item2");
       j = conFind(c, "item4");
       print "Position of 'item2' in container is " + int2Str(i);
       print "Position of 'item4' in container is " + int2Str(j);
       pause;
   }

   결과 :Position of 'item2' in container is 2
         Position of 'item4' in container is 0
10. conIns : container안에 1개 이상의 구성자를 입력한다
    = container conIns (container container, int start, anytype element,... )
    ex)
    static void conInsExample(Args _arg)
    {
        container c;
        int i;
        ;

        c = conIns(["item1", "item2"], 1);
        for (i = 1 ; i <= conLen(c) ; i++)
        {
        // Prints the content of a container.
            print conPeek(c, i);
        }
        pause;
    }
11. conLen : container안의 속성값들의 개수를 반환함.
    = int conLen(container container)
    ex)
    static void conLenExample(Args _arg)
    {
        container c;
        int i;
        ;

        c = conins(["item1", "item2"], 1);
        for (i = 1 ; i <= conLen(c) ; i++)
        {
            print conPeek(c, i);
         }
        pause;
    }
12. conNull : null container를 반환한다. container의 내용물을 확실하게 배치하기 위해 사용하는 메소드
   = container conNull()
   ex)
   static void conNullExample(Args _arg)
   {
       container c = ["item1", "item2", "item3"];
       ;

       print "Size of container is " + int2str(conLen(c));
       // Set the container to null.
       c = conNull();
       print "Size of container after conNull() is " + int2Str(conLen(c));
       pause;
   }
13. conPeek : container로 부터 특정위치의 값을 반환한다.
   = anytype conPeek(container container, int number)
   ex)
   static void conPeekExample(Args _arg)
   {
        str fileName;
        container rows;
        container cells;
        int row;
        int column;
        CustAccount             CUSTA;
        HSA_AR_Van_Upload_Month uploadMonth;
        HSA_AR_Car_SS           SS;
        ;

        fileName = strFileName.text();//미리 strFileName를 선언해서 그대로 사용할 수 있음
        rows = HSA_ExcelUtils::readExcel(fileName, 25);//엑셀시트와 연동해서 해당되는 데이터를 그대로 들고 올 수 있음

        for (row = 2; row <= conlen(rows);row++) {  //엑셀의 2번째 열부터 데이터를 들고와서 조회를 할 수 있음

            cells = conpeek(rows, row);   //각 열의 필드별 데이터 세팅

            CUSTA    = conpeek(cells, 1);

            uploadMonth.clear();

            if(SS.CS_Serial != ""){
                uploadMonth.AccountNum               = conpeek(cells, 1); //해당열의 1번째 필드값을 반환
            }else{
                info("Invalid data : " + int2str(row) + "row");
            }
        }
    }
14. conPoke : container 안에 있는 특정 속성을 1개 이상 변환할 수 있는 메소드
    = container conPoke(container container, int start, anytype element, ...)
    ex)
    static void conPokeExample(Args _arg)
    {
        container c1 = ["item1", "item2", "item3"];
        container c2;
        int i;

        void conPrint(container c)
        {
            for (i = 1 ; i <= conLen(c) ; i++)
            {
                print conPeek(c, i);
            }
        }
        ;
        conPrint(c1);
        c2 = conPoke(c1, 2, "PokedItem");
        print "";
        conPrint(c2);
        pause;
    }
15. corrFlagGet : 실수에 대해 수정된 표시문자(플래그)의 상태(표시 or clear)를 반환한다
    = int corrFlagGet(real arg)

16. corrFlagSet : 실수에 대해 보정된 표시문자를 조정한다.
    = real corrFlagSet(real real, int arg)  => real: The flag to set or clear, arg : Sets or clears the flag. A non-zero value sets the flag.

17. cTerm : 목표치 산출을 위해 현재 투자 값으로 요구되는 기간을 계산한다.  ()=>다시 봐야 할듯....
    = real cTerm(real interest, real future_value, real current_value)
    ex)
    static void cTermExample(Args _arg)
    {
        real r;
        ;
        r = cTerm(10.0, 500.00, 100.00);
        print "The cTerm is " + num2Str(r, 2, 2, 1, 1);
        pause;
    }
    ex2)
    static void Job5(Args _args)
    {
            real r;
            ;
            r = cTerm(10.0, 500.00, 100.00);
            print "The cTerm is " + num2Str(r,0,10,1,0);
            pause;
    }//결과 값들은 소수점 몇자리까지 나옴
18. curExt : 현재 회사에 대한 명을 반환
    = str curExt()
    ex)
    static void curExtExample(Args _arg)
    {
        str s;
        ;

        // Sets s to the extension of the current company.
        s = curExt();
        print "Current extension is " + s;
        pause;
    }
19. curUserId : 현 사용자에 대한 userID를 반환한다.
    = str curUserId()
    ex)
    static void curUserIdExample(Args _arg)
    {
        str s;
        ;
        s = curUserId();
        print "Current user ID is " + s;
        pause;
    }
20. date2Num : 1 January 1900 이래로 해당날짜를 일치하는 지나간 날짜의 일을 계산하여 반환한다.
    = int date2Num(date _date)
    ex)
    static void date2NumExample(Args _arg)
    {
        date d = today();
        int i;
        ;
        i = date2Num(d);
        print i;
        pause;
    }
21. date2Str : 날짜를 텍스트로 반환
    = str date2Str(date date, int sequence, int day, int separator1, int month, int separator2, int year)
     date - The date to be converted.
     sequence - The sequence for the components of the date (day, month, year).
                       Day is shown by 1, month by 2, and year by 3. Possible sequences:
                             day, month, year
                             year, month, day
                             year, day, month
     day - The format for the day component of the date.
           Possible formats:
           Can be expressed as one or two digits, as required
           Always expressed as two digits
     separator1 - The separator to use between the first two components of the date.
           Possible values:
               a " " (space)
               a "." (period)
               a "-" (hyphen)
               a "/" (forward slash)
     month - The format for the month.
           Possible formats: Can be expressed as one or two digits, as required
               Expressed as two digits
               Expressed as three characters
               Expressed by its entire name
     separator2 - The separator to use between the last two elements of the date.
           Possible values:
               a " " (space)
               a "." (period)
               a "-" (hyphen)
               a "/" (forward slash)
     year - The format for the year.
           Possible formats:
               Expressed as two digits
               Expressed as four digits
    ex)
    static void date2StrExample(Args _arg)
    {
        date d = today();
        str s;
        ;
        s = date2Str(d, 2, 2, -1, 2, -1, 2);
        print "Today's date is " + s;//07-08-21
        pause;
    }
22. dayName : 날짜를 일주일의 요일별로 1~7사이값으로 보여준다.
    = str dayName(int number)
    ex)
    static void dayNameExample(Args _arg)
    {
        str s;
        ;
        s = dayName(01);
        print "First day of the week's name is " + s;
        pause;
    }
23. dayOfMth : 날짜에 대해 한달중 날짜를 보여준다.
    = int dayOfMth(date date)
    ex)
    static void dayOfMthExample(Args _arg)
    {
        date d = today();
        int i;
        ;
        i = dayOfMth(d);
        print "Today's day of the month is " + int2Str(i);
        pause;
    }
24. dayOfWk : 날짜중에서 일주일 단위로 날짜를 보여준다.
    = int dayOfWk(date date)
    ex)
    static void dayOfWkExample(Args _arg)
    {
        date d = today();
        int i;
        ;
        i = dayOfWk(d);
        print "Today's day of the week is " + int2Str(i);
        pause;
    }
25. dayOfYr : 1월1일부터 지정된 날짜까지 일수를 계산한다.
    = int dayOfYr(date _date)
    ex)
    static void dayOfYrExample(Args _arg)
    {
        date d = today();
        int i;
        ;
        i = dayOfYr(d);
        print "Today's day of the year is " + int2Str(i);
        pause;
    }
    ex2) 전체 조회 테스트
    static void Job5(Args _args)
    {
            date d = today();
            int i;
            str s;
            ;
            i = dayOfWk(d);
            print "Today's day of the week is " + int2Str(i);
            pause;


            s = dayName(10);
            print "First day of the week's name is " + s;
            pause;


            i = dayOfYr(d);
            print "Today's day of the year is " + int2Str(i);
            pause;

    }
26. ddb : 속도가 붙은 자산의 가치하락(감가상각)을 계산한다
   = real ddb(real price, real scrap, real life, int period)
       price - The purchase price of the asset.
       scrap - The residual value of the asset that has been written off.
       life  - The expected lifetime of the asset.
       period - The period to calculate depreciation over.
   ex)
   // Returns the value 2400.
   ddb(12000,2000,10,1);

   // Returns the value 1536.
   ddb(12000,2000,10,3);
27. decRound : 지정된 자리수대로 반올림이 되어야 한다.
    = real decRound(real figure, int decimals)
    ex)
    // Returns the value 1234.66.
    decRound(1234.6574,2);

    // Returns the value 1235.
    decRound(1234.6574,0);

    // Returns the value 1200.
    decRound(1234.6574,-2);
28. dg : 판매가격과 구매가격을 기초로 하여 차지하는 비율을 계산한다.
    = real dg(real sale, real purchase)
    ex)
    // Returns the value 0.7.
    dg(1000,300);

    // Returns the value 0.45.
    dg(20000, 11000);
29. dimOf : 순열안에서 속성의 자리값을 반환한다.
    = int dimOf(anytype object)
    ex)
    static void dimOfExample(Args _arg)
    {
        Array a;
        ;

        a = new Array(Types::Integer);
        a.value(1, 42);
        a.value(2, 666);
        print "Dimension of array is " + int2Str(dimOf(a));
        pause;
    }
30. endMth : 지정된 달의 마지막 날자를 반환한다.
    = date endMth(date date)
    ex)
    // Returns the date 29\02\1988 (leap year).
    endMth(02\02\1988);

    // Returns the date 28\02\1989.
    endMth(02\02\1989);
31. enum2Str : enum을 스트링으로 변환
    = str enum2Str(enum enum)
32. enumCnt : enum속성에서 해당되는 속성값을 반환
    = int enumCnt(enum enumtype)
    ex)
    // Returns 2 (the two elements are Yes and No).
    enumCnt(NoYes);
33. enumNum : enum에 대해 ID를 반환
    = int enumNum(enum enum)
34. enumStr : enumeration을 스트링으로 반환한다.
    = str enumStr(enum enum)
35. evalBuf : X++ code의 입력스트링에 대해 평가하고, 스트링을 결과값으로 반환한다.
    = str evalBuf(str expressionString)
    ex)
    static void JobEvalBufDemo(Args _args)
    {
        ExecutePermission perm;
        str strCodeToExecute = "2 + 5";
        str strResult;
        ;
        perm = new ExecutePermission();
        if (perm != null)
        {
            // Grants permission to execute the EvalBuf function.
            // EvalBuf runs under code access security.
            perm.assert(); //CodeAccessPermission로 부터 상속
            // BP deviation documented.
            print "Next will execute the string of code.";
            pause; // Click Yes when asked to continue.

            strResult = EvalBuf(strCodeToExecute);
            // Close the code access permission scope.
            CodeAccessPermission::revertAssert();
        }
        print "strResult is: [", strResult ,"]";
        pause;
        //
        // Expected: "strResult is: [7]".
    }
36. exp : 입력값에서 십진수의 자연진수로 반환한다.
    = real exp(real arg)
    ex)
    static void expExample(Args _arg)
    {
        real r1;
        real r2;
        ;

        r1 = exp(2.302585093);
        r2 = exp10(2.302585093);
        print strFmt("exp of 2.302585093 is %1", r1);
        print strFmt("exp10 of 230258 is %1", r2);
        pause;
    }
37. exp10 : 실수를 10진수로 변환한 값을 반환한다.
    = real exp10(real decimal)
    ex)
    static void exp10Example(Args _arg)
    {
        real r1;
        real r2;
        ;

        r1 = exp(2.302585093);
        r2 = exp10(2.302585093);
        print strFmt("exp of 2.302585093 is %1", r1);
        print strFmt("exp10 of 230258 is %1", r2);
        pause;
    }
38. extendedTypeNum : EDT의 id값을 반환한다.
    = int extendedTypeNum(int str)
    ex)
    static void EDTNum(Args _args)
    {
        int i;
        str s;
        ;

        i = extendedTypeNum(AccountName);
        s = extendedTypeStr(AccountName);
        print  int2Str(i);
        print  s;
        pause;
    }
39. extendedTypeStr : EDT의 이름을 스트링으로 반환한다.
    = str extendedTypeStr(int str)
    ex)
    static void EDTStr(Args _args)
    {
        int i;
        str s;
        ;

        i = extendedTypeNum(AccountName);
        s = extendedTypeStr(AccountName);
        print  int2Str(i);
        print  s;
        pause;
    }
40. fieldId2Name : 테이블의 id숫자와 필드의 id숫자로 지정된 필드의 이름을 보여주는 스트링값을 반환한다.
    = str fieldId2Name(int tableid, int fieldid)
    ex)
    static void fieldId2NameExample(Args _arg)
    {
        str fn;
        ;
        fn = fieldId2Name(tableName2Id("Customer"),7);
    }


※ fieldName2Id : 테이블 ID number와 필드의 ID number에 의해서 정의된 테이블 필드의 필드 id를 반환한다.
int fieldName2Id(int tableid, str fieldname)

 Parameter

 Description

 tableId

 The ID number for the table

(note)Use the tableName2Id function to specify the ID of a table

 fieldname 

 The name of the field

 

   ex)
   static void fieldName2IdExample(Args _arg)
   {
       int id;
       ;
       id = fieldName2Id(tableName2Id("Address"), "Name");
       // Returns 6. Name is the 6th field in the Address table.
       print id;
       pause;
   }

41. frac : 실수에서 소수 부분을 반환
    = real frac(real decimal)
    ex)
    // Returns 0.423.
    frac(12.423);
42.funcName : 현 함수의 문맥을 포함하는 스트링을 반환한다. 만약 실행이 클래스와 테이블을 포함하게 된다면, 메소드의 이름은 클래스나 테이블의 이름이 접두에 붙는다.
    = str funcName()
    ex)
    //Current function context is Job5
    static void funcNameExample(Args _arg)
    {
        print "Current function context is " + funcName();
        pause;
    }
43.fV : 투자한 값의 미래 결과치를 계산한다.
    = real fV(real amount, real interest, real life)
    amount - The amount paid in during each period.
    interest - The interest rate.
    life - The number of investment periods.
    ex)
    // Returns the value 1933.73.
    fV(100,0.14,10);

    // Returns the value 2442.04.
    fV(400,0.10,5);
44.getPrefix : setPrefix function으로 연속해서 현실행 접두사로 반환한다
    = str getPrefix()
    ex)
    static void getPrefixExample(Args _arg)
    {
        ;
        setPrefix("Prefix");
        setPrefix("Another prefix");
        print getPrefix();
        pause;
    }
45.guid2Str : noinformation

46.helpApplStr : noinformation
47.helpDevStr : noinformation
48.helpFileStr : noinformation
49.identifierStr : noinformation
50.idg : 구입비용과 기여 비율에 기초한 판매가격을 계산한다.
    = real idg(real purchase, real contribution_ratio)
    ex)
    // Returns the value 1000.
    idg(300,0.7);

    // Returns the value 20000.
    idg(11000,0.45);
51.indexId2Name : 인덱스 명을 반환한다.
    = str indexId2Name(int tableid, int indexid)
    ex)
    // The result of calling indexId2Name is AddrIdx
    static void indexId2NameExample(Args _arg)
    {
        str s;
        tableid id;
        indexid idx;
        ;

        id  = tableName2Id("Address");
        idx = indexName2Id(id, "AddrIdx");
        s = indexId2Name(id, idx);
        print "The result of calling indexId2Name is " + s;
        pause;
    }
52.indexName2Id : 인덱스의 id를 반환한다.
    = int indexName2Id(int tableid, str indexname)
    ex)
    static void indexName2IdExample(Args _arg)
    {
        indexid idx;
        tableid id;
        ;

        id  = tableName2Id("Address");
        idx = indexName2Id(id, "AddrIdx");
        print "Index ID for index name AddrIdx of table Address is "
            + int2Str(idx);
        pause;
    }
53.indexNum : noinformation
54.indexStr : noinformation
55.int2Str : 정수를 텍스트로 반환한다.
    = str int2Str(int integer)
    ex)
    static void int2StrExample(Args _arg)
    {
        ;
        print "This is int2Str, value is " + int2Str(intMax());
        print "This is int642Str, value is " + int642Str(int64Max());
        pause;
    }
56.int642Str : noinformation
57.intvMax : noinformation
58.intvName : noinformation
59.intvNo : noinformation
60.intvNorm : noinformation
61.licenseCodeNum :noinformation
62.licenseCodeStr : noinformation
63.literalStr : noinformation
64.log10
65.logN
66.match : noinformation
67.max : 2개의 값중에서 큰 쪽을 반환한다.
    = anytype max(anytype object1, anytype object2)
    ex)
    // Returns the value 12.1.
    max(12.0,12.1);
68.maxDate : date타입의 변수에서 허락하는 최고 큰 값을  반환한다. 아무 날짜나 이 날짜보다 작거나 같다.
    = date maxDate()
    ex) //2154-12-31
    static void maxDateExample(Args _arg)
    {
        date maximumDate;
        ;
        maximumDate = maxDate();
        print maximumDate;
        pause;
    }
69.maxInt : 정수 타입에서 허락하는 가장 큰 값을 돌려준다. 어떤 정수 값도 반환되는 값보다 작거나 같다.
    = int maxInt()
    ex)
    static void maxIntExample(Args _arg)
    {
        int i;
        ;
        print "The maximum value for type int is " + int2Str(maxInt());
        pause;
    }
70.menuItemActionStr : noinformation
71.menuItemDisplayStr
72.menuItemOutputStr
73.menuStr : noinformation
74.methodStr : noinformation
75.min : 두 개의 비교값중에서 더 작은 값을 반환한다.
    = anytype min(anytype object1, anytype object2)
    ex)
    static void minExample(Args _arg)
    {
        anytype a;
        real r = 3.0;
        real s = 2.0;
        ;

        a = min(r, s);
        print num2Str(a, 1, 2, 1, 1) + " is less than the other number.";

        pause;
    }
76.minInt :
77.mkDate : 각각 날짜, 월, 년을 가르키는 세개의 정수에 기초한 날짜를 생성한다.
    = date mkDate(int day, int month, int year)
    ex)//2005-01-01
    static void mkDateExample(Args _arg)
    {
         date d;
          ;

        // Returns the date 01\01\2005.
         d = mkDate(1, 1, 2005);
        print d;
        pause;
    }
78.mthName : 숫자로 지정된 해당 월의 이름을 반환한다.
    = str monthName(int number)
    ex)
    static void mthNameExample(Args _arg)
    {
        str s;
        ;

        // MthName(6) returns the text string "June".
        s = mthName(6);
        print "Month name is " + s;

        pause;
    }
79.mthOfYr : 지정된 날짜에 대한 월의 숫자를 반환한다.(January is month number 1.)
    = int mthOfYr(date date)
    ex)
    static void mthOfYrExample(Args _arg)
    {
        int i;
        ;
        i = mthOfYr(today());
        print "The number of the month in today's date is " + int2Str(i);
        pause;
    }
80.newGuid : globally unique identifier (GUID)를 만든다.
    = guid newGuid()
    ex)
    static void newGuidExample(Args _arg)
    {
        guid myGuid;
        ;

        myGuid = newguid();
        print strfmt("The GUID is: %1", myGuid);
    }
81.nextMth : 지정된 날짜에 가장 가까운 다음 달의 일자를 반환한다. 예로  nextMth(29\02\1996) 는 29\03\1996로, nextMth(31\01\1996) 는 29\02\1996로 반환한다.
    = date nextMth(date date)
    ex)
    static void nextMthExample(Args _arg)
    {
        date d;
        ;
        d = nextMth(today());
        print "Closest date next month is "
            + date2Str(d, 2, 2, -1, 2, -1, 4);
        pause;
    }
82.nextQtr : 지정된 날짜에 가장 가깝게 부합되는 다음 쿼터의 날짜를 반환한다. 예로 nextQtr(31\01\1998)는 30\04\1998를 반환한다.(대략 3달후)
    = date nextQtr(date date)
    ex)
    static void nextQtrExample(Args _arg)
    {
        date d;
        ;
        d = nextQtr(today());
        print "Closest date next quarter is "
            + date2Str(d, 2, 2, -1, 2, -1, 4);
        pause;
    }
83.nextYr : 지정된 날짜에서 가장 가깝게 부합하는 다음 년도의 날짜를 반환한다. 예로 nextyr(29\02\1998)는 28\02\1999를 반환한다.
    = date nextYr(date date)
    ex)
    static void nextYrExample(Args _arg)
    {
        date d;
        ;
        d = nextYr(today());
        print "Closest date next year is "
            + date2Str(d, 2, 2, -1, 2, -1, 4);

        pause;
    }
84.num2Char : 정수에 부합하는 ascii코드로 반환한다.
    = str num2Char(int figure)
    ex)
    static void num2CharExample(Args _arg)
    {
        str s;
        ;
        s = num2Char(42);
        // Prints an asterisk?-the character represented by 42.
        print s;

        pause;
    }
85.num2Date : 01\01\1900이후로 지정된 날수에 부합하는 날짜를 반환한다.
    = date num2Date(int _days)
    _days - The number of days after 1 January 1900 to return the date for.
    ex)
    // Returns the date 01/01/1901 (1 January 1901).
    num2Date(366);
86.num2Str : 실수값에서 텍스트로 변환
    = str num2Str(real number, int character, int decimals, int separator1, int separator2)
    number - The number to convert to a text string.
    character - The minimum number of characters required in the text.
    decimals - The required number of decimals.
    separator1 - The decimal separator. ( 1 - point(.), 2 - comma (,) )
    separator2 - The thousands separator. ( 0 - no thousands separator, 1 - point(.), 2 - comma(,), 3 - space( ) )
    ex)
    // Returns 12.345,60.
    num2Str(12345.6,10,2,2,1);

    // Returns 12345.
    num2Str(12345.6,1,0,1,0);
87.pmt : 대출금을 갚기 위해 매기간마다 지불되어야 하는 양을 계산한다.
    = real pmt(real principal, real interest, real life)
    principal - The amount that was originally borrowed.
    interest - The interest that is applied each period to the amount borrowed.
    life - The number of periods over which the loan is repaid.
    ex)
    // Returns the value 1372.82.
    pmt(4000,0.14,4);

    // Returns the value 1174.60.
    pmt(10000,0.10,20);
88.power : 실수값에 대한 정해진 제곱값을 계산한다.
    = real power(real arg, real exponent)
    ex)
    // Returns the value 25.0.
    power(5.0,2.0);

    // Returns the value 2.0.
    power(4.0,0.5);
89.prevMth : 지정된 날짜의 가장 가까운 이전 달 값을 반환한다.
    = date prevMth(date date)
    ex)
    // Returns the date 29/02/1996 (leap year).
    prevMth(31\03\1996);

    // Returns the date 28/01/1998.
    prevMth(29\02\1998);
90.prevQtr : 지정된 날짜의 이전 쿼터를 계산한다(약 3달전 날짜)
    = date prevQtr(date date)
    ex)
    // Returns the date 30/01/1998.
    prevQtr(30\04\1998);

    // Returns the date 29/02/1996 (leap year).
    prevQtr(29\05\1996);
91.prevYr
92.primoYr :
93.prmIsDefault : 해당 날짜가 첫번째 날짜인지를 결정한다.
    = int primoYr(date date)
    (1 if date is a primo date; otherwise, 0.)
    ex)
    //Today is a primo date
    //Today is not a primo date
    static void primoYrExample(Args _arg)
    {
        ;

        if (primoYr(today()) == 1)
        {
            print "Today is a primo date";
        }
        else
        {
            print "Today is not a primo date";
        }
        pause;
    }
94.pt : 주어진 값에 지정된 비율로 계산된 값의 합을 반환한다.
    = real pt(real amount, real percentage)
    ex)
    // Returns the value 2200.0.
    pt(2000.0,0.10);
95.pV : 연금의 현재값을 반환한다.
    = real pv(real amount, real interest, real life)
    amount - The amount paid during each period.
    interest - The interest rate.
    life - The number of times amount is paid.
    ex)
    // Returns the value 874.11.
    pv(300,0.14,4);
96.queryStr : 현재 있는 쿼리를 나타내는 스트링을 반환한다.
    = str queryStr(class _query)
    ex)
    static void queryStrExample(Args _arg)
    {
        // Prints the string AssetTable.
        print queryStr(AssetTable);

        // Results in compiler error saying that operand is not an element.
        print queryStr(AssetTable);
        pause;
    }
97.rate : 현재 투자 값으로부터 일정 수의 기간을 넘어서 지정된 미래의 결과값을 받기위한 이율을 계산한다.
    = real rate(real _future_value, real _current_value, real _terms)
    _future_value - The future value of the investment.
    _current_value - The current value of the investment.
    _terms - The number of periods for which the investment spans.
    ex)
    // Returns the value 0.12.
    rate(10000,1000,20);
98.refPrintAll : noinformation
99.reportStr : noinformation
100.resourceStr : noinformation
101.round : 정수를 지정된  형식으로 반올림한다.
    = real round(real _arg, real _decimals)
    ex)
    // Returns the value 125.00.
    round(123.45,5.00);

    // Returns the value 7.35.
    round(7.45,1.05);
102.runAs :
103.runBuf : 스트링으로 지나는 x++코드를 실행한다.
    = anytype runBuf(str job,[anytype param])
    job - The string that represents the code to be run.
    param - The parameters for the code being passed to the function; optional.
104.securityKeyNum : noinformation
105.securityKeyStr : noinformation
106.sessionId : 현 세션의 세션값을 반환한다.
    = int sessionId()
    ex)
    static void sessionIdExample(Args _arg)
    {
        int session;
        ;
        session = sessionId();
        print "This session ID is number " + int2Str(session);
        pause;
    }
107.setPrefix : 현 실행반경에 대해서 접두사를 지정한다.
    = int setPrefix(str _prefix)
    ex)
    static void setPrefixExample(Args _arg)
    {
        int i;
        ;
        i = setPrefix("Prefix");
        print i;
        pause;
    }
108.sin
109.sinh
110.sleep : 밀리초단위로 시스템을 쉬도록 지정한다.
    = int sleep(int _duration)
    ex)
    static void sleepExample(Args _arg)
    {
        int seconds = 10;
        int i;
        ;
        i = sleep(seconds*1000);
        print "job slept for " + int2str(i/1000) + " seconds";
        pause;
    }
111.sln : 일정 가치하락 기간동안에 계속적인 가치하락 값을 반환한다.
    = real sln(real price, real scrap, real life)
    price - The purchase price of the asset.
    scrap - The scrap value of the asset.
    life - The number of periods in the expected life of the asset.
    ex)
    static void slnExample(Args _arg)
    {
        real r;
        ;
        r = sln(100.00, 50.00, 50.00);
        print r;
        pause;
    }
112.staticMethodStr
113.str2Date : 스트링을 날짜로 변환한다.
    = date str2Date(str _text, str _sequence)
    _text - The text string to convert to a date.
    _sequence - The desired sequence in the date:
                day: 1
                month: 2
                year: 3
                For example, if the desired sequence is month, year, day, _sequence is written as 231.
    ex)
    static void str2DateExample(Args _arg)
    {
        date d;
        ;
        d = str2Date("01/01/1999", 123);
        print d;
        pause;
    }
114.str2Enum : 주어진 텍스트 스트링을 지정된 타입으로 계산한다.
    = enum str2Enum(enum _type, str _text)
    ex)
    static void str2EnumExample(Args _arg)
    {
        BankAccountType bat;
        ;
        str2Enum(bat,"Current");
    }
115.str2Guid :
116.str2Int : 스트링을 해당하는 정수값으로 변환한다.
    = int str2Int(str _text)
    ex)
    static void str2IntExample(Args _arg)
    {
        int i;
        ;
        i = str2Int("1234567890");
        print "i = " + int2Str(i);
        pause;
    }
117.str2Int64
118.str2Num : 스타링을 실수값으로 변환한다.
    = real str2Num(str _text)
        str2Num("123.45") returns the value 123.45.
        str2Num("a123") returns the value 0.0.
        str2Num("123a") returns the value 123.00
    ex)
    static void str2NumExample(Args _arg)
    {
        real r;
        ;
        r = str2Num("3.15");
        print strFmt("r = %1", r);
        pause;
    }
119.str2Time :
    ex)
    static void str2TimeExample(Args _arg)
    {
        int i;
        ;
        i = str2Time("11:30");
        print i;
        pause;
    }
120.strAlpha : 문자나 숫자가 아닌 다른 캐릭터는 모두 삭제한다
    = str strAlpha(str _text)
    ex)
    static void strAlphaExample(Args _arg)
    {
        str s;
        ;
        s = strAlpha("?a*bc123.");
        print s;
        pause;
    }
121.strCmp : 주어진 두개의 스트링값을 비교한다. 비교케이스는 상황에 따라 다르다.
    = int strCmp(str text1, str text2)
    ex)
    // Returns 0.
    print strCmp("abc", "abc");

    // Returns 1.
    print strCmp("abc", "ABC");

    // Returns -1.
    print strCmp("aaa", "bbb");

    // Returns 1.
    print strCmp("ccc", "bbb");
122.strColSeq : 대문자를 전체 소문자로 변환한다
    = str strColSeq(str text)
    ex)
    static void strColSeqExample(Args _arg)
    {
       ;

       print strColSeq("AbcDEaBCde");
       pause;
    }
123.strDel : 문자열중에서 특정 부분을 삭제한다.
    = str strDel(str _text, int _position, int _number)
    _text - The text string to delete characters from.
    _position - The position at which to start deleting characters.
   _number - The number of characters to delete (including the character at position).
             A minus in front of _number indicates that the (_number-1) characters before the character at _position are to be removed along with the character at _position.
   ex)
   // Returns the text string AEFGH.
   strDel("ABCDEFGH",2,3);

   // Returns the text string ABCGH.
   strDel("ABCDEFGH",4,3);
124.strFind : 주어진 스트링에서 찾아야 하는 캐릭터의 첫번째 발견지를 찾아낸다.
    = int strFind(str _text, str _characters, int _position, int _number)
    _number - The number of characters to search, beginning at the character at _position.
               If the number is negative, the system searches the number of characters backward from the specified position.
    ex)
    // Returns the value 4 (the position where "D" was found).
    strFind("ABCDEFGHIJ","KHD",1,10);

    // Returns the value 8 (the position where "H" was found).
    strFind("ABCDEFGHIJ","KHD",10,-10);
125.strFmt : 포맷관련
126.strIns : 택스트 부분에 대해서 다른 택스트를 입력한다.
    = str strIns(str _text1, str _text2, int _position)
    ex)
    // Returns the text string ABCDEFGH.
    strIns("ABFGH","CDE",3);
127.strKeep : 해당 문자열에서 지정된 문자를 제외한 모든 부분을 삭제한다.
    = str strKeep(str _text1, str _text2)
    ex)
    // Returns the text string BBCDDB.
    strKeep("ABBCDDEFGHB","BCD");
128.strLen : 문자열 길이를 반환한다.
    ex)
    // Returns the value 10.
    strLen("ABCDEFGHIJ");
129.strLine : 새 열(\n)을 사용함으로써 만들어진 여러개의 라인의 스트링값으로부터 한줄한줄을 반환한다.
    ex)
    static void strLineExample(Args _arg)
    {
        str mytxt = "first-line\nsecond-line\nlast-line";
        ;

    // Prints "second-line".
        print strLine(mytxt,1);

    // Prints "last-line".
        print strLine(mytxt,2);
        pause;
     }
130.strLTrim : 택스트로 부터 앞부분의 빈공간을 없앤다.
    ex)
    // Returns the text string "ABC-DEFG".
    strLTrim("   ABC-DEFG");
131.strLwr : noinformation
132.strNFind : 지정된 문자가 아닌 문자가 있는 문자열의 자리를 숫자로 반환한다.
    = int strNFind( str _text, str _characters, int _position, int _number)
    ex)
    // Returns the value 5 (the position of "E").
    strNFind("ABCDEFGHIJ","ABCDHIJ",1,10);

    // Returns the value 6 (the position of "H").
    strNFind("CDEFGHIJ","CDEFGIJ",10,-10);
133.strPoke : 스트링 값의 일부분에 다른 택스트 스트링을 덮어 쓰다.
134.strPrompt : 콜론(:)과 스페이스가 있는 주기가 첨가된 입력스트링값을 길이보다 더 긴 스트링이 나타난다.
    = str strPrompt(str _string, _int len)
    ex)
    static void JobStrPromptDemo(Args _args)
    {
        // Printed string is "[abc..: ]"
        print "[", strPrompt("abc", 7), "]";
        pause;
    }
135.strRem : 스트링에서 없애고자 하는 문자를 삭제한다.
    = str strRem(str text1, str text2)
    ex)
    // Returns the text string "BDFBDF".
    strRem("ABCDEFGABCDEFG","ACEG");
136.strRep : 스트링의 문자를 반복한다.
    = str strRep(str _text, str _number)
    ex)
    static void strRepExample(Args _arg)
    {
        str strL;
        ;
        strL = strRep("AB",6);
        print strL;
        pause;
    }
137.strRTrim : 스트링에서 모든 빈공간을 삭제한다.
    = str strRTrim(str _text)
    ex)
    // Returns the string ABC-DEFG-.
    strRTrim("ABC-DEFG-    ");
138.strScan : 어떠한 스트링에 대해 다른 스트링의 값을 조회한다.
    = int strScan( str _text1, str _text2, int _position, int _number)
    text1 - The text string to search.
    _text2 - The string to find.
   _position - The position at which the search should start.
   _number - The number of characters that should be searched.
             If there is a minus in front of _number, the system searches the number of characters in reverse order from the specified position.
    ex)
    // Returns the value 4 (the position of text string "DEF").
    strScan("ABCDEFGHIJ","DEF",1,10);

    // Returns the value 3 (the position of text string "CDE").
    strScan ("ABCDEFGHIJ","CDE",10,-10);
139.strUpr : noinformation
130.subStr :
    = str subStr(str _text, int _position, int _number)
    ex)
    // Returns the text string CDEFG.
    subStr("ABCDEFGHIJ",3,5);

    // Returns the text string DEFG.
    subStr("ABCDEFGHIJ",7,-4);
141.syd : 일정한 기간동안 자산의 가치하락을 계산한다.
    = real syd(real _price, real _scrap, real _life, int _period)
      _price - The purchase price of the asset.
      _scrap - The scrap value of the asset.
      _life - The expected life of the asset (the number of periods).
      _period - The period for which to calculate depreciation.
    ex)
    // Returns the value 2666.67 (for the 1st period).
    syd(10000,2000,5,1);
    // Returns the value 2133.33 (for the 2nd period).
    syd(10000,2000,5,2);
    // Returns the value 1600.00 (for the 3rd period).
    syd(10000,2000,5,3);
    // Returns the value 1066.67 (for the 4th period).
    syd(10000,2000,5,4);
    // Returns the value 533.33 (for 5th - and final- period).
    syd(10000,2000,5,5);
142.systemDateGet : 현재 날짜 반환한다.
143.systemDateSet : 시스템의 일자를 수정한다.
    ex)
    static void systemDateSetExample(Args _arg)
    {
        date d = today();
        ;
        d = systemDateSet(d);
        print d;
        pause;
    }
144.tableCollectionStr : noinformation
145.tableFieldGroupStr : 특정한 필드 이름을 보여주는 스트링을 반환한다.
    = str tableFieldGroupStr(int table, str fieldgroupname)
      table - The table that contains the field group.
      fieldgroupname - The name of the field group to return.
    ex)
   static void tableFieldGroupStrExample(Args _arg)
    {
        str MyTxt;
        ;
        MyTxt = tableFieldGroupStr(Address, ContactInfo);
    }
146.tableId2Name : 테이블 이름이 포함된 스트링이 반환된다.
    = str tableId2Name(int _tableid)
    ex)
    static void tableId2NameExample(Args _arg)
    {
        str s;
        tableid id;
        ;

        // Get the ID for table name Address.
        id = tableName2Id("Address");
        print "ID for table name Address is " + int2Str(id);
        // Get the name from the table ID.
        s = tableId2Name(id);
        print "Name for table ID " + int2Str(id) + " is " + s;
        // Get the printable name from the table ID.
        s = tableId2PName(id);
        print "Printable name for table ID " + int2Str(id) + " is " + s;
        pause;
    }
147.tableId2PName : 프린트 할 테이블 명을 가진 스트링을 반환한다.
    = str tableId2PName(int _fieldid)
    ex)
    static void tableId2NameExample(Args _arg)
    {
        str s;
        tableid id;
        ;

        // Get the ID for table name Address.
        id = tableName2Id("Address");
        print "ID for table name Address is " + int2Str(id);
        // Get the name from the table ID.
        s = tableId2Name(id);
        print "Name for table ID " + int2Str(id) + " is " + s;
        // Get the printable name from the table ID.
        s = tableId2PName(id);
        print "Printable name for table ID " + int2Str(id) + " is " + s;
        pause;
    }
148.tableMethodStr : noinformation
149.tableName2Id : 테이블의 id를 반환한다.
    = int tableName2Id(str _name)
    ex)
    static void tableName2IdExample(Args _arg)
    {
        str s;
        tableid id;
        ;

        // Get the ID for the Address table name.
        id = tableName2Id("Address");
        print "ID for the Address table name is " + int2Str(id);
        // Get the name from the table ID.
        s = tableId2Name(id);
        print "Name for table ID " + int2Str(id) + " is " + s;
        // Get the printable name from the table ID.
        s = tableId2PName(id);
        print "Printable name for table ID " + int2Str(id) + " is " + s;
        pause;
    }
140.tableNum : noinformation
151.tablePName : noinformation
152.tableStaticMethodStr : noinformation
153.tableStr : noinformation
154.tan
155.tanh
156.term : noinformation
157.time2Str :
    = str time2Str( int _time, int _separator, int _timeFormat)
    _time - The number of seconds since midnight.
    _separator - The characters to be used as separators in the text string. Possible values follow:
      0 ? regional settings for the operating system
      1 ? colon (:)
      2 ? point (.)
      3 ? space ( )
      4 ? comma (,)
      5 ? forward slash (/)
    _timeFormat - Determines whether a 12-hour or 24-hour clock is used. Possible values follow:
      0 ? regional settings for the operating system
      1 ? 24-hour clock (15:00:00)
      2 ? 12-hour clock (3:00:00pm)
    ex)
    // Returns the text string 05:01:38.
    time2Str(18098,1,1);
    // Returns the text string 05:01:38 am.
    time2Str(18098,1,2);
    // Returns the text string 05 01 39.
    time2Str(18099,3,1);
    // Returns the text string 05/01/39 am.
    time2Str(18099,5,2);
158.timeNow : 현시간 값을 반환한다. 자정부터 시작해서 밀리세컨으로 반환된다.
    = int timeNow()
    ex)
    static void timeNowExample(Args _arg)
    {
        int i;
        ;
        i = timeNow();
        print "The number of seconds since midnight is " + int2Str(i);
        pause;
    }
159.today : 시스템상의 현재일자를 반환한다.
    ex)
    static void todayExample(Args _arg)
    {
        date d;
        ;
        d = today();
        print "Today's date is " + date2Str(d, 0, 2, -1, 2, -1, 4);
        pause;
    }
150.trunc : 소수점 부분을 삭제한다(버림)
    = real trunc(real _decimal)
    ex)
    static void truncExample(Args _arg)
    {
        real r;
        ;
        r = trunc(2.7147);
        print strFmt("r = %1",  r);
        pause;
    }
161.typeId : noinformation
162.typeOf : 속성의 타입을 반환한다.
    = enum typeOf(anytype _object)
    ex)
    if(typeof(conpeek(c, 1)) != Types::Container ||
            conlen(conpeek(c, 1)) != 1 ||
            typeof(conpeek(conpeek(c, 1), 1)) != Types::Integer)
    {
        // More code.
    }
163.uint2Str : noinformation
164.ultimoYr : noinformation
165.varStr : noinformation
166.webActionItemStr
167.webDisplayContentItemStr
168.webFormStr
169.webletItemStr
170.webMenuStr
171.webOutputContentItemStr
172.webpageDefStr
173.webReportStr
174.websiteDefStr
175.websiteTempStr
176.webStaticFileStr
177.webUrlItemStr
178.webWebpartStr
179.wkOfYr : 해당일자가 들어간 년도의 해당 주를 계산한다.
    = int wkOfYr(date _date)
    ex)
    // Returns the value 6: the 6th week of 1998.
    wkOfYr(02\02\1998);
180.year : 해당일의 년도를 반환한다.
    = int year(date _date)
    ex)
    // Returns the value 1998.
    year(02\02\1998);

 

/*---------------------------------쿼리문 넣고 실행하는 부분 ----------------------------------*/
//http://msdn2.microsoft.com/en-us/library/aa636695.aspx
--UserConnection Class
/*
The UserConnection class represents an auxiliary connection to the SQL database, based on the same login properties as the main connection.

 Copy Code
class UserConnection extends Connection
*/

static void example()
{
    UserConnection Con = new UserConnection();
    Statement Stmt = Con.createStatement();
    ResultSet R = Stmt.executeQuery('SELECT VALUE FROM SQLSYSTEMVARIABLES');
    while ( R.next() )
    {
        print R.getString(1);
    }
}

Dynamics AX Readiness: Learning Paths

Posted by Alvin You
2014. 10. 27. 23:45 Dynamics AX

MS Dynamics AX ERP에 대한 Learning Paths는 아래와 같이 다양합니다.

첨부한 파일을 열어 원하는 Role을 선택 후 항목을 클릭하면 해당 Learning Path에 대한 설명 및 관련 링크들을 볼 수 있습니다.

  • Technology Consultant에 대한 Learning Path

DynamicsAXLearningPath.pdf

 

Tutorials of the Dynamics AX Sample Code

Posted by Alvin You
2014. 10. 26. 22:34 Dynamics AX

어떤 언어를 시작할 때 많은 예제 실습을 해 보는 것과 남들이 작성한 샘플 코드를 보며 클래스, 함수 그리고 그 언어에서 사용되는 다양한 코드들을 보고 따라 해 보는 것은 매우 중요하다고 생각됩니다.

친절하게도 Dynamics AX의 X++ 언어는 다양한 Tutorial Classes, Forms를 제공하고 있어 처음 X++언어를 배우는 초보자에게 도움을 주고 있습니다.

AOT의 Classes, Forms 노드에 있는 Tutorial_로 시작되는 항목들을 참고해 보세요. 개발에 많은 도움을 받을 수 있으실 겁니다.

 

Dynamics AX '7' 코드네임 "Rainier" 발표

Posted by Alvin You
2014. 10. 26. 22:17 Dynamics AX

이번 AX User Group Summit에서 Dynamics AX '7'에 대한 일반인 공개가 이루어진 것 같습니다.

2015년에 발표될 AX 7의 모습은 어떨까요?

아래 기사문에서도 강조하고 있지만,Browser based라는 표현과 mobile clients across many device platform 내용이 매력있어 보입니다.

 

웹 브라우져 지원과 다양한 모바일 플랫폼 지원이 되면 지금까지 데스크탑 환경에만 의존했던 사용자 환경을 이제는 웹브라우만 있으면 어디서나 접속해 ERP 작업을 진행할 수 있기 때문에 더욱 업무 효율성은 뛰어나지고 시시시각각 의사 결정을 해야 하는 비지니스 환경에 많은 도움을 줄 수 있지 않을까란 생각을 해 봅니다.

 

그리고, 지속적으로 MS에서 밀고있는 Azure 환경에서 운영이 가능하도록 한다는 두번째 내용을 통해서 점점 기업 환경이 Azure 환경으로 옮겨 가는 것을 볼 수 있는 것 같습니다.

아직까지는 ERP시스템을 Azure와 같은 환경보다는 On Premise를 추구하는 국내 기업들에게 어떤 영향을 줄 지 궁금해집니다.

 

 

 

Microsoft Dynamics AX '7' on track as a major "technology release"

 

Though the next major release of Microsoft Dynamics AX has been out of public view, progress continues on AX ‘7', a.k.a. "Rainier", according to Microsoft Dynamics AX R&D general manager Dan Brown.

"We've been quiet on AX ‘7'," acknowledged Brown today at AXUG Summit. But the team has been working toward delivering the next major release in 2015, he said. They have also been working to deliver new cumulative updates for AX 2012 R3 on an ongoing six month cadence.

 

AX ‘7' will be primarily a technology release, according to Brown, with two primary focus areas. The first goal is the updated user experience that is browser based and that supports mobile clients across many device platforms. The second goal is to support AX in production on Azure to be managed by partners.

 

 

https://www.linkedin.com/pulse/article/20141016122427-21591781-microsoft-dynamics-ax-7?trk=object-title

 

Dynamics AX 2012 R3 DEMO VM(Virtual Machine) 성능 향상 팁

Posted by Alvin You
2014. 10. 14. 11:52 Dynamics AX

Dynamics AX 2012 R3 Demo Virtual Machine의 성능 향상을 위해서는 아래와 같이 SQL Server의 Maximum server memory를 설정된 2GB -> 16GB로 설정하면 성능 향상이 많이 된다고 합니다.

 

원문 내용 : http://daxdilip.blogspot.kr/2014/10/tip-to-improve-performance-while.html

X++ 소스 코드에 대한 버젼 관리

Posted by Alvin You
2014. 10. 12. 00:48 Dynamics AX

많은 프로젝트를 진행하다보면 소스에 대한 버젼 관리 미흡으로 개발을 진행하는 개발자나 프로젝트를 관리하는 PM에게 당황스러운 일들이 발생하고는 합니다.

 

Dynamics AX 프로젝트 또한 독립적인 개발환경인 MorphX의 특성과 Layer라는 개념 때문에 소스에 대한 충돌 및 소스가 유실되는 경우가 많이 발생이 되고는 합니다. 2012에서는 Model이라는 개념이 등장해 더더욱 혼란을 가중시키는 역할을 하고 있습니다.

 

또한, 개발자간의 소스 이동이라든지 Live 시스템에 소스를 이관하는 과정에서 개발된 소스가 유실되는 경우가 발생이 되곤 합니다. 이렇게 소스에 대한 버젼관리가 절실함에도 이러한 환경에서 프로젝트를 진행해보지 못한 이유로 VCS(Version Control System)에 대한 두려움들이 존재하는 것 같아 버젼관리에 대해서 정리된 자료를 공유해 드립니다.

 

 

Split String in Dynamics AX

Posted by Alvin You
2014. 9. 10. 22:44 Dynamics AX/Development

프로그램 개발을 하다보면 많은 문자열 함수와 부딪히게 됩니다. 그 중 입력 받은 문자열을 특정 구분 문자를 통해서 문자열을 쪼개고 다시 그 값을 다른 계산이나 데이터베이스에 넣게 되는 작업을 많이 진행하게 됩니다.

그렇다면, 위와 같은 작업을 X++에서는 어떻게 진행할 수 있을까요? 많은 방법들이 있겠지만 아래 6가지 방법 중 본인이 편안하게 사용할 수 있는 방법을 가져다가 사용하면 될 것 같습니다.

1. 구분값 위치를 계산해서 문자열을 쪼개는 방법

static void splitString_old(Args _args)

{

    str input = "Minho,Ricky,Hansuk,Sangwook";

    str seperator = ",";

    int lenInput = strLen(input);

    int nextPos;

    int lastPos = 1;

    str result;

    ;

 

    do

    {

        nextPos = strFind(input, seperator, nextPos + 1, lenInput - nextPos);

        if (nextPos == 0)

            nextPos = lenInput+1;

        result = subStr(input, lastPos, nextPos-lastPos);

        info(result);

 

        lastPos = nextPos+1;

    }

    while (nextPos != lenInput+1);

}

2. List Class 사용

static void splitString_list(Args _args)

{

    str input = "Minho,Ricky,Hansuk,Sangwook";

    str separator = ",";

    str result;

    List list;

    ListEnumerator le;

    ;

   

    list = new List(Types::String);

    list = strSplit(input, separator);

    le = list.getEnumerator();

   

    while ( le.moveNext())

    {

        result = le.current();

        info(result);

    }

 

}

3. Container Class 사용

static void splitString_con2str(Args _args)

{

    str input = "Minho,Ricky,Hansuk,Sangwook";

    str separator = ",";

    str result;

    container cont;

    int i;

    ;

   

    cont = str2con(input, separator);

    for (i=1; i <= conLen(cont); i++)

    {

        result = conPeek(cont, i);

        info(result);

    }

}

4. TextBuffer Class 사용

 

static void splitString_textBuffer(Args _args)

{

    str input = "Minho,Ricky,Hansuk,Sangwook";

    str separator = ",";

    str result;

    TextBuffer tb;

    ;

   

    tb = new TextBuffer();

    tb.ignoreCase(true);

    tb.regularExpressions(false);

   

    tb.setText(input);

    while ( tb.nextToken(false, separator))

    {

        result = tb.token();

        info(result);

    }

}

5. Regular Expression 사용

static void splitString_regEx(Args _args)

{

    str input = "Minho,Ricky,Hansuk,Sangwook";

    str separator = "\\,";

    str result;

    int i;

    System.Array resultArr;

    int resultArrLen;

    System.Exception clrException;

    ;

   

    try

    {

        resultArr = System.Text.RegularExpressions.Regex::Split(input, separator);

        resultArrLen = resultArr.get_Length();

       

        for (i=0;i<resultArrLen;++i)

        {

            result = CLRInterop::getAnyTypeForObject(resultArr.GetValue(i));

            info(result);

        }

    }

    catch(Exception::CLRError)

    {

        clrException = CLRInterop::getLastException();

        if(clrException)

        {

            info(CLRInterop::getAnyTypeForObject(clrException.get_Message()));           

        }

    }

}

6. NET String Function 사용

static void splitString_dotNet(Args _args)

{

    System.String input = "Minho,Ricky,Hansuk,Sangwook";

    System.Char[] separator = new System.Char[1]();

    System.Char symbol = System.Char::Parse(',');

    System.String[] result;

    int resultLen;

    int i;

    ;

   

    separator.set_Item(0, symbol);

    result = input.Split(separator);

    resultLen = result.get_Length();

   

    for (i=0;i<resultLen;i++)

    {

        System.Windows.Forms.MessageBox::Show(result.get_Item(i));

    }

}