Kaynak Kod
Controller kodlarını kullarak bir web servis yazmak için yapılması gereken ilk işlem JPlatformClient ekranı üzerinde bulunan Controller Code Generation butonu vasıtasıyla ilgili controller sınıfını oluşturmak olmalıdır. Controller sınıfını oluşturmak için bu butona basılır ve ardından menü ağacından ilgili browser açılır. Bu browserda yeni butonuna basılır. Bu işlemin ardından açılan veri giriş formunda ilgili alanlar doldurularak form kaydedilir. Unutulmaması gereken adım ise veri giriş formunu kaydettikten sonra browserın kapatılması gerektiğidir. En son olarak işlemin en başında basılan Controller Code Generation butonuna tekrar basılarak üretilen controller sınıfı kaydedilirek işlem tamamlanmış olur.
Aşağıda bir malzeme oluşturma işlemine ait controller sınıfı kullanılarak web servis ile bir malzemenin aktarılması adımları bulunmaktadır.
- JPlatformClient ekranında Controller Code Generation tuşuna basılır.
- Menü ağacında Malzeme Yönetimi modülü altından Malzemeler browserı açılır.
- Browser üzerinde bulunan menü tuşundan (TM) Ticari Mal üzerine tıklanır.
- Açılan malzeme formunda kaydedilmek istenen veriler girilerek kaydet butonuna basılır.
- Malzemeler browserı kapat butonuna basılarak kapatılır.
- Son olarak Controller Code Generation butonuna basılarak üretilen controller sınıfı kaydedilir.
Oluşturulan controller sınıfı aşağıdaki gibi bir yapıda olacaktır.
package com.acme.customization;
import com.lbs.controllers.ILbsControllerTask;
import com.lbs.controllers.menu.LbsMenuController;
import com.lbs.remoteclient.IClientContext;
import com.lbs.control.interfaces.ILbsController;
import com.lbs.controllers.gen.mm.MMXFItemBrowserController;
import com.lbs.controllers.gen.mm.MMXFItemController;
import java.math.BigDecimal;
public class ItemControllerWebService implements ILbsControllerTask
{
public void execute(LbsMenuController menu, IClientContext context)
{
try
{
ILbsController controller = menu.launchMaterials();
if (controller instanceof MMXFItemBrowserController)
{
MMXFItemBrowserController controller1 = (MMXFItemBrowserController) controller;
controller = controller1.createNew_CGCommercialGood();
if (controller instanceof MMXFItemController)
{
MMXFItemController controller2 = (MMXFItemController) controller;
controller2.setDescription("Malzeme açıklaması");
controller2.setSearchText("Arama Metni");
controller2.setAuxCode("ÖZEL KOD");
controller2.setAuthCode("YETKİ KODU");
controller2.setShelfLife(new BigDecimal(10.0));
controller2.selectComboBoxShelfLife_Week();
controller2.setGuaranteePeriod(new BigDecimal(2.0));
controller2.selectComboBoxGuaranteePeriod_Year();
controller2.setAverageIn_StockDuration_day(new BigDecimal(30.0));
controller2.selectComboBoxCostingMethod1_FIFO();
controller2.selectComboBoxCostingMethod2_LIFO();
controller2.setPurchase(new BigDecimal(20.0));
controller2.setSales(new BigDecimal(20.0));
controller2.clickSave();
}
controller1.clickClose();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Controller sınıfı oluşturulduktan sonra yeni bir sınıf oluşturularak burada malzeme aktarma işlemini gerçekleştirecek olan servis metodu yazılır. Bu metoda server context nesnesini oluşturmak için gerekli olan firma, period ve dil bilgileri parametre olarak geçilir. LbsControllerUtil sınıfının executeControllerTask metodu yardımıyla da malzeme aktarım işlemi başlatılır. İlgili web service sınıfı aşağıdaki gibi bir yapıda olacaktır.
package com.acme.customization;
import com.lbs.controllers.LbsControllerUtil;
import com.lbs.platform.interfaces.IServerContext;
import com.lbs.ws.WebServiceHelper;
public class ItemControllerWebService
{
public Object createItemCard(int firm, int period, String language)
{
try
{
IServerContext context = WebServiceHelper.getContext(firm, period, language);
ItemController task = new ItemController();
LbsControllerUtil.executeControllerTask(context, task);
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
return true;
}
}
Bu adım tamamlandıktan sonra uyarlama projesi derlenir. Uyarlama projesinin bulunduğu dizinde, ..workspace/UyarlamaProjeniz/bin içerisinden web service olarak yazılmış olan sınıf (ItemControllerWebService) ve bu sınıf içerisinde nesneleri oluşturulan (ItemController) ya da static metodlarına erişilen uyarlama projesi içerisinde bulunan ve kullanılmış olan sınıfların .class uzantıları alınır. Tüm bu class’lar paket tanımındaki gibi (ItemControllerWebService sınıfı için ../com/acme/customization) ilgili klasörler içerisine yerleştirilir. Daha sonra bu klasörlerde .aar uzantılı dosyası içerine yerleştirilir. .aar uzantılı bu dosyanın yapısı:
-META-INF
services.xml
MANIFEST.MF
Şekildedir. Yukarıdaki adımlarda .class uzantılı dosyaların yerleştirlmesi ile elde edilen diğer klasörlerde META-INF ile aynı dizinde olacak şekilde bu dosya içerisine yerleştirilir.
Bu işlemden sonra services.xml dosyasının içeriği aşağıdaki gibi değiştirilir.
<service name="ItemControllerWebService">
<description>Description ...</description>
<parameter name="ServiceClass">com.acme.customization.ItemControllerWebService
</parameter>
<parameter name="InflowSecurity">
<action>
<items>UsernameToken</items>
<passwordCallbackClass>com.lbs.ws.LbsUserPasswordCallback</passwordCallbackClass>
</action>
</parameter>
</service>
Bu xml’de service etiketinin name özelliğine web servise verilmek istenen isim yazılır. Parameter etiketinin name özelliğine ise yazlımış olan sınıfın paket bilgisi yazılır ve diğer kısımlar olduğu gibi bırakılır. Tüm bu işlemler tamamlandıktan sonra .aar uzantılı dosyanızı adı services.xml içerisinde service etiketi ile belirlenmiş servis ismi ile aynı olacak şekilde isimlendirilmelidir.
.aar dosyası yeniden isimlendirildikten sonra uyarlama projesini altında UyarlamaProjesi/WebContentExtensionsWEB-INF/services altına yerleştirilir. Bu işlem yapıldıktan sonra proje deploy edilir. Web servisin oluşup oluşmadığını kontrol etmek için herhangi bir internet tarayıcısında aşağıdaki link çalıştırılır.
http://localhost:8080/logo/services/ItemControllerWebService?wsdl