Friday, October 30, 2009

Axapta : Get next number sequence

การเรียกใช้ Number sequence สำหรับ running no. ต่าง ๆ ทำได้โดยใช้คำสั่ง

NumberSeq::newGetNum(ProdParameters::numRefProdJournalId()).num();

ตรง Parameter ก็เปลี่ยนไปขึ้นอยู่ว่าเป็น Number sequence ของ Module ไหน
และจะใช้งานได้ Number sequence ต้องไม่ตั้งค่าให้เป็น Continuous


JournalId myJournalId;
;
myJournalId = NumberSeq::newGetNum(ProdParameters::numRefProdJournalId()).num();
myJournalId = NumberSeq::newGetNum(PurchParameters::numRefPurchaseOrderId()).num();
myJournalId = NumberSeq::newGetNum(InventParameters::numRefInventJournalId()).num();
myJournalId = NumberSeq::newGetNum(SalesParameters::numRefConfirmId()).num();


การตั้งค่า Number sequence ของแต่ละ module เข้าไปที่ Setup -> Parameters แล้วไปที่ tab Number sequences
ตรง Reference แต่ละตัวสามารถ คลิกขวา Go to the main table เพื่อตั้งค่ารูปแบบ Running number ที่ต้องการได้
Axapta_Setup_Number_Sequence
Axapta_Number_Sequence_Format

Axapta : Formatting style in Excel


static void ExcelFormating(Args _args)
{
#Excel

SysExcelApplication excel;
SysExcelWorkbooks books;
SysExcelWorkbook book;
SysExcelWorksheet sheet;
SysExcelRange range;
SysExcelStyles styles;
SysExcelStyle style;
SysExcelInterior interior;
SysExcelFont font;
COM _char, _r;
;
excel = SysExcelApplication::construct();
excel.visible(true);
books = excel.workbooks();
book = books.add();
sheet = excel.activeSheet();
range = sheet.range('A1');
styles = book.styles();
style = styles.add('MyStyle');
interior = style.interior();
interior.color(WinApi::RGB2int(246, 233, 206));
font = style.font();
font.bold(true);
font.color(winapi::RGB2int(153, 204, 255));
range.style('MyStyle');
range.locked(true);
_r = range.comObject();
_char = _r.characters(1);
_char.insert('MyStyle');
}

Tuesday, October 20, 2009

Axapta : Enable/Disable Dialog Control at runtime

วิธี Enable/Disable หรือ Dialog Control ในขณะ runtime ทำได้โดย ดังนี้
disable_runtime_dialog_control
1.classDeclaration
class SCI_Costing extends RunBase
{
FormStringControl SalesIdCtrl, ItemIdCtrl;
FormCheckBoxControl bAllCtrl;

SalesId salesId;
ItemId itemId;
NoYes bAll;

#define.CurrentVersion(1)

#localmacro.CurrentList
salesId,
itemId,
bAll
#endmacro
}


2.สร้าง dialog แบบอนุญาตให้ update control ได้ โดยใช้ dialog.allowUpdateOnSelectCtrl(true)

protected Object dialog(Dialog dialog, boolean forceOnClient)
{
DialogRunBase ret;
;
ret = super(dialog, forceOnClient);
ret.caption('Costing report by order');
ret.allowUpdateOnSelectCtrl(true); //อนุญาตให้ update control ได้

SalesIdCtrl = ret.formBuildDesign().addControl(FormControlType::String,'SalesId');
SalesIdCtrl.extendedDataType(extendedTypeNum('SalesId'));

bAllCtrl = ret.formBuildDesign().addControl(FormControlType::CheckBox,'bAll');
bAllCtrl.label('All');

ItemIdCtrl = ret.formBuildDesign().addControl(FormControlType::String,'ItemId');
ItemIdCtrl.extendedDataType(extendedTypeNum('ItemId'));

return ret;
}

3.เซ็ตให้ control สามารถ override method ตอน runtime ได้
public void dialogPostRun(DialogRunbase dialog)
{
;
super(dialog);
dialog.dialogForm().formRun().controlMethodOverload(true);
dialog.dialogForm().formRun().controlMethodOverloadObject(this);
SalesIdCtrl = dialog.dialogForm().formRun().design().controlName('SalesId');
ItemIdCtrl = dialog.dialogForm().formRun().design().controlName('ItemId');
bAllCtrl = dialog.dialogForm().formRun().design().controlName('bAll');
}

4.ใช้ method dialogSelectCtrl เพื่อดำเนินการ update control ซึ่งในที่นี้ก็คือการ enable/disable ItemId
public void dialogSelectCtrl()
{
;
if (bAllCtrl.value()== 0)
{
ItemIdCtrl.allowEdit(true);
}
else
{
ItemIdCtrl.allowEdit(false);
}
}

Visual Basic : Sending newline to Crystal Report

วิธีส่งข้อมูลที่มีการ enter (vbNewLine) ไปให้ Formulas ของ Crystal Report ทำได้โดย ใส่เครื่องหมาย chr(34) (qoute) คร่อม chr(10) (Line Feed) ไปอีกที ดังนี้

CrysRpt.Formulas(0) = "FormulaName=" & Chr(34) & Replace$(txtName.Text, vbNewLine, Chr(34) & " & Chr(10) & " & Chr(34)) & Chr(34)


ถ้าข้อมูล คือ
บรรทัดที่ 1
บรรทัดที่ 2


พอใช้คำสั่งแล้ว ข้อมูลที่จะส่งไปก็จะเป็น
FormulaName="บรรทัดที่ 1" & Chr(10) & "บรรทัดที่ 2"

Axapta : Get or Set Checkbox value


public void clicked()
{
Qty tmpQty1;
Qty tmpQty2;
FormCheckboxControl formCheckboxControl;
;

super(); // ต้องรัน super ก่อน ไม่งั้นค่าไม่เปลี่ยน
// รับค่าจาก design
formCheckboxControl = element.design().control(control::ProdParmHistoricalCost_EndJob);
// box::info(strfmt("%1",formCheckboxControl.value()));
if(formCheckboxControl.value() == 1){ //ถ้า checked จะเป็น 1
tmpQty1 = ProdTable::find(ProdParmHistoricalCost.ProdId).QtySched;
tmpQty2 = ProdTableJour::reportedFinishedGood(ProdParmHistoricalCost.prodId);

if(tmpQty1 != tmpQty2){
if(box::yesNo("Sure?", DialogButton::Yes, "Confirm") == DialogButton::Yes)
{
if(box::yesNo("Sure?",DialogButton::Yes,"Confirm")== DialogButton::Yes){
formCheckboxControl.value(true); //สั่งให้ checked
}else{
formCheckboxControl.value(false); //สั่งให้ ไม่ checked
}
}else{
formCheckboxControl.value(false);
}
}
}
}

Friday, October 16, 2009

Axapta : Dialog with lookup control

วิธีสร้าง dialog แบบที่มี control ซึ่ง lookup ได้ เช่น เลือก SalesId แล้วให้อีก control นึง คือ ItemId lookup มาเฉพาะของ SalesId นั้น
dialog_with_lookup_control

ทำได้ดังนี้
1.declare control ไว้ ตาม extended data type ที่จะใช้

class LookupDialog extends RunBase
{
FormStringControl SalesIdCtrl, ItemIdCtrl;
}


2.สร้าง dialog

protected Object dialog(Dialog dialog, boolean forceOnClient)
{
DialogRunBase ret;
;
ret = super(dialog, forceOnClient);
ret.caption('Costing report by order');

SalesIdCtrl = ret.formBuildDesign().addControl(FormControlType::String,'SalesId');
SalesIdCtrl.extendedDataType(extendedTypeNum('SalesId'));


ItemIdCtrl = ret.formBuildDesign().addControl(FormControlType::String,'ItemId');
ItemIdCtrl.extendedDataType(extendedTypeNum('ItemId'));


return ret;
}


3.Set ให้ control สามารถ override method ตอน runtime ได้

public void dialogPostRun(DialogRunbase dialog)
{
;
super(dialog);
dialog.dialogForm().formRun().controlMethodOverload(true);
dialog.dialogForm().formRun().controlMethodOverloadObject(this);
SalesIdCtrl = dialog.dialogForm().formRun().design().controlName('SalesId');
ItemIdCtrl = dialog.dialogForm().formRun().design().controlName('ItemId');
}


4.สร้าง lookup method

void ItemId_lookup()
{
Query query = new Query();
SysTableLookup sysTableLookup =
SysTableLookup::newParameters(tableNum(SalesLine), SalesIdCtrl);
;
sysTableLookup.addLookupField(fieldNum(SalesLine, ItemId));
sysTableLookup.addLookupField(fieldNum(SalesLine, Name));
query.addDataSource(tableNum(SalesLine)).addRange(fieldNum(SalesLine,SalesId)).value(SalesIdCtrl.text());
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}


5.เก็บรายละเอียด method อื่น ๆ

public container pack()
{
return conNull();
}

public boolean unpack(container packedClass)
{
return true;
}

static void main(Args _args)
{
LookupDialog test1 = new LookupDialog();
;
if (test1.prompt())
{
test1.run();
}
}


ที่มา :

Saturday, October 10, 2009

OpenOffice : Double line style

วิธีขีดเส้นใน OpenOffice ให้มี 2 เส้น ทำได้ดังนี้
1.ใช้เครื่องมือลากเส้น (Line ใน Drawing toolbar) ขีดไว้ แล้วคลิกขวาที่ เส้น เลือก Line...
openoffice_drawing_toolbar
2.คลิกที่ tab Shadow แล้วติ๊กที่ Use shadow
3.เลือกตำแหน่ง ,ระยะห่างระหว่างเส้นและสีของเส้นที่ 2
openoffice_line _shadow

Sunday, October 04, 2009

Solve Host to IP without DNS

แปลง Host เป็น IP โดยไม่ต้องพึ่ง DNS Server ทำได้โดย ระบุในไฟล์ ชื่อ hosts
ของ Windows อยู่ที่ C:\WINDOWS\system32\drivers\etc\hosts
ของ linux อยู่ที่ /etc/hosts

รูปแบบคือ
IP ช่องว่างตามด้วย host

ตัวอย่างของ Windows

# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host

127.0.0.1 localhost


อันนี้ของ linux
192.168.0.250 IF-Nikom.sci.com IF-Nikom
192.168.0.1 axaptaserver.sci.com axaptaserver
192.168.0.251 server1.sci.com server1
192.168.0.252 server2.sci.com server2
192.168.0.253 server3.sci.com server3


ตามหลักการก็น่าจะเร็วกว่าการใช้ dns ด้วย เพราะไม่ต้องวิ่งผ่าน server

GeSHi Language Aliases

ทั้ง phpBB ของที่ทำงานและ wordpress ของที่นี่ ต่างก็ใช้ Syntax Hilight ของ GeSHi
โดย phpBB เป็น phpBB3.0.5 ติดตั้ง mod bbGeSHi 0.7.5
และ wordpress ใช้ plugin wp-syntax.0.9.8
เวลาใช้มักจะลืมตัวย่อของภาษาอยู่เรื่อย ก็เลยต้อง list ไว้กันลืมซะหน่อย
ABAP - abap
Actionscript - actionscript
ADA - ada
Apache Log - apache
AppleScript - applescript
APT sources.list -
ASM (m68k) - asm
ASM (pic16) - asm
ASM (x86) - asm
ASM (z80) - asm
ASP - asp
AutoIT - autoit
Backus-Naur form -
Bash - bash
Basic4GL -
BlitzBasic - blitzbasic
Brainfuck - bnf
C - c
C for Macs - c_mac
C# - cpp
C++ - csharp
C++ (with QT) - cpp-qt
CAD DCL - caddcl
CadLisp - cadlisp
CFDG - cfdg
CIL / MSIL -
COBOL -
ColdFusion - cfm
CSS - css
D - d
Delphi - delphi
Diff File Format - diff
DIV - div
DOS - dos
DOT language - dot
Eiffel - eiffel
Fortran - fortran
FourJ's Genero - genero
FreeBasic - freebasic
GetText -
glSlang -
GML - gml
gnuplot -
Groovy - groovy
Haskell - haskell
HQ9+ -
HTML - html, html4strict
INI (Config Files) - ini
Inno - inno
INTERCAL -
IO - io
Java - java
Java 5 - java5
Javascript - javascript, js
KiXtart -
KLone C & C++ -
LaTeX - latex
Lisp - lisp
LOLcode -
LotusScript -
LScript -
Lua - lua
Make - m68k
mIRC - mirc
MXML -
MySQL - mysql
NSIS - nsis
Objective C - objc
OCaml - Ocaml-brief, ocaml
OpenOffice BASIC - oobas
Oracle 8 & 11 SQL - oracle8
Pascal - pascal
Perl - perl
PHP - Php-brief, php
Pixel Bender -
PL/SQL - plsql
POV-Ray -
PowerShell -
Progress (OpenEdge ABL) -
Prolog -
ProvideX -
Python - python
Q(uick)BASIC - qbasic
robots.txt - robots
Ruby - ruby
Ruby on Rails - rails
SAS - sas
Scala -
Scheme - scheme
Scilab -
SDLBasic - sdlbasic
Smalltalk - smalltalk
Smarty - smarty
SQL - sql
T-SQL - tsql
TCL - tcl
thinBasic - thinbasic
TypoScript -
Uno IDL -
VB.NET - vbnet
Verilog -
VHDL - vhdl
VIM Script -
Visual BASIC - vb
Visual Fox Pro - visualfoxpro
Visual Prolog -
Whitespace -
Winbatch - winbatch
Windows Registry Files - reg
X++ - xpp (มี X++ ของ Axapta ด้วย)
XML - xml, xsl
Xorg.conf -