โครงสร้างทางด้าน Programming เราจะต้องรู้ ประเภทข้อมูลเบื้องต้นที่ X++
สนับสนุน แบ่งได้เป็น 2ประเภท
ประเภทขั้นพื้นฐาน
Boolean Booleans เป็น ค่า false and true.
Integer ตัวเลขจำนวนเต็ม
Real ตัวเลขจำนวนจริง
Date เก็บวันที่ (วัน เดือน ปี)
TimeOfDay เก็บเวลา(ชั่วโมง:นาที:วินา
String ชุดตัวอักษร
Enum ใช้เก็บข้อมูลตัวเลขโดยใช้ word แทน
ประเภทมีโครงสร้างซับซ้อน
Arrays array คือ ชุดรายการข้อมูลที่เป็นประเ
Containers container คือ ชุดรายการข้อมูลที่โดยประเภ
Classes class จะถูกกำหนดด้วยตัวแปร และ methods จะต้อง instances (objects) โดย class
Tables ทุก tables ที่ถูกกำหนดใน Axapta สามารถควบคุมได้โดย class
Conversion of data types
แนวคิด, กฎ และ ขบวนการในการแปลง ระหว่างประเภทของข้อมูล แบบอัตโนมัติ
Automatic conversion
ค่า เริ่มต้น (Default values) ของตัวแปร ใน X++ โชว์ได้ดังนี้:
Data type ค่า เริ่มต้น Internal representation
Boolean false Short Number
Integer 0 Long Number
Real 0.0 BCD Number
Date Null Date
String empty List of characters
Enums 0 (first entry) Short number
โดยปกติจะเปลี่ยนไปเป็นรูปแ
Operator รายเอียด
+ - * ถ้าหนึ่งในนั้นในที่ operands คือ real ผลที่ได้จะถูกแปลงเป็น ข้อมูลประเภท real
ถ้าระหว่าง integers, boolean, หรือ enum ผลที่ได้คือ integer, boolean, หรือ enum ตามลำดับ
โดย boolean ยกระดับเป็น enum และ enum ยกระดับเป็น integer
/ สัญลักษณ์ “/” คือ หาร, จะทำการแลงข้อมูลเป็น real และผลลัพธ์ ที่ได้ก็เป็น real
MOD DIV << >> สัญลักษณ์ MOD และ DIV,>>,<< ใช้กับ ข้อมูลประเภท Integer และ จะเปลี่ยนเป็น integer ก่อน ผลลัพธ์ ที่ได้ก็เป็น integer. ตัวอย่างการใช้งาน No รูปแบบ ประเภทข้อมูลด้านซ้าย แปลงก่อนOperands With numbers Result 1 i = b + b integer boolean, boolean i = false + false 0 2 i = r + b integer real, real i = 33.3 + true 34 3 b = i + r boolean real, real b = 10 + 33.3 undefined 4 b = i + r boolean real, real b = 0 + 1 true 5 r = i + b real integer, integer r = 100 + false 100.0 6 r = i + b real integer, integer r = 100 + true 101.0 7 i = r MOD b integer integer, integer i = 33.3 MOD true 0 8 r = i DIV i real no conversion r = 100 DIV 5 20 9 d = d + i date date, date d = 1\1\1998 + 30 31\1\1998 10 i = d + i integer date, date i = 1\1\1998 + 1 compile error 11 d = d + d date date, date d = 1\1\1998+1\1\1998 compile error 12 s = s + s string string, string s = “a” + “b” “ab” 13 i = s + i integer จากตัวอย่างที่ 3,ถ้าผลที่ได้คือ 0 ,1 คือ false และ true (1) boolean ดังนั้นไม่สามารถระบุบได้ รายการที่ ไม่แปลงอัตโนมัติ dates และ strings ไม่ถูกแปลงอัตโนมัติ แต่ integers สามารถ แปลงเป็น dates คุณสามารถใช้ แปลงโดย functions built-in ของ Axapta ได้ Boolean Boolean คือข้อมูลประเภท โลจิก มี 2 สถานะคือ false หรือ true. ตัวแปร Boolean สามารถ ใช้เป็น flags ในโปรแกรม false คือ 0 true คือ 1 โดยแท้จริงแล้ว Boolean ก็คือ integerดังนั้นคุณสามารถ ใช้ integer เป็น Boolean. ถ้าค่าไม่เท่ากับ 0 คือ true โดยคำสงวนคือ true และ false การประกาศตัวแปล สำหรับ Boolean ทุกตัวแปลจะต้องมีการประกาศ
boolean declaration = boolean ชื่อตัวแปล { , ตัวแปร } ;
ชื่อตัวแปร = identifier [ option ]
Option = Arrayoptions | initialization
ตัวอย่างการประกาศ
boolean b; // ประกาศ boolean แบบง่าย.
boolean b1,b2; // ประกาศ boolean แบบหลายตัว
boolean b3 = true; // ประกาศ boolean แบบระบุบค่า
boolean b4[]; // การประกาศ boolean แบบ array
การใช้วิธีใช้
ปกติเราใช้ booleans ในการตัดสินใจหรือ ลอจิค ในการตัดสินใจ
ตัวอย่างการใช้งาน
void main()
{
Boolean exprValue; //ประกาศตัวแปร
exprValue = (7*6 == 42); //กำหนดค่า
if (exprValue) //ถ้าตัวแปร เป็นจริง จะทำการ Print “OK”
print “OK”; //“OK” is printed in a window
}
7*6 เท่ากับ 42 ดังนั้นค่าเป็น จะทำการ พิมพ์ “OK” ที่หน้าจอ.
ข้อมูลทั่วไป
Keyword Boolean
ขนาดของข้อมูล Byte
ขอบเขตข้อมูล false (0) and true (1)
ค่าเริ่มต้น False
Implicit conversions แปลงอัตโนมัติ เป็น integer, date หรือreal
Explicit conversions -
Integer
Integers คือ จำนวนเต็ม ซึ่งใน ++ จะมีเพียงชนิดเดียวคือขนาด 32 bits ปกติ
Integers จะถูกใช้ในการควบคุม (ลูป) หรือ indexes ของ array ใน database –vของ Axapta ทุกrecord จะมี field ที่ชื่อว่า Record ID (RecID) จะมีค่าไม่ซ้ำกัน ซึ่งเป็น Field ชนิดข้อมูลเป็น integer.
ช่วงของข้อมูล
จะอยู่ในช่วง [-2,147,483,647 ถึง 2,147,483,647]
การประกาศตัวแปล สำหรับ Integer
ทุกตัวแปลจะต้องมีการประกาศ
integer declaration = int ตัวแปร{ , ตัวแปร} ;
ตัวแปร = identifier [ option ]
option = arrayoptions | initialization
ตัวอย่างการประกาศ
int i; // ประกาศ integer แบบง่าย.
int i1,i2; // ประกาศ integer แบบหลายตัว
int i3 = 100; // ประกาศ integer แบบระบุบค่า
int i4[];// การประกาศ integer แบบ array
การใช้วิธีใช้
ตัวอย่างการใช้งาน
void element()
{
int i = 1,j = 2; // ประกาศ ตัวแปรแบบระบุบค่า
// J เก็บผลลัพธ์จาก J + ((i + i) DIV 2)
j +=(i + i) DIV 2;
// ผลลัพธ์ที่ไดคือ: J=3
if (j>2) // IF (J > 2) then
// ถ้า J มากกว่า 2 ดังนั้น จะ พิมพ์ข้อความ ด้านล่าง
print “J is greater than 2”;
else // อื่น ๆ
// ถ้า J ไม่มากกว่า 2 จะ พิมพ์ข้อความ ด้านล่าง
print “J is NOT greater than 2”;
}
ข้อมูลทั่วไป
Keyword Integer
ขนาดของข้อมูล 32 bit
ขอบเขตข้อมูล [-2.147.483.648; 2.147.483.647]
ค่าเริ่มต้น 0
Implicit conversions แปลงอัตโนมัติ เป็น real, boolean และ enum
Explicit conversions แปลงโดย Function Str2Int, Int2Str
Real
Real คือจำนวนจริง (จุดทศนิยม) สามารถที่จะเก็บค่า integer ได้
ช่วงของข้อมูล
อยู่ในช่วง -(10)127 ถึง (10) 127 ซึ่งมีความระเอียดของตำแหน่
ตัวอย่างของ ตำแหน่งทั้ง 16 ตำแหน่ง
Example 1: Example 2: Example 3:
123456789012345.6 12345678.90123456 1.234567890123456
ตัวอย่างที่ 1 ค่าจำนวนเต็มจะเก็บได้มากที
ตัวอย่างที่ 2 เก็บได้ 12 ล้าน และจุทศนิยมได้ 8 ตำแหน่ง
ตัวอย่างที่ 3 ค่าค่าที่เล็กที่สุด ซึ่งมีจุดทศเล็กถึงis small 15 ตำแหน่ง
การประกาศตัวแปล สำหรับ Real
ทุกตัวแปลจะต้องมีการประกาศ
real declaration = real ตัวแปร{ , ตัวแปร};
ตัวแปร = identifier [ option ]
Option = arrayoptions | initialization
real r; // ประกาศ real แบบง่าย.
real r1,r2; // ประกาศ real แบบหลายตัว
real r3 = 3.1415; // ประกาศ real แบบระบุบค่า
real r4[];// ประกาศ real แบบ array
ตัวอย่างที่1
real r;
r = 1.000e3;
r = 1.2345e+3;
r = 1.2345e+03;
r = 1234.5e40;
r = 1.0e;
ตัวอย่างที่ 2 (การแปลงประเภทข้อมูล)
void main()
{
//ประกาศตัวแปร exprValue แบบ Integer
int exprValue;
//ประกาศตัวแปร area แบบ real
real area =3.141528;
exprValue = Area/3;
}
ผลลัพธ์จากการคำนวณ area/3 คือ real เพราะว่าเก็ดจากการหารนั้นค
การใช้วิธีใช้
ตัวอย่างการใช้งาน
void MyMethod()
{
real I = 2.5,J = 2.5; // ประกาศ real แบบหลายตัว และ ระบุบค่า
J *= I; // J = J * I
// ค่าที่ได้คือ : J=6.25
if (j > (I * 2)) // ถ้า J > 5 จะทำรายการด้านล่าง
print “Great”; // พิมพ์ “Great”
else // เงื่อนไขอื่น
print “Oops”; // พิมพ์ “Oops”
}
ข้อมูลทั่วไป
Keyword real
ขนาดของข้อมูล BCD-encoding: 64 bit
ขอบเขตข้อมูล ] -(10)127 ; (10) 127 [, with a precision of 16 significant digits
ค่าเริ่มต้น 0.00
Implicit conversions แปลงอัตโนมัติ เป็น boolean, enum และ integer
Explicit conversions แปลงโดย Function Str2Num, Num2Str
Date
ข้อมูลของ date จะสมบรูณ์ จะต้องประกอบไปด้วย day, month, และ year.
ช่วงของข้อมูล
จะอยู่ในช่วง [1\1\1901 ถึง 31\12\2154] นั้นคือเริ่ม January 1, 1901, ถึงDecember 31, 2154.
Declaring variables of date
การประกาศตัวแปล สำหรับ Date
ทุกตัวแปลจะต้องมีการประกาศ
Date declaration = date ตัวแปร{ , ตัวแปร} ;
ตัวแปร = Identifier [ option ]
Option = Arrayoptions | initialization
ตัวอย่างการประกาศ
date d; // ประกาศ date แบบง่าย.
date d1,d2; // ประกาศ date แบบหลายตัว
date d3 = 21\11\1998; // ประกาศ date แบบระบุบค่า
date d4[];// ประกาศ date แบบ array
ถ้าเราใช้ ระบุบ ข้อมูลปี 2 หลักระบบจะทำการคำนวณและแปล
ตัอวอย่างสมมุตปัจจุบันคือ 1999
2 หลัก แปลเป็น...
09 2002
20 2020
21 2021
22 1922
52 1952
62 1962
02 2002
Automatic conversion
Dates ไม่สามารถ แปลงเป็น types อื่นได้อัตโนมัติ แต่คุณสามารถใช้ ค่าแบบ integer ในการคำนวณ กับ date ได้ ตัวอย่าง
void MyMethod()
{
int anInteger;
date aDate;
// กำหนด ตัวแปรประเภท date aDate = January 1, 1998
aDate = 1\1\1998;
// กำหนด ตัวแปรประเภท integer anInteger = 30.
anInteger = 30;
// โดยให้ aDate = aDate + 30 นั้นคือการบวกจำนวนวันเพิ่ม
// จะได้ค่า aDate = 31st of January 1998
aDate = aDate + anInteger;
}
การใช้วิธีใช้
date = date - integer or date = date + integer
ข้อมูลทั่วไป
Keyword data
ขนาดของข้อมูล 32 bit
ขอบเขตข้อมูล [1\1\1901; 31\12\2154]
ค่าเริ่มต้น null
Implicit conversions -
Explicit conversions แปลงโดย Function str2Date, Date2Str, Date2Int, Int2Date
String
คือชุดตัวอักษร จะใช้เก็บค่า texts, help lines, addresses, telephone numbers, และ อื่น ๆ
โดย X++ ใช้ keyword “str” เมื่อต้องการประกาศตัวแปร และสามารถ ระบุบขนาด ของตัวอักษรที่จะทำการเก็บม
ช่วงของข้อมูล
Strings ไม่ระบุบ
การประกาศตัวแปล สำหรับ string
String declaration = str [typeoptions] ตัวแปร{ , ตัวแปร} ;
Typeoptions = [ length ] [ left | right ]
ตัวแปร = Identifier [ option ]
Option = Arrayoptions | initialization
ตัวอย่างการประกาศ
str indefiniteString; //ประกาศ แบบ Dynamics ไม่กำหนดขนาดสูงสุด
str 100 maxLengthString = “A”; //ประกาศ แบบ กำหนดขนาดความยาว สูงสุด
// ไม่เกิน 100 ตัวอักษร
str 30 left leftAlignedString; //ประกาศ แบบ กำหนดขนาดความยาว สูงสุด
// ไม่เกิน 30 ตัวอักษร compared left -aligned
//An array of 100 strings,
str 30 right rightAlign[100]; //ประกาศ แบบ กำหนดขนาดความยาว สูงสุด
// ไม่เกิน 30 ตัวอักษร และเป็น array 100 ชุด
// compared left -aligned
การใช้วิธีใช้
ตัวอย่างการใช้งาน
void MyMethod()
{
str a=”Hello”,b=”World”; //ประกาศและระบุบค่าให้กับต
print a+” “+b;
pause;
}
ข้อมูลทั่วไป
Keyword Str
ขนาดของข้อมูล dynamic or fixed length
ขอบเขตข้อมูล Unlimited
ค่าเริ่มต้น “” (empty)
Implicit conversions None
Explicit conversions แปลงโดย Function Str2int, Int2str, Str2Num, Num2Str, Str2Date, Date2Str
Enum
Enum ในเวลาที่คุณต้องการกำหนดค่
X++ ไม่สนับสนุน constants แต่จะถูกทดแทนด้วย enum มันสามรถทดแทนและดีกว่า และง่ายต่อการอ่าน code จะกล่าวได้ว่า enum คือกลุ่มของค่าคงที่ ที่สามารถนำไปใช้ช่วยให้ง่า
การสร้าง enum จะต้องสร้างที่ enumerable โดย AOTและคุณสามารถกำหนด รายระเอียด ชื่อ และ กลุ่มข้อมูลที่แทนค่าคงที่
ค่า enum คือ integers โดยค่าเริ่มต้น คือ 0 ถัดไป 1, 2,.. ตามลำดับ หรือ คุณสามารถกำหนดตามที่คุณต้อ
ใน MorphX มี enum “NoYesCombo” เป็นชุดของค่าคงที่ 2 ค่า คือ No และ Yes โดย No แทนค่าคงที่ 0 และ Yes แทนค่าคงที่ 1
ช่วงของข้อมูล
คุณสามารถ สร้าง Enum โดยคุณสามารถประกาศ ค่าคงที่ ถึง 251 รายการ (0 to 250) ใน enum 1 ชุด
การประกาศตัวแปล สำหรับ Enum
Enum declaration = enumtype ตัวแปร{ , ตัวแปร} ;
ตัวแปร = Identifier [ option ]
Option = Arrayoptions | initialization
ตัวอย่างการประกาศ
NoYes done; //A เก็บค่าของคงที่ของ No และ Yes
//An array of criteria enum is declared. Literals: EQ, LT, GT, NEQ, GEQ, LEQ
Criteria crit[100]; // crit เก็บค่าของคงที่ของ EQ, LT, GT, NEQ, GEQ, LEQ
วิธีการใช้ค่าที่ได้สร้างไว
Enumreference = Enum :: literal
โดย
Enum = ชื่อของชุด enum
Literal = รายการที่ประการในชุด enum
เช่น รายการ No ใน NoYes จะต้องเขียนว่า NoYes::No. คุณถึงสามารถ ใช้ค่าที่ประกาศใน enum ได้ โดยจะเท่ากันทุกที่ใน X++.
Automatic conversion
Enums อัตโนมัติในการ แปลงไปเป็น boolean, integer หรือ real.
ข้อมูลทั่วไป
Keyword none - the keyword is user defined
ขนาดของข้อมูล Byte
ขอบเขตข้อมูล User defined
ค่าเริ่มต้น 0 (first literal)
Implicit conversions แปลงอัตโนมัติ เป็น boolean, integer และ real
explicit conversions แปลงโดย Function Enum2str, Str2Enum
Arrays
บางครั้งเราต้องการข้อมูลชน
ช่วงของข้อมูล
Arrays สามารถเป็นแบบ dynamic หรือ fixed ขนาด เราสามารถประกาศตัวแปรได้ทุ
การประกาศตัวแปล สำหรับ Arrays
Array declaration = datatype ตัวแปร{ , ตัวแปร} ;
ตัวแปร = Identifier arrayoptions
Arrayoptions = [ [ length ] [, memory ] ]
โดย
ตัวแปร ตัวแปร
Length ขนาดของชุดข้อมูล
Memory จำนวนที่จะนำค่ามาเก็บที่ memory ส่วนที่เหลือจะเก็บใน disk และจะทำการ load automatically loaded เมื่อมีการอ้างถึง
int i[]; // แบบ dynamic
real r[100]; // แบบ Fix 100 ชุด
// A dynamic array of dates, with only 10 elements in memory
date d[,10]; แบบ dynamic เก็บใน Memory 10 ชุด
Integer e[100,10]; แบบ Fix 100 ชุด เก็บใน Memory 10 ชุด
References to array items
การอ้างถึงข้อมูลใน Array
ArrayItemReference = ArrayVariable [ index ]
โดย
ArrayVariable = ชุดตัวแปร Array
index = เลข Index ใช้อ้างถึง เริ่มจาก 1
Indices and initialization
X++ สนับสนุน Array หนึ่งมิติ โดยจะเริ่มตนที่ 1เช่น item [1] , item [2] .. ใน X++, item [0] เมื่อเราต้องการ reset หรือ clear ข้อมูลใน array ทั้งหมด ตัวอย่าง
intArray[0] = 0;การประยุกต์ให้ array หลายมิติ
ในภาษาอื่นเช่น C++ และ java คุณสามารถกำหนด Array มากกว่า หนึ่งมิติได้เราจะเรียกว่า "arrays of arrays"แต่ใน X++. กำหนดได้แค่ หนึ่งมิติแล้วเราจะทำอย่างไ
ตัวอย่างคุณต้องการใช้ Array 2 มิติ
real earning[10, 3];
แต่ใน Axaptaไม่สามารถทำได้ เพราะกำหนดได้ มิติเดียวเราลองมาคำนวณดูขน
real earnings[10*3];
ลองเขียนใหม่โดยให้ j และ i จะได้ว่า
earnings[(i-1)*3 +j].
เราสามารถ สร้าง macro:
#localmacro.ArrayIndex
(%1-1)*3+%2
#endmacro
และเขียน code ใหม่ ดังนี้
earnings[#ArrayIndex(i,j)]
กรณีมากกว่า 2 มิติ เช่น a[i1, i2, ..., ik] สามารเขียนอยู่ในรูป
(i1 - 1)*d2*d3*..*dk +
(i2 - 1)*d3*d4*...*dk + .... +
(ik-1 -1)*dk +
(ik-1)
การประกาศ array (d1*d2*...*dk) Manipulating arrays
fieldId ธรรมดาใน table สามารถจะกำหนดเป็นแบบ Array ได้สูงสุด 65536 ตัวอย่าง ใน CustTable เป็น 1 และ 2 เรามาดู fieldId Dimension ใน CustTable มีรายระเอียดดังนี้
Dimension field:
1 Department
2 Cost center
3 Purpose
เรามาดูว่ามี Methods อะไรที่สนับสนุนบ้าง
static FieldId fieldExt2Id(FieldId fieldExtId) คือค่า fieldId ของ extended fieldId
static int fieldExt2Idx(FieldId fieldExtId) คือค่า arrayIndex ของ extended fieldId
static FieldId fieldId2Ext(FieldId fieldId, int arrayIndex) คือค่า extended fieldIที่เป็น arrayIndex
แล้วเจอกันใหม่ในฉบับหน้า
Supers
Thai-Axapta.com สงวนสิทธิ์ในการทำซ้ำ ทั้งหมด หรือบางส่วนไม่ว่าในรูปแบบห