ครั้งแรกผมว่าจะสอนวิธีติดตั้งเอง แต่ก็กลัวเรื่อง ลิขสิทธิ์ (เอ๊ะ หรือว่าคิดมากไปเอง)
เอาเป็นว่า ไปดูเว็บฝรั่งก็ได้น่ะ หรือไม่ก็ youtube ก็มีน่ะ
http://sapficonsultant.com/sap-erp-6-0-ehp6-ides-install-on-oracle-and-windows-2008-r2/
เวลาผมดูก็อ่านภาษาอังกฤษไม่ออกเหมือนกัน (แต่ถ้าภาษาลาว มาโลด อ้ายบ่ย่านดอกเด้อ สิบอกให้)
ดูฝรั่งสอนก็ อาศัยการดูรูปเอา หรือขั้นตอนต่างๆ เขาก็จะบอกอยู่น่ะฮ่ะ
แต่จริงๆ sap มันแยกย่อยออกมาหลายตัวเหมือนกันน่ะ
แต่ถ้าใครสนใจอยากจะเขียนจริงๆ ลอง sap netweaver ก็ได้ มันจะได้อยู่ 90 วัน (มั้ง)
แต่ต้องไปสมัครสมาชิกก่อนเน้อ ถึงจะโหลดได้
https://store.sap.com/sap/cpa/ui/resources/store/html/SolutionDetails.html?pcntry=US&sap-language=EN&pid=0000000218
เขียนได้เหมือนกัน แต่ก่อนผมก็ใช้ฝึกอยู่ ใช้ Database MaxDB แต่จะไม่เห็นพวก menu อะไรน่ะ มีแต่ sap tool
แต่แค่นี้ก็พอเขียนแล้วล่ะ
เวลาติดตั้ง ไม่ยากเท่าไหร่ ลง jdk (่Java) ใน youtube ก็มีสอนน่ะ ของอีตาฝรั่งอันหนึ่งนี่ล่ะ
https://www.youtube.com/watch?v=km0MbEQxvOo
ผมว่าเขาสอนดีน่ะ
*
แต่สำหรับใครที่อยากลงตัวเต็ม อันนี้ขอบอกเลยน่ะ ผมหัดลงเป็นเดือน ถ้าครั้งแรกๆน่ะ ลองผิดลองถูกอยู่นั่นล่ะ
ลงวินโดว์ วันล่ะเป็นสิบรอบก็มี แต่ก็ไม่เป็นไร เราศึกษาหนิ เราไม่ได้อะไรมากมาย ขอให้ใจรักเน๊าะ
ความต้องการก็เยอะซ่ะเหลือเกิน Harddisk ก็ไม่ต่ำกว่า 500 GB (พื้นที่ว่างน่ะ) ไม่รวมลง windows
แต่ทุกวันนี้ ลงครั้งเดียวก็ผ่านล่ะ พอจับจุดได้
*ความรู้สึกของการเขียน ABAP ผมว่าก็เหมือนการเขียนโปรแกรมทั่วไปล่ะ ไม่มีอะไรยากไปว่าเลย แต่ชื่อ Table มันจะสั้นๆ Table ก็เป็นพัน
แต่ผมก็ไม่เคยทำงานด้านนี้ จริงๆน่ะ เพราะว่าการที่จะเข้าไปใน วงการ SAP ได้หนิ ยากเหมือนกัน อาศัยประสบการณ์ทั้งนั้น ไหนจะภาษาอังกฤษที่ผมอ่อนแออยู่
ทุกวันนี้ก็ศึกษาไปเรื่อยล่ะ (ได้ทุกภาษาแต่เป็นเป็ด ก๊าบๆๆ น่ะ) ไม่เป็นไร มันคือความสุขหนิ
*ส่วนค่าเรียน SAP ก็ไม่ต้องห่วง หมดนาเป็น ทุ่งๆ แถวบ้านผมทำนา (ลูกชาวนาเน๊าะ) แต่ก็แลกมาด้วยค่าตอบแทนที่สูง
อย่างว่าล่ะ เขียน SAP ABAP ได้อย่างเดียวคงไม่พอ คงต้องรู้เรื่อง Bussiness ของบริษัทเขาอีก เพราะในประเทศไทย เน้น All in One -กาแฟสำเร็จรูป
*อันนี้เว็บ SAP ที่ผมศึกษาอยู่
http://www.guru99.com/
ผมชอบน่ะ (ชอบตรงมีรูป 555) ป่าวหรอก เขาก็สอนดูีอยู่ อันไหนไม่รู้ก็ เปิด google แปลเอา หาเพิ่มเติมเอา แต่ถ้าเราบอกว่ามันยาก มันจะปิดกั้นเรามากเลยน่ะผมว่า
ถ้ายากปุ๊บ เราจะไม่อยากศึกษาเลย เหมือนสาวๆ ถ้าบอกว่าสวยปุ๊บ อยากรู้จักทันที แต่ถ้าบอกว่า ไม่สวย อ้วน ตุ้ยนุ้ย ฯลฯ ไม่ค่อยอยากรู้จัก
แต่สำหรับผม ผมชอบคนที่ใจน่ะฮ่ะ 555++
-จะมีใครหลงเข้ามาอ่านไหมหน้อ เห่อะๆ แต่ก็ไม่เป็นไร มันบล็อกของเรา ครั้งหนึ่งเราเคยได้เขียน อีกสักสิบปี มาอ่านก็คงไม่สาย 555++
* อยากฝากถึงใครที่จะไปเรียนน่ะ ถ้าใจเราไม่รัก ไม่ฝักใฝ่ ต่อให้ไปเรียนกับ อ. คนไหนก็เท่าเดิมล่ะ ถ้าจะศึกษาจริงๆ อ. Goo ก็มีเยอะ เหมือนกันน่ะ อาจจะเรียนรู้ช้ากว่าหน่อย แต่ประหยัดตังค์ได้มากเลยเด้อ
สิบอกให้.
วันพุธที่ 8 เมษายน พ.ศ. 2558
C# Delegate การส่งค่าระหว่าง ฟอร์ม
ผมเคยไปหาๆอ่านเรื่อง delegate ของคนอื่นที่เขียนไว้ แต่ก็ยาวซ่ะเหลือเกิน หรือเวลายกตัวเองก็เขียนซ่ะแบบ Advance เกิน ยากแก่การเข้าใจสำหรับ Progamon เป็ดน้อยอย่างผม
ดูจาก เว็บ microsoft ก็ประมาณว่า delegate สามารถเรียก Method อื่นได้ แต่ถึงอย่างนั้นก็ต้อง new Object อยู่ดี (อันนี้เดาเอง เห่อะๆ)
เข้าเรื่องเลย ***
จริงๆผมก็ไม่ค่อยเข้าใจเรื่อง delegate สักเท่าไหร่ แต่พอเขียนออกมาได้ ยังไงก็ศึกษาพอเป็นแนวทางแล้วกันเน๊าะ
หลักการที่ผมนำเอา delegate มาใช้ก็คงหนีไม่พ้นเรื่องส่งตัวแปรระหว่างฟอร์ม เช่น การทำ popHelp ต่างๆ
ส่วนหน้าตาก็ประมาณนี้
มาดูโค้ดกันเลยแล้วกัน
มาดูโค้ดกันเลยแล้วกัน
//Form1
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public delegate void SendControl(TextBox text); //ประกาศ Delegate ใช้สำหรับส่งไปฟอร์ม 2
private void cmdSend_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
//ส่ง
SendControl del = new SendControl(form2.funData);
del(this.txtName);
//รับ กลับมา
form2.passControl = new Form2.PassControl(PassData);
form2.Show();
}
private void PassData(object sender) // method รับค่ากลับ
{
this.label1.Text = ((TextBox)sender).Text;
}
}
//Form2
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
// Define delegate
public delegate void PassControl(object sender); //ประกาศ Delegate ใช้สำหรับส่งไปฟอร์ม 1 ส่งค่ากลับ
public PassControl passControl; //
private void cmdSend_Click(object sender, EventArgs e)
{
if (passControl != null)
{
passControl(txtName);
}
// this.Hide();
}
internal void funData(TextBox text) // method สำหรับรับค่ามา
{
this.label1.Text = text.Text;
}
}
คงพอเข้าใจอยู่หรอกเน๊าะ แต่จริงๆ เวลาค่าไป ใช้ Constructor ก็ได้น่ะ แล้วแต่ใครจะไปประยุกต์ใช้เลย
ผิดพลาดประการใด ก็ขออภัยไว้น่ะที่นี่ด้วย ผมก็ไม่ค่อยเข้าใจมัน หรือว่ามันไม่เข้าใจผมก็ไม่รู้น่ะฮ่ะ.. ^-^
วันจันทร์ที่ 6 เมษายน พ.ศ. 2558
ว่าด้วยเรื่องการแปลงวันที่ C# VB.NET
C# การแปลงวันที่ จากปี พ.ศ.ให้เป้นปี ค.ศ. (-543)
โหลด มาใส่ ครั้งแรก ตรงเปิด ฟอร์ม Form_Load
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
//อันนี้เอาไว้ get value จาก datetimepicker
var start_date = dateTimePicker1.Value.ToString("yyyy-MM-dd");
//แต่ถ้าจะเอาวันปัจจุบันก็ getdate() เอามาจาก sqlserver ไปเลย
//เวลาแปลงกลับ จาก datebase Convert.ToDateTime(ds.Tables[0].Rows[0]["start_date"].ToString());VB.Net การแปลงวันที่ จากปี พ.ศ.ให้เป้นปี ค.ศ. (-543)
Dim dateFormat As DateTimeFormatInfo = New CultureInfo("en-US").DateTimeFormat
Dim todate_date = DateTime.Now.ToString("yyyy-MM-dd", dateFormat) 'วันปัจจุบัน
Dim create_date As String = DateTimePicker1.Value.ToString("yyyy-MM-dd", dateFormat) 'วันที่จาก DateTimePicker
//CDate("12/12/2008") เวลาโหลดกลับ
วันพฤหัสบดีที่ 2 เมษายน พ.ศ. 2558
Module VB.Net เอาไว้ เพิ่ม ลบ แก้ไข
พอดีวันนี้ได้ ทดสอบ (CRUD) การเขียน Vb.net ปกติจะไม่เขียน เพราะไม่ชอบ vb มาแต่ไหนแต่ไรแล้ว
แต่เพราะจะไปสมัครงานอยู่ที่หนึ่ง เลยลองๆมาเขียนดู แต่ก็สนุกดีน่ะ
อันนี้ส่วนของ Table น่ะ
ผมอธิบายไม่เก่ง มาดูโค้ดเลยล่ะกัน
จากที่ไม่ชอบก็เริ่มชอบล่ะ
.... อย่างว่าล่ะครับทุกวันนี้ ถึงแม้เราเก่ง (ถ้าไม่เป็นนายตัวเองน่ะ) เราไปสมัครงาน ความต้องการของแต่ล่ะที่ก็เยอะซ่ะเหลือเกิน
ซึ่งการเขียนโปรแกรมเก่งอย่างเดียวคงไม่พอ ต้องได้ภาษา implement เป็น สอน User ได้ สรุป All in One
ฟังดูเหมือน คุณค่าของโปรแกรมเมอร์มันน้อยซ่ะเหลือเกิน แต่ก็ไม่เป็นไร เราทำแล้วเรามีความสุขที่ได้ทำมัน ผมก็ถือว่าคุ้มล่ะ
วันนี้เอาแค่นี้ก่อน เดียววันหลังหาอะไรมาเขียนเล่นๆ อีก
ไม่แน่ บางทีผมอาจสอน SAP ABAP ก็ได้ เพราะผมศึกษามาได้สักพักใหญ่ๆแล้ว ติดตามตอนต่อไปน่ะครับ..
โปรแกรมมั่ว..
แต่เพราะจะไปสมัครงานอยู่ที่หนึ่ง เลยลองๆมาเขียนดู แต่ก็สนุกดีน่ะ
อันนี้ส่วนของ Table น่ะ
CREATE TABLE [dbo].[users]( [id] [int] IDENTITY(1,1) NOT NULL, [name] [varchar](50) NULL, [username] [varchar](50) NULL, [password] [varchar](50) NULL, CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
ผมอธิบายไม่เก่ง มาดูโค้ดเลยล่ะกัน
Module ExecuteModule
Dim conn As SqlClient.SqlConnection
Dim cmd As New SqlClient.SqlCommand
Dim adapter As New SqlClient.SqlDataAdapter
Dim ds As DataSet
Dim strConn As String = "Server=192.168.0.8;UID=sa;PASSWORD=Admin*9;database=tmpdbms;Max Pool Size=400;Connect Timeout=600;"
'ส่วนนี้จะเป็นส่วนของการเลือกข้อมูล Select จะส่งค่ากลับเป็น DataSet
'
Function GetDataSet(ByVal strSql As String) As DataSet
Try
conn = New SqlClient.SqlConnection(strConn)
With cmd
.Connection = conn
.CommandText = strSql
.CommandType = CommandType.Text
End With
ds = New DataSet()
adapter.SelectCommand = cmd
adapter.Fill(ds)
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
conn.Close()
cmd.Dispose()
End Try
Return ds
End Function
'ส่วนนี้จะเป็นส่วนของการ insert update delete
Function Execute(ByVal strSql As String) As Integer
Dim i As Integer = 0
Try
conn = New SqlClient.SqlConnection(strConn)
conn.Open()
With cmd
.Connection = conn
.CommandText = strSql
.CommandType = CommandType.Text
End With
i = cmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
conn.Close()
cmd.Dispose()
End Try
Return i
End Function
'ส่วนนี้จะเป็นส่วนของการ insert update delete เหมือนกัน แต่เป็นการยัด parameter เข้าไป (โปรแกรมไม่ต้องเรียก sql ซ้ำ)
Function ExecuteParameter(ByVal strSql As String, ByVal hastTable As Hashtable) As Integer
Dim i As Integer = 0
Dim hast As DictionaryEntry
Try
conn = New SqlClient.SqlConnection(strConn)
conn.Open()
cmd = New SqlClient.SqlCommand(strSql, conn)
With cmd
For Each hast In hastTable
' .Parameters.Add(New SqlParameter("@sName","TEST"))
.Parameters.AddWithValue(hast.Key, hast.Value)
Next
End With
i = cmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
conn.Close()
cmd.Dispose()
End Try
Return i
End Function
' ส่วนนี้เป็นการเรียกใช้งาน procedure แล้วส่งค่ากลับเป็น DataSet
Function ExecuteProcedure(ByVal strSql As String, ByVal hastTable As Hashtable) As DataSet
Try
conn = New SqlClient.SqlConnection(strConn)
cmd = New SqlClient.SqlCommand(strSql, conn)
cmd.CommandType = CommandType.StoredProcedure
With cmd
For Each hast In hastTable
' .Parameters.Add(New SqlParameter("@sName","TEST"))
.Parameters.AddWithValue(hast.Key, hast.Value)
Next
End With
ds = New DataSet()
adapter.SelectCommand = cmd
adapter.Fill(ds)
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
conn.Close()
cmd.Dispose()
End Try
Return ds
End Function
End Module
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim strSql As String
Dim result As Integer
If Button1.Text = "Save" Then
strSql = "insert into users values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "')"
result = ExecuteModule.Execute(strSql)
If result > 0 Then
MsgBox("Insert Seccess")
End If
Else
strSql = "update users set name= '" + TextBox1.Text + "' , username = '" + TextBox2.Text + "',password = '" + TextBox3.Text + "' "
strSql &= " where id = '" + Label4.Text + "' "
result = ExecuteModule.Execute(strSql)
If result > 0 Then
MsgBox("Update Seccess")
End If
End If
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Dim strSql As String
strSql = "select * from users order by id desc"
Dim ds As New DataSet
ds = ExecuteModule.GetDataSet(strSql)
Call ClearValue()
If (ds.Tables(0).Rows.Count > 0) Then
Me.DataGridView1.DataSource = ds.Tables(0)
End If
Button1.Text = "Save"
End Sub
Private Sub DataGridView1_CellClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
TextBox1.Text = DataGridView1.Item(1, e.RowIndex).Value.ToString
TextBox2.Text = DataGridView1.Item(2, e.RowIndex).Value.ToString
TextBox3.Text = DataGridView1.Item(3, e.RowIndex).Value.ToString
Label4.Text = DataGridView1.Item(0, e.RowIndex).Value.ToString
Button1.Text = "Update"
End Sub
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
Dim strSql As String
strSql = "delete from users where id = @id "
Dim obj As New Hashtable
obj.Add("@id", Label4.Text)
Dim i As Integer
If MsgBox("ต้องการลบข้อมูล?", MsgBoxStyle.YesNoCancel, "Title") = MsgBoxResult.Yes Then
i = ExecuteModule.ExecuteParameter(strSql, obj)
If (i > 0) Then
MessageBox.Show("ลบข้อมูลเรียบร้อยแล้ว")
End If
End If
End Sub
Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
Dim strSql As String
strSql = "SP_User"
Dim obj As New Hashtable
obj.Add("@parameter1", Convert.ToInt32(TextBox4.Text))
Dim ds As DataSet
ds = ExecuteModule.ExecuteProcedure(strSql, obj)
If (ds.Tables.Count > 0) Then
Me.DataGridView1.DataSource = ds.Tables(0)
End If
End Sub
Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
Call ClearValue()
End Sub
Sub ClearValue()
Me.DataGridView1.DataSource = Nothing
Me.DataGridView1.Rows.Clear()
Me.DataGridView1.Columns.Clear()
End Sub
End Class
ปกผมเขียน แต่ C#,Java,PHP แต่มาเขียน VB.NET ก็ตื่นเต้นไปอีกแบบ จากที่ไม่ชอบก็เริ่มชอบล่ะ
.... อย่างว่าล่ะครับทุกวันนี้ ถึงแม้เราเก่ง (ถ้าไม่เป็นนายตัวเองน่ะ) เราไปสมัครงาน ความต้องการของแต่ล่ะที่ก็เยอะซ่ะเหลือเกิน
ซึ่งการเขียนโปรแกรมเก่งอย่างเดียวคงไม่พอ ต้องได้ภาษา implement เป็น สอน User ได้ สรุป All in One
ฟังดูเหมือน คุณค่าของโปรแกรมเมอร์มันน้อยซ่ะเหลือเกิน แต่ก็ไม่เป็นไร เราทำแล้วเรามีความสุขที่ได้ทำมัน ผมก็ถือว่าคุ้มล่ะ
วันนี้เอาแค่นี้ก่อน เดียววันหลังหาอะไรมาเขียนเล่นๆ อีก
ไม่แน่ บางทีผมอาจสอน SAP ABAP ก็ได้ เพราะผมศึกษามาได้สักพักใหญ่ๆแล้ว ติดตามตอนต่อไปน่ะครับ..
โปรแกรมมั่ว..
วันอังคารที่ 31 มีนาคม พ.ศ. 2558
ว่าด้วยเรื่อง Spring Framework
วันนี้ไปอ่านเจอบทความ เขียนเกี่ยวกับเรื่อง Spring Framework อ่านแล้วเข้าใจดี
เลยเอามาโพสไว้อ่าน นิดหนึ่ง
บทความนี้เห็นโพสต์ในการตอบกระทู้ ซึ่งตอบโดยคุณ tunn
http://greatfriends.biz/webboards/msg.asp?id=39032
Spring framework ตัวนี้ สุดๆ เลยครับ ทำให้เราเขียนโปรแกรมแบบ OO concept จริงๆ แต่ไปๆมาๆดันเหมือนเขียนโปรแกรมกับ config ซึ่งถ้าเขียนบน java มันมี spring bean editor เป็น plug in บน eclipse ทำให้เขียน config ง่ายหน่อย แต่ถ้าบน .net นี่ตอนนี้ยังเหนื่อยอยู่ คงต้องรอซักพัก
Concept ของ spring มีด้วยกัน 3 ส่วนครับคือ
- IoC ( inversion of control เน้นไปทาง DI ( dependency injection) spring ยิง object เข้ามาให้ )
- AOP ( Aspect Oriented Programming ทำให้เรา maintain โปรแกรมได้ง่ายขึ้น แต่ทำจริงก็ใช่ว่าจะง่าย ส่วนมากเอาไปใช้ ในงาน เกี่ยวกับ transaction , logging )
- Abstract base class ต่างๆ ทำให้ เขียนเพิ่มเติม ต่อยอด intregateระบบ ได้ง่ายขึ้น เช่น ในส่วนของ Data Access Layer คุณอาจจะใช้ NHibernate, ADO.NET หรือ iBatis.NET ก็แล้วแต่ คุณก็เอามา plug เข้ากับ bussiness layer โดยที่ตัว client ของคุณ ไม่จำเป็นต้องเปลี่ยนแปลง code เลย
ตัวอย่าง นะครับ
IoC :
ประเด็นจะอยู่ตรง Class Sorter ครับ ถ้าเราเขียนแบบเดิม เวลาเราจะเปลี่ยน Sorting Algo เราต้องเขียนประมาณว่า
ISortAlgo sortAlgo = new BubbleSortAlgo();
หรือ
ISortAlgo sortAlgo = new InsertionSortAlgo();
ซึ่งจะทำให้เราต้องไปผูกกับ class ที่ implement interface ISortAlgo ไม่ตัวใดตัวหนึ่ง และ การเปลี่ยนอาจต้งอ compile program ใหม่ แต่ถ้าเราใช้ spring เราเพียงแค่ config ว่าจะยิง Sorting Algo ตัวไหนเข้าไป ( ตรง spring config น่ะครับ ) เปลี่ยน
หรือ
โปรแกรม เราไม่เปลี่ยนแปลง ไม่ต้อง complie ที่สำคัญคือ โปรแกรมเราผูกอยู่กับ interface ไม่ใช้ตัว implementation
Spring framework ตัวนี้ สุดๆ เลยครับ ทำให้เราเขียนโปรแกรมแบบ OO concept จริงๆ แต่ไปๆมาๆดันเหมือนเขียนโปรแกรมกับ config ซึ่งถ้าเขียนบน java มันมี spring bean editor เป็น plug in บน eclipse ทำให้เขียน config ง่ายหน่อย แต่ถ้าบน .net นี่ตอนนี้ยังเหนื่อยอยู่ คงต้องรอซักพัก
Concept ของ spring มีด้วยกัน 3 ส่วนครับคือ
- IoC ( inversion of control เน้นไปทาง DI ( dependency injection) spring ยิง object เข้ามาให้ )
- AOP ( Aspect Oriented Programming ทำให้เรา maintain โปรแกรมได้ง่ายขึ้น แต่ทำจริงก็ใช่ว่าจะง่าย ส่วนมากเอาไปใช้ ในงาน เกี่ยวกับ transaction , logging )
- Abstract base class ต่างๆ ทำให้ เขียนเพิ่มเติม ต่อยอด intregateระบบ ได้ง่ายขึ้น เช่น ในส่วนของ Data Access Layer คุณอาจจะใช้ NHibernate, ADO.NET หรือ iBatis.NET ก็แล้วแต่ คุณก็เอามา plug เข้ากับ bussiness layer โดยที่ตัว client ของคุณ ไม่จำเป็นต้องเปลี่ยนแปลง code เลย
ตัวอย่าง นะครับ
IoC :
class Sorter {
private ICollection collection;
private ISortAlgo sortAlgo;
public ISortAlgo SortAlgo {
get { return this.sortAlgo; }
set { this.sortAlgo = value; }
}
public ICollection Collection {
get { return this.collection; }
set { this.collection = value; }
}
public void sorting() {
this.sortAlgo.sort(this.collection);
}
}
interface ISortAlgo {
void sort(ICollection collection);
}
class BubbleSortAlgo : ISortAlgo {
public void sort(ICollection collection) {
// to do : implement bubble sort algo
}
}
class InsertionSortAlgo : ISortAlgo {
public void sort(ICollection collection) {
// to do : implement insertion sort algo
}
}
spring config
เรียกใช้งาน
public class Program {
public static void Main() {
Sorter sorter = getSpringContext().getObject("sorter") as Sorter;
sorter.Collection = getSampleCollection();
sorter.sorting();
display(sorter.Collection);
}
}
ประเด็นจะอยู่ตรง Class Sorter ครับ ถ้าเราเขียนแบบเดิม เวลาเราจะเปลี่ยน Sorting Algo เราต้องเขียนประมาณว่า
ISortAlgo sortAlgo = new BubbleSortAlgo();
หรือ
ISortAlgo sortAlgo = new InsertionSortAlgo();
ซึ่งจะทำให้เราต้องไปผูกกับ class ที่ implement interface ISortAlgo ไม่ตัวใดตัวหนึ่ง และ การเปลี่ยนอาจต้งอ compile program ใหม่ แต่ถ้าเราใช้ spring เราเพียงแค่ config ว่าจะยิง Sorting Algo ตัวไหนเข้าไป ( ตรง spring config น่ะครับ ) เปลี่ยน
Introduction to ABAP (เกริ่นนำ SAP ABAP สักหน่อยก่อนเน๊าะ)
ถ้าจะบอกว่า SAP คืออะไร ก็คงอธิบายเหมือนเว็บหรือหนังสือเล่มอื่นๆ เน๊าะ
SAP เป็น ERP ประเภทหนึ่ง ทำงานแบบ Client/Server (รายละเอียดลองศึกษาเองน่ะ ERP คืออะไร Client/Server คืออะไร)
SAP ถูกพัฒนาขึ้นด้วยภาษา ABAP (Advance Business Application Programming) ซึ่งปัจจุบันเป็นภาษาโปรแกรมในยุคที่ 4 หรือ 4GL (ABAP/4) โดยเวอร์ชั่นใหม่นี้ ABAP สามารถเรียกใช้งาน ABAP Objects และ supports การเขียนโปรแกรมแบบ OOP (object-oriented programming)
มาพูดเรื่อง (ประเภทของตัวแปร) Data Types ใน ABAP บ้าง
อันนี้รูปแบบของ Data Types

*การจบประโยคใน ABAP จะจบประโยคด้วย . (period)
** การเขียนโปรแกรมทุกภาษาก็ล้วนแล้วแต่มีการประกาศ Data Types ที่คลายๆกัน
ผมอาจจะอธิบายไม่ค่อยเก่ง เพราะปกติก็ไม่ได้เขียนเป็นอาชีพ แค่ศึกษาหาความรู้เฉยๆ
เอาเป็นว่า ถ้าผมรู้อะไรก็จะมาโพสต์ไว้แล้วกันเน๊าะ
เดียวครั้งหน้าจะมาต่อเรื่องการเขียน Data Object - Structure
SAP เป็น ERP ประเภทหนึ่ง ทำงานแบบ Client/Server (รายละเอียดลองศึกษาเองน่ะ ERP คืออะไร Client/Server คืออะไร)
SAP ถูกพัฒนาขึ้นด้วยภาษา ABAP (Advance Business Application Programming) ซึ่งปัจจุบันเป็นภาษาโปรแกรมในยุคที่ 4 หรือ 4GL (ABAP/4) โดยเวอร์ชั่นใหม่นี้ ABAP สามารถเรียกใช้งาน ABAP Objects และ supports การเขียนโปรแกรมแบบ OOP (object-oriented programming)
มาพูดเรื่อง (ประเภทของตัวแปร) Data Types ใน ABAP บ้าง
อันนี้รูปแบบของ Data Types
DATA Variable_Name Type Variable_Typeส่วนการเรียกใช้งานก็ประมาณนี้
DATA employee_number Type I.

*การจบประโยคใน ABAP จะจบประโยคด้วย . (period)
** การเขียนโปรแกรมทุกภาษาก็ล้วนแล้วแต่มีการประกาศ Data Types ที่คลายๆกัน
ผมอาจจะอธิบายไม่ค่อยเก่ง เพราะปกติก็ไม่ได้เขียนเป็นอาชีพ แค่ศึกษาหาความรู้เฉยๆ
เอาเป็นว่า ถ้าผมรู้อะไรก็จะมาโพสต์ไว้แล้วกันเน๊าะ
เดียวครั้งหน้าจะมาต่อเรื่องการเขียน Data Object - Structure
วันพุธที่ 25 มีนาคม พ.ศ. 2558
แปลงตัวเลขเป็นตัวหนังสือ Java - Convert Number Thai Java
public static String ThaiBaht(String txt) {
String bahtTxt, n, bahtTH = "";
Double amount;
try {
amount = Double.parseDouble(txt);
} catch (Exception ex) {
amount = 0.00;
}
try {
DecimalFormat df = new DecimalFormat("####.00");
bahtTxt = df.format(amount);
String[] num = { "ศูนย์", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า",
"หก", "เจ็ด", "แปด", "เก้า", "สิบ" };
String[] rank = { "", "สิบ", "ร้อย", "พัน", "หมื่น", "แสน", "ล้าน" };
String[] temp = bahtTxt.split("[.]");
String intVal = temp[0];
String decVal = temp[1];
if (Double.parseDouble(bahtTxt) == 0)
bahtTH = "ศูนย์บาทถ้วน";
else {
for (int i = 0; i < intVal.length(); i++) {
n = intVal.substring(i, i + 1);
if (n != "0") {
if ((i == (intVal.length() - 1)) && (n == "1"))
bahtTH += "เอ็ด";
else if ((i == (intVal.length() - 2)) && (n == "2"))
bahtTH += "ยี่";
else if ((i == (intVal.length() - 2)) && (n == "1"))
bahtTH += "";
else
bahtTH += num[Integer.parseInt(n)];
bahtTH += rank[(intVal.length() - i) - 1];
}
}
bahtTH += "บาท";
if (decVal == "00")
bahtTH += "ถ้วน";
else {
for (int i = 0; i < decVal.length(); i++) {
n = decVal.substring(i, i + 1);
if (n != "0") {
if ((i == decVal.length() - 1) && (n == "1"))
bahtTH += "เอ็ด";
else if ((i == (decVal.length() - 2)) && (n == "2"))
bahtTH += "ยี่";
else if ((i == (decVal.length() - 2)) && (n == "1"))
bahtTH += "";
else
bahtTH += num[Integer.parseInt(n)];
bahtTH += rank[(decVal.length() - i) - 1];
}
}
bahtTH += "สตางค์";
}
}
} catch (Exception exe) {
System.out.print(exe.getMessage());
}
return bahtTH;
}
มาดูส่วนวิธีเรียกใช้งานบ้าง
public class Test {
public static void main(String[] args) {
String txt = "123.456";
String Bath = ThaiBaht(txt);
System.out.println(Bath);
}
}
*** ผมไม่ได้คิดเองน่ะครับ copy มาจาก thaicreate แต่ของเก่าเขียนไว้ด้วย (C#) ผมเลยเอาปรับใช้ ใน JAVA นิดหนึ่ง http://www.thaicreate.com/community/c-asp-net-convert-money-number-to-thai-text.html
วันพุธที่ 18 มีนาคม พ.ศ. 2558
แปลงตัวเลขเป็นตัวหนังสือ c# - Convert Number Thai C Shap
public static string cv(string num){
string[][] th_num = new string[3][];
string[] th_digit = { "", "สิบ", "ร้อย", "พัน", "หมื่น", "แสน", "ล้าน" };
th_num[0] = new string[10] { "", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า" };
th_num[1] = new string[2] { "หนึ่ง", "เอ็ด" };
th_num[2] = new string[2] { "สอง", "ยี่" };
int ln = num.Length;
string t = "";
for (int i = ln; i > 0; i--) {
var x = i - 1;
var n = Convert.ToInt32(num.Substring(ln - i, 1));
var digit = x % 6;
if (n != 0) {
if (n == 1) {
t += (digit == 1) ? "" : th_num[1][digit == 0 ? 1 : 0];
} else if (n == 2) {
t += th_num[2][digit == 1 ? 1 : 0];
} else {
t += th_num[0][n];
}
t += th_digit[(digit == 0 && x > 0 ? 6 : digit)];
} else {
t += th_digit[digit == 0 && x > 0 ? 6 : 0];
}
}
return t;
}
มาดูส่วนวิธีเรียกใช้งานบ้าง
class Program
{
static void Main(string[] args)
{
var num = "111,111,111,111,111.11";
var data = Convert.ToDecimal(num).ToString().Split('.');
string dic = "";
if (cv(data[1]) == "") { dic = ""; } else { dic = cv(data[1]) + "สตางค์"; };
string convert = cv(data[0]) + "บาท" + dic ;
Console.WriteLine(convert);
System.Console.ReadKey();
}
}
*** ผมไม่ได้คิดเองน่ะครับ copy มาจาก ท่านนี้ Chaidhanan ใน thaicreate แต่ของเก่าเขียนไว้ด้วย (PHP) ผมเลยเอาปรับใช้ ใน c# นิดหนึ่ง http://www.thaicreate.com/community/c-asp-net-convert-money-number-to-thai-text.html
วันพฤหัสบดีที่ 8 มกราคม พ.ศ. 2558
C# OOP CRUD (insert update deletet procedure logtable) คลาส เพิ่ม ลบ แก้ไข
class Execute
{
private SqlConnection strConnection;
private SqlDataAdapter adapter;
private DataSet ds;
public Execute(string strConn)
{
this.strConnection = new SqlConnection(strConn);
}
public string strSQL { get; set; }
public string strType { get; set; }
public DataSet selectStoredProcedure(string code,string year)
{
//insertLogData("procedure");
ds = new DataSet();
adapter = new SqlDataAdapter();
this.strConnection.Open();
SqlCommand cmd = new SqlCommand(this.strSQL, this.strConnection);
cmd.CommandType = CommandType.StoredProcedure; // set it to stored proc
cmd.Parameters.Add("@code", SqlDbType.VarChar).Value = code;
cmd.Parameters.Add("@target_year", SqlDbType.VarChar).Value = year;
adapter = new SqlDataAdapter(cmd);
adapter.Fill(ds);
this.adapter.Dispose();
this.strConnection.Close();
return ds;
}
public DataSet selectCommand()
{
ds = new DataSet();
adapter = new SqlDataAdapter();
this.strConnection.Open();
adapter.SelectCommand = new SqlCommand(this.strSQL, this.strConnection);
adapter.Fill(ds);
this.adapter.Dispose();
this.strConnection.Close();
return ds;
}
public int insertCommand()
{
//insertLogData("insert");
adapter = new SqlDataAdapter();
this.strConnection.Open();
adapter.InsertCommand = new SqlCommand(this.strSQL, this.strConnection);
int i = adapter.InsertCommand.ExecuteNonQuery();
this.adapter.Dispose();
this.strConnection.Close();
return i;
}
public int updateCommand()
{
//insertLogData("update");
adapter = new SqlDataAdapter();
this.strConnection.Open();
adapter.UpdateCommand = strConnection.CreateCommand();
adapter.UpdateCommand.CommandText = this.strSQL;
int i = adapter.UpdateCommand.ExecuteNonQuery();
this.adapter.Dispose();
this.strConnection.Close();
return i;
}
public int deleteCommand()
{
//insertLogData("delete");
adapter = new SqlDataAdapter();
this.strConnection.Open();
adapter.DeleteCommand = strConnection.CreateCommand();
adapter.DeleteCommand.CommandText = this.strSQL;
int i = adapter.DeleteCommand.ExecuteNonQuery();
this.adapter.Dispose();
this.strConnection.Close();
return i;
}
}
Method เอาไว้เก็บ Log ไฟล์
public void insertLogData(string tbstatus)
{
string sql = "insert into tbllogdata (username,createdate,sqltext,tbstatus) values ";
sql += "('xxx',getdate(),'" + this.strSQL + "','" + tbstatus + "')";
adapter = new SqlDataAdapter();
this.strConnection.Open();
adapter.InsertCommand = new SqlCommand(sql, this.strConnection);
adapter.InsertCommand.ExecuteNonQuery();
this.adapter.Dispose();
this.strConnection.Close();
}
สมัครสมาชิก:
ความคิดเห็น (Atom)
การติดตั้ง SAP ABAP
ครั้งแรกผมว่าจะสอนวิธีติดตั้งเอง แต่ก็กลัวเรื่อง ลิขสิทธิ์ (เอ๊ะ หรือว่าคิดมากไปเอง) เอาเป็นว่า ไปดูเว็บฝรั่งก็ได้น่ะ หรือไม่ก็ youtube ...
-
public static String ThaiBaht(String txt) { String bahtTxt, n, bahtTH = ""; Double amount; try { amount = Double.parse...
-
ผมเคยไปหาๆอ่านเรื่อง delegate ของคนอื่นที่เขียนไว้ แต่ก็ยาวซ่ะเหลือเกิน หรือเวลายกตัวเองก็เขียนซ่ะแบบ Advance เกิน ยากแก่การเข้าใจสำหรับ Pr...
-
public static string cv(string num){ string[][] th_num = new string[3][]; string[] th_digit = { ""...