Oracle Mobile Web Applications (MWA)
Oracle Mobile Web Applications uygulamalarının nasıl yapıldığını
anlatmaya çalışacağım.
Öncelikle kullanıcımıza yetki vermemiz gerekiyor.
Burada kullanıcımıza “Depo Yönetimi Mobil Kullanıcısı”
yetkisini veriyorum.
Mobile servisi açık değilse
Putty ile giriş yapılıp
cd
$INST_TOP/admin/scripts
mwactl.sh
start 10550
komutları çalıştırılır.
Servis daha önceden açık ve kapatılmak isteniyorsa
cd
$INST_TOP/admin/scripts
mwactl.sh
-login apps/apps stop_force 10550
komutları ile kapatılabilir.
Herşeyin hazır olduğunu kontrol etmek için mwagui
dizininde (internetten bulunabilir) bulunan startMWA_GUI.bat dosyasını
aşağıdakine benzer bir şekilde duzenlemek gerekiyor.
set
MWA_GUI_TOP=C:\mwagui_new
set
JAVA_TOP="C:\Program Files\Java\jdk1.6.0_32"
%JAVA_TOP%\bin\java
-classpath
%JAVA_TOP%\lib\classes.zip;%MWA_GUI_TOP%\lib\j9969932_3p.zip;%MWA_GUI_TOP%\lib\j9969932_fnd.zip;%MWA_GUI_TOP%\lib\j9969932_mwa.zip
-Dfile.encoding=cp857 -Duser.language=tr_TR oracle.apps.mwa.awt.client.StartGUI
Ardından bu dosyayı calistirdigimizda
Gibi bir ekran çıkacaktır. Burada server bilgilerini ve
portu girdikten sonra Connect denirse
Gibi bir ekran gelecektir. Default menusune tıklanarak
Kullanici giriş ekranına gelinir.
Kullanici adi ve şifre girildikten sonra
Menumuz gelir.
Bu menuye bizim hazırladığımız ekranları ekleyebiliriz.
Bunu yapmadan önce kodlarımızı hazırlayalım.
3 farklı dosyamız olacak (Bu dosyalar http://oracle.anilpassi.com/hello-world-mobile-supply-chain-application-framework-6.html adresinden alınmıştır.)
1-
CustomTestFListener.java dosyası
2-
CustomTestFunction.java dosyası
3-
CustomTestPage.java dosyası
Kodlar aşağıdadır.
CustomTestFListener.java dosyası
/*
Listener Class - Handles all events */
//package
xxx.custom.server;
package
xxysm.oracle.apps.inv;
import
oracle.apps.inv.utilities.server.UtilFns;
import
oracle.apps.mwa.beans.FieldBean;
import
oracle.apps.mwa.container.Session;
import
oracle.apps.mwa.eventmodel.AbortHandlerException;
import
oracle.apps.mwa.eventmodel.DefaultOnlyHandlerException;
import
oracle.apps.mwa.eventmodel.InterruptedHandlerException;
import
oracle.apps.mwa.eventmodel.MWAEvent;
import
oracle.apps.mwa.eventmodel.MWAFieldListener;
public
class CustomTestFListener implements MWAFieldListener
{
public CustomTestFListener()
{
}
public void fieldEntered(MWAEvent mwaevent)
throws AbortHandlerException,
InterruptedHandlerException,
DefaultOnlyHandlerException
{
UtilFns.trace("Inside Field
Entered");
ses = mwaevent.getSession();
String s = UtilFns.fieldEnterSource(ses);
// Prints the Current Bean's ID
UtilFns.trace("CustomFListener:fieldEntered:fldName = " + s);
}
public void fieldExited(MWAEvent mwaevent)
throws AbortHandlerException,
InterruptedHandlerException,
DefaultOnlyHandlerException
{
String s =
((FieldBean)mwaevent.getSource()).getName();
// Prints the Current Bean's ID
UtilFns.trace("CustomFListener:fieldExited:fldName = " + s);
// Get handle to session and page
Session ses = mwaevent.getSession();
pg = (CustomTestPage)ses.getCurrentPage();
// when the user clicks the Submit button
call the method to print
// Hello world with the text entered in
text box
if (s.equals("TEST.SUBMIT"))
{
pg.print(mwaevent,pg.getHelloWorld());
return;
}
}
// Varibale declaration
CustomTestPage pg;
Session ses;
}
CustomTestFunction.java dosyası:
/*
Function class - this links the page with FND Function in AOL */
//package
xxx.custom.server;
package
xxysm.oracle.apps.inv;
import
oracle.apps.fnd.common.VersionInfo;
import
oracle.apps.inv.utilities.server.UtilFns;
import
oracle.apps.mwa.beans.MenuItemBean;
import
oracle.apps.mwa.eventmodel.MWAAppListener;
import
oracle.apps.mwa.eventmodel.MWAEvent;
public
class CustomTestFunction extends MenuItemBean implements MWAAppListener
{
public CustomTestFunction()
{
//Link the page with the function
//setFirstPageName("xxx.custom.server.CustomTestPage");
setFirstPageName("xxysm.oracle.apps.inv.CustomTestPage");
addListener(this);
}
public void appEntered(MWAEvent mwaevent)
{
// Code here to initialize Application
Level
// Logging Functions
UtilFns.trace("Application
Entered");
}
public void appExited(MWAEvent mwaevent)
{
// Code to be executed when the user exits
the application
// Logging Functions
UtilFns.trace("Application
Exited");
}
public static final String RCS_ID =
"$Header:$";
public static final boolean RCS_ID_RECORDED =
VersionInfo.recordClassVersion("$Header:$",
"%packageheader%");
}
CustomTestPage.java dosyası:
/*
Page Class - Which has the Page Layout. We create and add beans to it */
//package
xxx.custom.server;
package
xxysm.oracle.apps.inv;
import
oracle.apps.fnd.common.VersionInfo;
import
oracle.apps.inv.utilities.server.UtilFns;
import
oracle.apps.mwa.beans.ButtonFieldBean;
import
oracle.apps.mwa.beans.PageBean;
import
oracle.apps.mwa.beans.TextFieldBean;
import
oracle.apps.mwa.eventmodel.AbortHandlerException;
import
oracle.apps.mwa.eventmodel.DefaultOnlyHandlerException;
import
oracle.apps.mwa.eventmodel.InterruptedHandlerException;
import
oracle.apps.mwa.eventmodel.MWAEvent;
//import
xxx.custom.server.CustomTestFListener;
import
xxysm.oracle.apps.inv.CustomTestFListener;
//Page
Listener Class
public
class CustomTestPage extends PageBean
{
/**
* Default constructor which just initialises
the layout.
*/
public CustomTestPage()
{
//Method to initialize the layout
initLayout();
}
/**
* Does
the initialization of all the fields. Creates new instances
* and calls the method to set the prompts
which may have to be later
* moved to the page enter event if we were
using AK prompts as we
* require the session for the same.
*/
private void initLayout()
{
//Logging
if (UtilFns.isTraceOn)
UtilFns.trace("CustomPage
initLayout");
//Create a Text Filed and Set an ID
mHelloWorld = new TextFieldBean();
mHelloWorld.setName("TEST.HELLO");
// Create a Submit Button and set an ID
mSubmit = new ButtonFieldBean();
mSubmit.setName("TEST.SUBMIT");
//add the fields
addFieldBean(mHelloWorld);
addFieldBean(mSubmit);
//add field listener to all necessary
fields
CustomTestFListener fieldListener = new
CustomTestFListener();
mHelloWorld.addListener(fieldListener);
mSubmit.addListener(fieldListener);
//call this method to initializa the
prompts
this.initPrompts();
}
/**
* Method that sets all the prompts up.
*/
private void initPrompts()
{
UtilFns.trace(" Custom Page - Init
Prompts");
// sets the page title
this.setPrompt("Test Custom
Page");
// set the prompts for all the remaining
fields
mHelloWorld.setPrompt("Enter Your
Name");
mSubmit.setPrompt("Submit");
//please note that we should not hard code
page name and prompts
//as it may cause translation problems
//we have an different procedure to
overcome this
}
// This method is called when the user clicks
the submit button
public void print(MWAEvent mwaevent,
TextFieldBean mTextBean)
throws AbortHandlerException
{
UtilFns.trace(" Custom Page - print
");
// Get the value from Text bean and append
hello world
// and display it to user on the same field
String s = mTextBean.getValue();
mTextBean.setValue(s + " Hello
World");
}
// Method to get handle of TextBean
public TextFieldBean getHelloWorld()
{
return mHelloWorld;
}
//Method called when the page is entered
public void pageEntered(MWAEvent e) throws
AbortHandlerException,
InterruptedHandlerException,
DefaultOnlyHandlerException
{
UtilFns.trace(" Custom Page -
pageEntered ");
}
//Method called when the page is exited
public void pageExited(MWAEvent e) throws
AbortHandlerException,
InterruptedHandlerException,
DefaultOnlyHandlerException
{
UtilFns.trace(" Custom Page -
pageExited ");
}
// Create the Bean Variables
TextFieldBean mHelloWorld;
protected ButtonFieldBean mSubmit;
}
Kodları Jdeveloper gibi bir java compiler programı ile
açıp derlememiz gerekiyor.
JDeveloperda Make komutu bizim işimize yarayacaktır. Her dosyayı
aynı şekilde derledikten sonra oluşan class doyalarını $JAVA_TOP dizininde
kendimize ozel olarak tanımladığımız yere atabiliriz(.../xxysm/oracle/apps/inv
gibi).
Şimdi hazırladığımız ekranı menuye eklemeye sıra geldi.
Yukarıda da görüldüğü gibi menumuz WMS_MOB_NAVIGATE. Bu
menuye ekleme yapabilmemiz icin öncelikle fonksiyonumuzu tanımlamamız
gerekiyor.
Özellikler tabından
Ekran tabını oldugu gibi bırakıyoruz.
Web HTML tabında ise
Class dosyalarımızın dizinindeki function (xxysm.oracle.apps.inv.CustomTestFunction)
belirtilir.
Kaydetme işleminden sonra fonksiyonumuz tanımı
tamamlanmış olacak.
Menuye fonksiyonumuz eklendikten sonra bu fonksiyon
kullanılabilir durumdadır.
Görüldüğü gibi Mobil Test fonksiyonumuz menuye eklenmiş.
Menuye tıkladığımızda bizim ekranımız gelir.
İsmimizi yazıp Submit tuşuna bastığımızda,
Türkçe karakterleri desteklemeyerek sonucu verdiğini
görürüz.
6:- Create a cmd file to start the client
Burada sistemde oluşan hataları bulabilmemiz için $INST_TOP/admin/install /mwa.cfg dosyasındaki
mwa.LogLevel = trace
Değerini yukarıdaki gibi değiştiriyoruz...
cd $INST_TOP/logs ile giriş yapılıp
tail –f 10550.system.log
ile log kontrolu yapılır...
Türkçe karakter çözümü için ise
linkindeki aşağıdaki çözümü uygulayabilirsiniz.
NLS Support
Here are some tips for implementing the mobile GUI with Multi-language (MLS/NLS). Some customers had issues with character encoding (for example Turkish characters). Here are steps followed to fix the issue:
1:- Download and apply server side Patch 11853398
2:- Set the "ICX: Language" profile at USER level to <REQUIRED LANGUAGE> for a Mobile user.
3:- Shutdown the MWA servers
4:- Download MWA GUI multilingual GUI Patch 12574324
5:- Create client folder and extract the files from the zip
2:- Set the "ICX: Language" profile at USER level to <REQUIRED LANGUAGE> for a Mobile user.
3:- Shutdown the MWA servers
4:- Download MWA GUI multilingual GUI Patch 12574324
5:- Create client folder and extract the files from the zip
unzip p12574324_11i_WINNT.zip C:\NLSMWAGUI_12574324
cd C:\NLSMWAGUI_12574324
cp 12574324_mwa.zip C:\NLSMWAGUI_12574324\lib
cp 12574324_3p.zip C:\NLSMWAGUI_12574324\lib
cp j12574324_ak.zip C:\NLSMWAGUI_12574324\lib
cp j12574324_fnd.zip C:\NLSMWAGUI_12574324\lib
cd C:\NLSMWAGUI_12574324
cp 12574324_mwa.zip C:\NLSMWAGUI_12574324\lib
cp 12574324_3p.zip C:\NLSMWAGUI_12574324\lib
cp j12574324_ak.zip C:\NLSMWAGUI_12574324\lib
cp j12574324_fnd.zip C:\NLSMWAGUI_12574324\lib
6:- Create a cmd file to start the client
set MWA_GUI_TOP=C:\NLSMWAGUI_12574324
set JAVA_TOP=C:\Progra~1\Java\jre6
%JAVA_TOP%\bin\java -Dfile.encoding=UTF8 -Duser.language=TR -classpath %JAVA_TOP%\lib\classes.zip;%MWA_GUI_TOP%\j12574324_mwa.zip;%MWA_GUI_TOP%\j12574324_3p.zip;%MWA_GUI_TOP%\j12574324_ak.zip;%MWA_GUI_TOP%\j12574324_fnd.zip oracle.apps.mwa.awt.client.StartGUI
set JAVA_TOP=C:\Progra~1\Java\jre6
%JAVA_TOP%\bin\java -Dfile.encoding=UTF8 -Duser.language=TR -classpath %JAVA_TOP%\lib\classes.zip;%MWA_GUI_TOP%\j12574324_mwa.zip;%MWA_GUI_TOP%\j12574324_3p.zip;%MWA_GUI_TOP%\j12574324_ak.zip;%MWA_GUI_TOP%\j12574324_fnd.zip oracle.apps.mwa.awt.client.StartGUI