امکان تبدیل اپلیکیشن ماژول به وب سرویس REST

امکان تبدیل اپلیکیشن ماژول برنامه نوشته شده در ADF به وب سرویس REST به jdeveloper نسخه 12.2.1 اضافه شده است.

 

منبع :

http://www.awasthiashish.com/2015/12/create-rest-web-service-with.html

Accessing an ADF Operation binding programmatically

Accessing an ADF Operation binding programmatically

Developing an ADF application, it sometimes comes out we need to invoke programmatically (e.g. from a Managed Bean) a method exposed as operation binding in a ADF Data Control. To do this, we need to access the current binding container:

OperationBinding searchOp = ADFUtils.findOperation("searchBusinessUnits");

The ADFUtils.findOperation() method has the following definition:

public static OperationBinding findOperation(String operationName) {

   OperationBinding op = getDCBindingContainer().getOperationBinding(operationName);

   if (op == null) {

      throw new RuntimeException("Operation '" + operationName +"' not found");

   }

   return op;

}

Unfortunately, when the previous code is executed in a method action invoked at page load time through an invokeAction binding, it happens that the reference to the binding container is null at this point. In this case, we need to access the binding container in a different way, using EL:

import oracle.adfinternal.view.faces.model.binding.FacesCtrlActionBinding;

 

[. . .]

 

FacesCtrlActionBinding searchOp = null;

searchOp = (FacesCtrlActionBinding)JSFUtils.resolveExpression("#{data.portal_peoplefinder_resultsPageDef.searchBusinessUnits}");

Map opParams = searchOp.getParamsMap();

opParams.put("searchTermarchString);

Object result = searchOp.execute();

The pageDef excerpt of the page (or page fragment) containing the binding I need to access (in this case peopleFinder_resultsPageDef.xml ):

[...]

DataControl="ContentServicesDC" RequiresUpdateModel="true"

Action="invokeMethod" MethodName="searchBusinessUnits" IsViewObjectMethod="false"

ReturnName="data.ContentServicesDC.methodResults.searchBusinessUnits_ContentServicesDC_dataProvider_searchBusinessUnits_result"/>

[...]

And the line of DataBindings.cpx regarding this binding:

path="oracle.webcenter.portalapp.pagefragments.peoplefinder_resultsPageDef"/>

IMPORTANT: the EL expression we are using to retrieve the binding must be complying with the following format:

[“data”] + [id of the corresponding entry in DataBindings.cpx] + [name of the binding we want to retrieve]

منبع :

https://matteoformica.wordpress.com/2011/11/05/accessing-an-adf-operation-binding-programmatically/

 

 

دسترسی به ViewAccessor و مقداردهی Bind Variable تعریف شده بر روی LOV

Number customerId = (Number)row.getAttribute("CustomerId");

RowSet rowSet = (RowSet)row.getAttribute("GuaranteeLOV1");

rowSet.setNamedWhereClauseParam("Bind_CustomerId", new Number(customerId));

 

منبع : AdfTips.com (نویسنده : مورالی پاپانا)


UI اولیه مربوطه به فرم قرارداد

اول فکر میکردم , برای هر مصوبه (confirmedId) , یک و فقط یک , قرارداد (ContractId) داریم ولی بعداً مشخص شد میشه از روی یک مصوبه چند تا قرارداد ایجاد کرد که نوع ارز متفاوت دارند بنابراین با توجه به اینکه همه زحمت هایی که روی این فرم کشیدم داره از بین میره بنابراین تصمیم گرفتم تا نکات فنی مرتبط رو یک جا مستند کنم تا بعداً درصورت نیاز از اونا استفاده کنم.

نکات مربوط به این فرم عبارتند از :

1.پیاده سازی متدها در VO مربوطه بجای AM برای کوچک تر شدن سایز AM

2.پیاده سازی LOV های مرتبط (cascade lov) , با استفاده از راهنمایی وبلاگ آرامامو

3.گرفتن confirmedId از instance قراردادی که از روی defenition مربوطه در کنسول حرفه ای وبلاجیک ایجاد شده است.

4.در اپلیکیشن نوع A که اینترفیس آن فاقد بی پی ام می باشد,پارامتر ورودی (confirmedId) بصورت دستی مقداردهی میشود.

5.در اپلیکیشن نوع B که اینترفیس آن مبتنی بی پی ام می باشد,پارامتر ورودی (confirmedId) از payload دریافت میشود.

UI اولیه مربوط به فرم قرارداد بصورت زیر می باشد:




نخوه اضافه کردن فیلد ردیف به af:table

متغیر varStatus="vs" را به af:table اضافه می کنیم و مطابق کد زیر از آن در داخل af:column استفاده می کنیم :

af:outputText value="#{vs.index+1}" id="ot19"

فراخوانی متدهای لایه ویو در Task Flow

سناریویی را در نظر بگیرید که در آن قصد داریم مقادیری را در session  ذخیره کنیم تا در قسمتهای دیگر پروژه از این مقادیر استفاده شود . برای این منظور همانند مثالی که در این لینک  معرفی میشود متد لایه ویو را از داخل taskflow فراخوانی میکنیم.

چگونه  با استفاده از برنامه نویسی Selected Row or Rows کامپوننت ADF Table را دریافت کنیم

1.ابتدا Iterator را پیدا میکنیم

        DCIteratorBinding iter = ADFUtils.findIterator("NAME");

2.از Iterator , ویو آبجکت مربوطه را دریافت میکنیم

        ViewObject voTableData = iter.getViewObject();

3.از ویو آبجکت , سطر جاری را دریافت میکنیم.

        Row rowSelected = voTableData.getCurrentRow();

4.از ویو آبجکت , مقدار ویژگی مورد نظر را دریافت میکنیم.

        Object xyz = rowSelected.getAttribute("NAME");

منبع :

سایت رسمی آقای John Brunswick

اپلیکیشن کامل adf

این اپلیکیشن قسمت کوچکی از عملیات بانکی می باشد که در شرکت داده کاوان پیشرو تولید شده است و در نوع خودش کامل می باشد چون از تکنیک های adf بطور کامل در آن استفاده شده است و برای اهداف آموزشی در اینجا معرفی میشود.

سناریو :

یک پیج اصلی داریم که داخل آن داریم دیتا رو مشاهده می کنیم (browse) و از داخل آن یک پیج دیگر را صدا میزنیم که بر اساس پارامتری که بهش پاس داده میشود , عملیات اضافه کردن (add) و یا ویرایش کردن (edit) رو انجام می دهیم. عملیات حذف (delete) شبیه به عملیات ویرایش می باشد.






چکار کنیم تا جداول af:table بصورت اتوماتیک استرچ شوند

ویژگی styleClass="AFStretchWidth" را به af:table اضافه می کنیم
ویژگی columnStretching را متناسب با هر ستونی که دوست داریم بصورت استرچ نمایش داده 
شود را تنظیم می کنیم.

منبع : وبلاگ TangHao

چگونه بصورت conditionally قسمتی از فرم را show / hide کنیم؟

فرض کنید در یک فرم JSF قصد داریم مجموعه ای از فیلدهایی را نمایش دهیم که نمایش و یا عدم نمایش آنها به یکدیگر وابسته می باشد.

مثلاً یک کمبو باکس بنام واحد سازمانی داریم که در آن مقادیر فروش , حسابداری , انبار و ... نگهداری میشود و درصورت انتخاب فروش , اطلاعات مرتبط با واحد فروش از کاربر دریافت و نمایش داده میشود و در صورت انتخاب حسابداری اطلاعات مرتبط با واحد حسابداری از کاربر دریافت و نمایش داده میشود.

برای انجام دادن این کار , مطابق مراحل گفته شده در وبلاگoralublog.wordpress عمل کنید.

نحوه پیاده سازی عملیات CRUD در OracleADF توسط Unbounded Task Flow و بصورت popup

پیاده سازی توسط آقای Andrejus Baranovskis قسمت 1

پیاده سازی توسط آقای Andrejus Baranovskis قسمت 2

پیاده سازی توسط آقای Andrejus Baranovskis قسمت 3

 

بنظر من اصلاً لازم نبود قسمت های 2 و 3 توسط آقای Andrejus Baranovskis مطرح بشه و اگه روی همون قسمت 1 بیشتر کار میکردند بهتر بود.

من موندم اینچنین شخص مهمی چرا باید این اشتباه رو بکنه . آخه همه دارن پست های آقای Andrejus Baranovskis را با دقت مطالعه میکنن .

شرکت Global E Business Solutions یه شرکت اروپایی هستش و در این پست این مشکل رو بطور کامل و دقیقاً مطابق با تکنیک های Oracle ADF برطرف کردن.

چگونه رویداد دابل کلیک را بر روی جداول adf فعال کنیم

چون ADF Faces دابل کلیک رو هندل نمیکنه مجبوریم این کار را با استفاده از javascript انجام بدیم و برای پیاده سازی این مسأله دو روش مطرح شده است :

1.این روش در وبلاگ آقای Jobinesh و توسط آقای کامران کاشانیان مطرح شده است .

2.این روش در وبلاگ Oracle ADF Code Corner معرفی شده است.

چه جوری کاری کنیم که وقتی دکمه سبز اجرای پروژه را در Jdeveloper  میزنیم پروژه سریعاً اجرا بشه

اگه در محیط Jdeveloper با کلیک بر روی دکمه سبز اجرای پروژه پیغام زیر رو مشاهده میکنید

Set Default Run Target to TaskFlow Activity

و دوست دارید این رویه رو تغییر بدین تا با کلیک بر روی این دکمه پروژه سریعاً اجرا بشه.

به وبلاگ maybe-interesting مراجعه کنید و مطابق مراحل گفته شده عمل کنید تا مشکل برطرف شود.

 

حل مشکل : No credential mapper entry found for password indirection user

اگر با خطای زیر هنگام دیپلوی کردن پروژه اوراکل ای دی اف خود روبرو شدید :

No credential mapper entry found for password indirection user

مراحلی که در لینک زیر گفته شده است را دنبال کنید تا خطا برطرف شود:

StackOverflow.com

استفاده از ابزار Attesoro جهت تایپ فارسی در محیط جاوا

Attesoro ابزاری است که برای راحتی تایپ حروف فارسی در ادیتورهای جاوا از آن استفاده میشود.این ابزار که بصورت یک فایل با پسوند jar می باشد را میتوانید از سایت زیر دریافت کنید :

http://attesoro.org/

برای استفاده از این ابزار در ادیتور jdeveloper11g از منوی Tools گزینه External Tools را انتخاب کرده و Attesoro را بعنوان یک ابزار جدید به jdeveloper11g معرفی میکنیم که به صورت زیر اجرا می شود :

Program Executable

C:\Program Files (x86)\Java\jdk1.7.0\bin\java.exe

Arguments

-jar C:\13\attesoro.1.8.01.jar ${file.path}

پس از اینکه این ابزار را به ادیتور jdeveloper11g معرفی کردیم میتوانیم با راست کلیک بر روی فایل های با پسوند properties نسبت به ویرایش راحتتر آنها با کمک ابزار Attesoro اقدام کنیم.

با تشکر از جناب آقای پدرام پارچه بافیه

کتاب خوب در زمینه OracleADF

برای دریافت یک کتاب خوب در زمینه OracleADF که شامل تصویر و آموزش قدم به قدم می باشد , لطفاً بر روی لینک زیر کلیک کنید :

Oracle JDeveloper 11g Handbook.rar